문제 상황
원래 코드
using UnityEngine;
public class EnemyMoveState : EnemyBaseState
{
private readonly float range = 0.01f;
public EnemyMoveState(EntityStateMachine stateMachine) : base(stateMachine)
{
}
public override void Enter()
{
base.Enter();
StartAnimation(entityStateMachine.Entity.AnimationData.MoveParameterHash);
}
public override void Exit()
{
base.Exit();
StopAnimation(entityStateMachine.Entity.AnimationData.MoveParameterHash);
}
public override void Update()
{
base.Update();
if(IsArrivalToWayPoint())
{
// 현재 enemy 위치 웨이포인트로 변경
enemy.transform.position = enemy.WayPoints[enemy.TargetIndex].transform.position;
// 다음 웨이포인트로 목적지 변경
enemy.SetTargetIndex((enemy.TargetIndex+1) % enemy.WayPoints.Length);
//TODO :: EndPoint 도착 시 처리
//if (curIndex == enemy.WayPoints.Length)
//{
// enemy.gameObject.SetActive(false);
//}
}
else if (!enemy.HealthSystem.IsDie())
{
MoveToWayPoint();
}
}
private void MoveToWayPoint()
{
Vector3 moveDir = GetDirectionToWayPoint();
Rotate(moveDir);
Move(moveDir, enemy.CurStat.MoveSpeed);
}
private void Rotate(Vector3 dir )
{
enemy.transform.rotation = Quaternion.LookRotation(dir);
}
private Vector3 GetDirectionToWayPoint()
{
Vector3 dir = (enemy.WayPoints[enemy.TargetIndex].transform.position - enemy.transform.position ).normalized;
dir.y = 0;
return dir;
}
private bool IsArrivalToWayPoint()
{
Vector3 distanceVector = (enemy.transform.position - enemy.WayPoints[enemy.TargetIndex].transform.position);
float distance = distanceVector.sqrMagnitude;
return distance < range * range;
}
}
해결
웨이포인트와 enemy 사이의 거리를 검사하는 IsArrivalToWayPoint 메서드에서
사이 거리를 너무 작게 잡아 생기는 오류였다.
적당한 거리로 설정해주었더니 이슈가 해결되었다.
https://github.com/Defense-Hub/ProjectDH/issues/138
'게임 개발' 카테고리의 다른 글
[Unity] 디펜스게임 개발 - 유닛 소환 막기 스킬 (0) | 2024.07.30 |
---|---|
[Unity] 디펜스게임 개발 - Hp Bar 최적화 (0) | 2024.07.29 |
[Unity] 보스 키우기 (6) - 완성 (0) | 2024.06.26 |
[Unity] 보스 키우기 (5) - 버프 몬스터 (0) | 2024.06.25 |
[Unity] 보스 키우기 (4) - 원거리 몬스터 (0) | 2024.06.23 |