使用下面的方式动态加载交互界面后,除了 UGC_InteractMain_UIBP 自身,其他 UI 的点击事件都会被阻挡:
local WidgetPath = UGCGameSystem.GetUGCResourcesFullPath(
'Asset/Blueprint/Arts_UI/Game/UIBP/InteractEntity/UGC_InteractMain_UIBP.UGC_InteractMain_UIBP_C')
UGCWidgetManagerSystem.CreateWidgetAsync(WidgetPath, function(Widget)
UGCWidgetManagerSystem.AddToSlot(Widget, 'UI.UISlot.MainUISlot_Low', 0)
UGCWidgetManagerSystem.ShowWidget(Widget)
self.m_interactUIWeakptr = UGCObjectUtility.MakeWeakObjectPtr(Widget)
end)
UGC_InteractMain_UIBP 的 AnchorData 默认是 min=(0,0), max=(1,1):

这意味着它实际是一个全屏界面,会占据整个点击区域并阻止事件穿透。

目前的规避方式是预先把 UGC_InteractMain_UIBP 挂到 UGCMainUI,需要时直接取得并显示:
local MainUIPath = UGCGameSystem.GetUGCResourcesFullPath(
'Asset/Blueprint/UGCMainUI.UGCMainUI_C')
local interactionWidget = UGCWidgetManagerSystem.GetUserWidgetByWidgetLayout(
MainUIPath, "UGC_InteractMain_UIBP")
if interactionWidget then
UGCWidgetManagerSystem.ShowWidget(interactionWidget)
self.m_interactUIWeakptr = UGCObjectUtility.MakeWeakObjectPtr(interactionWidget)
end
这只是当前可用的绕过方案,动态加入 Slot 后的事件遮挡原因仍需继续确认。
Discussion
留言讨论
发表留言时,评论服务会记录必要的 IP 与 User-Agent 信息,用于安全审核和防止滥用。