LoginSignup
6
5

More than 5 years have passed since last update.

【Unity拡張】ゲーム再生中に値の変更を禁止するAttributeを作ってみた

Posted at

はじめに

「ゲーム停止中はインスペクターから値を変更したいけど、再生中には変更を禁止させたいなぁ」
と思ったので、エディタ再生中に値の入力を禁止させるAttributeを作ってみました。

本記事のUnityのバージョンは Unity5.5.0b7 です

前提 - Attribute(属性)について

Unityでは変数にSerializeField属性をつけるとInspector上から数値を入力できるようになります。

NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [SerializeField]
    private int x;
}

image

今回作ったものについて

今回はConstantFieldというAttributeを作ってみました。

以下のように使います。

NewBehaviourScript.cs
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    [ConstantField]
    [SerializeField]
    private int x;
}

これを使うとエディタ停止中は通常通り入力ができて、
image

エディタ再生中には値の編集ができなくなります。
image



以上で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

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5