public enum State
{
Die,
Moving,
Idle,
SKill,
}
State를 위한 열거형을 선언.
public abstract class BaseController : MonoBehaviour
{
[SerializeField]
protected Vector3 _destPos;
[SerializeField]
protected Define.State _state = Define.State.Idle;
[SerializeField]
protected GameObject _lockTarget;
public virtual Define.State State
{
get { return _state; }
set
{
_state = value;
Animator anim = GetComponent<Animator>();
switch (_state)
{
case Define.State.Die:
break;
case Define.State.Idle:
anim.CrossFade("WAIT", 0.1f);
break;
case Define.State.Moving:
anim.CrossFade("RUN", 0.1f);
break;
case Define.State.SKill:
anim.CrossFade("ATTACK", 0.1f, -1, 0);
break;
}
}
}
private void Start()
{
Init();
}
void Update()
{
switch (State)
{
case Define.State.Die:
UpdateDie();
break;
case Define.State.Moving:
UpdateMoving();
break;
case Define.State.Idle:
UpdateIdle();
break;
case Define.State.SKill:
UpdateSkill();
break;
}
}
public abstract void Init();
protected virtual void UpdateDie() { }
protected virtual void UpdateMoving() { }
protected virtual void UpdateIdle() { }
protected virtual void UpdateSkill() { }
}
기존에 PlayerController에서 공통으로 사용될 부분을 옮겨왔다.
override 해서 사용할 것들은 virtual로 선언.
public class MonsterController : BaseController
{
Stat _stat;
public override void Init()
{
_stat = gameObject.GetComponent<Stat>();
// UI_HPBar 컴포넌트가 없으면 생성한다.
if (gameObject.GetComponentInChildren<UI_HPBar>() == null)
Managers.UI.MakeWorldSpaceUI<UI_HPBar>(transform);
}
protected override void UpdateIdle()
{
Debug.Log("Monster UpdateIdle");
}
protected override void UpdateMoving()
{
Debug.Log("Monster UpdateMoving");
}
protected override void UpdateSkill()
{
Debug.Log("Monster UpdateSKill");
}
void OnHitEvent()
{
Debug.Log("Monster OnHitEvent");
}
}
처음에는 Idle 상태일텐데, 잘 작동하는지 확인하기 위해 Debug.Log를 사용하였다.
몬스터 애니메이션을 위한 애니메이터를 추가하였다.
로그가 정상적으로 찍히고, 애니메이션 또한 동작함을 확인.