본문 바로가기

Unity/Unity3D_Quater

Unity3D_Quater - 몬스터 AI 만들기

1.Enemy A 오브젝트 생성

 

 - Enemy A 프리팹을 드래그 앤 드랍하고 컴포넌트로 리지드바디, 박스콜라이더, Enemy 스크립트를 추가해준다

 - Enemy A 프리팹의 자식 오브젝트에 meshRenderer 컴포넌트가 있으므로 Enemy 스크립트에서 meshRenderer를 초기화 해주는 Awake()안의 코드를 GetComponentInChildren으로 바꾸어준다

 

 

 

 

 

2. 네비게이션으로 몬스터 AI 주어 플레이어 추적하기

 

1). Enemy A 오브젝트의 컴포넌트로 Nav Mesh Agent를 추가해줌

2) 몬스터가 플레이어를 추적하도록 코드구현 (중요스킬)

*navMeshAgent - 네비메쉬에이젼트 컴포넌트

*.SetDestination(추적할 오브젝트 위치) - 추적로직

3) Navigation으로 땅을 구워(Bake)주어야 로직이 실행됨

*Static 상태인 오브젝트에서만 구워짐!!!(중요)

 

4) 몬스터와 플레이어가 충돌했을때 몬스터에게 새로 가해지는 회전속도 및 속도를 없애서 충돌 이후 플레이어를 따라가지못하는 현상을 수정하고 몬스터가 죽었을때는 넉백효과가 제대로 발생되도록 코드 구현

*네비메쉬에이젼트 컴포넌트가 활성화 되어있는경우엔 해당 오브젝트가 위쪽 방향으로 움직일 수 가 없다.. 바닥에 붙어다녀야하는 듯 하다

 

 

3.애니메이션

 

- 애니메이터를 새로 만들어서 Enemy A 안의 Mesh Object에 드래그 앤 드랍 후 애니메이션 설정

*GetComponentInChildren으로 애니메이션 컴포넌트 가져오기

 - 관련 코드 구현

 

 

 

4. 리펙토링

 -isTracking 이라는 bool값의 플래그 변수를 생성하여 이를 활용하기 위한 리펙토링

 - Awake()에서 2초 후 isTracking을 1번 true로 바꿔주면서 Update() 안의 Tracking()함수가 동작하도록 해주고

 - 몬스터 사망시에 isTracking 변수를 false로 바꿔주면서 navMeshAgent 컴포넌트도 비활성화 시켜준다 

*38 ~ 48번째 줄 리펙토링 재수정(최종본)