▣ 먼저 Packages에서 AI Navigation를 추가합니다.
▣ Zombie 오브젝트에 Nav Mesh Agent Component 추가합니다.
▣ Nav Mesh Agent Component를 통해서 Zombie 오브젝트 AI를 제어합니다.
https://docs.unity3d.com/kr/2021.3/Manual/class-NavMeshAgent.html
▣ Zombie 스크립트를 생성해서 추가하고 스크립트에 AI에 대한 네임스페이스를 UnityEngine.AI 추가합니다.
▣ AI에 모든 상태, 상황에 대한 변수를 정의해야 합니다. 위에 주석처럼 필요한 변수들을 선언합니다.
▣ Start() 함수에서 애니메이션, AI, 플레이어에 대한 정보를 대입합니다.
▣ Update() 함수에서는 시야 범위를 CheckSphere() 함수를 통해 체크하고 범위 들어오면 조건에 따라 상태를 호출합니다.
▣ CheckSphere() : 세계 좌표 position에 의해 정의된 구와 겹치는 충돌체가 있는 경우 true를 반환합니다
https://docs.unity3d.com/ScriptReference/Physics.CheckSphere.html
▣ OnDrawGizmosSelected() 함수를 사용하여 기지모에 색을 넣어서 공격범위, 시야범위를 그려주는 코드를 완성합니다.
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnDrawGizmosSelected.html
▣ Patroling() 함수 순찰 중 함수를 완성합니다.
이동포인트가 도착했을 때 여부에 따라 이동하고 새로운 경로를 지정하고에 대한 코드를 완성했습니다.
▣ agent.speed는 ai에 이동 속도를 나타냅니다.
▣ SetDestination() 함수는
목적지를 설정하거나 업데이트하여 새 경로에 대한 계산을 트리거합니다.
몇 프레임이 지나야 경로를 사용할 수 있습니다. 경로가 계산되는 동안 pathPending은 true입니다. 유효한 경로를 사용할 수 있게 되면 에이전트는 이동을 재개합니다.
https://docs.unity3d.com/ScriptReference/AI.NavMeshAgent.SetDestination.html
▣ Vector3.magnitude 는 벡터의 길이를 반환합니다
현재 좀비에 위치와 이동포인트 위치를 빼서 그에 대한 길이를 구해 isWalkPoint 여부를 지정합니다.
https://docs.unity3d.com/ScriptReference/Vector3-magnitude.html
▣ 플레이어를 발견하면 쫓아가는 함수와 공격하는 함수입니다.
▣ Invoke() 함수는 시간(초) 단위로 메서드를 호출합니다
이 함수를 통해서 공격시간을 지정합니다.
https://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html
▣ Windows -> AI -> Navigation (Obsolete)를 추가하고 해당 Zombie오브젝트에서 Navigation 메뉴에 Bake로 AI 이동할 경로를 지정합니다.
https://docs.unity3d.com/kr/2022.3/Manual/nav-BuildingNavMesh.html
▣ 저장 후 플레이를 하고 스크립트 범위 및 포인트 위치를 이동하고 재생하면 AI가 코드에 맞게 작동합니다.
'[ CODING STUDY ] > 》유니티 실습' 카테고리의 다른 글
유니티 night skybox (0) | 2024.01.21 |
---|---|
유니티 배경음악, 레벨유지 (2) | 2024.01.19 |
유니티 raycast, 총알효과 (1) | 2024.01.19 |
유니티 3d ui (0) | 2024.01.18 |
유니티 뛰는 애니메이션 (0) | 2024.01.18 |
댓글