Коллекция Property Drawers
Добавлено: 25 фев 2014, 22:01
Предыстория: Во время разработки классов для использования в команде часто требуется делать для них интерфейс удобный для не программистов.
У меня таких классов вагон и маленькая тележка, без нормального инструментария привести их в божеский вид - сложная задачка. Короче теперь инструментарий есть Property Drawers, но на его разработку тоже тратится время.
Предлагаю делится своими Property Drawers.
Но для начала небольшой туториал на русском по их созданию (в отличии от известного тутора Property Drawers in Unity 4 - этот проще для понимания, так как основан на простейшем примере)
В виду того, что движок форума упорно заменяет открывающие скобки на заменяющие символы и весь код просто становится ничетаемым урок переехал на github, собственно и все примеры туда оформлю как будет время.
Далее предлагаю постить в эту тему свои Property Drawers.
Желательно оформлять по единому шаблону, например вот так:
Property Drawers HelpAttribute
Example: test.cs
Attribute: HelpAttribute.cs
Drawer HelpDrawer.cs
У меня таких классов вагон и маленькая тележка, без нормального инструментария привести их в божеский вид - сложная задачка. Короче теперь инструментарий есть Property Drawers, но на его разработку тоже тратится время.
Предлагаю делится своими Property Drawers.
Но для начала небольшой туториал на русском по их созданию (в отличии от известного тутора Property Drawers in Unity 4 - этот проще для понимания, так как основан на простейшем примере)
В виду того, что движок форума упорно заменяет открывающие скобки на заменяющие символы и весь код просто становится ничетаемым урок переехал на github, собственно и все примеры туда оформлю как будет время.
Далее предлагаю постить в эту тему свои Property Drawers.
Желательно оформлять по единому шаблону, например вот так:
Property Drawers HelpAttribute
Example: test.cs
Синтаксис:
Используется csharp
using UnityEngine;
public class test : MonoBehaviour {
[HelpAttribute("Анимация открытия дверей")]
public Animator OpenDor;
}
public class test : MonoBehaviour {
[HelpAttribute("Анимация открытия дверей")]
public Animator OpenDor;
}
Attribute: HelpAttribute.cs
Синтаксис:
Используется csharp
using UnityEngine;
public class HelpAttribute : PropertyAttribute
{
public string HelpMessageText;
public HelpAttribute(string text)
{
this.HelpMessageText = text;
}
}
public class HelpAttribute : PropertyAttribute
{
public string HelpMessageText;
public HelpAttribute(string text)
{
this.HelpMessageText = text;
}
}
Drawer HelpDrawer.cs
Синтаксис:
Используется csharp
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(HelpAttribute))]
public class HelpDrawer : PropertyDrawer {
private int helpHeight = 50, textHeight = 16, HeaderY = 2;
HelpAttribute helpAttribute
{
get
{
return (HelpAttribute) attribute;
}
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
if(!string.IsNullOrEmpty(helpAttribute.HelpMessageText))
{
position.height = textHeight;
EditorGUI.PropertyField(position,property,label);
position.y += textHeight + HeaderY;
position.height = helpHeight;
EditorGUI.HelpBox(position , helpAttribute.HelpMessageText, MessageType.Info);
}
else
{
EditorGUI.PropertyField(position,property,label);
}
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return base.GetPropertyHeight(property, label) + helpHeight + (string.IsNullOrEmpty(helpAttribute.HelpMessageText) ? 0 : textHeight);
}
}
using UnityEditor;
[CustomPropertyDrawer(typeof(HelpAttribute))]
public class HelpDrawer : PropertyDrawer {
private int helpHeight = 50, textHeight = 16, HeaderY = 2;
HelpAttribute helpAttribute
{
get
{
return (HelpAttribute) attribute;
}
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label){
if(!string.IsNullOrEmpty(helpAttribute.HelpMessageText))
{
position.height = textHeight;
EditorGUI.PropertyField(position,property,label);
position.y += textHeight + HeaderY;
position.height = helpHeight;
EditorGUI.HelpBox(position , helpAttribute.HelpMessageText, MessageType.Info);
}
else
{
EditorGUI.PropertyField(position,property,label);
}
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
return base.GetPropertyHeight(property, label) + helpHeight + (string.IsNullOrEmpty(helpAttribute.HelpMessageText) ? 0 : textHeight);
}
}