Unity3D_MMO - 몬스터 (1)

k_hyun·2022년 10월 20일
0

Unity_MMO_Project

목록 보기
29/33

Define.cs

public enum State
    {
        Die,
        Moving,
        Idle,
        SKill,
    }

State를 위한 열거형을 선언.

BaseController.cs

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로 선언.

MonsterController.cs

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를 사용하였다.

애니메이터 추가


몬스터 애니메이션을 위한 애니메이터를 추가하였다.

실행 결과


로그가 정상적으로 찍히고, 애니메이션 또한 동작함을 확인.

0개의 댓글