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関数たくさんあったら怖いよね。。デフォルトからは消してしまおう。など。。
