반응형
728x170
안녕하세요 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가지 방법 이외에도 다양한 방식으로 구현이 가능하며
다음은 좀 더 좋은 정보로 찾아오겠습니다.
반응형
그리드형
'유니티실습' 카테고리의 다른 글
유니티 체력게이지 제어하기 (0) | 2020.05.01 |
---|---|
유니티 스크롤이동 (0) | 2020.04.29 |
유니티 카메라 플레이어 추적하기 (0) | 2020.04.28 |
유니티 프로젝트 파일불러오기 (0) | 2020.04.27 |
유니티 광고적용하기 애드몹 (0) | 2020.04.26 |