8. 적 탱크 따라오기(1)(2)

MOON·2022년 7월 11일
0
post-thumbnail

적 탱크 따라오기(1)

아군의 Tag값 변경
Tag에 “Target”을 추가하고, 아군 탱크의 Tag를 “Target”으로 변경

우선 적 탱크를 1대만 살려두고 테스트 한다. 나머지 탱크들은 Hirerachy 창에서 없애도록 한다.

Enemy.cs에서 필요한 변수, 코드들을 수정한다.

총알, 회전, 위치 등 필요한 변수들을 선언한다.

GameObject.FindGameObjectWithTag("Target")를 통해 태그가 Target인 오브젝트를 찾습니다. GetComponent를 통해 위치를 가져옵니다.

플레이어 위치와 적탱크에 위치 사이를 프레임마다 계산합니다.
fTime += Time.deltaTime; 을 통해 총알 발사할 시간을 구합니다.

if 가정문을 사용하여 거리가 15.0f미만이면 따라오게 하고 중복 if문을 통해 시간이 0.5f가 지나면 총알을 발사하고 시간을 0으로 초기화 시킵니다.

this.transform.LookAt(target.transform.position);
amtToRot = rotAngle * Time.deltaTime;
transform.RotateAround(Vector3.zero, Vector3.up, amtToRot);
this.transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * moveSpeed/2);

위 코드를 적 탱크 따라오기 구현에 적어주면 된다.
여기서 Lerp()함수는 시작위치, 목표위치, 0~1사이 숫자로 구성됨, 1에가까울수록 더 빨라진다.(두 벡터 사이의 시간에 따른 위치)

GameObject obj = Instantiage(bullet) as GameObject;
obj.transform.position = spPoint.transform.position;
obj.GetComponent<Rigidbody>().AddForce(direction * power);

위 코드를 총알 생성 부분에 적어주면 된다.
총알 프리팹을 복제하고 위치를 spPoint로 저장한 뒤
Rigidbody 컴포넌트를 가져온후 AddForce를 통해 발사를 한다.


여기까지 적 탱크따라오기 1번째 방법이다.


적 탱크 따라오기(2)

네비게이션 기능
유니티에서 제공하는 따라가기 기능
Plane을 선택하고 Navigation Static 을 선택

네비게이션 베이크
Floor를 선택
메뉴 - Windows - AI - Navigation
씬 뷰가 베이크 된것을 확인할 수 있음

적 탱크를 선택한후 Nav Mesh Agent 컴포넌트를 검색 후 설치한다.

Stopping Distance - 한 없이 따라오는것이 아니라 일정 간격을 두고 멈춤
본인이 적절하게 설정하면 된다.

Enemy.cs를 수정해보자.

Nav Mesh Agent 컴포넌트를 사용하려면 using UnityEngine.AI; 를 적어주어야 한다.
nvAgent를 GetComponent를 통해 NavMeshAgent를 가져온다.

AI의 목적지를 타겟의 위치로 설정하면 이동이 가능하다.

이것으로 2가지 방법을 알아봤다.

profile
나만의 공간

0개의 댓글