inflearn logo
강의

Course

Instructor

Learn Unity Basics with Dr. Koh by following along

Navigation Mesh Application (15:47)

NavigationMesh 응용 질문있어요

492

rcnpa12414

1 asked

0

해당 그림처럼 플레이어 오브젝트가 더이상 움직이지 않게됩니다...

 

using System.Collections;

using UnityEngine;

using UnityEngine.AI;

public class OffMeshLinkClimb : MonoBehaviour

{

[SerializeField]

private int offMeshArea = 3; //오프메시 구역 ( Climb)

[SerializeField]

private float climbSpeed = 1.5f; //오르내리는 이동 속도

private NavMeshAgent navMeshAgent;

private void Awake()

{

navMeshAgent = GetComponent<NavMeshAgent>();

}

IEnumerable Start()

{

while (true)

{

// IsOnClimb() 함수의 반환 값이 true일 때 까지 반복 호출

yield return new WaitUntil(() => IsOnClimb());

// 올라가거나 내려오는 행동

// 위에가 true 가 되면 ClimbOrDescend() 가 실행된다

yield return StartCoroutine(ClimbOrDescend());

}

}

public bool IsOnClimb()

{

// 현재 위치에 있는 OffMeshLink에 있는지 ( true / false )

if (navMeshAgent.isOnOffMeshLink)

{

// 현재 위치에 있는 OffMeshLink의 데이

OffMeshLinkData linkData = navMeshAgent.currentOffMeshLinkData;

//설명 : navMeshAgent.currentOffMeshLinkData.offMeshLink 가

// true 이면 수동으로 생성한 OffMeshLink

// false 면 자동으로 생성한 OffMeshLink

// 현재 위치에 잇는 OffMeshLink가 수동으로 생성한 OffMeshLink 이고, 장소 정보가 "Climb"이면

if ( linkData.offMeshLink != null && linkData.offMeshLink.area == offMeshArea)

{

return true;

}

}

return false;

}

private IEnumerator ClimbOrDescend()

{

// 네비게이션을 이용한 이동을 잠시 중지한다

navMeshAgent.isStopped = true;

// 현재 위치에 있는 OffMeshLink의 시작 / 종료 위치

OffMeshLinkData linkData = navMeshAgent.currentOffMeshLinkData;

Vector3 start = linkData.startPos;

Vector3 end = linkData.endPos;

// 오르내리는 시간 설정

float climbTime = Mathf.Abs(end.y - start.y) / climbSpeed;

float currentTime = 0.0f;

float percent = 0.0f;

while ( percent < 1)

{

// 단순히 deltaTime만 더하면 무조건 1초 후에 percent가 1이 되기 때문에

// climbTime 변수를 연산해서 시간을 조절한다

currentTime += Time.deltaTime;

percent = currentTime/climbTime;

// 시간 경과(최대 1) 에 따라 오브젝트의 위치를 바꿔준다

transform.position = Vector3.Lerp(start, end, percent);

yield return null;

}

// OffMeshLink를 이용한 이동 완료

navMeshAgent.CompleteOffMeshLink();

// OffMeshLink 이동이 완료되었으니 네비게이션을 이용한 이동을 다시 시작한다

navMeshAgent.isStopped = false;

}

}

 

스크립트를 정말 똑같이 적었는데도 이런 이유를 모르겠어요 ...

unity

Answer 1

0

unitynote

스크립트가 정말 똑같이 작성되어 있다면 사다리의 시작, 종료 지점으로 사용하는 오브젝트 위치를 확인해보세요.

혹시라도 두 지점이 Navigation 범위 안에 있지 않다면 저렇게 이동하지 못하고 멈춰버립니다.

이동 가능한 경로 안에 OffMeshLink에 사용하는 이동 지점들이 있어야 합니다.

03-01 (16. CharacterController)

0

23

2

05-02 실습에서 마지막 부분을 해보니 죽는 키를 누르면 die 가 두번 재생됩니다

0

64

2

02. 게임오브젝트 물리와 충돌 마지막 sun예제의 움직임

0

136

2

유니티3d 기초 하고 있는데. 따라하기가 전혀 안됩니다.

0

231

1

강의보다가 문득 궁금한게 있어서 여쭤봅니다.

0

331

1

다른 강의도 듣고 싶어요

0

297

1

2D Tilemap Editor 2:00에서요

0

386

2

제가 3d 멀미가 있어서 2D게임만 만들 생각인데요

0

324

1

게임오브젝트 삭제함수에서 질문이요

0

192

1

Instantiate() 활용 예제에서 11:30의 예제 질문이요

0

239

1

3D 네비게이션 메시 질문요(유니티 버전이 최근버전이라 잘 진행이 안되네요)

0

822

2

2D Basic 6강, 2D-Extras에서 애먹고있습니다.

0

425

1

사다리 밑으로 이동이 안 돼요

0

300

1

총알이 나가지 않습니다.

0

390

2

게임 월드로 배치되는 바닥, 장애물이 “Navigation Static”으로 설정이 안됩니다..

1

706

1

강의자료 다운로드가 가능할까요?

0

589

1

수업자료 버튼이 안보입니다

0

504

2

총알이 player 뒤로 나가게하려면 따로 설정이 필요한가요?

0

520

1

총알이 player 뒤로 생성되게 따로 설정이 필요한가요?

0

267

1

[asset] 이 로딩이 안되는 이유

0

819

1

used by composite 항목이 없어요

0

856

1

강의 자료를 다운받고 싶습니다.

0

506

1

23년인 지금 들어도 버전문제는 없을까요

0

583

1

제 비주얼스튜디오는 연녹색 글씨로 안보이고 일반 흰색글씨로 보여요...

0

994

1