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

 

 

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; } } }

 

 可实现效果:

 

 

 

 

转载于:https://www.cnblogs.com/linqing/p/10979452.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值