Skip to content

Instantly share code, notes, and snippets.

@AngryAnt
Last active July 5, 2017 05:44
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save AngryAnt/3dc77286282c775ec4c1 to your computer and use it in GitHub Desktop.
Save AngryAnt/3dc77286282c775ec4c1 to your computer and use it in GitHub Desktop.
Adds "Move to Top" and "Move to Bottom" items to the inspector context menu of components.
using UnityEngine;
using UnityEditor;
public class MoveComponentContext
{
enum Destination
{
Top,
Bottom
};
const string kComponentArrayName = "m_Component";
const int kFirstComponentIndex = 1;
[MenuItem ("CONTEXT/Component/Move to Top")]
static void Top (MenuCommand command)
{
Move ((Component)command.context, Destination.Top);
}
[MenuItem ("CONTEXT/Component/Move to Bottom")]
static void Bottom (MenuCommand command)
{
Move ((Component)command.context, Destination.Bottom);
}
static void Move (Component target, Destination destination)
{
SerializedObject gameObject = new SerializedObject (target.gameObject);
SerializedProperty componentArray = gameObject.FindProperty (kComponentArrayName);
int lastComponentIndex = componentArray.arraySize - 1;
int targetIndex = destination == Destination.Top ? kFirstComponentIndex : lastComponentIndex;
for (int index = kFirstComponentIndex; index <= lastComponentIndex; ++index)
{
SerializedProperty iterator = componentArray.GetArrayElementAtIndex (index);
iterator.Next (true);
iterator.Next (true);
if (iterator.objectReferenceValue == target)
{
componentArray.MoveArrayElement (index, targetIndex);
gameObject.ApplyModifiedProperties ();
break;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment