添加 PythonTestLib

为了完成TAPython的编辑器测试用例,添加了一个新的编辑器lib:PythonTestLib

gif

在这个测试仓库: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的支持 G_015_SDetailsView_s

比如再扩展一下可以这样. More info and cpp gist

G_015_SDetailsView_s

SMultiLineEditableTextBox

  • 在SMultiLineEditableTextBox中添加了 "AlwaysShowScrollbars" 字段,用于设置是否一直消失滚动条

  • 添加了 ScrollTo 方法,用于将滚动条滚动到制定位置

SetColorAndOpacity

为 SScrollBox/SImage/STextBlock/SEditableText 添加了 SetColorAndOpacity 支持

更多的编辑器API

PythonBPLib

SetLevelViewportCameraSpeed

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 中添加返回值


Share On
Reddit