ue_python 批处理命名

327 阅读2分钟

教程地址:Unreal Engine Automation - Creating a Python Batch Rename Script 很棒的一套教程,感谢下老师!

接下来,要熟悉下unreal库的使用

import unreal

def rename_assets():
    # 实例化unreal类
    system_lib = unreal.SystemLibrary() # 实例化系统类
    editor_util = unreal.EditorUtilityLibrary() # 实例化编辑类
    string_lib = unreal.StringLibrary() # 实例化字符类

    # get the selected assets
    selected_assets = editor_util.get_selected_assets() # 获取选中对象
    num_assets = len(selected_assets) # 计算选中数量
    unreal.log("Selected {} assets".format(num_assets)) # 反馈选中数量

rename_assets()

上面这里通过反馈选中数量熟悉了下unreal库的操作,上手舒适

接下来继续做了一个循环,来获取每个对象的名称

import unreal

def rename_assets():
    # 实例化unreal类
    system_lib = unreal.SystemLibrary()  # 实例化系统类
    editor_util = unreal.EditorUtilityLibrary()  # 实例化编辑类
    string_lib = unreal.StringLibrary()  # 实例化字符类

    # get the selected assets
    selected_assets = editor_util.get_selected_assets()  # 获取选中对象
    num_assets = len(selected_assets)  # 计算选中数量
    unreal.log("Selected {} assets".format(num_assets))  # 反馈选中数量

    # 遍历每个对象并重命名
    for asset in selected_assets:  # 遍历每个对象
        asset_name = system_lib.get_object_name(asset)   # 获取对象名称

        unreal.log(asset_name)  # 输出对象名称

rename_assets()

image.png Log跟踪正常!

接下来是最实际的操作,替换对象名称

import unreal


def rename_assets(search_pattern, replace_pattern):  # 参数输入被替换的字符和替换的字符
    # 实例化unreal类
    system_lib = unreal.SystemLibrary()  # 实例化系统类
    editor_util = unreal.EditorUtilityLibrary()  # 实例化编辑类
    string_lib = unreal.StringLibrary()  # 实例化字符类

    # get the selected assets
    selected_assets = editor_util.get_selected_assets()  # 获取选中对象
    num_assets = len(selected_assets)  # 计算选中数量
    replaced = 0

    unreal.log("Selected {} assets".format(num_assets))  # 反馈选中数量

    # 遍历每个对象并重命名
    for asset in selected_assets:  # 遍历每个对象
        asset_name = system_lib.get_object_name(asset)   # 获取对象名称

        # 判断对象名称中是否包含要被替代的字符
        if string_lib.contains(asset_name, search_pattern, use_case=False):  # 第三个参数不理解,回头可以测试下
            # replaced_name = string_lib.replace(asset_name, search_pattern, replace_pattern)  # 字符串替换处理,这里也可以直接使用自带的replace方法
            editor_util.rename_asset(asset, asset_name.replace(search_pattern, replace_pattern))  # 重命名操作

            replaced += 1  # 记数
            unreal.log("Replaced {} with {}".format(asset_name, replace_pattern))  # 输出替换信息
        else:
            unreal.log("{} did not match the search pattern,was skipped".format(asset_name))  # 输出名称不匹配

        unreal.log("Replaced {} of {} assets".format(replaced, num_assets))  # 输出对象名称


rename_assets("Lava", "Water")

———————————————— 以上参考链接:blog.csdn.net/weixin_4451…

最终代码:

import unreal


def rename_assets(search_pattern, replace_pattern,use_case):  # 参数输入被替换的字符和替换的字符
    # 实例化unreal类
    system_lib = unreal.SystemLibrary()  # 实例化系统类
    editor_util = unreal.EditorUtilityLibrary()  # 实例化编辑类
    string_lib = unreal.StringLibrary()  # 实例化字符类

    # get the selected assets
    selected_assets = editor_util.get_selected_assets()  # 获取选中对象
    num_assets = len(selected_assets)  # 计算选中数量
    replaced = 0

    unreal.log("Selected {} assets".format(num_assets))  # 反馈选中数量

    # 遍历每个对象并重命名
    for asset in selected_assets:  # 遍历每个对象
        asset_name = system_lib.get_object_name(asset)   # 获取对象名称

        # 判断对象名称中是否包含要被替代的字符
        if string_lib.contains(asset_name, search_pattern, use_case=use_case): 
            search_case=unreal.SearchCase.CASE_SENSITIVE if use_case else unreal.SearchCase.IGNORE_CASE
            replaced_name = string_lib.replace(asset_name, search_pattern, replace_pattern,search_case=search_case)  # 字符串替换处理,这里也可以直接使用自带的replace方法
            editor_util.rename_asset(asset, replaced_name)  # 重命名操作

            replaced += 1  # 记数
            unreal.log("Replaced {} with {}".format(asset_name, replace_pattern))  # 输出替换信息
        else:
            unreal.log("{} did not match the search pattern,was skipped".format(asset_name))  # 输出名称不匹配

        unreal.log("Replaced {} of {} assets".format(replaced, num_assets))  # 输出对象名称


rename_assets("Clay", "Water",True)  #Lava:被替换的字符串  Water:替换的字符串 true:是否大小写敏感

蓝图实现:

image.png

image.png image.png

c++实现 www.bilibili.com/video/BV1ZT…