-
240426~240503 파트너 캐릭터 위치를 나타내는 UI (2)기록 2024. 5. 4. 15:55
목표 : 다른 캐릭터(파트너)위치를 나타내는 UI를 만들기
- 위젯 만들기 (완료)
- 플레이어에 위젯 컴포넌트로 붙이기 (완료)
- 거리에 따라 위젯 on/off기능 (완료)
- 화면 랜더링 여부에 따라 on/off기능 + 랜더링이 되지 않을 때 화면에서 방향을 가르키도록 하기(진행 중)
4. 화면 랜더링 여부에 따라 on/off기능 + 랜더링이 되지 않을 때 화면에서 방향을 가르키도록 하기
고민됐던 점
1. 화면 랜더링 여부 확인하기(완료)
2. 랜더링 되지 않았을 때 화면에 어떻게 표현할 것인지.
// Get the player's viewport size int32 ViewportX, ViewportY; _PlayerController->GetViewportSize(ViewportX, ViewportY);
1. 조종하는 플레이어의 ViewPort사이즈를 가져온다.
ViewportX, ViewportY에 정보를 담아 리턴해준다.
APlayerController::GetViewportSize
Helper to get the size of the HUD canvas for this player controller. Returns 0 if there is no HUD
docs.unrealengine.com
// Convert the actor's location to screen space FVector2D ActorScreenPosition; if (!_PlayerController->ProjectWorldLocationToScreen(GetComponentLocation(), ActorScreenPosition)) { return false; // Failed to project actor's location to screen space }
2. 위젯 컴포넌트를 World공간에서 View공간으로 이동한 위치정보를 가져오는 함수를 이용하였다.
ActorScreenPosition에 컴포넌트 위치를 담아 리턴해준다.
APlayerController::ProjectWorldLocationToScreen
Convert a World Space 3D position into a 2D Screen Space position.
docs.unrealengine.com
// 화면 안에 존재할 때 if ((ActorScreenPosition.X >= 0 && ActorScreenPosition.X <= ViewportX && ActorScreenPosition.Y >= 0 && ActorScreenPosition.Y <= ViewportY)) { UE_LOG(LogTemp, Display, TEXT("rendering")); return true; } else // 화면 밖으로 나갔을 때 { UE_LOG(LogTemp, Display, TEXT("not rendering%f %f"), ActorScreenPosition.X, ActorScreenPosition.Y); return false; }
3. Viewport와 ActorScreenPosition를 통해 화면에 랜더링하는지 여부를 확인한다.
로그를 통해 확인!
다른 플레이어(파트너)가 보이면 rendering을, 화면 프로젝션 뷰에 존재하지 않는경우 not rendering을 로그를 통해 확인할 수 있다.
'기록' 카테고리의 다른 글
240426~240503 플레이어 HP UI 디테일 추가 (0) 2024.05.04 240426~240503 파트너 캐릭터 위치를 나타내는 UI (3) (0) 2024.05.04 240426~240503 파트너 캐릭터 위치를 나타내는 UI (1) (0) 2024.05.04 240418 플레이어 RPC를 사용하여 사이즈 변경 동기화 (0) 2024.04.21 240418 플레이어 오프셋 변경 (0) 2024.04.21