Unity 5.2로 '유니티 게임 AI 프로그래밍' 5장 군집처리 중 NavMeshAgent를 활용한 군중 시뮬레이션 따라하기

18/9/27 목

* NavMeshAgent를 활용한 군중 시뮬레이션 구현:
Plane, Cube 생성하여 바닥과 벽 형태로 하여 배치하고 인스펙터창 좌상단 'Static' 부분 클릭한 뒤 Navigation Static 체크. Navigation 창에서 Object탭 Navigation Static, Generate OffMesh Links 체크, Navigation Area: Walkable로 설정한 뒤 Bake 버튼 클릭해 네비게이션 맵 생성하기.

Capsule 생성, 'CapsuleCrowdB'라 명명, 'CrowdAgent.cs' 생성, 추가하면 자동으로 Nav Mesh Agent 컴포넌트도 추가된다. 파란색 매터리얼 적용해 파란색으로 만들고 프리팹으로 만든다.
빈 게임 오브젝트 생성, 'TargetBlue'라 명명, 자식으로 Sphere 추가하고 Sphere Collider를 비활성화 시킨다.
'CapsuleCrowdB' 프리팹의 CrowdAgent-Target에 'TargetBlue' 끌어 적용.
동일하게 CapsuleCrowdR, TargetRed도 생성한 뒤 동일한 작업.
실행시키면 파란색 캡슐 에이전트들과 빨간색 캡슐 에이전트들이 각각 장애물을 피하며 각각의 타겟으로 향해 이동한다. 12:35

- 열리고 닫히는 문 만들기:
문 역할을 하는 Cube 만들고 'MovingDoor'라 명명, NavMeshObstacle 컴포넌트 추가하고 Carve: On, Move Threshold: 0.1, Time To Stationary: 0.5, Carve Only Stationary: Off로 설정. 문을 위아래로 움직이는 'UpAndDown.cs' 생성, 추가.

CrowdAgent.cs======================================
//Project-CapsuleCrowdB, CapsuleCrowdR 프리팹에 적용
//지정한 타겟을 향해 이동.

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(NavMeshAgent))]
public class CrowdAgent : MonoBehaviour {
     public Transform target;
     private NavMeshAgent agent;

     void Start(){
          agent = GetComponent ();
          agent.speed = Random.Range (4.0f, 10.0f);
          agent.SetDestination (target.position);
     }
}

UpAndDown.cs======================================
//Hierarchy-Obstacles-MovingDoor에 적용
//문 올렸다 내렸다 반복

using UnityEngine;
using System.Collections;

public class UpAndDown : MonoBehaviour {
     private float movDist = 2;
     private bool open = false;

     void Update () {
          if(open){
               transform.Translate (0, -movDist * Time.deltaTime, 0);
               if(transform.position.y <= 2) {
                    open = false;
               }
          } else {
               transform.Translate (0, movDist * Time.deltaTime, 0);
               if (transform.position.y >= 6) {
                    open = true;
               }
          }
     }
}