Skip to content

Smidgens/unity-attributes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

87 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ℹ️ Features

  • Collection of general use drawer and decorator attributes.
  • Stripped in production: [Conditional("UNITY_EDITOR")]
  • 🀞 Reasonably lightweight.


πŸ“¦ Install

  1. Open Package Manager
  2. Paste GitHub URL:
    https://github.com/Smidgens/unity-attributes.git#<version_tag>

πŸš€ Usage

🟒 Decorators

πŸ“ BoxHeader
[BoxHeader("Example Header")]
[TextArea]
public string documentedField;
πŸ“ BoxComment
[BoxComment("Some information about bla")]
[TextArea]
public string documentedField;
πŸ“ BoxLink
[BoxLink("Documentation", "https://en.wikipedia.org/wiki/Slartibartfast")]
[TextArea]
public string documentedField;
πŸ”³ StaticAction
class StaticGreets
{
    public static void SayHi()
    {
        Debug.Log("Hello, wurst!");
    }

    public static void LogValue(int v)
    {
        Debug.Log("Your value is: " + v);
    }
}

[StaticAction("Say Hi", "SayHi", typeof(StaticGreets))]
[StaticAction("Log 10", "LogValue", typeof(StaticGreets), 10)]
public string staticActionField;

🟠 Property Drawers

πŸ“ Inline
[System.Serializable]
public struct T1
{
    public string name;
    public Texture2D icon;
}

[Inline]
public Vector3 inlinedVector;

[FieldSize("name", 40f)]
[Inline]
public T1 inlinedCustom;
πŸ“ Expand
[Serializable]
public struct T1
{
    public string name;
    public Texture2D icon;
}

[Serializable]
public struct T2
{
    public int someValue;
    public T1 nested;
}

[Expand]
public T1 expanded1;

[Expand]
public T2 expanded2;
πŸ”˜ Tabs
[System.Serializable]
struct ToggleData
{
    public bool v1,v2,v3;
}

[Tabs]
public ToggleData options;
[System.Flags]
enum Options
{
    Item1 = 1,
    Item2 = 2,
    Item3 = 4,
}

[Tabs]
public Options options;
πŸ”˜ Switch
[Switch]
public bool switch1;

[Switch("Off", "On")]
public bool switch2;

[Switch("Disabled", "Enabled")]
public bool switch3;
[System.Flags]
enum Options
{
    Item1 = 1,
    Item2 = 2,
    Item3 = 4,
}

[Switch]
public Options options;
🎚️ Slider
[Slider(1f,10f,1)]
public float sliderPrecision;

[Slider(1f,10f,0.5f)]
public float sliderStep;

[Slider(1,10)]
public int sliderInt;
🎚️ Slider01
[Slider01]
public float slider01;
🎨 HexColor
[HexColor]
public string hexColor = "#f00";
πŸ”Ž SearchType

[SearchType]
public string anyType;
    
// only show component types
[SearchType(baseTypes = new Type[]{ typeof(Component) })]
public string componentType;

// only show static classes
[SearchType(onlyStatic = true)]
public string staticType;

// only show system types
[SearchType(assemblies = new string[]{ "mscorlib" })]
public string systemType;
πŸ”» Dropdown__
[DropdownString("option1", "option2")]
public string _string;

[DropdownFloat(0.5f, 1.2f, 2.4f)]
public float _float;

[DropdownColor("red", "blue", "cyan")]
public Color _color;

[DropdownBool("Off", "On")]
public bool _bool;

[DropdownInt(0, 10)]
public int _int;

[DropdownAsset("Assets/Demo/")]
public Texture2D _texture;
πŸ”» Layer
[Layer]
public int _layer;
πŸ”» SortLayer
[SortLayer]
public int _sortingLayer;
πŸ”» Tag
[Tag]
public string _tag;
πŸ”» BuildScene
[BuildScene]
public string scenePath;

[BuildScene]
public int sceneIndex;
πŸ”» AnimatorParameter
public Animator myAnimator;

[AnimatorParameter("myAnimator")]
public string parameterName;

[AnimatorParameter("myAnimator")]
public int parameterIndex;
πŸ”» RendererMaterial
public Renderer myRenderer;

[AnimatorParameter("myRenderer")]
public int materialIndex
πŸ”» BlendShape
public SkinnedMeshRenderer myRenderer;

[AnimatorParameter("myRenderer")]
public string blendShapeName

[AnimatorParameter("myRenderer")]
public int blendShapeIndex

πŸ”΅ Modifiers

πŸ”³ FieldAction
[System.Serializable]
internal class OwnerOfFunctions
{
    public int myValue = 10;

    public void SetMyValue(int v)
    {
        myValue = v;
    }

    public void CallMe()
    {
        Debug.Log("Yay!");
    }

    public void CallMeAsWell()
    {
        Debug.Log("OMG YAY");
    }
}


class MyScript : MonoBehaviour
{
    [FieldAction("Action 1", "CallMe")]
    [FieldAction("Action 2", "CallMeAsWell")]
    [FieldAction("Set value: 100", "SetMyValue", 100, onlyPlayMode = true)]
    [FieldAction("Call Target", "ScriptMethod", callRoot = true)]
    [Expand]
    public OwnerOfFunctions fieldWithActions;

    private void ScriptMethod()
    {
        Debug.Log("Script method called!");
    }
}
πŸ“ Indent
[Indent(1)]
[DefaultDrawer]
public int iAmIndented;

[Indent(2)]
[DefaultDrawer]
public int iAmMoreSo;