Unreal Engine 4 个蓝图通过引用分配

Unreal Engine 4 Blueprints assign by reference

我有一个 EnemySpawner 蓝图 Class 可以:

EnemySpawner 有一个名为 "Path" 的样条组件,生成的敌人必须跟随它。为此,Enemy 的蓝图有另一个名为 "Enemy Path" 的样条组件,必须在创建时由 Enemy Spawner 初始化,如上面的屏幕截图所示。

但是,在我的 Enemy 中,如果我尝试访问 "EnemyPath",我会收到以下错误:

Blueprint Runtime Error: Accessed None trying to read property PathActor from function: 'ExecuteUbergraph_Enemy' from node: DestroyActor in graph: EventGraph in object: Enemy with description: Accessed None trying to read property PathActor

所以,换句话说,空指针异常。

例如,如果我在 Enemy's Blueprint 中这样做(出于测试目的): 样条组件的 Actor 所有者未被销毁。

即使我尝试分配所有 Owner actor,而不仅仅是样条组件,它也不起作用。

我还尝试在 EnemySpawner 的 "SpawnActor Enemy" 节点和 Enemy 的 "Event BeginPlay" 节点之后在屏幕上打印一些东西,我已经检查过显然 EnemySpawner 中的打印首先发生,所以唯一的问题是变量没有真正赋值。

我尝试的最后一件事是在 "Set" 节点之后直接在 EnemySpawner 蓝图中通过从 Spawned 敌人那里获取它来摧毁 Spline 的所有者,令我惊讶的是,它被摧毁了!

那么,想知道正确的做法是什么吗?

您可以使用 "Expose on Spawn" 标志在 BP actor 中设置任何变量(在 BP 编辑器中选择变量时在详细信息面板中),这将为值添加一个 pin,以便在使用 SpawnActorFromClass 节点。确保您也设置了变量 "Editable"。

我想也许我们做错了。

在直接的 C++ 中,您创建一个 class,创建变量,通过创建函数并通过引用传递来修改变量。

我认为如果蓝图是一个 class(它是),并且如果变量是一个变量(它是),你真的不能指望在没有它的情况下给它赋值调用执行此操作的函数...然后再说一次,据我所知,也许引擎会为您执行此操作...