Bootstrap Chameleon Logo

在编辑器中获取对象

想要快速上手,首先需要获取Object对象

在开始Python之旅的最初阶段,最大的困扰通常是如何开始。

  • 如何在获得编辑器里的Actor?
  • 如何获得目录中的某个资源?
  • 我要如何才能在命令行中查看某个物体的属性?

要解决这些问题的第一步都是如何在Python中获得虚幻引擎中的对象

从预置菜单获取对象

在TAPython的预置菜单中,有下面三个菜单项能够方面用户快速获得对象。选中相应的物体Component,Actor或者资源之后,点击对应的菜单。对应的组件,Actor或者资源会被赋值给全局变量_r

Get objects menu item of TAPython in Unreal Engine's Main bar

然后在Python的命令行中,我们就可以对其进行各种想要的操作:

TIP
Python(REPL)模式最适合熟悉对象和接口。可以少打很多print

Python(REPL)

_r
dir(_r)
_r.get_name()

GIF showing 'Using global variable _r in Python command window of Unreal Engine'

从代码中获得

Get Selected Actor

在UE4中:

UE4

actors = unreal.EditorLevelLibrary.get_selected_level_actors()

UE5中,由于引入了各个SubSystem,EditorLevelLibrary中的方法已经逐步被SubSystem中的方法所代替

UE5

actors = unreal.get_editor_subsystem(unreal.EditorActorSubsystem).get_selected_level_actors()

TIP
在各个SubSystem中,我们需要先通过get_editor_subsystem获得Subsystem的实例,然后再执行它的方法。

很多情况下,我们不应该被各办法之间的差异所困扰,因此,可以封装其中的变化,直接调用自己的函数

TAPython

import Utilities

actors = Utilities.Utils.get_selected_actors()

Get Selected Component

可以直接调用TAPyton 的PythonBPLib提供的方法

components = unreal.PythonBPLib.get_selected_components()

或者

import Utilities

components = Utilities.Utils.get_selected_components()

TIP
如果想要给选中的Actor添加一个Component,可以用added_mesh_comp = unreal.PythonBPLib.add_component(unreal.StaticMeshComponent, target_actor, target_actor.root_component)

Get Selected Asset

Assets 也是类似,可以直接调用EditorUtilityLibrary中的方法

assets = unreal.EditorUtilityLibrary.get_selected_assets()

或者调用自己的封装的方法

import Utilities
assets = Utilities.Utils.get_selected_assets()

Get Material Node

对于一些复杂的节点,比如材质中的节点,我们也可以将其取出,赋值给变量"_r",然后在目录行中做实验,也可以将它放入Object Detail viewer

Menu for setting selected node to variable _r in Unreal Engine Material Editor

更多关于材质节点相关的操作,可以参考这篇:manipulate Material

Next Step

在获取对象之后,我们就可以在编辑器使用dir,help等命令和Python的inspect模块来熟悉和查看这些unreal对象。

比如在002_tool_04_object_detail这个TAPython built-in的工具中,就将对象的各个接口属性和对应的结果都显示在了界面上,方便查看

小结

参考

003_t_05_most_used_editor_api 003_t_01_learning_ue_with_python