[왕초보도 할 수 있는 VR] 타워디펜스 4 - 적

1 minute read


VR 강의

Unity version 2018.1.1f1

적 추가

Workshop > etc > Models > Drone 프리팹을 씬에 추가한다. 네비메시를 사용해 플레이어를 추적시킬것이므로 테스트를 위해서 플레이어와 멀리 떨어뜨려 배치한다.

  • 네비게이션

    두 지점 사이를 움직이기 위한 최적의 경로를 찾는다.

  • 네비게이션 메시

    길 찾기를 쉽게 할 수 있도록 지형 데이터를 재구성하여 이동 공간을 계산한다.


네비메시

Enviroment 게임오브젝트는 지금 네비메시를 굽기위해서 static으로 만들었다.

  • Static

    정적, 움직이지 않는 상태, 고정

맵을 정적으로 만들어야 네비메시를 구워서 맵의 정보를 계산할 때 변화가 발생하지 않아 적이 올바르게 길을 찾을 수 있게된다.

Window > AI > Navigation 으로 창을 연다.

Bake 탭을 누르고 Bake를 눌러 맵을 구워준다.

구워진 맵을 보면 푸른색 장판이 깔려있다 자세히보면 지형지물 아래는 채워지지 않았는데 이 장판에 AI가 움직일 수 있는 경로를 계산할 결과이다.


드론AI

드론 오브젝트가 네비메시를 사용할 수 있게 한다.

  • Add Component > Nav Mesh Agent 컴포넌트를 추가

플레이어를 추적하도록 만드는 스크립트를 추가한다.

  • Workshop > Scripts > Drone 스크립트 드론 오브젝트에 추가

이렇게 생성된 드론은 장애물을 피해서 플레이어를 찾아 최단 거리로 오게된다.

그런데 지금 상태에서 드론이 너무 가까이 다가와서 타워에 겹쳐지게 되는데 이 문제는 Drone 오브젝트의 Nav Mesh Agent 컴포넌트의 설정값으로 해결할 수 있다.

  • Nav Mash Agent

    Stopping Distance : 원하는 거리

    지정한 거리에서 더 이상 다가오지않고 멈추게 된다.


Dron.cs

using UnityEngine;
using System.Collections;

// NavMeshAgent 컴포넌트가 반드시 포함되도록 만든다.
[RequireComponent(typeof(UnityEngine.AI.NavMeshAgent))]
public class Drone : MonoBehaviour {
    // agent 저장할 변수
	UnityEngine.AI.NavMeshAgent agent;
    // 타워의 위치
	Transform tower;

    void Start () {
        // Nav Mesh Agent 컴포넌트 가져온다.
		agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
        // 씬에서 Tower 오브젝트를 찾아서 위치를 가져온다.
        tower = GameObject.Find("Tower").transform;
        // 목적지를 타워의 위치로 지정한다.
		agent.destination = tower.position;
	}