Overall, I like unity, but as I've become a more advanced programmer, I find it more constraining.
In what way? Can you share an example?
There are alot of examples, but I'll use my most recent. I'm trying to seemlessly blend 2 sprite animations ( say, move from "walk-cycle with gun frame 5" to "walk-cycle with sword frame 6" ) so the movements match up. Unity forces animations to restart when jumping from one to another. If unity was open source, it would probably just be a matter of tweaking the source. However, it's not and my choice are:
1) write a custom machine-state script that offsets the following animation based on where the previous one ends. However, I'm already using unity's animation-events, so that will upset the order (if a script runs on frame-1, jumping to frame 6 will ignore the frame-1 event until the cycle restarts) If unity allowed it, i could offset the events too, but it's not possible.
2) write my own sprite animation system. - which would take forever and i'd lose all of the great benefits of their current animation system.
3) suck it up and seperate the legs and torso so they can animate independently - which means reworking all of my sprites.
So in the end, #3 is the best solution because it's the quickest, but it's going to introduce its own problems. Primarily layers and a constraint on how I design the sprites.
The reason this kind of thing becomes a problem as a I become a better coder, is often when facing an 'unknown', especially one that seems really simple and like a non-issue, I'll go ahead as planned and hope to find a coding solution. 90% of the time, I can find a solution. However, occasionally, I'll run into a situation when unity simply says "NO", and there's absolutely nothing I can do except either spend a month writing my own elaboriate custom solution (because of some tiny annoyance with unity) or just give in and follow the 'intended' workflow.
The further exacerbate the problem, if I opted to write my own animation system that interfaced with unity's editor, I'd more than likely run into big issues there too. I've gone down this path before, and it's a consistant problem. Their code for the editor scripting isn't as well-developed as the rest of their program. So, really, if i STILL wanted to do my own animation system, It would be better to write my own animation-maker external tool, then write more code to load the generated files into unity to get them to run correctly. At that point the question becomes "why don't i just use a more primitive library and design it all from the ground up?"
So if you want control and want things to work in a specific way, you often end up getting brick-walled by unity due to minor annoyances that end up with giving you the choice of comprimising and giving in to unity's workflow or writing you own system within unity - which is even harder than if u were using something more primitive.
So right now my relationship with unity is like one with an old girlfriend i've grown to dislike. I want to leave and have some independence and control, but it's not worth it to lose the many existing perks of the relationship. So, in the end, I often just say "yes dear" and do what unity tells me to do because fighting it ends up just being a headache.