遇到这种资源列表在包里的如何导出
list中无数据
webgl.zip (187.0 KB)
Options->Display all assets
临时造的轮子似乎能导出来。。。但是看他好像有两个结构一个有一些不在清单里面属于其他本地文件(可能)接不知道怎么过滤了
import re
with open(r"webgl", "r", encoding="utf-8", errors="ignore") as f:
content = f.read()
assets = re.findall(r"assets-bundles-[^\x00]*?(?:\_png|\_prefab|\_mp3)", content)
with open(r"webglo.txt", "w",encoding='utf-8') as f:
f.write("\n".join(assets))
你试试看行不行,临时弄得.
import sys
import json
from pathlib import Path
from typing import List, Dict
import UnityPy
import pandas as pd
def load_manifest(ab_path: Path) -> Dict:
env = UnityPy.load(str(ab_path))
for obj in env.objects:
if obj.type.name == "AssetBundleManifest":
return obj.read_typetree()
def parse_manifest(tree: Dict) -> List[Dict]:
index_to_name = {int(idx): name for idx, name in tree.get("AssetBundleNames", [])}
results = []
for entry in tree.get("AssetBundleInfos", []):
idx: int = int(entry[0])
raw_info: Dict = entry[1]
name = index_to_name.get(idx, f"<Unknown:{idx}>")
h_bytes = raw_info["AssetBundleHash"]
hash_hex = "".join(f"{h_bytes[f'bytes[{i}]']:02x}" for i in range(16))
deps_idx = raw_info.get("AssetBundleDependencies", [])
deps_names = [index_to_name.get(d, f"<Unknown:{d}>") for d in deps_idx]
results.append(
{
"index": idx,
"name": name,
"hash": hash_hex,
"deps_index": deps_idx,
"deps_name": deps_names,
}
)
return results
def main() -> None:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("ab_file")
parser.add_argument(
"-o"
)
args = parser.parse_args()
ab_path = Path(args.ab_file).expanduser()
tree = load_manifest(ab_path)
parsed = parse_manifest(tree)
out_path = Path(args.o)
if out_path.suffix.lower() == ".json":
out_path.write_text(json.dumps(parsed, ensure_ascii=False, indent=4))
elif out_path.suffix.lower() == ".csv":
df = pd.json_normalize(parsed)
df.to_csv(out_path, index=False)
if __name__ == "__main__":
main()
先选再导入
感谢两位大佬的指点,目前清单已经成功读出