mirror of
https://github.com/codewriter-packages/Tri-Inspector.git
synced 2025-01-22 08:18:49 -05:00
Editor | ||
Editor.Extras | ||
Runtime | ||
Unity.InternalAPIEditorBridge.012 | ||
.editorconfig | ||
.gitignore | ||
Editor.Extras.meta | ||
Editor.meta | ||
Installer.unitypackage | ||
Installer.unitypackage.meta | ||
LICENSE.md | ||
LICENSE.md.meta | ||
package.json | ||
package.json.meta | ||
README.md | ||
README.md.meta | ||
Runtime.meta | ||
Unity.InternalAPIEditorBridge.012.meta |
Tri Inspector
Advanced inspector attributes for Unity
Attributes
Misc
ShowInInspector
private float field;
[ShowInInspector]
public float ReadOnlyProperty => field;
[ShowInInspector]
public float EditableProperty
{
get => field;
set => field = value;
}
PropertyOrder
[PropertyOrder(1)]
ReadOnly
[ReadOnly]
Required
[Required]
OnValueChanged
[OnValueChanged(nameof(OnMaterialChanged))]
public Material mat;
private void OnMaterialChanged()
{
Debug.Log("Material changed!");
}
ValidateInput
[ValidateInput(nameof(ValidateTexture))]
public Textute tex;
private TriValidationResult ValidateTexture()
{
if (tex == null) return TriValidationResult.Error("Tex is null");
return TriValidationResult.Valid;
}
Styling
HideLabel
[HideLabel]
LabelText
[LabelText("My Label")]
LabelWidth
[LabelWidth(100)]
GUIColor
[GUIColor(0, 1, 0)]
Space
[Space]
Indent
[Indent]
Title
[Title("My Title")]
Header
[Header("My Header")]
PropertySpace
[PropertySpace(SpaceBefore = 10,
SpaceAfter = 20)]
PropertyTooltip
[PropertyTooltip("My Tooltip")]
InlineEditor
[InlineEditor]
InlineProperty
[InlineProperty]
Collections
ListDrawerSettings
[ListDrawerSettings(Draggable = true,
HideAddButton = false,
HideRemoveButton = false,
AlwaysExpanded = true]
Conditionals
HideInPlayMode / ShowInPlayMode
[HideInPlayMode] [ShowInPlayMode]
DisableInPlayMode / EnableInPlayMode
[DisableInPlayMode] [EnableInPlayMode]
HideInEditMode / ShowInEditMode
[HideInEditMode] [ShowInEditMode]
DisableInEditMode / EnableInEditMode
[DisableInEditMode] [EnableInEditMode]
Buttons
Button
[Button("My Button")]
private void DoButton()
{
Debug.Log("Button clicked!");
}
Debug
ShowDrawerChain
[ShowDrawerChain]
Groups
[DeclareHorizontalGroup("header")]
[DeclareBoxGroup("header/left", Title = "My Left Box")]
[DeclareVerticalGroup("header/right")]
[DeclareBoxGroup("header/right/top", Title = "My Right Box")]
[DeclareTabGroup("header/right/tabs")]
[DeclareBoxGroup("body")]
public class GroupDemo : MonoBehaviour
{
[Group("header/left")] public bool prop1;
[Group("header/left")] public int prop2;
[Group("header/left")] public string prop3;
[Group("header/left")] public Vector3 prop4;
[Group("header/right/top")] public string rightProp;
[Group("body")] public string body1;
[Group("body")] public string body2;
[Group("header/right/tabs"), Tab("One")] public float tabOne;
[Group("header/right/tabs"), Tab("Two")] public float tabTwo;
[Group("header/right/tabs"), Tab("Three")] public float tabThree;
[Group("header/right"), Button]
public void MyButton()
{
}
}
Customization
Custom Drawers
Custom Value Drawer
using TriInspector;
using UnityEditor;
using UnityEngine;
[assembly: RegisterTriValueDrawer(typeof(BoolDrawer), TriDrawerOrder.Fallback)]
public class BoolDrawer : TriValueDrawer<bool>
{
public override float GetHeight(float width, TriValue<bool> propertyValue, TriElement next)
{
return EditorGUIUtility.singleLineHeight;
}
public override void OnGUI(Rect position, TriValue<bool> propertyValue, TriElement next)
{
var value = propertyValue.Value;
EditorGUI.BeginChangeCheck();
value = EditorGUI.Toggle(position, propertyValue.Property.DisplayNameContent, value);
if (EditorGUI.EndChangeCheck())
{
propertyValue.Value = value;
}
}
}
Custom Attribute Drawer
using TriInspector;
using UnityEditor;
using UnityEngine;
[assembly: RegisterTriAttributeDrawer(typeof(LabelWidthDrawer), TriDrawerOrder.Decorator)]
public class LabelWidthDrawer : TriAttributeDrawer<LabelWidthAttribute>
{
public override void OnGUI(Rect position, TriProperty property, TriElement next)
{
var oldLabelWidth = EditorGUIUtility.labelWidth;
EditorGUIUtility.labelWidth = Attribute.Width;
next.OnGUI(position);
EditorGUIUtility.labelWidth = oldLabelWidth;
}
}
Custom Group Drawer
using TriInspector;
using TriInspector.Elements;
[assembly: RegisterTriGroupDrawer(typeof(TriBoxGroupDrawer))]
public class TriBoxGroupDrawer : TriGroupDrawer<DeclareBoxGroupAttribute>
{
public override TriPropertyCollectionBaseElement CreateElement(DeclareBoxGroupAttribute attribute)
{
// ...
}
}
Validators
Custom Value Validator
using TriInspector;
[assembly: RegisterTriValueValidator(typeof(MissingReferenceValidator<>))]
public class MissingReferenceValidator<T> : TriValueValidator<T>
where T : UnityEngine.Object
{
public override TriValidationResult Validate(TriValue<T> propertyValue)
{
// ...
}
}
Custom Attribute Validators
using TriInspector;
[assembly: RegisterTriAttributeValidator(typeof(RequiredValidator), ApplyOnArrayElement = true)]
public class RequiredValidator : TriAttributeValidator<RequiredAttribute>
{
public override TriValidationResult Validate(TriProperty property)
{
// ...
}
}
Property Processors
Custom Property Hide Processor
using TriInspector;
using UnityEngine;
[assembly: RegisterTriPropertyHideProcessor(typeof(HideInPlayModeProcessor))]
public class HideInPlayModeProcessor : TriPropertyHideProcessor<HideInPlayModeAttribute>
{
public override bool IsHidden(TriProperty property)
{
return Application.isPlaying;
}
}
Custom Property Disable Processor
using TriInspector;
using UnityEngine;
[assembly: RegisterTriPropertyDisableProcessor(typeof(DisableInPlayModeProcessor))]
public class DisableInPlayModeProcessor : TriPropertyDisableProcessor<DisableInPlayModeAttribute>
{
public override bool IsDisabled(TriProperty property)
{
return Application.isPlaying;
}
}
How to Install
Minimal Unity Version is 2020.3.
Library distributed as git package (How to install package from git URL)
Git URL: https://github.com/codewriter-packages/Tri-Inspector.git
After installing the package, you need to unpack the Installer.unitypackage
that comes with the package
License
Tri-Inspector is MIT licensed.