반응형
이 글은 "ScriptablObject 로 HP Bar 만들기 - #1" 에 이어서 작성하는 글입니다.
▶ PlayerObj 스크립트 작성
- Hierarchy 창에서 Player 객체를 선택하고 PlayerObj 이름으로 새 스크립트를 생성합니다.
- PlayerObj 의 코드를 다음과 같이 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerObj : MonoBehaviour
{
// ScriptableObject로 만든 FloatVariable
public FloatVariable floatHP;
// ScriptableObject로 만든 GameEvent
public GameEvent gameEvtHP;
public void GetHit(float dmg)
{
// 피해를 받으면 dmg 만큼 runtimeValue 에서 차감
floatHP.runtimeValue -= dmg;
// 이벤트 발생 시킴
gameEvtHP.Raise();
}
public void Heal(float heal)
{
// 치유를 받으면 heal 만큼 runtimeValue 증가
floatHP.runtimeValue += heal;
// 이벤트 발생 시킴
gameEvtHP.Raise();
}
}
- 다음과 같이 [Assets > Scripts] 에 있는 FloatHP 와 HPEvent 를 연결해 줍니다.
▶ HealthBar
- Player 객체의 하위에 있는 HealthBar 를 선택하고 HPBar 이름으로 새 스크립트를 추가합니다.
- HPBar 스크립트를 다음과 같이 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HPBar : MonoBehaviour
{
// Image 객체
public Image fill;
// ScriptableObject로 만든 FloatVariable
public FloatVariable hp;
// Start is called before the first frame update
void Start()
{
// HPBar 의 초기 설정
fill.fillAmount = hp.runtimeValue / hp.initValue;
}
// GameEventListener 에 연결되는 이벤트 함수
public void HPChanged()
{
fill.fillAmount = hp.runtimeValue / hp.initValue;
}
}
- [Assets > Scripts] 에 있는 GameEventListener 스크립트를 HealthBar 객체에 추가합니다.
- 각 스크립트의 설정을 다음과 같이 합니다.
▶ 테스트 버튼 생성
- Player 캐릭터에 피해와 치료를 해주는 테스트 버튼을 생성하기 위해 Hierarchy 창에 빈 객체를 만들고 이름을 Test 라고 변경합니다.
- Test 객체 TestScript 이름으로 새 스크립트를 추가하고 다음과 같이 코드를 작성합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestScript : MonoBehaviour
{
public PlayerObj player;
private void OnGUI()
{
if (GUI.Button(new Rect(750, 700, 150, 50), "피해"))
{
player.GetHit(10);
}
else if (GUI.Button(new Rect(910, 700, 150, 50), "치료"))
{
player.Heal(10);
}
}
}
- Test 객체를 선택하고 Inspector 창에서 TestScript 의 Player 필드에 Player 객체를 연결합니다.
▶ 결과
실행하면 다음과 같이 캐릭터 아래에 버튼 두 개가 나타나고 각각 피해를 주거나 치료를 해주면 그에 따라 HPBar 가 변경되는 것을 볼 수 있습니다.
이 구현 방법의 핵심은 PlayerObj 에도 HPBar 에 대한 정보가 없고 HPBar 에도 PlayerObj 에 대한 정보가 전혀 없다는 것입니다. 이렇게 구현하면 HPBar 를 하나의 모듈로 사용할 수 있기 때문에 Player가 아닌 Monster 등 HPBar 가 필요한 객체에 그대로 사용할 수 있는 장점이 있습니다.
반응형
'게임 프로그래밍 > 유니티 활용' 카테고리의 다른 글
[유니티 활용] ScriptableObject 와 Reflection 을 이용한 간단한 버프 시스템 만들기 (1) | 2023.01.03 |
---|---|
[유니티 활용] ScriptableObject 를 이용한 스킬 시스템 만들기 (7) | 2023.01.01 |
[유니티 활용] ScriptableObject 로 HP Bar 만들기 - #1 (1) | 2022.12.29 |
[유니티 활용] StateMachine 과 몬스터 AI (2) | 2022.12.26 |
[유니티 활용] 부드러운 카메라 이동과 경계 값 설정 (0) | 2022.12.25 |
댓글