So for whatever reason I decided to use Unity for my 2D sidescroller. I'm at the point now where I don't at all regret this decision, but thats because I'm not really using Unity the way it's built for. I was given a development application which handled all of the basic engine fundamentals like frame updates, rendering and physics. The only problem was that I didn't care about having any of that stuff. I've built my own game and physics engines for years and I wanted to have the same control over what was happening as I always did.
So what did I do? I fought Unity as hard as I could. I realized early that I wanted a level of control over the basics of the engine that I was using, which I may not have been able to get had I used the Unity defaults.
In Unity by default, there is an 'Update()' function which gets called for each game object when there is a frame update. Unfortunately, there was no way for me to control which order the objects would be updated in. I didn't like this as there are a few cases where I want a specific game object to run its logic before, let's say, the main character. So how did I fix this? I decided to have only one game object use the 'Update()' function and had it call a 'Step()' function for all of the registered game objects. For anyone who has ever used Game Maker, this terminology may seem oddly familiar, I wonder why? By adding a priority queue for each game object type, I was able to fully predict when each object would be updated for each iteration of the main game loop.
Unity is heavily used as a 3D engine because that's what it was built to be. Despite that there are a lot of people who use it to make 2D games. When I was initially looking into building a 2D game for it I had done a bunch of research looking for the most efficient/easy way to render sprite animations. The best thing which I found at that time was the 2DToolkit. I'm not going to go in depth with my opinions with this right now, since I don't even know whether I'll end up using it for the final game (We still haven't decided between 2D sprites or 3D models). I will say though, that while it is good, it is definitely not perfect. I've also heard more recently that there are more alternative solutions for 2D rendering in Unity nowadays, so if your looking for something, I'd say do some research first.
The most important piece of my engine, which I am very happy I did not use the Unity solution for, is the physics portion. It's designed to be heavily modifiable/tweakable, and since I've built it from scratch, there is no bloat (yet). I was able to focus on the things that I thought I needed for level design and remove the elements that I found useless. Granted, I probably could have modified the Unity physics to work the way I wanted to; but, I thought the time tradeoff for that would've have been greater then building it from scratch on my own. Below you can see a wireframed version of our game engine. The red lines represent platforms, the cyan lines represent the mask of collision objects:

Forget ignorance. Simplicity is bliss.
The biggest thing that I can take away from all this, having already made the physics engine, is the fact that it is so simple to modify now. Whereas going through Unity documentation can get to be a timesink and a hassle, I don't have to do any of that for my own code. I'm the one who understands how it works and it takes me significantly less time to edit or expand because of that. Yesterday alone I added the ability to walk on slopes, something that I was avoiding because it made my past games more glitchy. Instead, it went very smoothly this time around and, while I can't call it glitch free at this point yet, I haven't found any glitches in it. So now I've already implemented most of the basic elements that I need for the game, which means that I can spend most of my time fully focused on the level design. Personally I think this will have a positive effect on the quality of my level design in the long run.
For anyone who has put some thought into developing their own game in the past, you've probably heard recommendations against building your own engine from scratch. Anyone who has actually gone the extra mile and did it anyways, can probably give you a few examples of why doing so was a terrible idea. While it does allow the developer some increased control on how to construct the engine, the development time trade-off is too significant to ignore.
I'm bringing this up because throughout university I attempted to make a game engine from scratch a few different times. Each attempt resulted in me becoming bored of the game I was trying to develop and ultimately giving up on it. I learned the hard way that trying to re-invent the wheel by making my own game engine is just draining. It doesn't matter how good the developer is, a game engine is a large product and it takes a lot of time to build.
The one roadblock which I always got caught on was the construction of the level editor. I learned to make games using Game Maker back when it only costed $30 to get the full version. I still remember when they moved to the YoYoGames domain, I didn't realize how popular it would become at that point. What I liked about that platform was that it had a fully integrated level editor that I could use to position tiles, enemies and other pieces of the level. Everytime I got to the point where I wanted to start developing levels using the engines that I built, I realized it is much harder to do without an editor. I never learned to do level design on paper and knew making my own editor would take a significant amount of time. Unfortunately, this usually resulted in me giving up on the engine altogether.

This brings back a lot of memories.
When I finally made the decision to start and finish my next game, I decided that I would make use of existing tools to simplify my own development. Around that time I had read a lot of articles talking about Unity3D. It sounded like exactly what I needed to streamline my development due to the support for many platforms and a built-in 3D level editor. In hindsight, I probably could have just used Game Maker again since I had already created an adjustable platforming engine, but I wanted to venture into new territory.
Since then, I actually haven't consistently thought that Unity is the perfect solution for me. While it did offer me a simple way to build for many platforms and create levels, it also gave me loads of other features that I didn't really want. I won't go into too much detail in this post, but I spent a fair amount of time fighting against the engine which I chose to use in order to simplify my work. That being said, I did eventually grow accustomed to it and I wouldn't switch to another engine at this point. I've learned how to build around the things that I dislike about Unity, ultimately making it what I would consider the best solution for me after all.