This document is about: QUANTUM 2
SWITCH TO

Navigation 샘플

Level 4

개요

샘플에는 유니티 씬으로 잘 구분된 일반적이고 간단한 Navmesh 및 항법 에이전트 설정이 포함되어 있습니다. Quantum 탐색이 제공하는 기능을 확인하기 시작하는 데 이상적인 시작점입니다. Navigation 매뉴얼도 반드시 준비하시기 바랍니다.

씬은 탐색 워크플로우 및 구현의 한 측면을 보여주기 위해 준비되었습니다.

유니티 재생 플레이 옆에 있는 씬 선택 드롭다운 UI를 사용하여 샘플 씬을 탐색합니다.
scene selection drop down
씬에는 간단한 텍스트 설명 UI와 게임 객체, 에셋 및 소스 코드 파일에 대한 링크가 표시되어 관련 객체를 빠르게 선택할 수 있습니다. 유니티의 씬 또는 게임 뷰에 있는 링크를 클릭해 보십시오.
2d sample screenshot

다운로드

버전 릴리즈 일자 다운로드
2.1.0 2022년 9월 15일 Navigation 샘플 2.1.0 빌드 22

기술 정보

  • 유니티 2021.3.8f1 또는 그 이상이 필요합니다.

설명

1) 간단한 수평 중간 지점으로 가는 2D 탐색

이 샘플은 2D 변환 컴포넌트를 가진 에이전트가 자동으로 중간 지점에서 중간 지점으로 이동하고 임의로 방향을 조정하는 데 사용하는 간단한 navmesh를 보여줍니다.

에이전트에 경유지 목록이 고정된 에셋에 대한 참조가 있습니다. 또한 다음에 찾을 경유지를 결정하는 색인도 있습니다. Navmesh를 사용하여 경유지에 도달하면 이 인덱스는 다음 경유지로 증가합니다.

C#

var path = f.FindAsset<Waypoints>(wayPoints->Path.Id);
var navmesh = f.FindAsset(wayPoints->Navmesh);

wayPoints->CurrentPointIndex += 2;
wayPoints->CurrentPointIndex = wayPoints->CurrentPointIndex % path.Points.Length;
var point = path.Points[wayPoints->CurrentPointIndex];

// Randomize the next waypoint position a bit before set target

if (navmesh.FindRandomPointOnNavmesh(point, FP._2, f.RNG, *f.NavMeshRegionMask, out var result)) {
    point = result;
}
pathFinder->SetTarget(f, result, navmesh);

WayPointSystem.csWayPointComponents.qtn의 전체 구현 코드를 보시려면 Quantum Code 프로젝트를 오픈합니다.

WaypointBaker 게임 객체의 웨이포인트를 씬에서 직접 변경하여 WaypointsAsset에 구워지는 웨이포인트를 추가하거나 변경할 수 있습니다. 그런 다음 MapData 게임 개체에서 BakeAll을 클릭하여 레벨, 네비메쉬 및 웨이포인트 에셋을 다시 베이킹합니다.

2d sample screenshot
게임 도움말 및 설명을 사용하여 유니티 객체 및 샘플 소스 코드 파일을 빠르게 탐색할 수 있습니다.

2) 기본 3D 캐릭터 컨트롤러를 사용한 내비게이션

이 샘플은 클릭하여 3D 레벨을 레이캐스트할 때 전송되는 Quantum Command를 사용하여 에이전트를 조종하는 방법을 보여줍니다. 스티어링 시스템은 기본 캐릭터 컨트롤러 3D를 사용하여 명령에 의해 전송된 위치로 에이전트를 이동합니다.

C#

var navmesh = f.Map.NavMeshes["MapNavMeshUnity"];
if (f.Unsafe.TryGetPointer(filter.EntityRef, out NavMeshPathfinder* pathFinder)) {
    pathFinder->SetTarget(f, command.ClickPosition, navmesh);
}

Quantum Code 프로젝트를 열어 KCCMovementSystem.csKCCPlayer.qtn의 전체 구현을 확인합니다. KCCController3D 구성을 편집하여 에이전트 이동을 조정할 수 있습니다.

navigation scene gizmos
탐색 씬 기즈모를 설정합니다.

노트: 예를 들어, 이동 제어에 Quantum 명령을 사용하는 것은 Moba와 유사한 입력을 구현하는 권장 방법이 아닙니다(명령은 신뢰할 수 있는 것만 실행하고 서버에 대한 RTT가 필요합니다. 자세한 내용은 Quantum Moba 샘플을 참조하십시오).

