Редактор свойств в Unity
Несколько способов добавления полей объекта в визуальный редактор.
1. Сделать поля публичными
Создаем класс
public class Weapon : MonoBehaviour { public int NormalAmmoDamage; public int NormalAmmoRange; public int SpecialAmmoDamage; public int SpecialAmmoRange; }
В редакторе он будет выглядеть так:
В редакторе видны публичные поля, подписи к ним берутся из имен полей.
2. Выделение отдельных классов
Этот способ помогает тогда, когда хочется сгруппировать поля. Выделяем их в отдельные классы:
public class Weapon : MonoBehaviour { public NormalAmmo NormalAmmo = new NormalAmmo(); public SpecialAmmo SpecialAmmo = new SpecialAmmo(); } [System.Serializable] public class NormalAmmo { public int Damage; public int Range; } [System.Serializable] public class SpecialAmmo { public int Damage; public int Range; }
Классы для группировки нужно пометить как сериализуемые.
В редакторе это будет выглядеть так:
3. Кастомный редактор.
Когда требуется более сложное отображение полей в редакторе, приходится писать свой редактор. Создаем папку Assets/Editor, в ней создаем скрипт WeaponEditor.cs с таким содержимым:
using UnityEditor; [CustomEditor(typeof(Weapon))] public class WeaponEditor : Editor { public override void OnInspectorGUI() { Weapon weapon = (Weapon)target; EditorGUILayout.LabelField("Normal Ammo"); weapon.NormalAmmoDamage = EditorGUILayout.IntSlider(" Damage", weapon.NormalAmmoDamage, 1, 10); weapon.NormalAmmoRange = EditorGUILayout.IntSlider(" Range", weapon.NormalAmmoRange, 1, 10); EditorGUILayout.LabelField("Special Ammo"); weapon.SpecialAmmoDamage = EditorGUILayout.IntSlider(" Damage", weapon.SpecialAmmoDamage, 1, 10); weapon.SpecialAmmoRange = EditorGUILayout.IntSlider(" Range", weapon.SpecialAmmoRange, 1, 10); } }
Здесь создаются 2 надписи и 4 слайдера для целочисленных полей. После создания редактора пришлось перезапустить юнити.
Результат выглядит так: