topaz-dev’s

ああああああ

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について

UnityCsReference/ProjectWindowUtil.cs at 6ac92f7229c910266c744d6bb10b69f594404b5b · Unity-Technologies/UnityCsReference · GitHub

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を追加すると普通の描画の後に呼ばれる

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.txtHogeという関数を加えておく。

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