Как сохранить выбранный эелемент в enum?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как сохранить выбранный эелемент в enum?

Сообщение V0odo0 17 сен 2011, 14:00

Добрый день всем! Недавно начал разбираться в едитор скриптинге, вроде бы всё просто и понятно, но столкнулся с одной проблемой: Есть перечисляемый тип enum (в MonoBehaivour скрипте). С помощью EditorGUILayout.EnumPopup в едитор скрипте делаю доступным для редактирования в инспекторе MonoBehaivour, создав дубликат enum'a в едитор скрипте. Проблема в том, что в моно тип меняется, но не сохраняется, т.е. переключившись с объекта на что то другое и обратно, тип возвращается на первый в списке и, тем самым, меняется и в моно скрипте. Есть ли спобос сохранить выбранный элемент в едитор скрипте? Пробовал сохранять в отдельную переменную и присваивать при появлении списка - ничего не выходит. При этом другие типы переменных сохраняются независимо ни от чего, а enum - не хочет :-o
[ My Unity Assets ]
[ Voodoo Games ]
Аватара пользователя
V0odo0
UNITрон
 
Сообщения: 202
Зарегистрирован: 25 мар 2011, 16:14
  • ICQ

Re: Как сохранить выбранный эелемент в enum?

Сообщение artk 17 сен 2011, 16:51

Покажите скрип, то место где объявляется переменная.
op = EditorGUILayout.EnumPopup("Primitive to create:", op);
может у вас локальная переменная op?
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

Re: Как сохранить выбранный эелемент в enum?

Сообщение AndreyMust19 17 сен 2011, 21:10

Хоть enum - это тот же int, enum-типы не сериализуются.
Лучше сохраняйте значение перечисления в int-переменную приведением типа и обратно.
Нужна помощь? Сами, сами, сами, сами, сами... делаем все сами
AndreyMust19
Адепт
 
Сообщения: 1119
Зарегистрирован: 07 июн 2011, 13:19

Re: Как сохранить выбранный эелемент в enum?

Сообщение Neyl 18 сен 2011, 07:01

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

public class TestEnum : MonoBehaviour
{
    public enum SquadEnum { Alpha, Beta, Gamma, Delta }
    public SquadEnum squad;
}


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

[CustomEditor(typeof(TestEnum))]
public class TestEnumInspector : Editor
{
    TestEnum subject;

    void OnEnable()
    {
        subject = target as TestEnum;
    }

    public override void OnInspectorGUI()
    {
        subject.squad = (TestEnum.SquadEnum)EditorGUILayout.EnumPopup("Squad name:", subject.squad);
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
}
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: Как сохранить выбранный эелемент в enum?

Сообщение V0odo0 18 сен 2011, 18:20

Большущее спасибо Neyl! ^:)^ Длина кода уменьшилась в 3 раза. Но есть еще один вопрос на засыпку: Как вообще происходит сохранение функций в Editor классе? К примеру, EditorGUILayout.Toggle не сохраняет True. И вообще, когда мы переключаемся на другой объект и не видим скрипта, то Editor скрипт завершает свою работу? Как допустим, OnDisable в рантайме.
[ My Unity Assets ]
[ Voodoo Games ]
Аватара пользователя
V0odo0
UNITрон
 
Сообщения: 202
Зарегистрирован: 25 мар 2011, 16:14
  • ICQ


Вернуться в Почемучка

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

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