유니티:내비게이션: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
(새 문서: {{유니티}} == 개요 == 몬스터 따위가 길을 찾기 위해 안내해주는 과정. === 방법 === # 지형에 해당하는 오브젝트를 Static화 한다.(인스펙터...) |
잔글 (→개요) |
||
(같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
{{유니티}} | {{유니티}} | ||
== 개요 == | ==개요== | ||
몬스터 따위가 길을 찾기 위해 안내해주는 과정. | 몬스터 따위가 길을 찾기 위해 안내해주는 과정. | ||
=== 방법 === | ===방법=== | ||
#지형에 해당하는 오브젝트를 Static화 한다.(인스펙터 창에서 이름 옆에 체크박스가 있다.) | |||
#내비게이션 메시 생성. | |||
#:Static인 오브젝트들의 경사, 높이 따위를 통해 다닐 수 있는 길을 지정한다. | |||
#:Window>AI>Navigation에서 Bake 메뉴 선택. 여기에서 다시 Bake버튼 클릭. | |||
#내비게이션 메시 지정. | |||
#:몬스터 따위의 오브젝트에 Nav Mesh Agent 컴포넌트를 추가한다. | |||
#:그냥 내버려두면 몬스터가 내비게이션 목표물과 겹치는데, Stopping Distance 값을 주면 겹치기 전에 멈춘다. | |||
#스크립트로 이동을 제어한다. | |||
# | |||
# | |||
== 제어 스크립트 == | |||
다음과 같이 NavMeshAgent를 통해 움직임을 제어할 수 있다. | |||
(아래엔 공격시간이라든가, 몬스터의 체력 따위들이 섞여 있으니, 필요한 것만 뽑아다 쓰자. 나중에 필요없는 것들은 지워버리자.)<syntaxhighlight lang="c#"> | |||
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(); | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
# | # |
2021년 8월 3일 (화) 12:50 기준 최신판
- 유니티:개요
- 유니티:기본 조작
- 유니티:카메라
- 유니티:오브젝트
- 유니티:코딩기초
- 유니티: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();
}
}
}
}