* 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;
}
}
}
}
|