Unity - 몬스터 모드 변경

2024. 7. 11. 20:48Unity/Unity 학습정리

  파트너 몬스터가 플레이어를 따라다닐 때, 적 몬스터를 만나면 공격한다. 하지만 그걸 원하지 않을 때가 있는데 NonCombat모드랑, Combat모드를 구분해서 FSM을 조절하는 것을 구현 해봤다.

 

ActionModeHandler.cs

public enum AcitonMode
{
    NonCombat,
    Combat,
    Count
}
/// <summary>
/// 현재 액션 상태를 다루고 다음 액션으로 넘어가게 하는 핸들러
/// </summary>
public class ActionModeHandler
{
    private AcitonMode _curMode;
    public event Action OnChangedMode;

    public ActionModeHandler()
    {
        _curMode = AcitonMode.NonCombat;
    }

    public AcitonMode GetActionMode()
    {
        return _curMode;
    }
    public void CallModeChangeEvent()
    {
        OnChangedMode?.Invoke();
    }
    public void ChangeActionMode()
    {
        _curMode += 1;
        if (_curMode == AcitonMode.Count)
        {
            _curMode = 0;
            CallModeChangeEvent();
            return;
        }
        CallModeChangeEvent();
        return;
    }
}
  • 모드가 버튼식이기 때문에 버튼을 누를 때 마다 다음 모드로 넘어가게 구현
  • 현재는 NonCombat, Combat모드 두 개를 넣어놨음
  • enum에 Count를 통해 모드가 끝까지 간다면 다시 처음으로 되돌리도록 구현
  • 나중에 UI를통해 여러모드중 하나를 고르게 할 수 도 있도록 구현
  • PartnerMonsterIdleState,PartnerMonsterWalkState
    • 파트너 몬스터만 해당 핸들러를 사용
    • 파트너 몬스터에서 Chasing을 가는것을 해당 두 State이고, 이 State에서 벗어나지만 않으면 전투 모드로 들어갈 수 없음
    • 해당 State의 전이 조건에서 ActionMode를 확인해 NonCombat이면 전투로 아예 넘어가지 못하도록 함