Unity Chapter 11-15. 좀비 TPS 게임 만들기 : 좀비 AI 만들기 준비
카테고리: Unity Lesson 1
태그: Unity Game Engine
인프런에 있는 이제민님의 레트로의 유니티 C# 게임 프로그래밍 에센스 강의를 듣고 정리한 필기입니다. 😀
🌜 [레트로의 유니티 C# 게임 프로그래밍 에센스] 강의 들으러 가기!
Chapter 11. 좀비 TPS 게임 만들기
내비게이션 시스템
좀비가 플레이어로 향하는 경로를 자동으로 계산
- 유니티에서 경로를 자동으로 계산하고 알아서 장애물을 피해가는 AI를 제공하고 있다.
네비게이션 시스템 구성
NavMeshAgent
NavMesh
위에서 경로를 계산하고 이동하는 게임 오브젝트에게 추가하는 컴포넌트- 반드시
NavMesh
위에서만 움직일 수 있다.
NavMesh
- 에이전트가 걸어다닐 수 있는 표면을 만든다.
- 정적 게임 오브젝트를 대상으로 생성된다. (실시간으로 게임 도중에 변형하는 것이 불가능)
OffMeshLink
- 서로 끊어져 있는
NavMesh
영역 사이를 이을 수 있는 연결지점 - 인공지능이 뛰어넘을 수 있는 울타리나 절벽 건너편 지역 등등 이런 것들을 구현할 때 사용
- 서로 끊어져 있는
NavMeshObstacle
- 실시간으로 추가될 수 있는 에이전트의 경로를 막는 장애물
좀비 AI 준비
NavMesh 만들기
static
NavMesh
는 정적 게임 오브젝트를 대상으로 생성되야 하는데- 이미
Level Art
는 static이 체크가 되어 있는 정적 게임 오브젝트이기 때문에Level Art
를 AI 가 걸어다닐 수 있는 표면인NavMesh
으로 만들 것이다! -
- 단, Navigation static이 체크가 되어 있어야 한다.
- static을 체크하면 모든 종류의 static이 다 체크되긴 한다.😊
- 단, Navigation static이 체크가 되어 있어야 한다.
- 이미
Bake
NavMesh
를 굽기 위한 설정. 즉 AI가 돌아다닐 표면을 설정하기 위해 사용할 뿐.
- Window - AI - Navigation 선택
- Inspector 창 옆에 Navigation 창이 생성되는데 Bake 항목을 눌러주자.
- Bake
- 👉 네비게이션을 굽기 위한 여러가지 프로퍼티를 설정할 수 있다.
- Baked Agent
- 👉 씬을 돌아다니면서 네비게이션 에이전트가 돌아다닐 수 있는 영역을 측정한다.
Radius
를 0.4 로 설정Height
를 1.8 로 설정- 그리고 Bake 버튼을 누르기
- 이렇게 Baked Agent 의 size를 줄이면 좀 더 촘촘하게 구워지게 된다!
- 반지름을 줄여주면 얇아진 에이전트가 더 많은 곳을 돌아다니므로 더 넓은 영역이 구워지게 된다.
- 길이를 낮춰주면 천장이 낮은 곳도 탐색할 수 있게 되기 때문에 더 많은 영역이 구워지게 될 것이다.
- 단 그렇다고 해서 너무 많이 줄여버리면 물리 처리 상으로 이동할 수 없는 장소까지도 AI가 이동할 수 있다.
- 따라서 이런 경우를 방지하기 위해 AI를 입힐 오브젝트보단 조금 더 큰 사이즈로 설정해 주는 것이 좋다.
Max Slope
는 에이전트가 이동할 수 있는 최대 경사 각도Step Height
는 에이전트가 이동할 수 있는 계단의 높이- 높으면 높을수록 에이전트가 높은 곳도 껑충 잘 넘어 다니게 될 것이다.
- Bake
- Inspector 창 옆에 Navigation 창이 생성되는데 Bake 항목을 눌러주자.
-
- 이렇게 구워주면 파랗게 구워진 표면 (
NavMesh
)들을 확인할 수 있다. - 이제 AI는 이 표면 영역 위에서만 움직이며 경로를 계산하고 이동할 것이다.
- 이렇게 구워주면 파랗게 구워진 표면 (
Agent
실제로 게임 내에서 씬에서 사용할 에이전트들을 설정할 수 있다.
- Bake에서의 Agent와 헷갈리면 안됨! 얘는 오직 네비게이션 표면을 굽기 위한 용도의 Agent 였다.
- 네비게이션 창의 Agent 항목 클릭
-
- Agent Types을 + - 을 통하여 추가 삭제할 수 있다.
- 일단 Humanoid 타입인 것들에 대해서만 적용할 것
- 반지름과 길이를 사진과 같이 설정해준다. 0.4, 1.8
- Agent Types을 + - 을 통하여 추가 삭제할 수 있다.
-
좀비 오브젝트 생성
- 좀비 오브젝트의 모델로 쓸 📂Models/🟦MazeLowMan 을 Hierarchy 창에 드래그 해준다.
- 현재 플레이어 캐릭터 모델과 같은 모델이다. 구분해주기 위해 좀비 모델은 색을 다르게 해주던가 할 것임!
- 이름을
Zombie
라고 변경해준다. - 다시 이
Zombie
를 📂Prefabs 로 드래그 하여 프리팹으로 만들어준다.- Original Prefab 으로 생성해준다.
컴포넌트 설정
Zombie
오브젝트의 컴포넌트 설정
- Transform
- 위치를 0, 0, 2 로 설정
- Animator
- Root Motion 을 체크 해제 해준다.
- 좀비의 위치를 직접 통제할 것이라서!
- 📂Animations/
Zombie Animator
를 Controller 에 드래그 앤 드롭 해준다.
- Root Motion 을 체크 해제 해준다.
- Capsule Collider 추가
- 좀비의 물리, 충돌 처리
- 캡슐이 좀비를 적절히 감싸게끔 사이즈 설정
- 반지름은 0.3
- 길이는 1.8
- center는 0, 0.9, 0 으로
- 좀비의 물리, 충돌 처리
- Audio Source 추가
- 좀비 소리 재생을 위하여.
- Play On Awake 체크 해제
- ⭐Nav Mesh Agent 추가
- 좀비에게 AI 를 부여하기 위하여
- 설정
- Agent Types 는 “Humanoid” 로
- Speed 이동 속도는 8
- Angular Speed 회전 속도는 180
- Acceleration 가속도는 16
- Stopping Distance 는 0
- AI가 더 이상 추적하지 않는 거리
- 코드 상에서 결정할 것이라서 일단 0 으로 둠
- Auto Braking는 체크
- 가속도나 관성에 의해서 목표 지점이나 Stopping Distance를 너무 멀리 벗어나지 않도록 자동 감속을 사용하는 옵션
- Obstacle Avoidance 장애물 회피
- 기본 값 그대로 둔다. 0.5, 2
- 이 size 값을 늘리게 될 수록 장애물과 여유공간을 크게 두고 회피하게 된다.
- 네비게이션 agent 에서 설정해던 size와는 별개
좀비 애니메이터 컨트롤러의 구성
📂Animations/
Zombie Animator
클릭
- 파라미터
- Die 👉 사망시에 발동될 트리거
- Attack 👉 공격할 때 트리거
- Speed 👉 좀비 이동 속도
- 레이어
- Base Layer 로 레이어가 하나 뿐이다.
Idle
이 Entry라Idle
상태부터 시작Move
좀비가 움직이는 애니메이션Bite
좀비가 플레이어를 물어 뜯는(공격) 애니메이션Die
좀비가 사망하는 애니메이션- 트랜지션
Idle
👉Move
- 조건) Speed > 0.1
Move
👉Idle
- 조건) Speed < 0.1
Any State
👉Die
- Die 트리거 발동
Any State
👉Bite
- Atack 트리거 발동
- Base Layer 로 레이어가 하나 뿐이다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기