저번에 만든 적 AI 가 아무런 전조도 없이 바로 추격 상태로 들어가는 것이 밋밋하다고 생각되었다.
사실 현실적으로 본다면 바로 추격을 하는 것이 맞겠지만 지금 적은 인간이라기 보단 괴물 컨셉이 맞기에
약간의 전조 동작을 넣어주면 재밌지 않을까 생각되었다.
//코드블록에 tap이 들어가면 이상하게 바뀌는 것 같다.
public class RageState : EnemyBaseState
{
public RageState(EnemyStateMachine stateMachine) : base(stateMachine)
{
}
public override void Enter()
{
stateMachine.butler.agent.isStopped = true;
CorourtineHandler.Instance.StartRoutine(RageOn());
}
public override void Exit()
{
stateMachine.butler.agent.isStopped = false;
CorourtineHandler.Instance.StopRoutine(RageOn());
}
public override void Update()
{
}
IEnumerator RageOn()
{
StartAnimation(stateMachine.butler.animationData.AgonyParameterHash);
yield return new WaitForSeconds(4);
StopAnimation(stateMachine.butler.animationData.AgonyParameterHash);
StartAnimation(stateMachine.butler.animationData.ScreamParameterHash);
yield return new WaitForSeconds(1);
StopAnimation(stateMachine.butler.animationData.ScreamParameterHash);
yield return new WaitForSeconds(2);
stateMachine.ChangeState(stateMachine.ChasingState); //추적상태로 변환
}
}
그렇게 해서 탐색과 추격 그 중간단계를 넣어봤다.
새로 애니메이션을 넣었기에 해쉬로 바꿔주는 동작을 수행해주고
코루틴을 사용하여 애니메이션을 제어하고자 하였는데 여기서 약간 문제가 발생하였었다.
아! 지금 상태들엔 MonoBehaviour가 상속되어 있지 않다..
따라서 StartCoroutine 메서드 등 코루틴 관련함수도 사용이 불가하다.
그래서 어떻게 해결하나 생각하고 있었는데 마침 실습과제 때 물어볼 수 있는 기회가 생겨 여쭈어봤다.
방법은 생각보다 간단하였다.
public class CorourtineHandler: Singleton<CorourtineHandler>
{
protected override void Awake()
{
base.Awake();
}
public void StartRoutine(IEnumerator coroutine)
{
StartCoroutine(coroutine);
}
public void StopRoutine(IEnumerator coroutine)
{
StopCoroutine(coroutine);
}
}
MonoBehaviour 를 상속한 전역 클래스에 접근해서 코루틴을 실행시키면 되는 것이었다.
그냥 상태에다가 MonoBehaviour를 상속 시킬 순 없나라고 볼 수도 있겠지만
C#은 인터페이스를 제외한 다중상속을 지원하지 않으며
그렇기에 부모 클래스에 MonoBehaviour를 상속시키면
기능은 구현될지라도 MonoBehaviour를 상속하지 않는 다른 상태들도 영향을 받는다.
MonoBehaviour의 기능을 활용하지 않는 곳엔 사용하지 않는 것이 좋으며
솔리드 원칙에도 위반되지 않는다고 생각한다.
사실 나는 코루틴을 다루는 데 있어 익숙치 않아서 더 좋은 방법이 있을 수도 있다. 그럼에도 TIL에 이걸 적은 이유는
익숙치 않은 부분을 좀 더 자주 보면서 다루고 싶고 내가 너무 접근 방식을 한정적으로 생각하지 않았나 스스로 피드백해보는 것이다.
'TIL' 카테고리의 다른 글
2024 11 23 TIL (0) | 2024.11.23 |
---|---|
2024 11 22 TIL (0) | 2024.11.22 |
2024 11 20 TIL (0) | 2024.11.20 |
2024 11 19 TIL (2) | 2024.11.19 |
2024 11 18 TIL (0) | 2024.11.18 |