몬스터의 이동은 NavMeshAgent에 의해 관리되고 있다. 이동하면서 회전하기 때문에 회전이 부자연스럽다. 좀더 빠르게 회전하도록 직접 회전로직을 구현해본다.
MonsterCtrl 스크립트의 Awake함수를 수정하고 Update함수를 다음과 같이 추가한다.
updaterotation=false로 자동회전기능을 비활성화 시켰다. updatePosition=false로 자동 추적기능을 끌수도 있다.
void Awake() {
//중략
agent = GetComponent<NavMeshAgent>(); //NavMeshAgent 할당
agent.updateRotation= false; // 자동회전기능 비활성화
//중략
}
agent.remaingDistance는 타겟까지 남은 거리이다. agent.desiredVelocity는 장애물을 고려한 이동방향이다.
private void Update() {
//목적지 까지 남은 거리로 회전여부 체크
if(agent.remainingDistance >= 2.0f) {
Vector3 direction = agent.desiredVelocity;
Quaternion rot = Quaternion.LookRotation(direction);
monsterTr.rotation = Quaternion.Slerp(monsterTr.rotation, rot, Time.deltaTime * 10.0f);
}
}
이외 velocity, pathPending, isPathStale 등의 속성이 있다.
'유니티게임강좌 > 내비게이션 기법' 카테고리의 다른 글
[내비게이션고급] Area Mask 활용 (0) | 2023.03.19 |
---|---|
[내비게이션고급] 사용자 정의 Off Mesh Link (0) | 2023.03.18 |
[내비게이션고급] Off Mesh Link Generation (0) | 2023.03.18 |
[내비게이션고급] 동적장애물 (0) | 2023.03.18 |