如何在Actor蓝图中使用Level蓝图变量?Actor如何控制Level蓝图变量?
在Actor蓝图中访问Level蓝图变量 & 回合制流程实现
针对你的问题,我分两部分来解答,先讲核心的Level变量访问方法,再结合你的回合制流程给出具体实现步骤:
一、Actor蓝图获取/设置Level蓝图变量的核心方法
要让Actor操作Level蓝图的变量,关键是先拿到Level蓝图的引用,再对公开变量进行读写:
先把Level蓝图的变量设为公开
- 打开Level蓝图,创建你需要的变量(比如你的
turn变量) - 在变量的Details面板里,勾选「Public」(或者「Editable」,确保外部蓝图能访问)
- 打开Level蓝图,创建你需要的变量(比如你的
在Actor蓝图中获取Level蓝图引用
在Actor的Event Graph里,通过以下节点链获取Level蓝图对象:Get World → Get Level Blueprint拿到这个引用后,你就可以直接调用
Get [变量名]和Set [变量名]节点来读写Level里的变量了。
二、你的回合制流程具体实现步骤
结合你说的ActorOnClicked → 移动Actor → 结束回合(修改Level的turn变量)流程,具体操作如下:
1. Level蓝图准备
- 创建一个变量
CurrentTurn(类型根据需求选,比如Integer代表回合数,或者Enum代表当前玩家),勾选Public,设置初始值(比如1)
2. Actor蓝图逻辑实现
- 绑定点击事件:在Actor的Event Graph里,右键搜索并添加
Event Actor OnClicked节点,这是点击Actor时触发的事件。 - 处理移动逻辑:在
Event Actor OnClicked后面连接你的移动逻辑——比如用Set Actor Location直接瞬移,或者用Add Movement Input配合Character Movement组件实现平滑移动。如果需要等待移动完成再结束回合,可以用On Movement Completed回调(如果用的是Character类),或者加个Delay节点(根据移动距离估算时间)。 - 修改Level的回合变量:移动完成后,通过
Get World → Get Level Blueprint拿到Level蓝图引用,然后调用Set CurrentTurn节点,把变量更新(比如CurrentTurn + 1,或者切换玩家枚举值)。
可选优化:用事件分发器降低耦合
如果你的项目后期逻辑变复杂,不想让Actor直接依赖Level蓝图的变量,可以用事件分发器的方式:
- 在Level蓝图里创建一个事件分发器
OnTurnEnded,可以带参数(比如新的回合值) - Actor在移动完成后,触发这个事件分发器(通过Level蓝图引用调用
Call OnTurnEnded) - Level蓝图里绑定
OnTurnEnded事件,在回调里修改turn变量
这种方式让Actor和Level的逻辑解耦,更易维护。
内容的提问来源于stack exchange,提问作者dbld




