Unity
GameDev.ru / Сообщества / Unity / Форум / PropertyDrawer

PropertyDrawer

cNoNimУчастникwww21 мар. 201822:29#0
Подскажите плиз, а то я читая доку по юнити и кучу разрозненных форумов, что то не понимаю
Вот допустим я хочу что бы Quaternion рисовался в инспекторе так же как рисуется Rotation у трансформа,
запилил аттрибут
public class AsEulerAnglesAttribute : PropertyAttribute {}
и PropertyDrawer
[CustomPropertyDrawer(typeof(AsEulerAnglesAttribute))]
public class AsEulerAnglesDrawer : PropertyDrawer
{
  public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
  {
    if (property.propertyType != SerializedPropertyType.Quaternion)
    {
      EditorGUI.PropertyField(position, property, label);
      return;      
    }
  
    EditorGUI.BeginProperty(position, label, property);    
    EditorGUI.BeginChangeCheck();    
    var euler = EditorGUI.Vector3Field(position, label, property.quaternionValue.eulerAngles);
    if (EditorGUI.EndChangeCheck())
      property.quaternionValue = Quaternion.Euler(euler);
    EditorGUI.EndProperty();
  }
}
Что здесь еще нужно?
А то я смотрю статьи там куча костылей если редактируется несколько обжей,
Какие то костыли для сохранения Undo инфы
но я вроде потыкал текущую реализацию вроде и много обжей редактируется и отмена работает, я чего то не знаю?

Ну и до кучи, подобная реализация ведет себя не совсем так как Rotation у трансформа, допустим там вращение по оси можно в минус загнать,
и оси более или менее независимы,
а тут я вбиваю отрицательное число оно перескакивает на 360-x и одну ось крутишь, вторая тоже скачет
В общем то я понимаю что можно отдельно каждую ось выводить, но где хранить значения этих полей я не очень понимаю

/ Форум / Unity / Программирование

2001—2018 © GameDev.ru — Разработка игр