[유니티] Unity Waypoint

안녕하세요 UnityBeginner입니다.
이번 글에선 오브젝트의 이동경로를 설정하는 한 방법에 대해 알아보겠습니다.


씬뷰



먼저 큐브 오브젝트를 사용하여 바닥과, 플레이어를 생성합니다.
※ 보라색 다이아몬드는 Gizmo를 활용한 마커입니다.

하이어라키 오브젝트 계층구조



큐브오브젝트를 활용하여 바닥지형을 생성하고 
빈 오브젝트를 이용하여 오브젝트가 이동할 좌표를 생성합니다.

기즈모 마커



인스펙터 상단에 위치한 기즈모 아이콘을 이용하여 게임뷰나 씬뷰에 
형태가 없는 오브젝트에 마커를 표시할 수 있습니다.

기즈모 아이콘 옵션



옵션을 활용하여 사이즈를 조절하거나 다른 타입으로 확인이 가능합니다.

스크립트 waypoint

1
public Transform[] wayIndex;

적의 이동경로를 포함 할 Transform 배열 코드입니다.


Waypoint transform 추가



생성해 두었던 이동좌표가 기록되어있는 빈오브젝트들을 배열에 추가합니다.

스크립트 Enemy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private int idx = 0;
    private float speed = 8f;
    private Transform target;
    private Waypoint waypoint;

    private void Start() {
        waypoint = GameObject.FindObjectOfType<Waypoint>();
        target = waypoint.wayIndex[idx];
    }

    void Update() {
        Vector3 direction = target.position - transform.position;   // 방향 구하기
        transform.Translate(direction.normalized * speed * Time.deltaTime, Space.World); // 오브젝트 이동
        if(Vector3.Distance(transform.position, target.position) <=  0.2f) { // 목적지 도착지 포인트 변경
            Nextpoint();
        }
    }

    public void Nextpoint() {
        if (idx >= waypoint.wayIndex.Length - 1)
           Destroy(gameObject);
        else {
            idx++;
            target = waypoint.wayIndex[idx];
        }
    }

Wapoint의 배열에 포함되어있는 좌표값을 가져와 이동하며 
매 지점에 도착할 때마다 다음 좌표를 가져와 이동하는 코드입니다.

결과화면



해당 방식을 응용하여 디펜스류의 게임에 활용하여 
적들의 움직임을 제어가 가능합니다.


댓글