I’m going to start off by saying I love Unity. I’ve been using it since 2011, back in good ol’ 2.5 days. Back then, Unity shook up the industry by offering a free 3d game engine which opened the market up for indie devs everywhere, and I can’t thank them enough for this.
Now, I think it’s time I voiced my headaches with the engine in its current state, the journey I’ve taken learning it, and how it hasn’t fixed many of the issues in those 10 years. I genuinely fear the future of Unity.
With that all said, I’m just going to jump straight into the biggest issue. What’s that, you might ask?
Promises! There are so many updates “in the works” that are supposed to make Unity so much better. A new UI system, the SRP, shader graphs, and many more. Most specifically, the HDRP. Unity’s rendering has been so far behind its main competitor that many developers and players have created recognition around Unity’s name for it. I’m glad HDRP is coming out, but when it finally gets here, what will Unreal come out with? I mean, HDRP will finally bring Unity’s graphics capabilities to what Unreal created in 2014! That puts Unity 5 years in the past! This would be acceptable if this were a small development team working on a passion project, but Unity is a fully funded company. Where are their resources going?
Automotive, Film, Architecture. What do these have in common? Well, apparently they require a game engine to “accelerate innovation” instead of the many software suites already available on the market that are specifically built for those industries. It’s as though the people at Unity know that they are behind and losing the market, but instead of finding and fixing the problem, they’ve just abandoned the ship.
Now I have to circle back to that HDRP thing. This is the single feature I’ve anticipated the most since it was revealed. Finally having such gorgeous graphics. Actually, good subsurface scattering is all I really wanted, but everything is just so beautiful! Well, at least the still screenshots are. Part of those promised in the works updates is a new networking api, and with it came an FPS demo which showcased the HDRP graphics in it. I’m not sure how many devs actually downloaded the demo and played it, but I sure have. When standing perfectly still, the environment was amazing, however I noticed an incredible amount of motion blur, enough to make me sick. So, I did what literally every player is going to do and turned the motion blur off. Suddenly, any time the camera moved, I could see the ugly side of the HDRP. Horrendous pixelation, geometry tearing, screen artifacts, the works. Granted, HDRP isn’t complete yet, but if that’s what the end product is going to look like, that will be the final straw for me. I will leave Unity altogether because what I saw was nothing short of unacceptable. We’ve waited years for this, and it needs to be worth the dedication we as a community have shown to Unity.
In a similar category to being behind the industry, I would like to bring up a few aspects of Unity altogether. I’m talking about UI and UX. Unity has had the same Windows XP style UI for as long as I’ve used it. I was ecstatic to see the new UI update is finally being released in 2019.3, but it still took 10 years to finally make this simple theme change and I have to ask why? Is it not a simple task to keep up with modern design principles? Akin to UI is Unity’s UX. Although the editor itself is mostly ok in this aspect, everything else Unity makes has the worst UX I’ve seen in any modern website or application. Starting with Unity Hub. I’ve seen a request in the forums for there to be a delete function many times. Now, this is one of 4 fundamental functions any data-based application or website should have called CRUD functionality. It stands for “Create, Read, Update, Delete”. I am appalled that Unity has released not only Unity Hub without this function, but Unity Hub 2.0 didn’t have it, either! Did you forget? Now, That function may have been added since I last checked, however I actually downgraded back to 1.6 because the interface is much prettier. I have no idea why they decided to make it ugly, but I guess it needs to match the brand. And that’s not the only UX issue Unity has. This forum really shows how disconnected Unity is from their Users. Although getting through the forum in general is ok, trying to manage your account when there are 2 different logged in accounts on a single page was actually the source for quite a bit of confusion on my part when trying to figure out why my profile image wasn’t what I wanted it to be and the forum - hahaha - said “just click on your profile and do dot dot dot” without specifying exactly which profile to click on. At the time I hadn’t realized there were two. I don’t know what kind of issues Unity’s backend has to require 2 separate accounts like this, but it definitely needs a rework 10 years from now.
Those are my major thoughts on the company as a whole. The rest of my thoughts are about more specific things.
First and foremost in this area is Unity’s documentation. Now, you would think that the best way to learn how to fix a bug in your code is either checking the API or asking Unity’s forums, right? Unity really likes to make their users feel like they are making something as quickly as possible. You want this thing to move, here’s how to move it. Most of the fundamental functionality in Unity has extensive documentation, but anything above that drops short. I would consider myself somewhere between a moderate and advanced user. There’s a lot that I don’t know, but I can generally get anything I want up and running on my own. The problem I currently have is whenever I need to understand something new now, the documentation pages are completely devoid of useful examples, and sometime (if I’m really lucky) completely blank. For instance. I am currently trying to do something that UIElements has problems with, but I won’t find the answers there, will I? Sometimes I can find related examples scattered around the documentation somewhere, but it’s never an easy process. I’ve left countless feedback on pages everywhere about incomplete documentation, because that’s what it is. I can use intellisense and get a better picture of what a method does than the documentation will give me.
Back to that bit I mentioned about getting users up and running as quickly as possible. There are no good tutorials for Unity. None. I’ve watched and read so many. They all suffer from very similar problems. I purchased a course on Udemy that promised to teach the entire process of creating an RPG, however I realized early on that their item system was terrible! I’d already created a better item system in even the simplest of games. Youtube tutorials hyper focus on a specific mechanic or thing, and even when they show a good implementation, rarely is it expandable. All tutorials I have seen all fail to teach the overall architect process, where you spend time defining precisely what a system needs to accomplish, and what kind of API it will need to offer to other systems in the game. Most tutorials follow this “well, in this video we will add this functionality…” without offering any idea to the viewer how they came up with the ideas in the first place. Sure, newer developers get to add that system to their game, but they won’t understand why it is the way it is. I don’t think I’ve described this too well, but this situation did happen to me. I could easily look up how to make a system and throw it in, but I couldn’t actually build a game with it because it wasn’t built to do what I needed it to do.
Quick Bits!
Scriptable Objects can only be stored in a file as json, not binary. what?! I don’t care about storing references, but having a separate class for the data is defeating the purpose.
The conferences Unity records are either hosted by developers with some sort of holy grail of information about the engine, or complete dudleys that don’t know the first thing about game development.
It takes weeks to get good answers on the forums sometimes. Unity employees are never the first to reply and in most posts I’ve read, they reply much too late for their answers to matter.
weird things that should be basic are for whatever reason not supported. You can set your thing’s position like this. Oh, wait you have an animator with applyRootMotion… suddenly that won’t work unless you override this function that forces you to completely recode how the root motion is applied. good luck!
Welp, that’s pretty much my rant. Whoever makes it this far, congratulations, you win a cookie. Note that a lot of what I’ve said here is just my opinion and views, so you are free to disagree with me. I just needed to get this off of my chest. I do hope the best for Unity… I am 10 years invested, and that time and experience would be a waste if I didn’t like using it. I just have so many doubts for where the engine is heading.