UNPKG

unity-find-fault

Version:

A tool to find fault in unity project.

43 lines 1.77 kB
import fg from 'fast-glob'; import fs from 'fs-extra'; import path from 'path'; import { PrefabParser } from '../unity/PrefabParser.js'; import { toolchain } from '../toolchain.js'; export class PrefabFixer { async removeRedundantNodes() { const prefabRoot = path.join(toolchain.opts.projectRoot, 'Assets'); const prefabs = await fg('**/*.prefab', { cwd: prefabRoot }); for (const prefab of prefabs) { const file = path.join(prefabRoot, prefab); const content = await fs.readFile(file, 'utf-8'); // 收集用到的fileID const results = content.matchAll(/(?<=fileID: )\d+/g); const usedFIDMap = {}; for (const rst of results) { usedFIDMap[rst[0]] = true; } const lines = content.split(/\r?\n/); let markDeleted = false, linesToBeDeleted = []; for (let i = 0, len = lines.length; i < len; i++) { const rst = lines[i].match(PrefabParser.SectionHeader); if (rst != null) { if (!usedFIDMap[rst[2]]) { markDeleted = true; } else { markDeleted = false; } } if (markDeleted) { linesToBeDeleted.push(i); } } if (linesToBeDeleted.length > 0) { console.log('redundant nodes detected:', prefab); const newLines = lines.filter((value, index) => !linesToBeDeleted.includes(index)); await fs.writeFile(file, newLines.join('\n') + '\n', 'utf-8'); } } } } //# sourceMappingURL=PrefabFixer.js.map