기본적으로 뷰포트의 크기는 현재 게임 화면이다 그 중 제일 보편적인건 fhd 1920 x 1080이다.
UI의 위치를 지정할 수 있는 방법이 두 가지가 존재한다.
- Slot을 이용하는거다 피벗 기준이고, 여기서 주의해야할 게 대상 UI는 다른 UI의 자식으로 들어가야한다.
- RenderTransform의 Translation 이용하는 것이다, 하지만 RenderTransform은 할당만 가능하지 따로 가져올 방법이 존재하지가 않는다.
주의해야할건 바로 아래의 경우다, Slot이 없을 경우 널 포인터다.
아래는 UI의 위치 > 뷰포트 위치 또는 뷰포트 위치 > UI의 위치로 치환할 수 있는 함수들인데 여기서 UObject*는 GetWorld()로 보내주고 FGeometry&는 현재 UI의 위치에 대한 정보를 들고있는 데이터이다.
Slot을 가져와서 캐스팅을 한 후 사용하면 된다. FVector2D::ZeroVector은 변경하면 안되는 값이기 때문에 레퍼런스로 보낼 수가 없다 따라서 dummyPos 즉 사용하지 않을 변수를 넘긴다, 최종적인 값은 movePos이다.
UCanvasPanelSlot 클래스는 모든 PanelSlot형의 부모 클래스이므로 이로 치환해주면 된다.
FVector2D dummyPos, movePos;
auto geometry = tmpBorder->GetCachedGeometry();
USlateBlueprintLibrary::AbsoluteToViewport(GetWorld(), geometry.GetAbsolutePosition(), dummyPos, movePos);
//GEngine->AddOnScreenDebugMessage(0, 1.f, FColor::Red, geometry.GetAbsolutePosition().ToString() + " " + movePos.ToString());
if (auto p_canvasSlot = Cast<UCanvasPanelSlot>(HighlightImg->Slot))
p_canvasSlot->SetPosition(movePos);
참고 : https://docs.unrealengine.com/5.0/en-US/API/Runtime/SlateCore/Layout/FGeometry/
참고 : https://docs.unrealengine.com/4.26/en-US/API/Runtime/UMG/Blueprint/USlateBlueprintLibrary/
참고 : https://docs.unrealengine.com/5.0/en-US/API/Runtime/UMG/Components/UCanvasPanelSlot/
'게임엔진 > Unreal' 카테고리의 다른 글
[Unreal] 화면 정중앙 값 구하기 (0) | 2022.09.07 |
---|---|
[Unreal] 플레이 누른 직후 또는 인벤토리 열 때 인게임 모드 설정 (0) | 2022.09.03 |
[Unreal] Static Mesh (스태틱 메쉬) 그림자 끄는/키는 방법 C++ (0) | 2022.08.23 |
[Unreal] 사용자 정의 컴포넌트 (UActorComponent) (0) | 2022.08.22 |
[Unreal] 클래스 생성시 FObjectInitializer 사용법 (기본 컴포넌트 변경) (0) | 2022.08.17 |