Hi,
We have a feature that if you do:
m_MyGUiLayer = GetComponent<GUILayer>();
if it turns out there was no GUILayer component, if you later use m_MyGUILayer, instead of getting a NullReferenceException (what you might expect as a c# dev), you get:
MissingComponentException: There is no 'GUILayer' attached to the "Directional Light" game object, but a script is trying to access it.
You probably need to add a GUILayer to the game object "Directional Light". Or your script needs to check if the component is attached before using it.
NewBehaviourScript.Start () (at Assets/NewBehaviourScript.cs:10)
We are able to give a much better error message that contains the type of the component that was requested, the gameobject name of the gameobject that apparently didn't have the component, and it also has "context" of that gameobject, so if you click this message in the console window, the editor will actually "ping" the gameobject in question. We do this only in the editor.
Awesome.
This feature comes at a (editor-only) cost of a c# allocation for that error message string (as well as the fake-null-object that holds the string). Every week, we get a bugreport about "GetComponent() is allocating, this is madness!" from folks that (probably) don't realise that this allocation only happens in the editor.
We're debating wether or not this error message provides enough value compared to cost it brings. (costs: apparently users getting confused about it a lot, us having to deal with a flow of bugreports about it, editor-allocation patterns being different from the player).
Options on the table are:
- Drop the feature, and make GetCompoment() return a normal null instead.
- add GetComponent(bool niceErrorMessageWhenNotFound = true), so that if you care about not having the allocation in the editor, you can tell us to not mak eit.
- not do anything about it.
- fake it, and internally mark this allocation as editor-only, and then have the profiler actually hide the allocation.
I'd love to hear from users if they have ever found the MissingComponentException to be especially helpful, and in which scenarios that was, and how one's workflow would be negatively affected by no longer having this detailed exception.
Thanks, Lucas (you can reply here, or on twitter @lucasmeijer)
I would remove it.
If you want to help new developers, then it should be better to append a link/button to the error message (row) in the Console (maybe at the right of each row when the row is selected) with the text: "Know more about this error" / "How to fix this?" / "Why this error?" or something similar for the most common exceptions/errors/warnings. And when you click on it, you get redirected to the Unity manual page with this error/warning explanation, when it happens, how to avoid it, etc. (Doing this, the change is only related to the Unity Editor, and at the same time this option deliver much more information, since you can add as much errors/warnings explanation in the docs, as you need.)
You could add a toggle button to the Console and have this enabled by default.