Info Attribute
Publié : 29 Nov 2019 10:33
Bonjour,
Désolé si je ne suis pas dans la bonne rubrique, je n'ai pas su où mettre mon post.
J'ai trouvé un truc qui m'a paru très utile et que j'ai voulu partagé.
Il s'agit d'un attribut qui permet d'afficher dans l'Inspector une explication, un conseil ou autre.
Voilà le script de l'Attribut lui même:
Voilà le script à mettre dans un dossier Editor:
et voilà un exemple d'utilisation:
La ligne : "[Space(20)]" permet de créer un espace avant la zone d'explication contrairement à ce qu'on pourrait penser.
petit truc supplémentaire
permet aussi d'afficher une zone d'explication et modifier le "Element 0", "Element 1" d'un List. C'est sympa aussi
En espérant avoir été utile
Désolé si je ne suis pas dans la bonne rubrique, je n'ai pas su où mettre mon post.
J'ai trouvé un truc qui m'a paru très utile et que j'ai voulu partagé.
Il s'agit d'un attribut qui permet d'afficher dans l'Inspector une explication, un conseil ou autre.
Voilà le script de l'Attribut lui même:
Code : Tout sélectionner
public enum InfoType { None, Info, Warning, Error }
public class InfoAttribute : PropertyAttribute
{
public string text;
public InfoType infoType;
public InfoAttribute(string text, InfoType infoType = InfoType.Info)
{
this.text = text;
this.infoType = infoType;
}
}
Code : Tout sélectionner
using UnityEngine;
using UnityEditor;
[CustomPropertyDrawer(typeof(InfoAttribute))]
public class InfoAttributeDrawer : DecoratorDrawer
{
public override float GetHeight()
{
var infoAttribute = attribute as InfoAttribute;
if (infoAttribute == null) return base.GetHeight();
var infoStyle = (GUI.skin != null) ? GUI.skin.GetStyle("info") : null;
if (infoStyle == null) return base.GetHeight();
return Mathf.Max(40f, infoStyle.CalcHeight(new GUIContent(infoAttribute.text), EditorGUIUtility.currentViewWidth) + 4);
}
public override void OnGUI(Rect position)
{
var infoAttribute = attribute as InfoAttribute;
if (infoAttribute == null) return;
EditorGUI.HelpBox(position, infoAttribute.text, GetMessageType(infoAttribute.infoType));
}
private MessageType GetMessageType(InfoType infoType)
{
switch (infoType)
{
default:
case InfoType.None: return MessageType.None;
case InfoType.Info: return MessageType.Info;
case InfoType.Warning: return MessageType.Warning;
case InfoType.Error: return MessageType.Error;
}
}
}
Code : Tout sélectionner
[Info("Le parent de l'objet, son image dans l'inventaire")]
[Space(20)]
public Transform Parent;
public Sprite Item;
public Inventaire Inventaire;
public bool AStocker;
public bool APlacer;
petit truc supplémentaire
Code : Tout sélectionner
[Multiline]
public string Explication;
En espérant avoir été utile