UE5——UMG——分析3

一些优化手段
1.UI贴图关掉MIPS,可以省掉3分之一内存,一般ASTC4x4压缩肉眼看不出变化,大色块图可以更激进

2.当布局开销过重时,可以使用无效盒或重绘盒,有额外内存开销

3.在逻辑很明确时,可以override对应函数,直接给出布局结果,避免递归子Widget
比如背包系统,能明确知道行列个数,每个ltem固定大小,可以在背包的容器层直接给出计算结果。

4.绘制的element也可以改为自定义绘制的方式,自行缓存顶点索引等数据,避免每帧重新计算

5.尽量保证同级layerid一致,打图集,为合批创造最大可能
必要时可以继承对应控件强行修改Layerld

InvalidationBox无效盒
1.优化布局开销的重要容器,减少CPU调用
2.缓存Paint产生的所有DrawElement,通过PaintFastPath快速完成绘制提交
3.标记了Volatile的Widget不会被缓存
4.CheckBox,滑动列表都可能有不刷新问题,需要手动刷新
5.Slate.InvalidationDebugging 可以显示出Volatile控件

RetainerBoX重绘盒
1.定时重绘的容器,内部会使用RT保存绘制的结果
2.有额外的内存占用
3.频繁更新的U不适合用

这两种缓存容器在播WidgetAnimation时都可能有问题

在UI上显示模型
SceneCaptureComponent2D+RT+lmage控件显示
1.先将场景中的模型Capture到一张RT上,再在UI上绘制RT贴图
2.优点:直接在场景中绘制,有全部的光影,材质效果
3.缺点:有额外的Capture,drawcall,RT内存消耗,分辨率对帧率影响非常大

SMeshWidget
1.UMG的一个用于直接显示Mesh和Instance的组件,支持多pass
2.优点:直接在UI上绘制模型,没有额外RT内存消耗,也没有额外Capture消耗
3.缺点:需要封装UMG才可以在蓝图使用,只能用UI材质

### UE5 UMG 实现实线切换互斥效果方法 在 Unreal Engine 5 (UE5) 中实现 UI 组件之间的实线切换互斥效果可以通过蓝图逻辑来完成。具体来说,当一个按钮被按下时,其他按钮应失去焦点或改变状态,从而达到互斥的效果。 #### 创建基础UI组件 首先,在UMG编辑器中创建所需的各个按钮和其他UI元素,并确保这些按钮具有不同的名称以便于区分[^1]。 #### 编写交互逻辑 为了使多个按钮之间形成互斥关系,可以采用如下方式: - **定义全局变量**:在一个合适的父级Widget Blueprint内声明布尔类型的数组或者其他数据结构用于跟踪哪些按钮处于激活状态。 - **设置事件响应函数**:为每一个按钮绑定点击事件处理程序。每当某个按钮被触发时,更新上述提到的状态记录,并调用刷新显示的方法重新渲染所有受影响的对象。 - **编写刷新显示的辅助功能**:此部分负责遍历所有的子控件(即那些可能参与互斥机制中的按钮),依据当前存储的状态信息调整它们的表现形式——比如颜色变化、图标替换等。 下面是一个简单的例子展示如何通过Blueprint Visual Scripting实现这一目标: ```blueprint // 假设有一个名为ButtonA, ButtonB 和 ButtonC 的三个按钮实例存在于场景当中. Event Graph: Event Construct -> Set Initial States of Buttons For Each Button Do { OnClicked(ButtonX) -> Update Global State Array -> Call RefreshDisplay() } Function RefreshDisplay(): Iterate Over All Child Widgets As CurrentChild{ If(CurrentChild Is A Button){ Check Against The Global State And Apply Styles Accordingly; } } ``` 以上伪代码片段展示了基本思路,实际应用时需根据项目需求进一步细化和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值