ScriptableObject의 표시되는 변수를 제한하고 표시 이름 변경
9389 단어 ScriptableObjectUnity
소개
무기 데이터를 관리하고 싶다면 무기 유형과 공격력과 필살률의 세 가지 매개 변수가 있으며 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()
등을 사용하여 입력란을 표시하고 결과를 대입하도록 함으로써 표시명을 바꿀 수 있습니다.
Reference
이 문제에 관하여(ScriptableObject의 표시되는 변수를 제한하고 표시 이름 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sh00t/items/df53c22875eb766941f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/// <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; // 必殺率(剣のみ適用)
}
인스펙터 확장을 통해 무기 유형에 따라 표시할 변수를 제한할 수 있습니다.
[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()
등을 사용하여 입력란을 표시하고 결과를 대입하도록 함으로써 표시명을 바꿀 수 있습니다.
Reference
이 문제에 관하여(ScriptableObject의 표시되는 변수를 제한하고 표시 이름 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sh00t/items/df53c22875eb766941f9
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[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();
}
}
Reference
이 문제에 관하여(ScriptableObject의 표시되는 변수를 제한하고 표시 이름 변경), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sh00t/items/df53c22875eb766941f9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)