はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】C#スクリプトからC#スクリプトを生成する(エディタ拡張)

はじめに

今回はC#スクリプトからC#スクリプトを生成してみる記事になります!

これができたら、ビジュアルスクリプティングみたいなノードベースでコーディングができるようになったりとかなり夢が広がりますよね。

またちょうどネタ系のC#スクリプト生成のエディタ拡張を作っていたりします。

というわけでその根幹にあるものを見ていきましょう!

コード

かなりシンプルな内容なので、コードをいきなり見ても大丈夫だと思います。

using UnityEngine;
using UnityEditor;
using System.IO;

public class ScriptGenerator : MonoBehaviour {

    // @""とすることで、複数行を書ける
    // ただ「"」は「""」として書きます
    private const string CODE = @"
public class Sample
{
    public void Start() {
        Debug.Log(""Start"");
    }
}
";

    // メニューの「Tools -> Generate Script」を選択するとGenerateメソッドが呼ばれる
    [MenuItem("Tools/Generate Script")]
    private static void Generate()
    {
        // 作成するアセットのパス
        var filePath = "Assets/Sample.cs";

        // もし名前(パス)が重複していた場合に、自動で語尾に「Sample1.cs」みたく数字をつけてくれる
        var assetPath = AssetDatabase.GenerateUniqueAssetPath(filePath);

        // アセット(.cs)を作成する
        File.WriteAllText(assetPath, CODE);
        
        // 変更があったアセットをインポートする(UnityEditorの更新)
        AssetDatabase.Refresh();
    }
}

このコードを実行するには、メニューの「Tools -> Generate Script」を選択してください。
f:id:hanaaaaaachiru:20191220220915p:plain

f:id:hanaaaaaachiru:20191220220940p:plain

基本的にはパスを指定してコード(.cs)を保存しているだけですが、少し特有の箇所があるので注意してください。

ただアセットを保存するときのおまじないみたく考えてOKだと思います。

さいごに

最近UIBuilderという機能を触っていたので、そのなりゆきでエディタ拡張を少し触っていました。

また今度UIElementsに関する記事を書きたいと思うので、興味がある方は是非!