Unity3D's design is not very good. It is a popular system, you can find a lot of hacks online for getting common things done, but overall the thing is a garbage heap of unorganized and poorly documented features.
The ability to work with source control is a joke. I'm sorry, you can't do professional grade software development without source control. You really shouldn't be doing hobby grade development without it either. But Unity makes you jump through several hoops to get source control working correctly and reliably.
They have an asset store that almost looks like a package manager, but isn't, leaving you to have to check all of your plugins into your repository rather than redeploy out of the central store.
Patch-point releases frequently introduce breaking changes. And their project format is locked to prevent you from opening a project that had just been opened in a newer version than the one you have. Yes, opening a project in Unity writes changes to disk. Wouldn't be so bad of a problem if your project could easily and trivially be added to source control and you could just reset the changes, but see above.
It makes doing basic physics very easy to do, but the quality of the physics is not very good. Even their heavy number crunching "continuous dynamic" mode suffers from terrible warp-through problems.
It's still, after all this time, not available for working on Linux. You can build games that run on Linux, but you can't do the work on Linux.
The export to WebGL feature is another joke. An empty project ends up dumping around 50MB of code out. That's before you even get to any game code or assets. They compile your C# code to CIL with Mono, then that gets converted to C++ with IL2CPP, then that gets converted to ASM.js with Emscripten. It's an absurd Rube Goldberg machine of a process that it's no wonder people thing WebGL sucks, if all they have to go by is Unity projects.
It bombs you out to Visual Studio for editing code, but it's still not compatible with any version of .NET post 2.0. You can't import DLLs without hacking the *.csproj file by hand.
I'm sure I could come up with some more gripes if I thought about it for a while, but I don't want to be here all day.