02-02 NavMesh 응용 캐릭터 멈춤 문제
16
投稿した質問数 3
강의 너무 이해가 잘돼요 감사합니다
캐릭터가 offMeshLink 앞에서 멈춥니다. 그 상태에서는 아무것도 안하고 그 자리에 가만히 있습니다.
앞에분이랑 비슷한 상황인데 점프도 안되고 아래로 떨어지는 거, 사다리타는거 다 안 돼요.
시작, 종료 지점 위치도 navigation 범위 안에 잘 있습니다
전에는 잘 됐는데 사다리 코드를 작성하니까 이렇게 됐어요
using System.Collections;
using UnityEngine;
using UnityEngine.AI;
public class OffMeshLinkClimb : MonoBehaviour
{
[SerializeField]
private int offMeshArea = 3;
[SerializeField]
private float climbSpeed = 1.5f;
private NavMeshAgent navMeshAgent;
private void Awake()
{
navMeshAgent = GetComponent<NavMeshAgent>();
}
IEnumerator Start()
{
while ( true )
{
// IsOnClimb() 함수의 반환 값이 true 일 때
yield return new WaitUntil(() => IsOnClimb());
// 올라가거나 내려가는 행동
yield return StartCoroutine(ClimbOrDescend());
}
}
public bool IsOnClimb()
{
// 현재 오브젝트의 위치가 OffMeshLink 에 있는지
if ( navMeshAgent.isOnOffMeshLink )
{
// 현재 위치에 있는 OffMeshLink 의 데이터
OffMeshLinkData linkData = navMeshAgent.currentOffMeshLinkData;
// 현재 OffMeshLinkData 가 true 면 수동 OffMeshLink, false 면 자동 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초 뒤에 1퍼센트가 되기 때문에 climbTime 변수를 연산해서 시간을 조절
currentTime += Time.deltaTime;
percent = currentTime / climbTime;
// 시간 경과에 따라 오브젝트 위치 변경
transform.position = Vector3.Lerp(start, end, percent);
yield return null;
}
// OffMeshLink 를 이용한 이동 완료
navMeshAgent.CompleteOffMeshLink();
// 내비게이션 이동 다시 시작
navMeshAgent.isStopped = false;
}
}
回答 1
1
안녕하세요, 인프런 AI 인턴입니다.
제리스님, 강의를 통해 네비게이션 메쉬와 관련된 부분을 잘 따라오고 계시네요. 하지만 현재 코드에서 캐릭터가 예상한 동작을 하지 않고 멈추는 문제가 발생한 것 같군요.
현재 제공해 주신 코드에서는 캐릭터가 OffMeshLink를 만나면 ClimbOrDescend 코루틴을 통해 행동을 시작하게 되어 있습니다. 이 문제점을 해결하기 위한 몇 가지 점검 사항을 알려드리겠습니다:
OffMeshLink 설정 확인: 코드상에서
offMeshArea가 설정된 값이 실제OffMeshLink의 area ID와 일치하는지 확인해 보세요. 설정이 올바르지 않으면IsOnClimb()가 항상 false를 반환하여 문제를 일으킬 수 있습니다.NavMeshAgent 상태 확인: 코드 내에서
navMeshAgent의 다른 상태들이 올바르게 설정되어 있는지도 중요합니다. 예를 들어,navMeshAgent.enabled가 true인지, 현재OffMeshLink에 접근이 가능한 상태인지 확인해야 합니다.디버깅:
IsOnClimb()메서드 내에Debug.Log를 추가하여 조건문이 올바르게 평가되고 있는지, 즉 코드가 기대하는 대로 진행되는지를 확인하십시오.다른 로직 인터페이스: 혹시 프로젝트 내 다른 스크립트가
NavMeshAgent를 제어하고 있지 않은지도 확인하면 좋습니다. 다른 스크립트가isStopped = true로 설정하고 있을 경우 이동이 중지될 수 있습니다.
문제가 여전히 해결되지 않는 경우, 해당 게시물에서 해당 문제를 유사한 이슈로 고민하던 질문자의 답변이 도움될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
02-02 NavMesh 응용 캐릭터 멈춤 문제
0
20
2
03-01 (16. CharacterController)
0
54
2
05-02 실습에서 마지막 부분을 해보니 죽는 키를 누르면 die 가 두번 재생됩니다
0
74
2
02. 게임오브젝트 물리와 충돌 마지막 sun예제의 움직임
0
153
2
유니티3d 기초 하고 있는데. 따라하기가 전혀 안됩니다.
0
237
1
강의보다가 문득 궁금한게 있어서 여쭤봅니다.
0
340
1
다른 강의도 듣고 싶어요
0
301
1
2D Tilemap Editor 2:00에서요
0
392
2
제가 3d 멀미가 있어서 2D게임만 만들 생각인데요
0
333
1
게임오브젝트 삭제함수에서 질문이요
0
202
1
Instantiate() 활용 예제에서 11:30의 예제 질문이요
0
245
1
3D 네비게이션 메시 질문요(유니티 버전이 최근버전이라 잘 진행이 안되네요)
0
834
2
2D Basic 6강, 2D-Extras에서 애먹고있습니다.
0
433
1
사다리 밑으로 이동이 안 돼요
0
307
1
총알이 나가지 않습니다.
0
396
2
게임 월드로 배치되는 바닥, 장애물이 “Navigation Static”으로 설정이 안됩니다..
1
716
1
강의자료 다운로드가 가능할까요?
0
596
1
수업자료 버튼이 안보입니다
0
514
2
총알이 player 뒤로 나가게하려면 따로 설정이 필요한가요?
0
526
1
총알이 player 뒤로 생성되게 따로 설정이 필요한가요?
0
273
1
[asset] 이 로딩이 안되는 이유
0
828
1
used by composite 항목이 없어요
0
866
1
강의 자료를 다운받고 싶습니다.
0
514
1
23년인 지금 들어도 버전문제는 없을까요
0
592
1

