Unity에서 Target 겨냥하기
Unity 게임 개발을 하시는 분이라면, 몬스터, 혹은 물체를 인식하여 자동으로 Aim 및 Targeting하는 상황을 생각보다 자주 마주합니다. 그렇다면, 어떻게 물체가 타겟을 겨냥하는지 Tower 오브젝트를 활용해 간단히 배워보도록 하겠습니다.
물리적 충돌 Collider 오브젝트 생성하기
우선 Zone1이라는 오브젝트를 Tower prefab안에 만들어줍니다.
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로 변환하여 위와 같이 타워의 타겟 및 락을 초기화 시켜줍니다.
마지막으로 Twr(타워)에는 Tower 오브젝트를 drag & drop으로 넣어줍니다.
마치며
지금까지 Tower 프리팹 안에 생성한 콜라이더 용 오브젝트 설정법을 알아봤습니다. 다음 글에서는 Tower의 설정법을 알아보도록 하겠습니다.
답글 남기기