UNPKG

unity-find-fault

Version:

A tool to find fault in unity project.

105 lines 4.78 kB
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