添加 PythonTestLib¶
为了完成TAPython的编辑器测试用例,添加了一个新的编辑器lib:PythonTestLib
在这个测试仓库:UE_TAPython_Plugin_TestCases, 测试了超过200个编辑器API,覆盖了所有的编辑器扩展。
通过Python获取Log¶
现在我们可以获取Output Log中的内容,用于验证和提取各种输出信息。
注意,这里的Logs和编辑器中的Output Log的内容相同,但是是相互独立的。在Output Log中Clear Log,并不会影响PythonTestLib.get_log()获取的内容;同理,PythonTestLib.clear_log_buffer()也只会清除TestLib中的LogBuffer,不会清除Output Log窗口中的内容
Config.ini中添加LogNumberLimit字段,用于限制当前缓冲区中保留的log数量,默认大小为10240条log
添加延迟执行Python命令的功能¶
添加两个延迟调用Python命令的功能。在测试用例中,我用延迟调用,可以等待编辑器完成各种异步任务,或者等待视窗的刷新等等
注意:新添加的delay_call于python中的各种延迟调用是有区别的
- delay_call是依附于UE 编辑器的更新时间的,一旦编辑器处于用户交互界面(比如通过弹出窗口选择目录或者文件时),ue编辑器是不更新的,这时delay_call也不会计时
- dela_call中的调用的函数内容,并不是异步的,它依然会等待编辑器执行完成的结果
Slates¶
OnMapChangedCmd¶
Chameleon工具的配置中添加:"OnMapChangedCmd",用于在Map切换时执行Python命令。
用途:
- 感知关卡切换,并同步更新界面
- Chameleon工具在关卡切换时清理引用,避免内存泄露或者内存泄露检查触发的崩溃
比如,我修正了ObjectDetailViewer在持有场景中物体引用会,切换其他地图,此时ue会gc并做内存泄漏检查,触发崩溃 :-(
具体用法如下:
"OnMapChangedCmd": "chemeleon_objectDetailViewer.on_map_changed(%map_change_type)",
def on_map_changed(self, map_change_type_str):
# remove the reference, avoid memory leaking when load another map.
if map_change_type_str == "TearDownWorld":
self.reset(bResetParameter=False)
else:
pass # skip: LoadMap, SaveMap, NewMap
参数¶
-
%world: 获取操作的world
-
%map_change_type: 获取事件类型。事件类型有: "LoadMap", "SaveMap", "NewMap" or "TearDownWorld"
SDetailViewer¶
添加了对SDetailsView的支持
比如再扩展一下可以这样. More info and cpp gist
- set_object to SDetailsView
SMultiLineEditableTextBox¶
-
在SMultiLineEditableTextBox中添加了 "AlwaysShowScrollbars" 字段,用于设置是否一直消失滚动条
-
添加了 ScrollTo 方法,用于将滚动条滚动到制定位置
SetColorAndOpacity¶
为 SScrollBox/SImage/STextBlock/SEditableText 添加了 SetColorAndOpacity 支持
更多的编辑器API¶
PythonBPLib¶
Fix¶
得益于完整的测试用例,1.0.9发现并修正或改进了以下问题
- SEditableTextBox OnContextMenuOpening时,log中误报"OnContextMenuOpening"未被处理的提示
- PythonBPLib.SetFolderColor 对已经存在的目录没有立即生效的问题
- PythonBPLib.SaveThumbnail 中添加log
- PythonBPLib.GetSelectedFolder 的返回结果中去除多余的"/All/Game", "/All/EngineData/"前缀
- PythonBPLib.SetSelectedFolder 不工作的问题
- PythonBpLib.set_anim_blueprint 等函数中避免输入comp为空时,导致的崩溃
- 修正PythonDataTableLib.SetPropertyByStringAt 方法中对带有引号的值设置不正确的问题
- PythonBPLib.fixupRedirectorsInFolder 中添加对传入的参数为一个String字符串的情况
- PythonBPLandscapeLib 的create_landscape_proxy等方法在SectionSize=1时失效的问题
- PythonBPLandscapeLib 在ue5中相邻地形在部分参数下有接缝的问题
- PythonBPLandscape.create_landscape_proxy_with_guid,添加QuadsSpaceOffsetX/Y 参数,用于制作landscape_proxy在整个地形中的QuadsSpaceOffset
- PythonMeshLib.get_imported_original_mat_names 等函数中由于AssetImportData为空时,导致的崩溃
- PythonMeshLib.set_static_mesh_socket_name 等函数中避免输入参数Socket为空时,导致的崩溃
- 修正函数名typo:PythonMeshLib.get_selection_cast_shadow
- 部分函数中添加Deprecated警告,用于提醒部分函数可以用ue引擎原生函数
- PythonMeshLib.convert_mesh_to_static_mesh 中添加返回值