UE4筆記-重定義GameViewport 布局(Slate)


最近在研究重新布局GameViewport和DockWidget/TagManager的問題

這里記錄一些可能有幫助的鏈接,有空再繼續研究.

 

 

參考鏈接1:https://answers.unrealengine.com/questions/368060/view.html

參考鏈接2: https://zhuanlan.zhihu.com/p/44206016

參考鏈接3(Qt +UE4方案):https://www.cnblogs.com/blueroses/p/9151094.html

參考鏈接4 打扮家居於TabManager的技術分享:https://www.bilibili.com/video/av60881798?from=search&seid=11876571760089496499

 

 

Q.重新布局GameViewport問題:

 

 // 目前還沒弄明白UGameEngine::CreateViewport 和UGameEngine::CreateViewportWidget

 

目前妥協實現方案:GameViewport分屏 + Tick或GameViewportClient 的Draw里實現修改屏幕大小或綁定FViewport::ViewportResizedEvent的委托都可以

這樣就可以配合 Slate的SSplitter組件配合運算實現偽Layout布局了

void UCommonBPLibrary_Core::AdjustViewportSize(UObject * WorldObjectContext, FMargin margin)
{
    UE_LOG(LogTemp, Log, TEXT(" AdjustViewportSize ")); if (WorldObjectContext->GetWorld() && /*GetWorld()->WorldType == EWorldType::Game &&*/ GEngine && GEngine->GameViewport) { FVector2D ViewportSize; GEngine->GameViewport->GetViewportSize(ViewportSize); // The GameViewport takes some time to initialize if (ViewportSize.X > 0 && ViewportSize.Y > 0) { FMargin relativeMat = FMargin { margin.Left / ViewportSize.X , margin.Top / ViewportSize.Y , 1 - margin.Right / ViewportSize.X , 1 - margin.Bottom / ViewportSize.Y }; GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginX = relativeMat.Left; GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].OriginY = relativeMat.Top; GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeX = relativeMat.Right; GEngine->GameViewport->SplitscreenInfo[0].PlayerData[0].SizeY = relativeMat.Bottom; } } }

 

 可實現效果:

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM