All Projects → arimger → Unity Editor Toolbox

arimger / Unity Editor Toolbox

Licence: mit
Tools, custom attributes, drawers, hierarchy overlay, and other extensions for the Unity Editor.

Projects that are alternatives of or similar to Unity Editor Toolbox

Awesome Unity Open Source On Github
A categorized collection of awesome Unity open source on GitHub (800+)
Stars: ✭ 1,124 (+311.72%)
Mutual labels:  unity, unity3d, unity-editor, unity-asset
Unity Script Collection
A maintained collection of useful & free unity scripts / library's / plugins and extensions
Stars: ✭ 3,640 (+1233.33%)
Mutual labels:  unity, unity3d, unity-editor, unity-asset
Unity Assetpipeline Presentation
Unity project for "A Technical Deep-Dive into Unity's Asset Pipeline" presented at Develop: 2018
Stars: ✭ 31 (-88.64%)
Mutual labels:  unity, unity3d, unity-editor, unity-asset
Pb stl
STL import/export for Unity, supporting both ASCII and Binary.
Stars: ✭ 108 (-60.44%)
Mutual labels:  unity, unity3d, unity-editor
Dlibfacelandmarkdetector
FaceLandmark Detector using Dlib (Unity Asset Plugin)
Stars: ✭ 80 (-70.7%)
Mutual labels:  unity, unity3d, unity-asset
Csharp Eval Unity3d
C# Expression Parser for Unity3D
Stars: ✭ 102 (-62.64%)
Mutual labels:  unity, unity3d, unity-asset
Uniuguitoolbar
【Unity】uGUI のオブジェクトを作成できるツールバーのエディタ拡張
Stars: ✭ 44 (-83.88%)
Mutual labels:  unity, unity3d, unity-editor
Infinity Square Space
Infinity Square/Space. The prototype of the game is open source. Unity Asset.
Stars: ✭ 122 (-55.31%)
Mutual labels:  unity, unity3d, unity-asset
Simple Firebase Unity
Firebase Realtime-Database's REST API Wrapper for Unity in C#
Stars: ✭ 111 (-59.34%)
Mutual labels:  unity, unity3d, unity-asset
Eazy Sound Manager
Eazy Sound Manager is a simple Unity3D tool which aims to make sound and music management in games easier
Stars: ✭ 135 (-50.55%)
Mutual labels:  unity, unity3d, unity-asset
Unitypausemenu
This is an open source Unity pause menu created for the game New Horizons, and it's completely free because of how a pause menu is a core component of a game, while the unity asset store was lacking in such an asset (until this was released on the asset store).
Stars: ✭ 160 (-41.39%)
Mutual labels:  unity, unity3d, unity-editor
Fancyscrollview
[Unity] A scrollview component that can implement highly flexible animations.
Stars: ✭ 1,216 (+345.42%)
Mutual labels:  unity, unity3d, unity-asset
Extosc
extOSC is a tool dedicated to simplify creation of applications in Unity with OSC protocol usage.
Stars: ✭ 69 (-74.73%)
Mutual labels:  unity, unity3d, unity-editor
Reflexityai
Provide a basic framework to build an Utility IA in Unity using the xNode editor of Siccity
Stars: ✭ 109 (-60.07%)
Mutual labels:  unity, unity3d, unity-asset
Unity Ui Examples
📚 A collection of UI examples for Unity.
Stars: ✭ 152 (-44.32%)
Mutual labels:  unity, unity3d, unity-asset
Rimlight
Customizable rimlight shader for Unity that includes pulsation and noise scrolling. Give your scenes that extra oomph!
Stars: ✭ 170 (-37.73%)
Mutual labels:  unity, unity3d, unity-asset
Ma textureatlasser
Texture atlas creator for Unity
Stars: ✭ 116 (-57.51%)
Mutual labels:  unity, unity3d, unity-editor
Xrtk Core
The Official Mixed Reality Framework for Unity
Stars: ✭ 219 (-19.78%)
Mutual labels:  unity, unity3d, unity-asset
Scene View Bookmarks
Unity editor extension to bookmark scene views.
Stars: ✭ 40 (-85.35%)
Mutual labels:  unity, unity3d, unity-editor
Ugui Super Scrollview Example
Sample project that summarizes usage examples of "UGUI Super ScrollView".
Stars: ✭ 146 (-46.52%)
Mutual labels:  unity, unity3d, unity-asset

Unity Editor Toolbox

Introduction

Improve usability and clarity of key features in Unity Editor for better workflow!

This Toolbox not only extends functionalities, it does so with the user in mind. Written to be as flexible and optimized as possible. Now you and other programming professionals will be able to create a readable and useful component editor simply by using attributes. You’ll get fast and clear access to data from GameObjects placed in the Scene. Lastly, you’ll gain more control over the Project window. Go ahead, customize those folder icons.

It's worth to mention that prepared drawers are based on the custom, layout-based system. Additionally, I’m leaving you some useful scripts, classes, and functions that facilitate Editor extensions development.

Learn all the details about the main features below.

System Requirements

Unity 2018.x or newer

Dependencies

EditorCoroutines

Installation

  • Install Editor Toolbox package:
    • 1 way: Find Unity Package Manager (Window/Package Manager) and add package using this git URL:
     https://github.com/arimger/Unity-Editor-Toolbox.git#upm
    
    • 2 way: Copy and paste Editor Toolbox directory into your project (Assets/...)
  • Open Edit/Project Settings/Editor Toolbox window
  • If settings file is not found, press "Refresh" button or create new one
  • Manage settings in your way
    • Enable/disable Hierarchy overlay, choose allowed information
    • Enable/disable Project icons or/and assign own directories
    • Enable/disable Toolbox drawers or/and assign custom drawers

Table Of Contents

Settings

The most important file, it allows the user to manage all available features. Can be accessed from the Project Settings window (Edit/Project Settings.../Editor Toolbox) or directly inside the Project window. Make sure to have one valid settings file per project.

inspector

Available features are divided into three groups:

  • Hierarchy
  • Project
  • Inspector/Drawers

Each module is described in its respective section.

Attributes & Drawers

Regular Drawers

Drawers based on build-in classes PropertyDrawer/DecoratorDrawer and associated PropertyAttribute.

 

Editor Toolbox/Scripts/Attributes/
Editor Toolbox/Editor/Drawers/

 

HelpAttribute

//NOTE: HelpAttribute moved to ToolboxAttributes (Decorators)

inspector

TagSelectorAttribute

[TagSelector]
public string var1;

inspector

SeparatorAttribute

inspector

ProgressBarAttribute

[ProgressBar("Name", minValue: 0.0f, maxValue: 100.0f, HexColor = "#EB7D34")]
public float var1 = 80.0f;

inspector
inspector

NewLabelAttribute

[NewLabel("Custom Label", "Element")]
public int[] vars1 = new int[3];
[NewLabel("Custom Label")]
public float var2 = 25.4f;

inspector

MinMaxSliderAttribute

[MinMaxSlider(0.5f, 71.7f)]
public Vector2 var1;

inspector

IndentAttribute

inspector

ConditionalShowAttribute & ConditionalHideAttribute

//REMARK: use the 'ShowIf'/'HideIf' attribute instead
public bool toggle;
[ConditionalShow(nameof(toggle), true)]
public float var1;

inspector
inspector

ConditionalEnableAttribute & ConditionalDisableAttribute

//REMARK: use the 'EnableIf'/'DisableIf' attribute instead
public bool toggle;
[ConditionalEnable(nameof(toggle), true)]
public float var1;

inspector
inspector

AssetPreviewAttribute

[AssetPreview]
public GameObject var1;
[AssetPreview(useLabel: false)]
public Component var2;

inspector

HideLabelAttribute

inspector

SuffixAttribute

inspector

ClassExtends/ClassImplementsAttribute

[ClassExtends(typeof(Collider))] //or [ClassImplements(typeof(interface))] for interfaces
public SerializedType var1;

inspector

ReadOnlyFieldAttribute

//REMARK: use the 'Disable' attribute instead
[ReadOnlyField]
public int var1;

inspector

EnumFlagAttribute

[System.Flags]
public enum FlagExample
{
	Nothing = 0,
	Flag1 = 1,
	Flag2 = 2,
	Flag3 = 4,
	Flag4 = 8,
	Flag5 = 16,
	Flag6 = 32,
	Flag7 = 64,
	Flag8 = 128,
	Flag9 = 256,
	Everything = ~0
}

[EnumFlag]
public FlagExample enumFlag = FlagExample.Flag1 | FlagExample.Flag2 | FlagExample.Flag6;

inspector

[EnumFlag(EnumStyle.Button)]
public FlagExample enumFlag = FlagExample.Flag1 | FlagExample.Flag2 | FlagExample.Flag6;

inspector

NotNullAttribute

inspector
inspector

RandomAttribute

inspector

DirectoryAttribute

inspector
inspector

BroadcastButtonAttribute

//REMARK: use the 'EditorButton' attribute instead
//NOTE: [ExecuteAlways] or [ExecuteInEditMode] needed in the Edit mode

[BroadcastButton(nameof(MyMethod), "Click me to broadcast message", ButtonActivityType.OnEditMode, order = 100)]
public int var1;

private void MyMethod()
{
	Debug.Log("MyMethod is invoked");
}

inspector

InstanceButtonAttribute

inspector

SceneNameAttribute

inspector
inspector

PresetAttribute

private readonly int[] presetValues = new[] { 1, 2, 3, 4, 5 };

[Preset(nameof(presetValues))]
public int presetTarget;

inspector

SearchableEnumAttribute

[SearchableEnum]
public KeyCode enumSearch;

inspector

ClampAttribute

[Clamp(minValue = 1.5f, maxValue = 11.3f)]
public double var1;

Vector2DirectionAttribute & Vector3DirectionAttribute

[Vector2Direction]
public Vector2 direction2d;
[Vector3Direction]
public Vector3 direction3d;

PasswordAttribute

[Password]
public string password;

inspector

LabelByChildAttribute

[System.Serializable]
public class SampleClass1
{
	public Material var1;
	public KeyCode var2;
	public SampleClass2 var3;
}

[System.Serializable]
public class SampleClass2
{
	public int var1;
	public string var2;
}

[LabelByChild("var2")]
public SampleClass1[] vars1;
[LabelByChild("var3.var2")]
public SampleClass1 var1;

inspector

inspector

PrefabReferenceAttribute

ChildObjectOnlyAttribute

SceneObjectOnlyAttribute

LeftToggleAttribute

inspector


Toolbox Drawers

Drawers are based on classes inherited from the ToolboxDrawer class and associated ToolboxAttribute. With this powerful custom system you are able to create really flexible drawers. You can use them without limitations (they work with sub-classes and as array children). Every ToolboxDrawer is layout-based. For proper work they need at least one settings file located in your project. You can find predefined one here - Editor Toolbox/EditorSettings.asset.

Examples 'How to' create custom ToolboxDrawers you can find HERE.

 

Editor Toolbox/Scripts/Attributes/ToolboxAttributes
Editor Toolbox/Editor/Drawers/ToolboxDrawers

 

inspector

ToolboxDecoratorAttributes

Display/create something before and after property in the desired order (using Order property).
In fact ToolboxDecoratorDrawers are like extended version of built-in DecoratorDrawers. Unfortunately, standard decorators won't always work with ToolboxDrawers so try to use this replacement instead.

[BeginGroup("Group1")]
public int var1;
public int var2;
public int var3;
[EndGroup]
public int var4;
[BeginHorizontal]
public int var1;
public int var2;
[EndHorizontal]
public int var3;
[BeginIndent]
public int var1;
public int var2;
public int var3;
[EndIndent]
public int var4;
[SpaceArea(spaceBefore = 10.0f, spaceAfter = 5.0f, Order = 1)]
public int var1;
[Label("My Custom Header", skinStyle: SkinStyle.Box, Alignment = TextAnchor.MiddleCenter)]
public int var1;
[EditorButton("MyMethodName", "<b>My</b> Custom Label", activityType: ButtonActivityType.OnPlayMode)]
public int var1;
[Highlight(0, 1, 0)]
public int var1;
[Help("Help information", UnityMessageType.Warning, Order = -1)]
public int var1;
[ImageArea("https://img.itch.zone/aW1nLzE5Mjc3NzUucG5n/original/Viawjm.png", 150.0f)]
public int var1;

inspector

inspector

ToolboxConditionDrawers

Enable/disable or show/hide properties using custom conditions. You can use them together with any other type of drawer. Every ToolboxConditionDrawer supports boolean, int, string and enum types and works even with array/list properties.

public string stringValue = "sho";
[ShowIf(nameof(stringValue), "show")] //or HideIfAttribute
public int var1;
public KeyCode enumValue = KeyCode.A;
[EnableIf(nameof(enumValue), KeyCode.A)] //or DisableIfAttribute
public int var1;
[DisableInPlayMode]
public int var1;
[Disable, ReorderableList]
public int[] vars1 = new [] { 1, 2, 3, 4 };

inspector

InLineEditorAttribute

This attribute gives a great possibility to extend all reference-related (UnityEngine.Object) fields. Using it you are able to 'inline' Editors for: components, ScriptableObjects, Materials, Renderers, MeshFilters, Textures, AudioClips, etc.

[InLineEditor]
public Transform var1;

inspector

[InLineEditor]
public AudioClip var1;

inspector

[InLineEditor(true, true)]
public Material var1;

inspector

ScrollableItemsAttribute

It's a perfect solution to inspect large arrays/lists and optimize displaying them within the Inspector window.

[ScrollableItems(defaultMinIndex: 0, defaultMaxIndex: 5)]
public GameObject[] largeArray = new GameObject[19];

inspector

Reorderable List

Custom implementation of standard ReorderableList (UnityEditorInternal). Usable as an attribute in serialized fields or a single object in custom Editors.

Editor Toolbox/Editor/Internal/ReorderableList.cs

var list = new ReorderableList(SerializedProperty property, string elementLabel, bool draggable, bool hasHeader, bool fixedSize);
[ReorderableList(ListStyle.Lined, "Item")]
public List<int> linedStyleList;

inspector

[ReorderableList(ListStyle.Round)]
public List<string> standardStyleList;

inspector

[ReorderableList(ListStyle.Boxed, fixedSize: true)]
public GameObject[] boxedStyleList = new GameObject[4];

inspector

Editor Extensions

Hierarchy

Enable and customize the presented hierarchy overlay in the ToolboxEditorSettings. Basically it provides more data about particular GameObjects directly within the Hierarchy window. Additionally, you can create special 'Header' objects using the '#h' prefix or Create menu: GameObject/Editor Toolbox/Hierarchy Header (by default created object will have EditorOnly tag).

Each row can contain:

  • Scripts information
  • Layer
  • Tag
  • Toggle to enable/disable GameObject
  • Icon

Editor Toolbox/Editor/ToolboxEditorHierarchy.cs

inspector

Project

Set custom folder icons in the ToolboxEditorSettings.

Properties that can be edited include:

  • XY position and scale of the large icon
  • XY position and scale of the small icon
  • Path to directory or name (depends on picked item type)
  • Optional tooltip
  • Large icon
  • Small icon

Editor Toolbox/Editor/ToolboxEditorProject.cs

inspector

inspector

Toolbar

Editor Toolbox/Editor/ToolboxEditorToolbar.cs

Check Examples for more details.

Examples/Editor/SampleToolbar.cs

using Toolbox.Editor;

[UnityEditor.InitializeOnLoad]
public static class MyEditorUtility
{
	static MyEditorUtility()
	{
		ToolboxEditorToolbar.OnToolbarGui += OnToolbarGui;
	}
	
	private static void OnToolbarGui()
	{
		GUILayout.FlexibleSpace();
		if (GUILayout.Button("1", Style.commandLeftStyle))
		{
			Debug.Log("1");
		}
		if (GUILayout.Button("2", Style.commandMidStyle))
		{
			Debug.Log("2");
		}
		if (GUILayout.Button("3", Style.commandMidStyle))
		{
			Debug.Log("3");
		}
		if (GUILayout.Button("4", Style.commandMidStyle))
		{
			Debug.Log("4");
		}
		if (GUILayout.Button("5", Style.commandRightStyle))
		{
			Debug.Log("5");
		}
	}
}

inspector

Utilities

Copy and paste all components from/to particular GameObject.

inspector

Editor Extras

I decieded to move additional editors and tools to Gist.

Prefab/GameObject Painter

Check it out HERE.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].