What Unity Is Getting Wrong

Friday, May 22, 2020

Developer QOL

When I added Lua to Garry's Mod my intention wasn't primarily to make things moddable. I wanted to make things easier for myself. By wrapping a few functions and coding in Lua I could iterate a million times faster. I didn't have to close, compile and re-open every time, while also hiding all the bullshit and hard stuff.

Unity was about that when we first started with it. They hid all the hard stuff in c++ so we didn't have to think about it. The more time has gone on, the more bullshit has crept to the forefront. The've gone from hiding the hard stuff to moving more and more stuff into C#.

So while other engines have been trying to catch Unity up in terms of developer friendliness, Unity has been going the other way by making itself more unfriendly.

Render Pipeline

Switch to one of the new render pipelines they'll tell you. They're faster, they've got more features. The old pipeline won't be updated any more.

So you've got two choices URP or HDRP. Both are incompatible with each other. Switching is a one way destructive operation. You can't press a button and try it and decide you want to change back a month later. You're converting every material in your project.

This is a good example of something that could have been hidden in the backend. Choose one pipeline and make it the default. Don't have an unsupported render pipeline as your main, default pipeline for 2 years. Sure have low and high pipelines, have low as the default, but come up with a pipeline/shader agnostic material system first so we can switch between them - or even ship both.

UI

There's nothing fundementally wrong with the Unity UI system. Sure it uses transforms so it uses more memory than it should.

But no improvements, no new controls, because they're planning to replace it with UIElements (in a couple of years).

There's a lot they could have done to improve Unity UI. It has bugs. It has a lot of problems with Layouts performing badly (lots of GetComponents in the layouts). It could be rendering faster. It could have a stylesheet system. It could have been gradually improved.

The font system that Unity UI uses could have been improved. But they bought TextMeshPro, packaged it up and you're advised to use that instead. The nice thing would have been to have improved the font system in the backend so everyone automatically benefitted from it. As it is, if you want to use TMP you need to manually update every UI prefab in your game - which again, is one way and destructive.

Multiplayer

I don't even know what's happening with multiplayer. UNet has been deprecated for 4 years. Every page in the multiplayer documentation has this warning. They had a HLAPI and LLAPI being developed a couple of years ago - has that been released, should people be using it?

My nagging feeling is that they're working on something else. Something to lock you into paying for their multiplay services.

They point to the FPSSample to see an example of how to use the network code. The glaring thing about this is that it uses Unity 2018.3.8f1.. and this:

The first time you open the project you need patience! It takes a while to import all the assets.

NOTE: Due to a bug in Unity 2018.3, you have to take the following step right after the initial import: 1 Search for Firstperson_Projection in the Project search field. Select the 4 shaders, right click and reimport them. 2 If you have script compile errors related to entities, you need to remove and re-install the entities package.

Which brings us to another point..

Update: These are apparently also deprecated.

the HLAPI and LLAPI are the old, deprecated things. The replacement they're working on is at least 6 months late, still in alpha, unnecessarily tied to DOTS, and performs badly.

Demos

Unity's demos have always been fire and forget. I'm sure this is hell for anyone coming to the engine fresh, trying to Run a demo that is 2 years old and being in upgrade hell.

This FPSSample should be running on the latest non beta version of Unity. It shouldn't have warnings about import times because they should have solved that. It shouldn't have instructions for working around editor bugs, because they should be fixed. It shouldn't warn you that the multiplayer component shouldn't be used in production environments - because that's what your demo should be selling.

The short movie demos aren't impressive. It's embarassing when half your keynote is a group of artists explaining how they spent 6 months re-writing half the engine to render something that they could made in Maya in a week.

Show me a 100 player PUBG type game running at solid 60fps on a current gen console or mobile. We already know you can render a GTA3 cutscene.

DOTS

Want your game to run better? Recode the entire thing using DOTS. Another one way destructive change.

I can see the benefits of DOTS from a data point of view. I get why it uses less memory, I get that if you're starting a game from scratch you might consider it, I get that it's a work in progress.

I don't get why it speeds rendering up. I don't get why those improvements to rendering couldn't happen in the engine code.

I don't understand why it's being pushed as a solution to everything when it's a solution to such a specific problem and robs Unity of its simplicity and user friendliness. It gets to a point where you just might as well use UE.

Instability

The instability leads to wider problems. Five years ago when you searched for a problem you found someone with the same problem and underneath a solution.

With the fragmentation and the 60 versions of Unity available that's a lot less likely. If you're searching how to do something, the first 5 answers you find are going to be out of date - and they're usually from Unity's own documentation.

Services

So they have a bunch of services. Analytics, crash reporting, cloud build, live ops stuff. They need to make money, that's fair enough.

There's an issue with all the services though - they're all dog shit.

In Summary

An engine works best when it's used as a foundation that can be improved without all the houses built on top of it having to be rebuilt.

There's no doubt that Unity are improving things, but it's like living in a house that is continually being renovated. You've got comfortable in a room, installed all your fitted furniture, decorated all the walls, and then Unity come in and tell you they need to take the floor up again.

Hopefully this is just a bad period for Unity and there will come a time where they stop ripping the floors up.

Turn your phone to view blog list