Unreal Engine中跨蓝图控制电梯楼层指示灯触发逻辑问题
无法跨蓝图控制外部指示灯的核心原因是电梯蓝图没有持有场景内对应指示灯实例的有效引用,UE中所有跨Actor操作的前提都是持有目标对象的引用,你提到的灯开关蓝图控制场景灯光,本质也是提前绑定了目标灯光的引用才能实现操作。
具体实现方案
1. 电梯蓝图暴露可编辑的指示灯变量
打开电梯蓝图,在「我的蓝图」变量栏新建变量:
- 变量类型匹配你的指示灯类型:如果是自定义指示灯蓝图就选对应蓝图类,如果是原生点光源就选
Point Light,如果是带发光材质的静态网格体就选Static Mesh Actor - 变量命名为
FloorIndicators,如果是多楼层场景就把变量设置为数组类型,勾选可编辑实例和暴露在Spawn时选项,编译蓝图后保存。
2. 绑定场景指示灯引用
返回主场景,选中放置的电梯Actor,在右侧细节面板找到刚才新建的FloorIndicators变量,点击添加元素后拾取场景内对应楼层的指示灯,按楼层顺序排列即可完成引用绑定。
3. 编写业务逻辑
回到电梯蓝图事件图,按需求实现逻辑:
- 监听
q键按下事件,触发电梯下行调度 - 电梯启动下行前,取出用户所在楼层对应索引的
FloorIndicators元素,调用亮灯逻辑:自定义指示灯蓝图就调用你封装的TurnOn接口,原生灯光直接设置Intensity参数为目标亮度,带发光材质的网格体就切换为发光材质实例 - 监听电梯抵达目标楼层的完成事件,触发对应指示灯的灭灯逻辑,同时执行电梯门开启的逻辑。
常见问题排查
- 如果指示灯或电梯是运行时动态生成的,不要使用类默认对象赋值,必须在Spawn Actor节点执行完成后,把返回的生成实例赋值给电梯的
FloorIndicators变量 - 复杂多电梯场景可以单独做一个全局楼层管理单例,统一存储所有电梯、指示灯、呼叫按钮的引用,减少各蓝图之间的重复绑定操作。
内容的提问来源于stack exchange,提问作者Aaron Bernard
相关产品推荐
相关产品推荐

