[유니티] 오브젝트 추적 Unity Chaser

안녕하세요 UnityBeginner입니다.

이번 글에선 오브젝트 반경에 접근하는 
타겟을 추적하는 몇가지 기본적인 방식에 대해 알아보겠습니다.


씬뷰



다음과 같이 오브젝트 3가지를 배치했습니다.
빨간색 큐브는 키보드 입력을 받아 움직이는 플레이어 오브젝트이며
나머지는 반경 안에 플레이어가 들어오면 추적을 시작하는 적 오브젝트입니다.

화면에 보이는 빨간, 파란 선은 오브젝트에 적용시킨 검색 반경을 시각적으로 확인
하기 위해 사용한 OnDrawGizmo입니다.


스크립트 (하늘색 큐브에 적용시킨 스크립트)


 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
27
28
29
30
31
32
Transform target;
    float enemyMoveSpeed = 2f;

    private void Start() {
        InvokeRepeating("UpdateTarget", 0f, 0.25f);
    }

    private void UpdateTarget() {
        Collider[] cols = Physics.OverlapSphere(transform.position, 10f, 1 << 8);

        if(cols.Length > 0) {

            for (int i = 0; i < cols.Length; i++) {
                if (cols[i].tag == "Player") {
                    Debug.Log("Physics Enemy : Target found");
                    target = cols[i].gameObject.transform;
                }
            }
        } else {
            Debug.Log("Physics Enemy : Target lost");
            target = null;
        }
        
    }

    void Update()
    {
        if (target != null) {
            Vector3 dir = target.position - transform.position;
            transform.Translate(dir.normalized * enemyMoveSpeed * Time.deltaTime);
        } 
    }

위의 코드는 InokeRepeating을 이용하여 매 0.25초 타깃을 체크하고
PhsicsOverlapSphere를 이용하여 자신의 위치로부터 10f만큼의 반경의 충돌체를
검사하고 반경 내에 플레이어가 존재하는 경우 추적하는 코드입니다.



스크립트 (보라색 큐브에 적용시킨 스크립트)


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
Transform target = null;
    float enemyMoveSpeed = 2f;

    void Update()
    {
        if (target != null) {
            Vector3 dir = target.position - transform.position;
            transform.Translate(dir.normalized * enemyMoveSpeed * Time.deltaTime);
        }
    }

    private void OnTriggerEnter(Collider col) {
        if (col.tag == "Player") {
            target = col.gameObject.transform;
            Debug.Log("Box Enemy : Target found");
        }
    }

    private void OnTriggerExit(Collider col) {
        target = null;
        Debug.Log("Box Enemy : Target lost");
    }

위의 코드는 BoxCollider를 이용하여 반경 내에 플레이어 오브젝트가
접근하면 추적하고 반경을 벗어나면 추적을 중단하는 코드입니다.


결과화면



Physics를 이용해 주위 충돌체를 검사하거나, Collider를 이용하여 접근하는 
충돌체를 검사하고 추적하는 기본적인 방식에 대해 알아보았습니다. 

이 2가지 방법 이외에도 다양한 방식으로 구현이 가능하며 
다음은 좀 더 좋은 정보로 찾아오겠습니다.

댓글