All Honey Tip

[Unity Tip] 2. Target 겨냥하기 (1-1)

수정 일:

발행 일:

target

Unity 게임 개발을 하시는 분이라면, 몬스터, 혹은 물체를 인식하여 자동으로 Aim Targeting하는 상황을 생각보다 자주 마주합니다. 그렇다면, 어떻게 물체가 타겟을 겨냥하는지 Tower 오브젝트를 활용해 간단히 배워보도록 하겠습니다.

[유니티 URP에서 분홍 프리팹 해결하는 방법]




물리적 충돌 Collider 오브젝트 생성하기

image 6

우선 Zone1이라는 오브젝트를 Tower prefab안에 만들어줍니다.

image 7

Zone1의 속성값은 위 사진처럼, 스피어 콜라이더와 하나의 스크립트를 생성하여 적용 시켜 줍니다.



생성한 스크립트 작성하기

using UnityEngine;
using System.Collections;

public class TowerTrigger : MonoBehaviour {
    public Tower twr;    
    public bool lockE;
    public GameObject curTarget;


    void OnTriggerEnter(Collider other) {
        if(other.CompareTag("enemyBug") && !lockE) {   
            twr.target = other.gameObject.transform;            
            curTarget = other.gameObject;
            lockE = true;
        }

    }
 
    void Update() {
        if (curTarget) {
            if (curTarget.CompareTag("Dead")) // get it from EnemyHealth
            {
                lockE = false;
                twr.target = null;               
            }
        }


        if (!curTarget) 
{
            lockE = false;            
        }
    }

    void OnTriggerExit(Collider other)
 {
        if(other.CompareTag("enemyBug") && other.gameObject == curTarget)
 {
            lockE = false;
            twr.target = null;            
        }
    }
}

위 내용을 살펴보면, OnTriggerEnter 함수 내 enemyBug의 태그를 가진 오브젝트, 혹은 lockE의 변수가 False일 시 lockE를 True로 변환해 주며, Tower 오브젝트의 타겟을 other, 즉 enemyBug 오브젝트로 설정해 줍니다.

프레임당 한번 호출되는 Update 함수에서는, enemyBug의 태그가 Dead로 변할 시 lockE를 false로 초기화 시켜주며, Tower 오브젝트의 타겟을 null로 초기화 시켜줍니다.

OnTriggerExit(enemyBug 오브젝트가 Tower collider를 빠져나갈 시 실행되는 함수)에서는, 만약 빠져나간 오브젝트가 enemyBug일시 lockE를 false로 변환하여 위와 같이 타워의 타겟 및 락을 초기화 시켜줍니다.

image 8


마지막으로 Twr(타워)에는 Tower 오브젝트를 drag & drop으로 넣어줍니다.

지금까지 Tower 프리팹 안에 생성한 콜라이더 용 오브젝트 설정법을 알아봤습니다. 다음 글에서는 Tower의 설정법을 알아보도록 하겠습니다.