Unityのデフォルトの色
GUI.color = EditorGUIUtility.isProSkin ? (Color)new Color32(56, 56, 56, 255) : (Color)new Color32(194, 194, 194, 255);
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;
Unity ScriptTemplates #1
ScriptTemplates
UnityでC#のコードを生成する際のデフォルトのコードを変更することができる。
デフォルトのスクリプトテンプレートは確認することができ直接変更することもできる。自分の環境(Mac, Unity Hub v.2021.3.6f1) の場合は以下に入っている。
/Applications/Unity/Hub/Editor/2021.3.6f1/Unity.app/Contents/Resources/ScriptTemplates
このディレクトリの中には16個のテキストファイルが入ってる。
この中の81-C# Script-NewBehaviourScript.cs.txt
を除いてみると見たことのあるようなテキストデータとなっている。これがC#のスクリプトを生成した時のテンプレートとして使われている。
using System.Collections; using System.Collections.Generic; using UnityEngine; #ROOTNAMESPACEBEGIN# public class #SCRIPTNAME# : MonoBehaviour { // Start is called before the first frame update void Start() { #NOTRIM# } // Update is called once per frame void Update() { #NOTRIM# } } #ROOTNAMESPACEEND#
ここで出てきた#ROOTNAMESPACEBEGIN#
や#SCRIPTNAME#
などは外部から設定される引数だと考えれば良い。あとで触れていく。
カスタムテンプレート
スクリプトテンプレートの場所が分かり変更することが出来たとしても/Applications/Unity/Hub/Editor/2021.3.6f1/Unity.app/Contents/Resources/ScriptTemplates
のデータを書き換えてしまうと、「そのバージョンを使用している全てのUnityプロジェクトに適用されてしまう」、「複数人開発の時にテンプレートを共有することができない」という問題が生じる。そこでプロジェクトごとのテンプレートを作成する。
何も行わない状態で 右クリック->Create->C# ScriptからC#のスクリプトを生成するとNewBehaviourScriptという名前でいつものStart関数やUpdate関数が書かれたコードが生成される。
生成コードをカスタマイズするためにAssets直下にScriptTemplates
というディレクトリを作成する。そして81-C# Script-NewBehaviourScript.cs.txt
というテキストファイルを作成しよう。
中身は元の/Applications/Unity/Hub/Editor/2021.3.6f1/Unity.app/Contents/Resources/ScriptTemplates
にあった81-C# Script-NewBehaviourScript.cs.txt
にHogeという関数を加えておく。
using System.Collections; using System.Collections.Generic; using UnityEngine; #ROOTNAMESPACEBEGIN# public class #SCRIPTNAME# : MonoBehaviour { // Start is called before the first frame update void Start() { #NOTRIM# } // Update is called once per frame void Update() { #NOTRIM# } void Hoge() { #NOTRIM# } } #ROOTNAMESPACEEND#
作成したらUnityに読み込ませるため(?) に一度Unityのエディタを再起動する。その後右クリック->Create->C#ScriptからC#のコードを生成すると、Hoge関数が実装されたものが生成される。 Assets以下のScriptTemplatesの中身を変えることで自由にカスタマイズが可能となる。Update関数たくさんあったら怖いよね。。デフォルトからは消してしまおう。など。。