Files
2026-10-31 17:03:41 +01:00

49 lines
1.5 KiB
Python

import re, unreal
FOLDERS = {
"World": "Maps",
"LevelSequence": "Sequences",
"Material": "Materials",
"MaterialInstanceConstant": "Materials",
"NiagaraSystem": "Effects",
"Blueprint": "Blueprints",
}
PREFIXES = {
"World": "",
"Material": "M_",
"MaterialInstanceConstant": "MI_",
"StaticMesh": "SM_",
"SkeletalMesh": "SK_",
"Blueprint": "BP_",
"NiagaraSystem": "NS_",
"LevelSequence": "LS_",
}
def to_pascal_case(name):
parts = re.split(r"[_\-\s]+", name)
return "".join(p[:1].upper() + p[1:] for p in parts if p)
lib = unreal.EditorAssetLibrary
for path in lib.list_assets("/Game", recursive=True):
path = path.split(".")[0]
name = path.rsplit("/", 1)[-1]
data = lib.find_asset_data(path)
cls = str(data.asset_class_path.asset_name)
# instance assets are renamed after their parent, not their own name
if cls == "MaterialInstanceConstant":
parent = lib.load_asset(path).get_editor_property("parent")
base = re.sub(r"^(M_|MI_)", "", parent.get_name()) if parent else name
suffix = name[len(base):] if name.lower().startswith(base.lower()) else ""
name = base + (f"_{suffix.capitalize()}" if suffix else "")
name = re.sub(r"^(" + "|".join(p for p in PREFIXES.values() if p) + ")", "", name)
name = to_pascal_case(name)
name = PREFIXES.get(cls, "") + name
folder = FOLDERS.get(cls, "Misc")
dest = f"/Game/{folder}/{name}"
if path != dest:
lib.rename_asset(path, dest)