Quantcast
Channel: The Wild Eternal
Viewing all articles
Browse latest Browse all 12

Devlog: Force Component Order

$
0
0

I caved to my neurosis this weekend and wrote a little editor script that reorders components on GameObjects to be in a fixed order.

I have only tested this on Unity 4.6.  If you are running another version, please verify that the script works in the comment section.

Note that I have opted to skip all camera-bearing GameObjects as they can posses MonoBehaviours that call OnRenderImage, which is an order-dependent method.

Performance

To minimize any performance costs of polling, I decided that reordering need only take place when a new GameObject is selected. Adding new components, removing components, or moving components, will not immediately be reordered; you’ll have to change selection targets.

Support

Not all component types are supported by default, as there are simply too many across the various versions of Unity, not to mention any that you might have created yourself. But unknown types will elicit a Debug Warning to remind you to add them in.

Order

Order is handled by specifying the priority (integer) value for each component type. Ties are then handled alphabetically according to the type name. Here’s what the order method looks like. You’ll want to add support for your own (Component) types here:

  private static int? GetOrder(Component component)
 {
 // physics
 if (component is Collider) return 100;
 if (component is Rigidbody) return 101;
 if (component is Joint) return 102;

 // renderers
 if (component is MeshFilter) return 200;
 if (component is Projector) return 201;
 if (component is Renderer) return 202;
 if (component is Animation) return 203;

 // lights
 if (component is Light) return 300;

 // nav mesh
 if (component is NavMeshAgent) return 400;
 if (component is NavMeshObstacle) return 401;

 // particles
 if (component is ParticleSystem) return 500;

 // environment
 if (component is Tree) return 600;

 // scripts
 if (component is MonoBehaviour)
 {
 int order = 1000;

 // custom script ordering goes here
 // if (component is SpeciallyOrderedMonoBehaviourSubclass) order += 1;

 return order;
 }

 // warning
 Debug.LogWarning("Force Component Order: " + component.GetType().Name + " component is not supported.");
 return null;
 }

Downloads

The post Devlog: Force Component Order appeared first on The Wild Eternal.


Viewing all articles
Browse latest Browse all 12

Latest Images

Trending Articles





Latest Images