본문 바로가기
유니티 공부/Unity

Unity - NavMeshAgent를 사용해서 게임오브젝트를 랜덤으로 움직여보기

by 코딩하는 돼징 2023. 8. 2.
반응형

1. 돌아다닐 영역 설정

01 Window - Navigation 클릭


02 Object - Navigation Static 클릭


03 Bake탭에 들어가서 Bake누르면 영역 설정 완료


04 움직일 GameObject에 NavMeshAgent 추가

Base Offset, Height등 조절하기


2. 랜덤으로 돌아다니기

01 현재 게임 오브젝트에 부탁된 NavMeshAgent 컴포넌트를 찾아 agent변수에 할당

NavMeshAgent agent;
private void Start()
{
    agent = GetComponent<NavMeshAgent>();
}

02 동물이 목적지에 도착하거나 경로를 탐색중이지 않을때만 돌아다니게 하기

if (!agent.pathPending && agent.remainingDistance < 0.5f)

 

NavMeshAgent 알아보러 가기

 

Unity - NavMeshAgent

NavMeshAgent NavMesh위에서 경로를 계산하고 이동하는데 사용된다. NavMesh는 이동가능한 경로를 나타내며 NavMeshAgent는 이 경로를 이동할 수 있도록 도와준다. 프로퍼티 01 destination NavMeshAgent가 이동하

code-piggy.tistory.com


동물 랜덤한 위치로 이동시키기

Vector3 randomDirection = Random.insideUnitSphere * 5f;
randomDirection += transform.position;

03 랜덤으로 회전 시키기

float randomYRotation = Random.Range(0f, 360f);
Quaternion randomRotation = Quaternion.Euler(0f, randomYRotation, 0f);

transform.rotation = randomRotation;

04 새로운 도착지 설정

NavMeshHit hit;
NavMesh.SamplePosition(randomDirection, out hit, 10f, NavMesh.AllAreas);

Vector3 targetPos = hit.position;
agent.SetDestination(targetPos);

3. coolDown 설정

01 coolDown 시간 설정

[SerializeField] float cooldownTime;
float cooldownTimer;

02 랜덤으로 coolDown 설정

private void Start()
{
    cooldownTimer = Random.Range(0, cooldownTime);
}

03 coolDown타이머가 아직 남아 있는 경우 못 걸어다니게 하기

 if (cooldownTimer > 0)
{
    cooldownTimer -= Time.deltaTime;
    return;
}

04 coolDown타이머 갱신

 cooldownTimer = cooldownTime;

4. 결과 영상

 

 

 

 

 

반응형

댓글