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)

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

18

zeris

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

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

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