unity-find-fault
Version:
A tool to find fault in unity project.
59 lines • 2.52 kB
JavaScript
import fg from "fast-glob";
import fs from "fs-extra";
import path from "path";
import { UnityHelper } from "./UnityHelper.js";
import { Record } from "./Record.js";
import { toolchain } from "../toolchain.js";
import { HardCodeCollector } from "./HardCodeCollector.js";
export class GenerateStriper {
async removeUseless(option, ext, r) {
// 收集用到的guid
//#region
const usedGUIDMap = await UnityHelper.collectUsedGUID(option.projectRoot);
//#endregion
if (toolchain.opts.cfg != null) {
// 部分写死保留的prefab
if (toolchain.opts.cfg.keep != null) {
for (const k of toolchain.opts.cfg.keep) {
const keeps = await fg(k, { cwd: toolchain.opts.projectRoot });
for (const f of keeps) {
if (f.endsWith('.meta')) {
const guid = await UnityHelper.readGUID(path.join(toolchain.opts.projectRoot, f));
usedGUIDMap[guid] = [];
}
}
}
}
}
// 采集代码中所有硬编码字符串
//#region
await HardCodeCollector.ensureData();
//#endregion
let cnt = 0;
const assetsRoot = path.join(option.projectRoot, 'Assets');
const files = await fg(`**/*${ext}`, { cwd: assetsRoot, ignore: ['IGSoft_Resources/**/*.*', 'Spine Examples/**/*.*', 'TextMesh Pro/**/*.*', 'Third/**/*', 'AssetSources/map/**/*.*'] });
for (const f of files) {
const file = path.join(assetsRoot, f);
if (f.endsWith('createRole/Profile.asset')) {
console.log('bbb');
}
const guid = await UnityHelper.readGUID(file + '.meta');
if (!usedGUIDMap[guid]) {
// 未被直接引用,再检查是否被代码中使用
const usedByHardcode = HardCodeCollector.isUsed(file);
if (usedByHardcode)
continue;
if (!r.isUsed || r.isRelated(guid)) {
await r.collect(file);
await fs.unlink(file);
await fs.unlink(file + '.meta');
await Record.Instance.recordGUID(guid, file);
console.log(file);
cnt++;
}
}
}
console.log(`${cnt} ${ext} removed`);
}
}
//# sourceMappingURL=GenerateStriper.js.map