[RELEASED] Component Tool Panel - Compact, seamlessly intergated component utils

Easy, compact, and seamlessly integrated component editor


The way Unity currently approaches component operations (like removing or copying) is a known pain; specially when handling reordering.

With Component Tool Panel, all of those operations are compact and easilly accessible from the inspector itself (no need to worry about intrusive extra windows or components)

Asset Store Link

Features:
· Easy reorder component by dragging them around.
· Remove, copy, paste and reset components.
· Supports multiediting.
· Optional custom inspectors for many components.
· Enable or disable, and collapse or expand components.
· Handles script drag & drop operations (so that youd don’t have to scroll to the bottom of the inspector).
· Accessible add component button (so that youd don’t have to scroll down the bottom of the inspector).
· Tracks copied component information.
· Component Preview utility.

4 Likes

I’m interested in testing the product.

Looks great! Out of curiosity: is it a component itself that you have to add to your GameObject? Or does it “inject” into every inspector? If it’s the latter, I’d be curious to know how you did it.

@Serky Just pm me your email :slight_smile:

And @LazloBonin , I made it so that there are no extra windows or components. It is right there, intergated into every inspector.

To do it, I made a custom editor that replicates the behaviour of a GameObject inspector, and extended the OnDrawHeader functionality.

Many people asked me how I achieved such a seamless intergation. If people keep asking, I’ll post a tutorial on how to do it.

1 Like

Interesting! I’d definitely be interested in testing it then, even if it seems quite polished already.

An Update just came up with several bug fixes, performance improvements and several new features.

When right-clicking any component name, the preview of that components now pops up.

Also, some components have an extended version of the inspector avaiable, which can be easely toggled on and off.

2 Likes

So, the asset is now pending review.

Thanks to all the testers who gave me their feedback I’ve been able to implement some cool features and fix several bugs.

This looks like a very handy tool. Nice work.

Enable/Disable allows the game to be played and the disabled component will not effect the object it is applied to - but will continue to allow other components to function as normal, components below and above the disabled component?

Enable/Disable works exactly as the built-in functionality. So

1 Like

So it finally made it to the asset store!

Any feedback is highly appreciated

Hi, @Cobo3 ,
I’ve worked with this for a few days.
It’s really handy especially when having many components on one GameObject.
And it’s very convenient to jump editing between different GameObjects by opening many preview windows, LOL!
Thanks, Cheer!

Is there a way to copy more than one component at once to another gameobject ?

I’m sorry @Elzean , but that is not currently possible

Heya,
I get this error when clicking on many objects in the hierarchy:
TargetException: Object does not match target type.
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[ ] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:236)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[ ] parameters) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
CTP.ExtendedEditor.OnEnable () (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ExtendedEditor.cs:37)
UnityEditor.Editor:CreateEditor(Object)
CTP.ComponentToolPanel:smile:rawElement(Rect, Component) (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ComponentToolPanel.cs:279)
CTP.c__AnonStorey1:<>m__0(Rect) (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ComponentToolPanel.cs:207)
UnityEditorInternal.ReorderableList:smile:oListHeader(Rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:616)
UnityEditorInternal.ReorderableList:smile:oList(Rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:398)
CTP.ComponentToolPanel:OnHeaderGUI() (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ComponentToolPanel.cs:547)
UnityEditor.DockArea:OnGUI()

Same here. rated the product 1 star :frowning:

TargetException: Object does not match target type.
System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[ ] parameters, System.Globalization.CultureInfo culture) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:236)
System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[ ] parameters) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115)
CTP.ExtendedEditor.OnEnable () (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ExtendedEditor.cs:37)
UnityEditor.Editor:CreateEditor(Object)
CTP.ComponentToolPanel:smile:rawElement(Rect, Component) (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ComponentToolPanel.cs:279)
CTP.c__AnonStorey2:<>m__4(Rect) (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ComponentToolPanel.cs:207)
UnityEditorInternal.ReorderableList:smile:oListHeader(Rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:591)
UnityEditorInternal.ReorderableList:smile:oList(Rect) (at C:/buildslave/unity/build/Editor/Mono/GUI/ReorderableList.cs:389)
CTP.ComponentToolPanel:OnHeaderGUI() (at Assets/Plugins/Editor/Component Tool Panel/Scripts/ComponentToolPanel.cs:547)
UnityEditor.DockArea:OnGUI()

Hi friends, if you got the same problem with TargetException: Object does not match target type.
here’s the possible fix for that.
Open the file …\Assets\Plugins\Editor\Component Tool Panel\Scripts\ExtendedEditor.cs and change Line 35 to 38 from

if (enableMethod != null){
                enableMethod.Invoke(fallbackEditor, null);
                enableMethod.Invoke(defaultEditor, null);  
            }

to

if (enableMethod != null)
                enableMethod.Invoke(fallbackEditor, null);              
          
enableMethod = defaultEditorType.GetMethod("OnEnable", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
if (enableMethod != null)
                enableMethod.Invoke(defaultEditor, null);

That at least fixed it for me. Cheers!

It doesn’t work on 2018.3 :frowning:

If anyone will be interested in this asset. I asked the asset creator and created GitHub for it under MIT LICENCE for further development.

3 Likes