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 クラスのプロパティ,フィールド情报を取得する:リフレクションを使用する