UE4のWidgetの位置をc++で取得する

FVector2D USTGBButton::GetSelectLocation_Implementation() const
{
	const FTransform2D ButtonTrans_DisplaySpace = GetCachedGeometry().ToPaintGeometry().GetAccumulatedRenderTransform();
	const FVector2D ButtonNW_DisplaySpace = ButtonTrans_DisplaySpace.GetTranslation();

	const FTransform2D WindowTrans_DisplaySpace = OwnerWidget->GetCachedGeometry().ToPaintGeometry().GetAccumulatedRenderTransform();
	const FVector2D WindowNW_DisplaySpace = WindowTrans_DisplaySpace.GetTranslation();

	const FVector2D ButtonNW_CanvasSpace = ButtonNW_DisplaySpace - WindowNW_DisplaySpace;

	const FVector2D ButtonSize = GetCachedGeometry().ToPaintGeometry().GetLocalSize() * ButtonTrans_DisplaySpace.GetMatrix().GetScale().GetVector();

	return ButtonNW_CanvasSpace + ButtonSize/2;
}

こんな感じで取得する。 マウス位置を取得するときはウィンドウ内の描画位置を基準とする空間なのに、 GetCachedGeometry().ToPaintGeometry().GetAccumulatedRenderTransform() で取得するウィジェット位置はディスプレイの描画位置を基準とする空間であることに注意。

 
comments powered by Disqus