NavigationMesh 응용 질문있어요
492
1 câu hỏi đã được viết
해당 그림처럼 플레이어 오브젝트가 더이상 움직이지 않게됩니다...
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;
}
}
스크립트를 정말 똑같이 적었는데도 이런 이유를 모르겠어요 ...
Câu trả lời 1
0
스크립트가 정말 똑같이 작성되어 있다면 사다리의 시작, 종료 지점으로 사용하는 오브젝트 위치를 확인해보세요.
혹시라도 두 지점이 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

