오브젝트 풀에서 재사용된 적이 처음 소환될 때는 잘 움직이지만, 다시 풀에서 꺼내졌을 때는 타겟을 향해 이동하지 않고 가만히 있는 문제가 발생했다.
적이 재사용될 때 NavMeshAgent와 SetDestination()을 설정했지만, 여전히 움직이지 않았다.
디버깅해 보니, 적의 상태가 IdleState로 설정된 채로 남아 있어서 이동 명령을 받지 않는 상태였다.
ResetEnemy()에서 적을 초기화한 후, 강제로 ChaseState로 변경해줬더니 정상적으로 움직였다.
void ResetEnemy(GameObject enemySpawn, Vector3 position)
{
Enemy enemy = enemySpawn.GetComponent<Enemy>();
enemySpawn.transform.position = position;
enemySpawn.transform.rotation = Quaternion.identity;
enemy.isDead = false;
enemy.agent.enabled = true;
enemy.agent.ResetPath(); // NavMeshAgent 초기화
enemy.agent.SetDestination(player.transform.position); // 타겟 설정
enemy.curHealth = enemy.maxHealth;
enemy.target = player.transform;
enemy.gameObject.layer = 10;
// 적이 풀에서 재사용될 때 바로 ChaseState로 변경
enemy.stateMachine.SetState(new ChaseState(enemy.stateMachine, enemy.childAnimator, enemy.agent, player.transform));
}
적이 재활용될 때도 바로 플레이어를 향해 이동하도록 정상 동작하게 되었다.
오브젝트 풀에서 재사용될 때 상태(State)가 유지될 수 있으므로, 초기화 시점에서 명확하게 상태를 설정하는 것이 중요하다.
NavMeshAgent만 초기화한다고 해서 바로 이동하는 것이 아니라, State를 변경해줘야 행동이 정상적으로 동작할 수 있다.
이제 적이 제대로 움직인다!