はじめに
「ゲーム停止中はインスペクターから値を変更したいけど、再生中には変更を禁止させたいなぁ」
と思ったので、エディタ再生中に値の入力を禁止させるAttributeを作ってみました。
本記事のUnityのバージョンは Unity5.5.0b7 です
前提 - Attribute(属性)について
Unityでは変数にSerializeField属性をつけるとInspector上から数値を入力できるようになります。
NewBehaviourScript.cs
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
[SerializeField]
private int x;
}
今回作ったものについて
今回はConstantField
というAttributeを作ってみました。
以下のように使います。
NewBehaviourScript.cs
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
[ConstantField]
[SerializeField]
private int x;
}
以上でConstantField
についての解説は終わりです。
ソースコード
以下のスクリプトをプロジェクトに入れてください
ConstantFieldAttribute.cs
using UnityEngine;
/// <summary>
/// エディター再生時に値の変更を禁止するAttribute
/// </summary>
public class ConstantFieldAttribute : PropertyAttribute
{
}
以下のスクリプトをプロジェクトのEditorフォルダ以下に入れてください
ConstantFieldDrawer.cs
using UnityEngine;
using UnityEditor;
/// <summary>
/// ConstantField属性の描画を行うクラス
/// </summary>
[CustomPropertyDrawer(typeof(ConstantFieldAttribute))]
public class ConstantFieldDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
label.text += " (Constant)";
EditorGUI.BeginDisabledGroup(EditorApplication.isPlaying);
EditorGUI.PropertyField(position, property, label);
EditorGUI.EndDisabledGroup();
}
}
この二つのスクリプトをプロジェクトに入れれば、ConstantField
が使えるようになります。(完)
参考URL
自分だけのPropertyDrawerを作ろう!
http://qiita.com/kyusyukeigo/items/8be4cdef97496a68a39d