Does Unity support the declaration of several classes in one script?

It is my understanding that each .js automatically declares one class by default. This class is derived from MonoBehaviour and has the same name as the script.

You can also declare your own class with

class MyClass {/* variables and functions */}

Would that automatically derive from MonoBehaviour, too?

When I’ve seen examples of this, MyClass still had the same name as the Script (that is: MyClass in the MyClass.js-Script). Is that a must?

And you can declare your own derived class with

class MyClass extends MyParentClass {/* variables and functions */}

But is it possible to declare several Classes in one Script?

I’ve seen several script-examples in the forum or here wich looked like it is possible, but I’m not sure if it wasn’t just for convenient’s sake to not specify that the sniplets were each in their own script-file.

If it's possible, are there any restrictions or downsides to using this?

Thanks & Greetz, Ky.

You can declare several classes in one script. However, when you attach a script to an object, the class that will be attached is the class whose name correspond to the name of the script file, and this class must extend MonoBehaviour.

In most object oriented programming languages, it is often recommended to have one separate file for each class. Exceptions are when you need to declare a class which is only used by one other class, for convenience purposes, or if you need to declare several very simple classes. The same guidelines should apply to unity.

While I see no reason it shouldn't be possible, I don't see how it would work within Unity, due to problems with adding components to objects(which class are you adding?).

I could be wrong though.

Best wishes,

-Lincoln Green