コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】【NGUI】アトラスに含まれているスプライト名と書式指定関数を管理するクラスを自動生成するエディタ拡張

はじめに

var uiSprite = GetComponent<UISprite>();

uiSprite.spriteName = "cursor_right";

uiSprite.spriteName = "cursor_" + dirType.ToString();

Unity で NGUI を使用してゲームを開発していると
上記のように、プログラムからスプライトの名前を変更することがあります

この時に、文字列を直に入力してしまうと誤字脱字が生まれる可能性があります

そのため、僕は Unity のエディタ拡張を使用して
すべてのアトラスのスプライト名と書式指定関数を自動生成するエディタ拡張を作って使用しています

var uiSprite = GetComponent<UISprite>();

uiSprite.spriteName = CommonAtlas.cursor_right;

uiSprite.spriteName = CommonAtlas.get_cursor( dirType.ToString() );

この機能を使うと↑のように定数や関数を使用してプログラムを記述できるため
タイプミスによる誤字脱字を防いでゲーム開発を効率的に行えるようになります

今回はそのエディタ拡張の機能を紹介していきます

使い方

SpriteNameCreator.cs · GitHub

こちらの GitHub に公開されている SpriteNameCreator.cs を
Unity プロジェクトの Editor フォルダに追加します

f:id:baba_s:20170829115315p:plain

そして、SpriteNameCreator.cs の下記の箇所を Unity プロジェクトに合わせて修正します

//====================================================================================
// 定数(const)
//====================================================================================
private const string ITEM_NAME  = "Tools/Create Sprite Name";
private const string PATH       = "Assets/Scripts/SpriteName.cs";

//====================================================================================
// 定数(static readonly)
//====================================================================================
private static readonly string[] ATLAS_PATH_LIST = new []
{
    "Assets/Atlases/", 
};
定数 説明
ITEM_NAME メニューの名前
PATH スクリプトの出力先のパス
ATLAS_PATH_LIST アトラスが管理されているフォルダのパス

あとは、Unity メニューからコマンドを実行すれば
スプライト名と書式指定関数を管理するスクリプトが生成されます

f:id:baba_s:20170829115910p:plain

f:id:baba_s:20170829120007p:plain

f:id:baba_s:20170829120015p:plain

生成されたスクリプトを開くと
下記のようにスプライト名と書式指定関数が記述されていることがわかります

/// <summary>
/// CommonAtlas のスプライト名を管理するクラス
/// </summary>
public static partial class CommonAtlas
{
    public const string cursor_down = "cursor_down";
    public const string cursor_left = "cursor_left";
    public const string cursor_right = "cursor_right";
    public const string cursor_up = "cursor_up";
    
    /// <summary>"cursor_{0}"</summary>
    public static string get_cursor( object arg0 ) {
        return string.Format( "cursor_{0}", arg0 );
    }
    
}

これで下記のようにプログラムを記述できるようになります

var uiSprite = GetComponent<UISprite>();

uiSprite.spriteName = CommonAtlas.cursor_right;

uiSprite.spriteName = CommonAtlas.get_cursor( dirType.ToString() );

まとめ

今回は NGUI のアトラスのスプライト名を扱いやすくするエディタ拡張を紹介させていただきましたが
時間があれば uGUI 版のエディタ拡張も記事にしようと思います

関連記事