标题:UE4中3DUI防遮挡显示/穿模部分透明化显示
最近遇到一个功能需求:实现3DUI被遮挡部分透明显示,且仍能正常交互的功能。代码很简单,主要是解决思路。
先说一下解决思路:创建BP_3DUI,添加两个Widget组件,将WidgetA的材质DisableDepthTest打勾;B不做处理,并按照合适比例前小后大设置Transform(保证在视口中是重叠效果)即可。
实现效果如下:
一:创建WidgetBlueprint
简单做一个Animation,便于演示。图片透明度调为0.5,后面会讲原因;
简单写个功能。
二:创建BlueprintClass(BP_3DUI)
添加两个Widget组件。这里暂时给两个widget赋值(为了前期看重叠效果,后续要清除掉的)。然后把ReceiveHardwareInput打勾。(这里便于描述,前面widget为A 后面的为B);把此BP拖动到场景中,设置成Player的子对象。然后设置AB的Transform(此BP放在Player正前方,假如Player的X坐标为0,3DUI的X坐标为600;然后将A的X改为550,大小改为1/12)
三:复制一个Widget材质球,并略做更改
找到父级材质所在位置(找两次,找到父级的材质球)如下:复制一份到自己文件夹中便于管理,并将DisableDepthTest打勾。
把改好的这个材质球赋值给widgetA;
四:给BP_3DUI的两个widget赋值
把前面AB的WidgetClass清空。并在关卡蓝图获取并赋值。为了便于管理可以创建BP_UIManager进行初始化赋值。
可以用GetAllActorsOfClass,也可以将变量公开,从场景拖动赋值。
五:看效果
UE4 3DUI防遮挡显示
注意:
如果在第二步赋值后,若不清除,两个UI不会同步执行操作,这是因为这种赋值方式属于复制了两个不同的UI;而蓝图赋值,是把同一个UI赋值给两个widget组件。再就是两个widget组件的缩放比要算清楚,注意这两点就很容易实现了。另外第一步设置0.5的原因就是配合材质优化半透明显示效果。