SerializedProperty.tooltip как установить?

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

SerializedProperty.tooltip как установить?

Сообщение seaman 09 июл 2012, 11:53

Он ReadOnly. Можно ли его как-то все же установить, чтобы при наведении мышки в инспекторе можно было бы его вывести?
PS^ Можно, конечно при выводе в инспекторе сделать самому тултип, то тогда зачем SerializedProperty.tooltip вообще нужен?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: SerializedProperty.tooltip как установить?

Сообщение seaman 09 июл 2012, 14:58

Ну вот решение с рефлексией
Создаем свой атрибут:
Синтаксис:
Используется csharp
using System;

[AttributeUsage(AttributeTargets.Field)]
public class MyFieldAttribute : Attribute
{
    public string tooltip;
}

Применяем к полю:
Синтаксис:
Используется csharp
using UnityEngine;

public class ProbeObject : MonoBehaviour
{
    [MyField(tooltip = "This is a tooltip to be shown in the inspector")]
    public int property;

    void Awake()
    {
        property = 121;
    }
}

Делаем кастом инспектор:
Синтаксис:
Используется csharp
using UnityEditor;

[CustomEditor(typeof(ProbeObject))]
public class ProbeInspector : Editor
{
    SerializedProperty _probe;
   
    public void OnEnable()
    {
        SerializedProperty p = serializedObject.FindProperty("property");
       
        if(p.propertyType == SerializedPropertyType.Integer) _probe = p;
        else Debug.LogError("Bad!!!");
        if(_probe == null) Debug.LogWarning("NOT!!!");
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();
       
        Type ty = target.GetType();
        string tip = string.Empty;

        FieldInfo[] fields = ty.GetFields();
        foreach(FieldInfo field in fields)
        {
            Attribute[] attrs = Attribute.GetCustomAttributes(field);
            foreach(Attribute attr in attrs)
            {
                MyFieldAttribute sf = attr as MyFieldAttribute;
                if(sf == null) continue;
                tip = sf.tooltip;
            }
        }

        EditorGUILayout.IntSlider(_probe, 0, 100, new GUIContent("Probe", tip));

        serializedObject.ApplyModifiedProperties();
    }
}

Получаем:
Изображение

Однако вопрос открыт - зачем tooltip в SerializedProperty, если его нельзя использовать?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Editor

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

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