使用 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。
使用蓝图,我可以 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。