Skip to content

techno-dwarf-works/better-attributes

Repository files navigation

Better Attributes

openupm

image

This package provides following features:

Select Dropdown

This package contains base class for drawer with better dropdown.
Better dropdown contains:

  1. Search
  2. Fast navigation
  3. Grouping

Select Attribute

Provides possibility to select interface implementation, enum value with better dropdown in Unity Inspector.
Also supports flag enums.

Usage:

[Select] [SerializeReference]
private ISomeInterface someInterface;

[Select] [SerializeReference]
private SomeAbstractClass someAbstractClass;

[Select(typeof(SomeAbstractClass))] [SerializeReference]
private List<SomeAbstractClass> someAbstractClasses;

[Select(typeof(ISomeInterface))] [SerializeReference]
private List<ISomeInterface> someInterfaces;

[Select] [SerializeField]
private KeyCode keyCode;

Dropdown Attribute

Similar to Select Attribute, but allows to define your own collection of selecting.

Usage:

[Dropdown("Method()")] [SerializeField]
private List<int> someInts;

[Dropdown("Method()")] [SerializeField]
private List<int> someInts;

Supports retrieving information from other classes, to use this option start selectorName with r:.

Usage:

[Dropdown("r:OtherClass.StaticFieldOrProperty")] [SerializeField]
private List<int> someInts;

[Dropdown("r:OtherClass.StaticMethod()")] [SerializeField]
private List<int> someInts;

[Dropdown("r:Singleton.Instance.Method()")] [SerializeField]
private List<int> someInts;

[Dropdown("r:Singleton.Instance.Method()")] [SerializeField]
private List<int> someInts;

Preview

Provides possibility to see object preview by clicking into the field in Unity Inspector.
Supports preview for scene objects and prefabs object as well as textures and sprites.

Usage:

[Preview] [SerializeField]
private Sprite sprite;

[Preview] [SerializeField]
private SomeMonobehaviour someMonobehaviour;

Read Only Field

Provides possibility to disable modification of fields in Unity Inspector but keep it displayed.

Usage:

[ReadOnlyField] [SerializeField] 
private SomeClass someClass;

[ReadOnlyField] [SerializeField] 
private float someFloat;

[ReadOnlyField] [TextArea(5, 10)] [SerializeField] 
private string someString;

Icon Header

Provides possibility to Draw fullsized texture about field in Unity Inspector. To get texture guid open TextureImport window and right open context menu -> Conver To IconHeaderAttribute.

Usage:

[IconHeader("TEXTURE_GUID")] [SerializeField]
private string oldName;

Draw Inspector

Provides possibility to Draw fullsized Inspector below field with type inheretex from UnityEngine.Object.

Usage:

[DrawInspector] [SerializeField]
private SomeScriptable scriptable;

Rename Field

Provides possibility to rename label in Unity Inspector.

Usage:

[RenameField("New Name")] [SerializeField]
private string oldName;

Gizmo / Gizmo Local

Provides possibility to set value for Vector3/Vector2/Quaternion/Bounds from scene view by dragging handles.
[GizmoLocal] works only into MonoBehaviour Unity Inspector.

Usage:

[Gizmo]
[SerializeField] private Bounds bounds;
        
[Gizmo]
[SerializeField] private Vector3 vector3;
        
[Gizmo]
[SerializeField] private Quaternion quaternion;

[GizmoLocal]
[SerializeField] private Bounds boundsLocal;
        
[GizmoLocal]
[SerializeField] private Vector3 vector3Local;
        
[GizmoLocal]
[SerializeField] private Quaternion quaternionLocal;

Editor Buttons

Provides possibility to display button for method in Unity Inspector.

Usages:

///Default usage of attribute.
[EditorButton]
private void SomeMethod()
{
//Some code.
}

///This button will call method with predefined parameters. 
///When invokeParams not specified will call with null.
[EditorButton(invokeParams: 10f)]
private void SomeMethod(float floatValue)
{
//Some code.
}

///This button will call method with predefined parameters. 
///When invokeParams not specified will call with null.
[EditorButton(invokeParams: new object[] { 10f, 10 })]
private void SomeMethod(float floatValue, int intValue)
{
//Some code.
}

/// This button will be in the same row with button for SomeMethod2.
/// But will be in the second position.
/// When captureGroup not specified each button placed in separate row.
/// When priority not specified buttons in one row sorted by order in code.
[EditorButton(captureGroup: 1, priority: 2)]
private void SomeMethod1()
{
//Some code.
}

[EditorButton(captureGroup: 1, priority: 1)]
private void SomeMethod2()
{
//Some code.
}

/// This button will have name "Some Cool Button".
/// When displayName not specified or null/empty/whitespace button 
/// will have name same as method.
[EditorButton(displayName: "Some Cool Button")]
private void SomeMethod()
{
//Some code
}

You can check constructors for EditorButtonAttribute there more specific options.

Install

How to install

About

Better Attributes

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages