inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tìm hiểu những điều cơ bản về Unity của Tiến sĩ Ko bằng cách làm theo

Ứng dụng lưới điều hướng (15:47)

NavigationMesh 응용 질문있어요

492

rcnpa12414

1 câu hỏi đã được viết

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

Câu trả lời 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