【Unity】【エディタ拡張】スクリプトからスクリプトファイル(.cs)を生成する

スクリプトからcsファイルを生成する方法です。

ソースコード

using UnityEngine;
using UnityEditor;
using System.IO;

public class ScriptGenerator : MonoBehaviour {

    public static readonly string CODE_TEMPLATE = @"
public class #CLASS_NAME#
{
  public void #METHOD_NAME#() {
  }
}
";
    
    [MenuItem("Assets/Generate Sample Script")]
    private static void GenerateSampleScript()
    {
        var filePath = "Assets/GenerateTest/Sample.cs";
        var className = "SampleClass";
        var methodName = "SampleMethod";
        
        // フォルダを作成
        var folderPath = Path.GetDirectoryName(filePath);
        CreateFolder(folderPath);

        // アセットのパスを作成
        var assetPath = AssetDatabase.GenerateUniqueAssetPath(filePath);
        
        // コードテンプレートを置換
        var code = CODE_TEMPLATE.Replace(@"#CLASS_NAME#", className).Replace(@"#METHOD_NAME#", methodName);

        File.WriteAllText(assetPath, code);
        AssetDatabase.Refresh();
    }

    /// <summary>
    /// 指定されたパスのフォルダを生成する
    /// </summary>
    /// <param name="path">フォルダパス(例: Assets/Sample/FolderName)</param>
    private static void CreateFolder(string path)
    {
        var target = "";
        var splitChars = new char[]{ Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar };
        foreach (var dir in path.Split(splitChars)) {
            var parent = target;
            target = Path.Combine(target, dir);
            if (!AssetDatabase.IsValidFolder(target)) {
                AssetDatabase.CreateFolder(parent, dir);
            }
        }
    }
}

説明はコメントの通りです。 難しいことはやっていません。

結果

右クリックからメニューを選択すると、このようなcsファイルが生成されます。

public class SampleClass
{
    public void SampleMethod() {
    }
}