private IEnumerator Behaviour()
{
while (!_isDead)
{
switch (_currentState)
{
case StateType.IDLE:
yield return IdleState();
break;
case StateType.MOVE:
yield return MoveState();
break;
case StateType.ATTACK:
yield return AttackState();
break;
}
}
}
private IEnumerator IdleState()
{
yield return null;
while (!_isDead)
{
_distance = Vector3.SqrMagnitude(_playerPos.position - _origionPos.position);
if (_distance <= _trackDistance)
{
_currentState = StateType.MOVE;
yield break;
}
_anim.SetInteger("State", 0);
yield return new WaitForSeconds(0.2f);
}
}
이런식으로 FSM을 만들었는데 피격 상태 넣고 할려면 yield return null로 바꿔주는게 좋음??
스테이트에 코루틴을 쓰지마 ㅋㅋ 0.2초마다 실행하는 코루틴에서 길찾기만 해
?? 그럼 스테이트 코루틴 따로 길찾기 코루틴 따로 이런식으로 하라는거야??
스테이트 업데이트 매프레임 할건데 대기할일이 없는데 코루틴을 쓸 이유가 없어
그럼 스테이트 업데이트는 업데이트문에서 하고 행동함수들만 코루틴으로하면 된다는거?
기본적으로 전부 업데이트에서 하고 코루틴이 필요한 부분만 코루틴을 써.. 행동 시퀀스가 필요하거나 뭔가를 대기해야되거나
업데이트랑 코루틴이랑 연계해서 뭘 하려니깐 머리 아프네... 걍 업데이트문에 다 때려박을까?
그것도 방법이지 단순히 일정시간 간격으로 뭐 호출하는 정도면 굳이 코루틴 안써도 됨
피격판정만 할거면 OnCollision 이나 OnTrigger 메소드같은건 어떰? OnCollisionStay 로 해서 time 값 줘서 태그정해서 충돌판정주면 안되려나
Fsm에서 갑자기 콜라이더가 왜 나옴?