Is there any best practices guides, or just advice regarding the best approach to game architecture for Unity? In particular Unity's component system seems to allow a completely different approach than standard object oriented design.
For example, generally composition is favored over inheritance and the component system makes composition so easy that it seems that inheritance is redundant. I realize you have to inherit from internal Unity classes like MonoBehaviour but I'm referring to inheritance of user created classes.
Similarly polymorphic behaviour doesn't require an abstract base class, you can just replace 'component A' with 'component B' to get different behaviour.
I'm moving toward this way of thinking lately and it got me wondering if there are any guides or resources that outline how to approach architecture in Unity.
Unity is a game engine and like probably all other premade engines on the market, it uses Component based software architecture. That means you see all parts of your game like components i.e I can put one component A into another component B which will give behavior A to the component B. For example I can add keyboard component to my component Player in order to make my Player move with keyboard buttons. As simple as that. If you were to use polymorphism and inheritance you could possible end up in inheritance mess, very hard to maintain.
Engineers found that Component based structure is the best way to make a game engine.
Edit: The biggest problem of component based architecture is that all that visual and bussines logic is mixed within a component aka MonoBehavior. And even if you try to separate visual from bussines logic you will again need to use inheritance which will end in a mess. So I would recommend, functionality that can stand alone or in separate C# class to be moved from a MonoBehavior. That way your code will stay clean and maintainable.