I’m just going to list some of my thoughts about Unity here.
Unity is an amazing tool, without it, there’s no way I could be a one man game dev team. Everywhere I go, I sing praises of unity to anyone who will listen. There’s tons of resources available online for simple things, but more advanced topics have very little information about them, this is why most of my learning now comes from other people’s packages. In the past, I’ve struggled to find information about compute shaders, DX11 features, physics engine scripting, path finding, custom deferred rendering stages, multiple render targets, stencil buffers, custom yieldinstructions, singletons/managers.
at one point, I was very close to purchasing unity’s premium support because I couldn’t figure out whether the bugs I had were with my code, or in the engine. I was working on compute shaders and DX11 functionality and things weren’t working, and I had no idea if I was doing things correctly because the documentation is poor on this topic, and it seems like there are almost no examples of how to do them correctly, and almost no one is posting on the forums or replying to posts concerning these topics. I ultimately did not purchase premium support because it was too expensive, and I only thought I would need to use it very briefly. If a cheaper option were available for less hours of support, I would have purchased that. As an indie developer working off of savings, my budget for this is very limited.
I’ve found that it’s mostly impractical to use Boo, even though it seems like a great idea, there’s no support for it. Before I was a game developer, I was a python coder, so I miss python like syntax, but now I’ve grown used to C#. The fact that the different assembly types don’t always work together compounds this.
the first time I considered stopping using unity was when I found out I couldn’t step the physics engine manually, which is somewhat required for certain multiplayer architectures. At that point, I spent a week integrating Bullet Physics with unity, which I ultimately did not end up using. I’ve since switched to a different architecture that doesn’t require this.
The engine not being threadsafe, or not having a multithreading model makes me worry about running into scaling problems down the line.
I sometimes think that I could solve a lot of my problems (like seeing how some rendering things actually work under the hood or editing the physics engine) if I had the source code, but I have heard that this is almost impossible and also very expensive to license.