@daniil14056

Как unity через атрибуты изменить окно свойств EditorGUI?

Создаю свой атрибут, который должен подсвечиваться красным цветом, если пользователь не определил значения свойства в редакторе. И высвечивать предупреждение.
Нигде нету документации, или она заканчивается на этом моменте. Хотелось бы видеть дефолтные реализации. А то пальцем в небо методы перебираю.
Или есть атрибут, который выводил бы Warning под свойством в редакторе?
class WarningNotNullAttribute : PropertyAttribute
    {
        public string Desc;
        public string color="red";
        public WarningNotNullAttribute(string Desc)
        {
            this.Desc = Desc; 
        }
    }
    
    [CustomPropertyDrawer(typeof(WarningNotNullAttribute))]
    public class IntAttributeDrawer : PropertyDrawer
    {
        string desc;
        Color color;

        protected virtual void Init(SerializedProperty property)
        {
            if (attribute != null)
            {
                WarningNotNullAttribute a = (WarningNotNullAttribute)attribute;
                desc = a.Desc;
                
                var c =  System.Drawing.Color.FromName( a.color);
                color.r = c.R;
                color.g = c.G;
                color.b = c.B;

            }
        }

        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            if (property == null)
            {
                return;
            }

            Init(property);
            EditorGUI.BeginProperty(position, label, property);


            position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);

            // Don't make child fields be indented
            int indent = EditorGUI.indentLevel;
            EditorGUI.indentLevel = 0;

            // Calculate rects
            Rect pathRect = new Rect(position.x, position.y, position.width - 6, position.height);

   
            /// вот тут через методы EditorGUI можно что-то рисовать. Но слишком не понятно.
          ////  если вызвать basse.OnGUI();  то там текст накладывается. 
  
            
            EditorGUI.(pathRect,v,FocusType.Passive);// TextField (pathRect, "not null",s);
            EditorGUI.indentLevel = indent;

            EditorGUI.EndProperty();
        }
    }
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы