ScriptableObjectの表示される変数を限定する&表示名を変える
はじめに
武器データを管理したいとして、武器の種類と攻撃力と必殺率の3つのパラメータがあり、ScriptableObjectで下のコードのように定義されているとします。
/// <summary>
/// 武器の種類
/// </summary>
public enum WeaponType
{
Sword, // 剣
Bow, // 弓
}
[CreateAssetMenu(fileName = "WeaponData", menuName = "ScriptableObjects/WeaponData")]
[System.Serializable]
public class WeaponData : ScriptableObject
{
public WeaponType WeaponType;
public int attackPower; // 攻撃力
public int criticalProbability; // 必殺率(剣のみ適用)
}
インスペクター上では下の画像のように表示されるはずです。
弓の場合は必殺率が適用されない仕様の場合、CriticalProbabilityは表示する必要がありません。
インスペクター拡張で表示させる
インスペクター拡張によって武器の種類によって表示させる変数を限定することができます。
[CustomEditor(typeof(WeaponData))]
public class DialogueEditor : Editor
{
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(serializedObject.FindProperty("WeaponType"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("attackPower"));
var weaponType = (WeaponType)serializedObject.FindProperty("WeaponType").enumValueIndex;
// 剣の時だけ必殺率を表示
if (weaponType == WeaponType.Sword)
{
EditorGUILayout.PropertyField(serializedObject.FindProperty("criticalProbability"));
}
serializedObject.ApplyModifiedProperties();
}
}
表示名を変更する
このままではインスペクターの表示名がScriptableObject
の変数名と同じになっています。
コードの中身について知らない人でも何のパラメータなのかが分かりやすくなるようにインスペクターでの表示名を変えてみます。
[CustomEditor(typeof(WeaponData))]
public class DialogueEditor : Editor
{
public override void OnInspectorGUI()
{
serializedObject.Update();
serializedObject.FindProperty("WeaponType").enumValueIndex
= (int)(WeaponType)EditorGUILayout.EnumPopup("武器の種類", (WeaponType)serializedObject.FindProperty("WeaponType").intValue);
serializedObject.FindProperty("attackPower").intValue =
EditorGUILayout.IntField("攻撃力", serializedObject.FindProperty("attackPower").intValue);
var weaponType = (WeaponType)serializedObject.FindProperty("WeaponType").enumValueIndex;
if (weaponType == WeaponType.Sword)
{
serializedObject.FindProperty("criticalProbability").intValue =
EditorGUILayout.IntField("必殺率", serializedObject.FindProperty("criticalProbability").intValue);
}
serializedObject.ApplyModifiedProperties();
}
}
EditorGUILayout.PropertyField()
の代わりにEditorGUILayout.IntField()
などを使って入力欄を表示して結果を代入するようにすることで表示名を変えることができます。
Author And Source
この問題について(ScriptableObjectの表示される変数を限定する&表示名を変える), 我々は、より多くの情報をここで見つけました https://qiita.com/sh00t/items/df53c22875eb766941f9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .