csharp シーン名を管理するEnumを作成するエディター拡张

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp シーン名を管理するEnumを作成するエディター拡张相关的知识,希望对你有一定的参考价值。

using System;
using System.IO;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;

/// <summary>
/// シーン名を管理する Enum を作成するエディター拡張
/// 
/// ※ こちら ↓ を改変させていただいたものです
/// https://gist.github.com/baba-s/9286120#file-scenenamecreator-cs
/// </summary>
public static class SceneNameEnumCreator
{
    // 無効な文字を管理する配列
    private static readonly string[] INVALUD_CHARS =
    {
        " ", "!", "\"", "#", "$",
        "%", "&", "\'", "(", ")",
        "-", "=", "^",  "~", "\\",
        "|", "[", "{",  "@", "`",
        "]", "}", ":",  "*", ";",
        "+", "/", "?",  ".", ">",
        "<", ",",
    };

    // コマンド名
    private const string ITEM_NAME = "Tools/Create/Scene Name Enum";

    // ファイルパス
    private const string PATH = "Assets/Scripts/Other/SceneNameEnum.cs";

    // ファイル名(拡張子あり)
    private static readonly string FILENAME = Path.GetFileName(PATH);

    // ファイル名(拡張子なし)
    private static readonly string FILENAME_WITHOUT_EXTENSION
        = Path.GetFileNameWithoutExtension(PATH);

    /// <summary>
    /// シーン名を管理する Enum を作成します
    /// </summary>
    [MenuItem ( ITEM_NAME )]
    public static void Create ()
    {
        if ( !CanCreate () ) return;

        CreateScript ();

        EditorUtility.DisplayDialog ( FILENAME, "作成が完了しました", "OK" );
    }

    /// <summary>
    /// スクリプトを作成します
    /// </summary>
    public static void CreateScript ()
    {
        var builder = new StringBuilder();

        builder
            .AppendLine ( "/// <summary>" )
            .AppendLine ( "/// シーン名を管理する Enum" )
            .AppendLine ( "/// </summary>" )
            .AppendLine ( $"public enum {FILENAME_WITHOUT_EXTENSION}" )
            .AppendLine ( "{" );

        foreach ( var n in EditorBuildSettings.scenes
            .Select ( c => Path.GetFileNameWithoutExtension ( c.path ) )
            .Distinct ()
            .Select ( c => new { var = RemoveInvalidChars ( c ), val = c } ) )
        {
            builder.AppendLine ( $"\t{n.var}," );
        }

        builder.AppendLine ( "}" );

        var directoryName = Path.GetDirectoryName(PATH);
        if ( !Directory.Exists ( directoryName ) )
        {
            Directory.CreateDirectory ( directoryName );
        }

        File.WriteAllText ( PATH, builder.ToString (), Encoding.UTF8 );
        AssetDatabase.Refresh ( ImportAssetOptions.ImportRecursive );
    }

    /// <summary>
    /// シーン名を管理する Enum を作成できるかどうかを取得します
    /// </summary>
    [MenuItem ( ITEM_NAME, true )]
    public static bool CanCreate ()
        => !EditorApplication.isPlaying
            && !Application.isPlaying
            && !EditorApplication.isCompiling;

    /// <summary>
    /// 無効な文字を削除します
    /// </summary>
    public static string RemoveInvalidChars ( string str )
    {
        Array.ForEach ( INVALUD_CHARS, c => str = str.Replace ( c, string.Empty ) );
        return str;
    }
}

以上是关于csharp シーン名を管理するEnumを作成するエディター拡张的主要内容,如果未能解决你的问题,请参考以下文章

csharp 毎日作成するファイルを自动リネームする

csharp 【团结】シーンを跨いでもスコアなどのデータを保持することができるスクリプト。参考URL:http://goodscientist.tumblr.com/post/25617673512/

python シーンに存在する文件ノードのテクスチャパス指定のロックを解除するコマンド

r 复数の的Excelシートにデータがある场合にそれらを结合する(同一の列构成である前提)

vbscript VB脚本(http://www.kanaya440.com/contents/tips/vbs/008.html)ーートカットを作成する

csharp クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する