유니티:내비게이션
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티:UI
- 유니티:게임 내 화면
- 유니티:플레이어
- 유니티:맵
- 유니티:씬
- 유니티:몬스터
- 유니티:아이템
- 유니티:음향
- 유니티:빌드
- 유니티:VR
- 유니티:팁
개요
몬스터 따위가 길을 찾기 위해 안내해주는 과정.
방법
- 지형에 해당하는 오브젝트를 Static화 한다.(인스펙터 창에서 이름 옆에 체크박스가 있다.)
- 내비게이션 메시 생성.
- Static인 오브젝트들의 경사, 높이 따위를 통해 다닐 수 있는 길을 지정한다.
- Window>AI>Navigation에서 Bake 메뉴 선택. 여기에서 다시 Bake버튼 클릭.
- 내비게이션 메시 지정.
- 몬스터 따위의 오브젝트에 Nav Mesh Agent 컴포넌트를 추가한다.
- 그냥 내버려두면 몬스터가 내비게이션 목표물과 겹치는데, Stopping Distance 값을 주면 겹치기 전에 멈춘다.
- 스크립트로 이동을 제어한다.
제어 스크립트
다음과 같이 NavMeshAgent를 통해 움직임을 제어할 수 있다.
(아래엔 공격시간이라든가, 몬스터의 체력 따위들이 섞여 있으니, 필요한 것만 뽑아다 쓰자. 나중에 필요없는 것들은 지워버리자.)
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
public class Drone : MonoBehaviour {
UnityEngine.AI.NavMeshAgent agent;
Transform tower;
public float ATTACK_TIME = 2;
float attackTime = 0;
public int MAX_HP = 3;
[System.NonSerialized]
public int hp = 0;
public float ATTACK_DISTANCE = 1;
// Use this for initialization
void Start () {
agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
tower = GameObject.Find("Tower").transform;
agent.destination = tower.position;
hp = MAX_HP;
attackTime = ATTACK_TIME;
}
void Update()
{
if(agent.remainingDistance <= ATTACK_DISTANCE)
{
attackTime += Time.deltaTime;
if(attackTime > ATTACK_TIME)
{
attackTime = 0;
Tower.Instance.Damage();
}
}
}
}