赞
踩
Unreal Python API 文档: - https://docs.unrealengine.com/4.26/en-US/PythonAPI/
在上一篇文章在虚幻引擎中使用Python批处理2_unreal库的学习:批量重命名
),通过教程学习了Python脚本的使用方式,接下来我希望能实现一些我想做的操作-批量修改对象属性。
虽然在这位宝藏up主的视频中找到了可能很有帮助的指导虚幻引擎自动化 - 自动化 Python 纹理参数设置器,但我不准备先看它,我希望我可以尝试通过查阅API官方文档等其他信息来掌握学习的方法。而这个视频将是我四处碰壁后的求助方式。
这里我很快就找到了API文档地址(通过随意搜索了个关键字 unreal.SystemLibrary)。简单浏览了下,真够长的,单单Library的关键函数就有176个。要通过这个文档找到对应函数估计要有点骨头啃了。
接下来分析下具体需求。
我的USD资产下有很多组件,我需要一一将组件内的参数设为主通道中不渲染(还有其他参数先不用考虑)。
那么,我需要罗列下操作逻辑
这里由于是USD资源估计查找组件相对复杂。先拿个普通对象试试。
1 获取选中对象
先试着检索了文档大纲中的Select关键字,发现多达33个,通过函数名称筛选出两个比较接近的
点击去看了下详情,貌似没用
通过上篇文章的选择方法,可以猜测出常用命令都集合在了各种Library类中,试着查阅EditorUtilityLibrary类,查看内置方法
插播一条消息
在启动USD插件时发现其加载了一个py脚本,顺着路径找到USD的python文件夹,如果需要操作USD估计能从这里找到方法!
D:\Program Files\Epic Games\UE_4.26\Engine\Plugins\Importers\USDImporter\Content\Python
这是一条漫长的分割线
当我获取完选中对象后,我在查询和设置对象属性上卡住了,经过一番折腾动弹不得,不得已求助了上述大佬视频教程,跟着教程设置贴图对象的sRGB和压缩设置属性,详 - 在虚幻引擎中使用Python批处理4_:贴图参数设置
有所开窍,撸起袖子准备大干一场,有卡住了,设置的操作几乎报错该参数名称不存在与XX对象上。
尝试了大小写调整,下划线空格调整等都是报错,明明可见的参数就是设置不上。气!
无果后我把希望寄托于上述提到的USD插件带的大量脚本,有意思的是测试各种报错
伤感的事就不说了,贴上几个在我学习路上遇到的好资源:
在 UE4 中开始使用 Python - 这是个入门文章,它对我最大的帮助是获取对象的类的重要性,以及如何获取该类的属性和功能。
类其实在我们获取对象时就会显示,但并没有很重视,而其实我们要设置的属性参数,可能并不在该类上,要确认这一点,就可以使用文章说的help命令,直接help这个对象,就可以得到该类的帮助信息,里面有可以设置的属性以及可以调用的方法。
得知了该类并没有这个属性后,那要去哪设置,我想设置对象渲染属性面板上的 Render in Main Pass
通过官方帮助文档检索,找到了unreal.PrimitiveComponent,能感受到要设置这个参数离不开这个,但我依旧搞不定如何使用它,直到我找到这篇文章将 fbx 相机导入到虚幻引擎时出现问题,大佬附带的源码提供了新的帮助
import unreal
def set_attr():
# 实例化unreal类
editor_util = unreal.EditorUtilityLibrary()
# 获取相机(这里我通过直接选取)
selected_assets = editor_util.get_selection_set()
cine_camera = selected_assets[0]
unreal.log(cine_camera)
# 我要设置的感应器尺寸并不在cine_camera上,因为CineCameraActor类并没有该属性设置
unreal.log(help(cine_camera))
set_attr()
这里获取了相机,但感应器尺寸的参数并不在该对象上
从help(cine_camera)可以找到这段
import unreal def set_attr(): # 实例化unreal类 editor_util = unreal.EditorUtilityLibrary() # 获取相机(这里我通过直接选取) selected_assets = editor_util.get_selection_set() cine_camera = selected_assets[0] unreal.log(cine_camera) # 获取相机组件 cam_component = cine_camera.get_cine_camera_component() unreal.log(help(cam_component)) set_attr()
在相机组件上就能找到filmback设置
通过取值可得出一下字典
unreal.log(cam_component.get_editor_property("filmback"))
LogPython: <Struct 'CameraFilmbackSettings' (0x00000297826CC954) {sensor_width: 22.459999, sensor_height: 18.670000, sensor_aspect_ratio: 1.202999}>
就可以进行设置了,尝试了一下没有问题,
import unreal def set_attr(): # 实例化unreal类 editor_util = unreal.EditorUtilityLibrary() # 获取相机(这里我通过直接选取) selected_assets = editor_util.get_selection_set() cine_camera = selected_assets[0] # 获取相机组件 cam_component = cine_camera.get_cine_camera_component() # 设值 cam_component.set_editor_property("filmback", {"sensor_width": 24}) set_attr()
现在问题应该算是找到答案了,参数一直设置不上的原因是参数是在Actor的组件上
import unreal def set_attr(): # 实例化unreal类 editor_util = unreal.EditorUtilityLibrary() # 获取对象(这里我通过直接选取) selected_assets = editor_util.get_selection_set() actor = selected_assets[0] # 获取相机组件 componentList = actor.get_components_by_class(unreal.StaticMeshComponent) for component in componentList : component.set_render_in_main_pass(False) set_attr()
好消息是USD对象也是可以通用的,oH yHH
希望这笔记帮到你
乾杯 []~( ̄▽ ̄)~*
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。