유니티

유니티 3D 쿼터뷰 액션게임 - 목표를 추적하는 내비게이션 AI / NavMeshAgent

nock_ji 2022. 4. 25. 01:46

 

유니티 3D 쿼터뷰 액션게임 만들기

 

 

👾  목표를 추적하는 AI 만들기  👾

 

 

 


 

1.  오브젝트 생성

 

 

🔻 올려진 적 오브젝트에 물리와 스크립트 세팅하기 

 

 

🔻 MeshRenderer를 가져오는 GetComponent() -> GetComponentInChildren() 바꾸기

 

-  태그와 레이어를 Enemy로 설정 

 

 


 

2.  내비게이션 

 

✏️ 유니티가 제공하는 내비게이션 AI 시스템 사용

 

 

 

📣 Nav 관련 클래스는 UnityEngine.AI 네임 스페이스 사용 

 

📌 NavMeshAgent

Navigation을 사용하는 인공지능 컴포넌트

NavMeshAgent 컴포넌트 가져오기 초기화

 

📌 SetDestination()

도착할 목표 위치 지정 함수 

 

Enemy logic.

 

 

🔻 목표물 변수에 Player를 할당

📣 NavAgent를 사용하기 위해서는 NavMesh가 필요!

 

 

 


 

 

📌  NavMesh 

NavAgent가 경로를 그리기 위한 바탕 캔버스 (Mesh)

Windows - AI - Navigation 열기 

📣 NavMesh는 Static 오브젝트만 Bake 가능 

 

 

 

- Navigation 창에서 NavMesh를 Bake로 생성 , 목표물 Player를 따라다님

- Navigation의 Agent세팅 값으로 NavMesh 범위가 결정됨 

 

 

- 벽 하나를 복사해서 기둥으로 만들기

📣 지형이 바뀌었다면 다시 Bake를 눌러 NavMesh 재생성

 

 

 

 

 

- Player와 Enemy가 충돌하면 물리속도에 의해 움직임에 변화가 생김, Enemy가 추적하지 못하고 밀려남

- 물리력에 NavAgent 이동을 방해하지 않도록 로직 추가

- FixedUpdate()에서 꾸준히 velocity 속도angularVelocity 회전 속도를 0으로 만들어서 밀려나지 않음 

Enemy logic.

 

 

 

 


 

3.  애니메이션 

 

 

✏️  Enemy의 애니메이션 설정 & 사망 리액션 설정

 

- EnemyA 이름의 Animator Controller 생성 후 Mesh Object에 추가

- 모델에 포함된 애니메이션을 애니메이터로 드래그 

 

 

 

🔻 파라메터와 Transition을 세팅하여 애니메이터 완성하기 

 

 

 

- 적이 죽는 시점에서도 애니메이션과 플래그 세팅 

- 추적을 결정하는 bool 변수 추가 (Chasing)

- 플레이 시, 2초 후에 추적시작 (ChaseStart)

- 추적중일 때, Walking 애니메이션 실행

Enemy logic.

 

 

 

🔻 추적중 true 이면, target Player를 추적 / 밀려나는 속도나 회전값 0

Enemy logic.

** Update() 로직 변경 !

Enemy logic.

 

 

- curHealth 현재 체력이 0보다 작으면 추적 중지

- NavAgent 비활성화

- 죽으면 애니메이션 트리거 실행, 4초 후 오브젝트 비활성화 

Enemy logic.