플레이어가 클릭한 지점으로 이동하는데, 건물도 오르고 있다.
Package Manager에서 AI Navigation을 설치한다.
Navigation (Obsolete)를 선택.
Bake를 누르면 다음과 같이 갈 수 있는 지역들이 하늘색으로 뜬다.
Plants의 Static을 해제하고, 기울기 값을 조절하여 다음과 같이 수정할 수 있다.
더는 지붕을 올라가지 않게 되었다.
단 다음과 같이 건물 안을 클릭한다면 뛰는 것을 멈추지 않는다.
unity chan에 Nav Mesh Agent를 붙인다.
void UpdateMoving()
{
Vector3 dir = _destPos - transform.position;
if (dir.magnitude < 0.0001f)
_state = PlayerState.Idle;
else
{
// NavMeshAgent를 사용한 이동
NavMeshAgent nma = gameObject.GetOrAddCompoent<NavMeshAgent>();
float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);
nma.Move(dir.normalized * moveDist);
// Block과 충돌시 멈춘다.
Debug.DrawRay(transform.position + Vector3.up * 0.5f, dir.normalized, Color.green);
if (Physics.Raycast(transform.position + Vector3.up * 0.5f, dir, 1.0f, LayerMask.GetMask("Block")))
{
_state = PlayerState.Idle;
return;
}
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 10 * Time.deltaTime);
}
PlayerController.cs에서 UpdateMoving() 함수의 코드를 변경하였다.
NavMeshAgent 컴포넌트에 접근하여 Move 함수를 통해 플레이어를 이동시켰다.
그리고 건물과 장애물의 Mask를 Block으로 설정하였다.
플레이어에서 나오는 Ray가 Block이라는 Mask를 가진 물체와 충돌하면 캐릭터가 멈추게 된다.