智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

UMG设置组件自适应居中或靠边

Posted on   Bill Yuan  阅读(413)  评论(0编辑  收藏  举报

转自:http://aigo.iteye.com/blog/2297430

比如你的UI中有些组件需要居中显示,有些需要始终在右上角并且与上边框和右边框保持固定的距离等等,对于这种需要动态适应屏幕分辨率的UI组件,有两种设置方式:

1,直接编辑组件的属性Anchors


 

2,代码控制

 
复制代码
ULoginWidget* LoginUI = NULL;   //创建UI的逻辑省略  
  
if (UImage* backImg = Cast<UImage>(LoginUI->GetWidgetFromName("ImgBackground")))  
{  
    //获取屏幕大小和中心点  
    const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());  
    const FVector2D  ViewportCenter = FVector2D(ViewportSize.X / 2, ViewportSize.Y / 2);  
  
    //假设背景图片的大小原尺寸大小是1920x1080,下面是通过高宽比来计算当前分辨率下的位置  
    int imgWidget = 1920 * ViewportSize.Y / 1080;  
    int posX = ViewportCenter.X - imgWidget / 2;  
  
    //设置背景图片的相对X、Y坐标,注意:这里假设Anchors属性默认的,即X、Y相对屏幕左上方顶点位置  
    backImg->SetRenderTranslation(FVector2D(posX, 0));  
}  
复制代码

如果需要居中的UI组件很多,可以将居中的UI放在一个容器里,然后只对这一个容器进行居中即可。

这里假设直接将RootWidget居中:

LoginUI->GetRootWidget()->SetRenderTranslation(FVector2D(X, Y));  

另外,通过代码设置比例,需要在代码中考虑当前设备的分辨率,如果不想考虑,将屏幕尺寸设成固定值:

这种比较麻烦,建议还是第一种

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2010-10-25 Web服务
点击右上角即可分享
微信分享提示