TATIKUNLOG.

主にゲーム作りについて書き留めるブログ。

起動した際に表示される『Readme』の実体を探る【Unity】


PR

URPのSampleシーンを導入したときや 公式の出しているパーティクルパックを導入した際に、 インスペクタ上に『Readme』って出ますよね。

アレの実体が何となく気になったので探ってみました。

URPのSampleシーンではこんな感じで表示されます

環境

Unity2021.2.0b16

Universal RP 12.1.0

図解

どのように実装されているのかを図にするとこんな感じになります。

ScriptableObjectで作成された Readme.assetReadmeEditor.cs でUnityエディタ起動時に読み込んで、インスペクタ上に表示しています。

ScriptableObjectについては下記のブログ記事がまとまっていて分かりやすいです。

kan-kikuchi.hatenablog.com

Readmeの実体を探る

エディタ拡張を利用して変換されているため、ぱっと見では分かりませんがReadmeの実体はテキストデータです。

試しにエディタ拡張の部分を無効化することで、変換前のインスペクタを表示してみました(コメントアウトで無理やり無効化しました)。

変換前後での比較、ヘッダやハイパーリンクなどの対応付けが分かります

左側がエディタ拡張によって変換される前のReadme.assetです。ReadmeEditor.csによって右のような表示に変換されています。

左右の画像を見比べてみると、UPと書かれたアイコンの画像はIconで、"UniversalRenderPipelineTemplete"というタイトルはTItleで、本文はSectionsの中にリスト化されたデータとして保持されているのが確認できました。

内容を書き換えてみる

f:id:tat1kun:20211021030511p:plain:h200f:id:tat1kun:20211021030621p:plain:h200
書き換えた結果

特別書くことが思い浮かばなかったのでちょっとアレですが、書き換えることはできました。

起動時に表示される仕組み

起動時に毎回表示される仕組みは下記のコードによって実装されています。

※コードはReadmeEditor.csから一部を抜粋したものです


static ReadmeEditor()
{
    EditorApplication.delayCall += SelectReadmeAutomatically;//デリゲートを登録
}

/* 中略 */


static void SelectReadmeAutomatically()
{
    if (!SessionState.GetBool(kShowedReadmeSessionStateName, false))
    {
        var readme = SelectReadme();//Readmeを探す
        SessionState.SetBool(kShowedReadmeSessionStateName, true);

        if (readme && !readme.loadedLayout)
        {
            LoadLayout();//Readmeを読み込めていれば表示
            readme.loadedLayout = true;
        }
    }
}

/* 中略 */

static Readme SelectReadme()
{
    var ids = AssetDatabase.FindAssets("Readme t:Readme");//Readme.assetを探す
    if (ids.Length == 1)
    {
        var readmeObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(ids[0]));

        Selection.objects = new UnityEngine.Object[] { readmeObject };

        return (Readme)readmeObject;
    }
    else
    {
        Debug.Log("Couldn't find a readme");
        return null;
    }
}

静的コンストラクタのReadmeEditorからデリゲートでエディタ起動時にSelectReadmeAutomaticallyが呼ばれるようになっています。 SelectReadmeAutomaticallyの中ではSelectReadmeでReadme.assetを探しているのが分かります。

docs.unity3d.com

tsubakit1.hateblo.jp

おわりに

これで実体がわかったので心置きなく消したりできますね。

後、Readmeの実装はエディタ拡張の簡単な活用例の一つとして参考になると思いました。