inflearn logo
강의

Course

Instructor

Learn Unity Basics with Dr. Koh by following along

Navigation Mesh Application (15:47)

02-02 NavMesh 응용 캐릭터 멈춤 문제

18

zeris

3 asked

0

강의 너무 이해가 잘돼요 감사합니다

캐릭터가 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;
    }
}

unity

Answer 1

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

제리스님, 강의를 통해 네비게이션 메쉬와 관련된 부분을 잘 따라오고 계시네요. 하지만 현재 코드에서 캐릭터가 예상한 동작을 하지 않고 멈추는 문제가 발생한 것 같군요.

현재 제공해 주신 코드에서는 캐릭터가 OffMeshLink를 만나면 ClimbOrDescend 코루틴을 통해 행동을 시작하게 되어 있습니다. 이 문제점을 해결하기 위한 몇 가지 점검 사항을 알려드리겠습니다:

  1. OffMeshLink 설정 확인: 코드상에서 offMeshArea가 설정된 값이 실제 OffMeshLink의 area ID와 일치하는지 확인해 보세요. 설정이 올바르지 않으면 IsOnClimb()가 항상 false를 반환하여 문제를 일으킬 수 있습니다.

  2. NavMeshAgent 상태 확인: 코드 내에서 navMeshAgent의 다른 상태들이 올바르게 설정되어 있는지도 중요합니다. 예를 들어, navMeshAgent.enabled가 true인지, 현재 OffMeshLink에 접근이 가능한 상태인지 확인해야 합니다.

  3. 디버깅: IsOnClimb() 메서드 내에 Debug.Log를 추가하여 조건문이 올바르게 평가되고 있는지, 즉 코드가 기대하는 대로 진행되는지를 확인하십시오.

  4. 다른 로직 인터페이스: 혹시 프로젝트 내 다른 스크립트가 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