Hierarckyの拡張
ヒエラルキーは1つ1つのオブジェクトに対して、変更を加えることができる。
InitializeOnLoadのクラスを作ってコンストラクタに処理を記載する。
[InitializeOnLoad] public static class ObjectDisplay { static ObjectDisplay() { EditorApplication.hierarchyWindowItemOnGUI += RenderObject; } static void RenderObject(int instanceID, Rect selectArea) { GameObject sceneGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject; if (sceneGameObject == null) return; if (sceneGameObject.TryGetComponent(out IObjectNameEdit obj)) { obj.Render(instanceID,selectArea); } } }
- Iconについて
internal static void CreateFolderWithTemplates(string defaultName, params string[] templates) { var folderIcon = templates != null && templates.Length > 0 ? EditorResources.folderIconName : EditorResources.emptyFolderIconName; var endNameEditAction = ScriptableObject.CreateInstance<DoCreateFolderWithTemplates>(); endNameEditAction.templates = templates; StartNameEditingIfProjectWindowExists(0, endNameEditAction, defaultName, EditorGUIUtility.IconContent(folderIcon).image as Texture2D, null); }
// オブジェクトからAssetPathを得る // Asests/Hoge/Huga.prefab string path = AssetDatabase.GetAssetPath(_obj); Debug.LogWarning(path); // AssetPathからGUIDを得る // ??????????????? GUID.ToString()文字列にする GUID guid = AssetDatabase.GUIDFromAssetPath(path); Debug.LogWarning(guid); Debug.LogWarning(guid.ToString()); // GUIDからAsset var assetPath = AssetDatabase.GUIDToAssetPath(guid.ToString()); Debug.LogWarning(assetPath);
EditorApplication.projectWindowItemOnGUI += RenderWindowObject;
でdeligateを追加すると普通の描画の後に呼ばれる
- ヒエラルキーウィンドウのinstanceIDを使う
GameObject gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;