Кастомизация инспектора

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

Кастомизация инспектора

Сообщение 161Pyc 21 июн 2017, 00:11

Доброго времени суток! Столкнулся с некоторым недопониманием! Нужно чтобы при выборе в редакторе из enum списка, последующие значения менялись. Пример: если мы выбрали в списке enum значение Pistol, то открывались переменные public float bullet и т.д, если же мы выбрали значение Rifle, то последующие значения будут совсем другие. Разумеется делаю все при помощи скрипта с классом MonoBehaviour, и скрипта с классом Editor.

Основной скрипт:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections.Generic;
using System.Collections;
using UnityEditor;

public class WeaponModification : MonoBehaviour {

        public Transform target;
        public enum WeaponType
        {
                Pistol, Rifle, Shotgun
        }
        public WeaponType weaponType;

        // Use this for initialization
        void Start () {
                if(target == null){
                        target = transform;
                }
        }
       
        // Update is called once per frame
        void Update () {
                if(weaponType == WeaponType.Pistol)
                        {
                                Pistol();
                        }
                if(weaponType == WeaponType.Rifle)
                        {
                                Rifle();
                        }
                if(weaponType == WeaponType.Shotgun)
                        {
                                Shotgun();
                        }
        }

        void Pistol()
        {

        }

        void Rifle()
        {

        }

        void Shotgun()
        {

        }
}

[System.Serializable]
public class ListButtons{
        public Transform ActiveButton;
        public Transform[] ModButton;
}
 


Скрипт на модификацию инспектора:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(WeaponModification))]

public class WeaponModificationEditor : Editor {

        public override void OnInspectorGUI()
        {

                DrawDefaultInspector();
                WeaponModification t = (WeaponModification)target;

                if(t.weaponType == WeaponModification.WeaponType.Pistol) //если мы выбираем значение pistol
                {
                        new ListButtons();
                }
                if(t.weaponType == WeaponModification.WeaponType.Rifle)
                {
                       
                }
                if(t.weaponType == WeaponModification.WeaponType.Shotgun)
                {
                       
                }
        }


}
 


В Юнити - новичок, так что строго не судите. Пробовал через класс ListButtons, но он ничего не выдает.
161Pyc
UNец
 
Сообщения: 2
Зарегистрирован: 05 сен 2015, 21:22

Re: Кастомизация инспектора

Сообщение samana 21 июн 2017, 08:58

161Pyc писал(а): Пример: если мы выбрали в списке enum значение Pistol, то открывались переменные public float bullet и т.д

Для этого вам сначала нужно создать эту переменную bullet в скрипте WeaponModification (я её там не увидел). А в скрипте эдитора конечно убрать отрисовку по-умолчанию DrawDefaultInspector() и все нужные поля рисовать самостоятельно, например

Синтаксис:
Используется csharp
public override void OnInspectorGUI()
{

    WeaponModification t = (WeaponModification)target;

    if(t.weaponType == WeaponModification.WeaponType.Pistol) //если мы выбираем значение pistol
    {
            // рисуете поле для переменной bullet
    }
    if(t.weaponType == WeaponModification.WeaponType.Rifle)
    {
           // рисуете поле для какой-то другой переменной
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Кастомизация инспектора

Сообщение 161Pyc 23 июн 2017, 16:35

Я так понимаю при отключении прорисовки по умолчанию, пропадут и переменные из основного скрипта, но мне нужно чтобы они остались, и при этом менялось все после enum списка, или такое вообще невозможно?

PS. Уже разобрался сам. Огромное спасибо за помощь!
161Pyc
UNец
 
Сообщения: 2
Зарегистрирован: 05 сен 2015, 21:22


Вернуться в Editor

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1