参考官方UGameplayStatics::ProjectWorldToScreen()函数的方法,进行一些修改调整。用来判定三维世界中一个点是否在屏幕范围内。
bool AMyActor::IsInScrrenViewport(const FVector& WorldPosition)
{
APlayerController *Player = UGameplayStatics::GetPlayerController(this, 0);
ULocalPlayer* const LP = Player ? Player->GetLocalPlayer() : nullptr;
if (LP && LP->ViewportClient)
{
// get the projection data
FSceneViewProjectionData ProjectionData;
if (LP->GetProjectionData(LP->ViewportClient->Viewport, eSSP_FULL, /*out*/ ProjectionData))
{
FMatrix const ViewProjectionMatrix = ProjectionData.ComputeViewProjectionMatrix();
FVector2D ScreenPosition;
bool bResult = FSceneView::ProjectWorldToScreen(WorldPosition, ProjectionData.GetConstrainedViewRect(), ViewProjectionMatrix, ScreenPosition);
if (bResult && ScreenPosition.X > ProjectionData.GetViewRect().Min.X && ScreenPosition.X < ProjectionData.GetViewRect().Max.X
&& ScreenPosition.Y > ProjectionData.GetViewRect().Min.Y && ProjectionData.GetViewRect().Y < LensPadding.Max.Y)
{
return true;
}
}
}
return false;
}//本文由CSDN博主执手画眉弯原创,未经允许不得转载!
版权声明:本文为l346242498原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。