// Magica Cloth. // Copyright (c) MagicaSoft, 2020-2022. // https://magicasoft.jp using UnityEditor; using UnityEngine; namespace MagicaCloth { /// /// ヒエラルキーへアイコンの表示 /// [InitializeOnLoad] public class DrawClothIconInHierarchy { const int iconSize = 16; static DrawClothIconInHierarchy() { EditorApplication.hierarchyWindowItemOnGUI += DrawIcon; } static void DrawIcon(int instanceId, Rect rect) { rect.width = iconSize; GameObject obj = UnityEditor.EditorUtility.InstanceIDToObject(instanceId) as GameObject; if (obj == null) return; rect.x += EditorStyles.label.CalcSize(obj.name).x; rect.y += 1; rect.x += iconSize + 4; //rect.x += iconSize + 28; foreach (var component in obj.GetComponents()) { if (component is MagicaRenderDeformer || component is MagicaVirtualDeformer || component is MagicaBoneCloth || component is MagicaMeshCloth || component is MagicaMeshSpring || component is MagicaSphereCollider || component is MagicaCapsuleCollider || component is MagicaPlaneCollider || component is MagicaPhysicsManager || component is MagicaBoneSpring || component is MagicaDirectionalWind || component is MagicaAreaWind || component is MagicaAvatar || component is MagicaAvatarParts ) { var icon = AssetPreview.GetMiniThumbnail(component); GUI.Label(rect, icon); rect.x += iconSize; } } } } /// /// テキストのサイズを取得 /// public static class GUIStyleExtensions { public static Vector2 CalcSize(this GUIStyle self, string text) { var content = new GUIContent(text); var size = self.CalcSize(content); return size; } } }