使用 Python 在 Unreal Engine 中从 class 生成演员

Spawn actor from class in Unreal Engine using Python

使用蓝图,我可以 SpawnActorFromClass 使用 StaticMeshActor,但使用 Python 脚本通过内置 Python 脚本插件,

unreal.EditorLevelLibrary().spawn_actor_from_class(ue.Class(name='StaticMeshActor'), location, rot)

我得到了:

LogPython: Error: TypeError: EditorLevelLibrary: Failed to convert parameter 'actor_class' when calling function 'EditorLevelLibrary.SpawnActorFromClass' on 'Default__EditorLevelLibrary'
LogPython: Error:   TypeError: NativizeProperty: Cannot nativize 'Class' as 'ActorClass' (ClassProperty)
LogPython: Error:     TypeError: NativizeClass: Cannot nativize 'Class' as 'Class' (allowed Class type: 'Actor')

我错过了什么?

这是我自己想出来的。结果是 .spawn_actor_from_class() 调用不接受 ue.Class。相反,它接收从内置类型派生的所谓 ClassProperty。所以正确的调用应该是:

unreal.EditorLevelLibrary().spawn_actor_from_class(ue.StaticMeshActor.static_class(), location, rot)

我不确定您是否使用 20tab 插件 Python,但您可以从编辑器控制台轻松完成此操作,甚至可以在运行时使用以下代码示例

def spawn(cls):
    ue.editor_deselect_actors()
    obj = ue.get_editor_world().actor_spawn(cls)
    ue.editor_select_actor(obj)
    return obj
__builtins__['spawn'] = spawn # so it's always available in the Py console

该插件可在 https://github.com/20tab/UnrealEnginePython 免费获得,目前支持版本 4.22

如果ue5.0中任何蓝图actor是

unreal.EditorLevelLibrary().spawn_actor_from_class(unreal.EditorAssetLibrary.load_blueprint_class('/Game/TopDown/Actors/WinningHeart'), location, rot)

您可以通过将鼠标悬停在内容抽屉中的资产上或 right-click -> 复制参考来获取 class 路径。

在我的例子中,它是一个名为 'WinningHeart' 的蓝图演员。 location 和 rot 分别是 unreal.Vector 和 unreal.Rotator。