[UE5] Cpp Multiplay Game <Cop And Robber> #7

_ dfdeer·2025년 10월 2일

Cop And Robber

목록 보기
7/7

이전 내용 버그 수정

이전에 만든 스폰 볼륨은 박스 내 정확한 XY 좌표에 스폰이 됐었다.

그리고 고저차 때문에 Z 좌표 보정을 두었더니 건물이나 울타리 등 다른 액터 위에 스폰되기도 하는 버그가 있었다.

그래서 이번엔 스폰 볼륨 내에 AI 나 캐릭터를 스폰하는 NavMesh 를 찾아 그 위에만 깔리도록 수정하려고 한다.

...

#include "NavigationSystem.h"

...

ACRItemBase* ACRItemSpawnVolume::SpawnItem()
{
	...
    
    // 추가된 내용
	FVector NavXY = XY;
	if (UNavigationSystemV1* NavSys = FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld()))
	{
		const ANavigationData* NavData = NavSys->GetDefaultNavDataInstance(FNavigationSystem::DontCreate);
		const FVector QueryExtent(100.f, 100.f, TraceUp + TraceDown);
		
		FNavLocation NavLoc;
		if (NavData && NavSys->ProjectPointToNavigation(XY, NavLoc, QueryExtent, NavData))
		{
			NavXY = NavLoc.Location;
		}
		else
		{
			return nullptr;
		}
	}
	// 추가 내용 끝
    
	FHitResult Hit;
	if (!FindGroundedLocation(NavXY, Hit)) return nullptr; // XY 대신 NavXY 로
}

...

기존에 랜덤하게 가져온 XY 좌표를 수정 가능한 새로운 FVector 변수 NavXY 에 담아준다.

이후 월드에 있는 Nav 시스템을 가져와 NavData 로 담아주고,
Z 좌표 범위를 미리 정적 변수로 선언해둔 값으로 보정해준다.

마지막으로 NavMesh 의 좌표를 가져와서 이전에 만들어둔 스폰 좌표를 찾는 함수 FindGroundedLocation() 함수에 XY 대신 NavXY 좌표를 넣어주면 된다.

0개의 댓글