유니티 반경안에 접근한 타겟 추적하기

2020. 4. 28. 22:39유니티실습

반응형

안녕하세요 UnityBeginner입니다.

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

씬뷰


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

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


스크립트 (하늘색 큐브에 적용시킨 스크립트)
    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 만큼의 반경의 충돌체를
검사하고 반경 내에 플레이어가 존재하는 경우 추적하는 코드입니다.


스크립트 (보라색 큐브에 적용시킨 스크립트)
    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가지 방법 이외에도 다양한 방식으로 구현이 가능하며 
다음은 좀 더 좋은 정보로 찾아오겠습니다. 

반응형