コガネブログ

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

【Unity】Inspector に指定された関数を実行するボタンを表示する PropertyDrawer

f:id:baba_s:20140730151439g:plain

Unity の Inspector ビューにボタンを表示して
指定された関数を実行できるようにする PropertyDrawer を作成しました

上記の ButtonAttribute.cs を Unity プロジェクトに追加して
下記のようなスクリプトを書くことで
Inspector に指定された関数を実行するボタンを表示できるようになります

using UnityEngine;

/// <summary>
/// ポケモンを管理するクラス
/// </summary>
public sealed class Pokemon : MonoBehaviour
{
    [Button( "Init", "リセット" )]
    public int ResetButton1;
    
    [Button( "Reset", "ピカチュウ", "ピカチュウ", 0.4f, 6 )]
    public int ResetButton2;
    
    [Button( "Reset", "ミュウツー", "ミュウツー", 1.5f, 33 )]
    public int ResetButton3;
    
    public string Name;     // 名前
    public float  Height;   // 高さ
    public float  Weight;   // 重さ
    
    /// <summary>
    /// パラメータを初期化する時に呼び出されます
    /// </summary>
    private void Init()
    {
        Reset( "", 0, 0 );
    }
    
    /// <summary>
    /// パラメータを設定する時に呼び出されます
    /// </summary>
    private void Reset( string name, float height, float weight )
    {
        Name    = name;
        Height  = height;
        Weight  = weight;
    }
}
[Button( "Init", "リセット" )]
public int ResetButton1;

このように記述すると「リセット」と書かれたボタンを Inspector に表示して
ボタンが押されたら Init 関数を実行できるようになります

[Button( "Reset", "ピカチュウ", "ピカチュウ", 0.4f, 6 )]
public int ResetButton2;

このように記述すると「ピカチュウ」と書かれたボタンを Inspector に表示して
ボタンが押されたら「"ピカチュウ", 0.4f, 6」を引数に渡して
Reset 関数を実行できるようになります

Button 属性が適用された変数(ResetButton1やResetButton2)は
Inspector 上で編集できなくなるのでそこだけ注意が必要です