unity-find-fault
Version:
A tool to find fault in unity project.
105 lines • 4.78 kB
JavaScript
import { PrefabParser } from "../unity/PrefabParser.js";
import { UnityHelper } from "./UnityHelper.js";
export class PrefabSearcher {
UGUIAltasGUID = null;
async findImageUsages(prefabFile, guids) {
this.UGUIAltasGUID = await UnityHelper.getScriptGUID('UGUIAltas.cs');
const usages = [];
const pp = new PrefabParser();
const prefab = await pp.parse(prefabFile);
for (const e of prefab) {
// console.log('check top element:', e.type, e.fileID);
this.findImageUsageInternal(e, guids, '', usages);
}
return usages;
}
findImageUsageInternal(element, guids, path, usages) {
if (element.type == 'GameObject') {
path += '.' + element.object.m_Name;
const image = element.components['MonoBehaviour_' + "fe87c0e1cc204ed48ad3b37840f39efc" /* EGUID.Image */];
if (image != null) {
const spriteGUID = image.object.m_Sprite.guid;
if (guids.includes(spriteGUID)) {
usages.push({ type: 'Image', path, image: spriteGUID });
}
}
const rawImage = element.components['MonoBehaviour_' + "1344c3c82d62a2a41a3576d8abb8e3ea" /* EGUID.RawImage */];
if (rawImage != null) {
const textureGUID = rawImage.object.m_Texture.guid;
if (guids.includes(textureGUID)) {
usages.push({ type: 'RawImage', path, image: textureGUID });
}
}
const toggle = element.components['MonoBehaviour_' + "9085046f02f69544eb97fd06b6048fe2" /* EGUID.Toggle */];
if (toggle != null) {
const spriteState = toggle.object.m_SpriteState;
if (guids.includes(spriteState.m_HighlightedSprite.guid)) {
usages.push({ type: 'Toggle', path, image: spriteState.m_HighlightedSprite.guid });
}
if (guids.includes(spriteState.m_PressedSprite.guid)) {
usages.push({ type: 'Toggle', path, image: spriteState.m_PressedSprite.guid });
}
if (guids.includes(spriteState.m_SelectedSprite.guid)) {
usages.push({ type: 'Toggle', path, image: spriteState.m_SelectedSprite.guid });
}
}
if (this.UGUIAltasGUID) {
const uguiAltas = element.components['MonoBehaviour_' + this.UGUIAltasGUID];
if (uguiAltas) {
for (const sp of uguiAltas.object.sprites) {
if (guids.includes(sp.guid)) {
usages.push({ type: 'UGUIAltas', path, image: sp.guid });
break;
}
}
}
}
const spriteRenderer = element.components['SpriteRenderer'];
if (spriteRenderer != null) {
const spriteGUID = spriteRenderer.object.m_Sprite.guid;
if (guids.includes(spriteGUID)) {
usages.push({ type: 'SpriteRenderer', path, image: spriteGUID });
}
}
const spriteMask = element.components['SpriteMask'];
if (spriteMask != null) {
const spriteGUID = spriteMask.object.m_Sprite.guid;
if (guids.includes(spriteGUID)) {
usages.push({ type: 'SpriteMask', path, image: spriteGUID });
}
}
if (element.children != null) {
for (const c of element.children) {
this.findImageUsageInternal(c, guids, path, usages);
}
}
}
}
async findScriptUsages(prefabFile, guids) {
const usages = [];
const pp = new PrefabParser();
const prefab = await pp.parse(prefabFile);
for (const e of prefab) {
// console.log('check top element:', e.type, e.fileID);
this.findScriptUsageInternal(e, guids, '', usages);
}
return usages;
}
findScriptUsageInternal(element, guids, path, usages) {
if (element.type == 'GameObject') {
path += '.' + element.object.m_Name;
for (const guid of guids) {
const mono = element.components['MonoBehaviour_' + guid];
if (mono != null) {
usages.push({ type: 'MonoBehaviour', path, image: guid });
}
}
if (element.children != null) {
for (const c of element.children) {
this.findScriptUsageInternal(c, guids, path, usages);
}
}
}
}
}
//# sourceMappingURL=PrefabSearcher.js.map