이 샘플은 OnlineMenu를 사용하여 시작할 때 추가 아바타를 생성합니다. Quantum 엔티티 프로토타입은 MapNameInfo의 맵의 UserData에서 설정됩니다.

3) 사용자 지정 스티어링 콜백을 사용한 내비게이션

이 샘플은 경로 찾기 및 내부 웨이포인트 감지 로직을 유지하면서 기본 Navmesh 에이전트 스티어링 로직을 재정의하는 방법을 보여줍니다.

노트: 상세 내용은 Using Navmesh 에이전트 콜백 사용하기를 참고하세요.

이 방법은 캐릭터 이동 및 스티어링에 기본 내비게이션 스티어링 매개 변수로 구성할 수 없는 게임별 특성이 필요한 경우 권장되는 방법입니다. 이를 위한 운동에이전트 구성의 유형이 CallbackMovementAgentConfig 내의 Callback으로 설정됩니다.

navigation scene gizmos
To

사용자 지정 스티어링 논리는 CallBackMovementKCC 구성에서 지원하는 기본 캐릭터 컨트롤러를 사용하여 대상을 향해 이동하고 이동합니다. 자세한 내용을 보려면 CallBackMovementSystem.cs 시스템을 엽니다.

이 샘플은 Navmesh 링크를 사용하여 하나의 Navmesh의 두 부분을 연결하는 방법을 보여주며 에이전트가 abism을 점프할 수 있습니다. OnNavMeshWaypointReached 콜백에서 링크가 WaypointFlag를 사용하기 시작하는 시점을 알 수 있습니다. JumpOffSystem.cs 은 에이전트가 링크에 접근하면 등록하고 점프 "시작"을 트리거합니다.

C#

if (waypointFlags.HasFlag(Navigation.WaypointFlag.LinkStart)) {

    if (f.Unsafe.TryGetPointer<NavMeshPathfinder>(entity, out var pathfinder) &&
        f.Unsafe.TryGetPointer<CharacterController3D>(entity, out var character)) {

            var linkTargetDirection = (pathfinder->GetWaypoint(f, pathfinder->WaypointIndex + 1) - waypoint).Normalized;
            character->Velocity = linkTargetDirection * character->Velocity.Magnitude;
            character->Jump(f);
    }
}

노트: 상세 내용은 Navmesh Off Mesh Links 사용을 참고하세요.

Quantum navmesh 베이킹은 유니티 씬에 배치된 Unity OffMeshLinks를 Quantum navmesh 링크로 변환합니다(장면의 OffMesh 게임 객체 참조).

jump animation
점프 "애니메이션"을 사용하여 Off-Mesh 링크를 사용하여 Navmesh의 다른 부분을 번갈아 사용합니다.

이 샘플은 navmesh 영역을 전환하여 레벨에서 브리지를 활성화하는 방법을 보여줍니다. 플레이 모드 중에 녹색 버튼을 클릭하면 탐색 메시 영역이 동적으로 켜지거나 꺼집니다.

region toggle gif
Navmesh(Quantum navmesh 영역)의 일부를 동적으로 활성화 및 비활성화하고 에이전트에 미치는 영향을 확인합니다.

실행 중에 navmesh의 일부를 활성화 및 비활성화하기 위해 Quantum 명령이 실행됩니다(게임 씬의 ButtonFirst 게임 객체 참고). 명령이 영역의 이름을 전송하고 시뮬레이션이 해당 값을 전환합니다.

C#

 var region = f.Map.RegionMap[Name];

// Enable or disable the navmesh region based on region name

f.NavMeshRegionMask->ToggleRegion(region, !f.NavMeshRegionMask->IsRegionEnabled(region));
f.Events.SetupButtonState(Name, f.NavMeshRegionMask->IsRegionEnabled(region));

// Sends a signal to agents repath

f.Signals.OnRegionChanged();

Navmesh 영역은 navmesh로 베이킹됩니다. 플레이 모드 중에 씬 보기를 열어 다른 색으로 채색된 namesh 영역을 확인하고 비활성화 시 회색으로 표시합니다. EditorSettings에서 Draw Nav Mesh를 활성화해야 합니다.

노트: 상세 내용은 Navmesh Off Mesh Links 사용을 참고하세요.

MapNavMeshRegion.cs 스크립트는 영역을 Quantum 영역으로 표시하고 영역 이름을 선택하는 데 사용됩니다 (FirstRegion 게임 오브젝트 참고).

Back to top