Wrestling with the sheer size of Unity

One thing I have trouble with in Unity is the sheer size of the thing. Every time I open it up to do something that I think should be fairly simple, I end up having to go hunt through documentation, google for other people’s struggles with the same thing, and eventually find out the very specific way in which something has to be done. Surely it shouldn’t be this difficult to do simple things. Unity likes to tout that they “take the pain out” and “solve hard problems”. How about making the things that should be easy, actually easy?

I find Unity intimidating in its sheer size, flexibility and freedoms. I think because Unity has done a great job of opening it up for creative expression, it doesn’t have many limits and is like a vast ocean-like canvas waiting for you to express yourself onto. But then you feel lost in a great expanse of possibilities and it’s a real struggle to set limits and reign the system in to focus on a certain outcome. When you have in mind “I want to do this” you now have to wrestle with trying to screen out all the other stuff that isn’t relevant, narrowing down to find an extremely specific required solution, like finding a needle in a haystack.

I do understand that in order to provide all the high-level stuff and sheer scope of functionality, Unity has to be extremely organized and structured and needs all this framework to locate things in specific places. But now when you want to just do something simple, it becomes much harder than it should be. You have to find the exactly right extremely picky little flag in some obscure documentation page otherwise you have no chance of making something happen.

For example I just made a little animation clip and I just wanted to play the thing on an object when a certain event happens. How hard could that be? Well jeez, several documentation pages and unity answers and forum posts later and I finally get this co-routine state-machine thingy working to launch the animation and wait for it and do something afterwards. Waaay more picky and complex than it seems it should’ve been. Just one of many examples.

It seems like each time I want to achieve something I first have to even “locate” where the information is about how to do that, then figure out the extremely specific way that Unity expects you to do that thing, and then write the very technically cranky code that makes it happen. I think if you are a professional programmer who loves all this pain, then you maybe don’t have as much of an issue with it. But in becoming so broad and so general-purpose and so huge, Unity has in a way made the simpler things much scarier and more difficult.

Like for example, why can’t I just click on an object in the scene and get some kind of menu that implements a basic behavior or control system or basic animation in a matter of seconds? Why do I now have to resort to all kinds of typing and clicking just to get simple stuff to happen? When you look at what is involved in making even the most basic thing happen, it’s a bit ridiculous the hoops you have to go through.

I do think Unity has done a much better job now with 2D in particular in providing tools that overcome a lot of the issues but maybe what it still boils down to, the real pain-point that isn’t properly addressed, is in the area of “how do I make something happen?” Unity has tacked on impressive Timeline editing and the superbly over-complex Animator and all this other sophisticated stuff, and keeps missing the boat on the simple things. Like implementing basic AI, the most basic simple animation, basic control systems, basic interaction. It’s so long winded.

I had spent some time away from Unity doing web design stuff and because it’s a focused limited kind of system, you basically get to know simply html and css and a bit of scripting and you’re done. You can layout the page quickly and add elements and configure things pretty quickly. I was doing that all day then came into Unity and all I needed to do was add a couple of icons on my game screen and … OMG. Right off the bat, even without doing anything at all, there was just this impression of being lost, being overwhelmed. It seemed strangely daunting and off-putting. This simple little thing should’ve been a quick 1-minute addition, and when I got to doing it it turned into like 20-30 minutes at least, to do it “the unity way”. Faffing around with texture settings and UI widgets and scripting events and all this crap.

Now, I have considered maybe that I don’t know the tool well enough. Yet I’ve been playing with it for years now. In some ways Unity has made things easier on the high-level editing front, adding more tools, but on the level of creating behavior and action and interaction, it’s still a matter of a) go do some complicated very specific programming after wading through documentation, b) use some limited and longwinded “its not programming” visual tool which is even slower than programming for producing basic results, c) hunt around for 3rd party apps that have all kinds of strange quirks and limits requiring you to have to learn an entirely new system every time.

I thought to myself, maybe it’s just me, maybe I need to learn Unity more, maybe I just am not familiar enough with it. But I’m not sure that’s it. There’s SO MUCH to become familiar with. The learning curve is very high. And I see Unity now focusing on futuristic “automatic AI” machine learning toys that’s supposedly going to save us all from having to create behavior by hand. It seems like a gimmicky overshoot and is ignorant of the very basic needs of users to do simple little things in an easy and efficient way.

Unity seems to have become this sort of high-level tool for advanced developers, and whenever they want to appeal to the indie or less advanced developer they throw some new tools at it to “keep their distance” rather than getting into the very intimate personal space of how someone completes the most basic of tasks prevalent in most games. Just to get a simple 2d sprite animating - ridiculously complicated. Just to get an object to move back and forth, jeez, either some weird animation timeline or scripting needed. Just to make an object clickable and so something when you click it, now you’re doing fricking physics raycasts and writing up state machines in code just to try to make it do something. It’s pretty ridiculous how far removed Unity is from “simple and easy”.

Anyway, enough for now. Anyone else feel this way?

3 Likes

Honestly, that’s never crossed my mind. I’ve found it to be pretty well segmented.

I do think the Animation system is heavy on prerequisites and bloaty, especially when dealing with UI but you definitely don’t need to sift through pages of documentation to play a simple animation on anything. With even a basic understanding of it this should be simple for you. If this is a real issue for you then I’d suggest going through the Learn section on Animation tutorials and getting a better grasp of the workflow so it becomes more natural. It’s possible you’re just experiencing burnout and failure bias, maybe because of a lack of results?

I think you’ve made a good assessment that you don’t know the tool well enough but part of the issue is that Unity has added a huge abundance of new complicated features that most people do not need or want. Basically if you’re one of those people then avoid those systems and things work much better. Timeline is IMO not worth the time investment to adopt yet - at least for production.

Good news is that a lot of stuff is going to be strippable via Unity Package Manager in the near future, so you won’t have these issues.

In the end, you have to decide what to spend your time on and it sounds like you’ve spread yourself too thin and not learned anything well enough to do anything rapidly. Personally, I roll pretty much everything myself and use Unity systems only when required. When investigating whether I should adopt a new feature I explore it thoroughly and make a choice when I’m done so I don’t waste my time.

2 Likes

I feel what is missing is a snippet project containing simple pieces of codes to do the most common things so I don’t have to google 10 links

2 Likes

I’m pretty well versed in terms of programming and doing complicated things. It’s not that I can’t figure it out or don’t know how to. It’s more to do with, why should I have to go to such great lengths to do such basic things? It really should be a matter of a few clicks to get some object doing something meaningful, not having to dip into scripting and the like.

1 Like

The actual solution is that the package manager gets more love (External repositories) and we as a community just have packages to solve the simplest of problems.

Simple problems require simple solutions. If you find yourself using a specific code snippet a lot, just put it on github or make a unity package you can import.

1 Like

It’s a very flexible engine with a lot of power. Getting a bit lost is normal when starting out, and will get easier over time.

I don’t understand your Animation example. Playing an animation is a single function call, and I don’t see why touching scripting would be considered “great lengths”.

You have to “faff” around with texture settings as it’s really not possible for Unity to read your mind and know what you are going to use the texture for. Textures can be used for images, tile maps, storing per-pixel data, lookup tables, etc.

Many of us (including myself) don’t even use Unity for game development, so introducing AI (and probably requiring the introduction of concepts like players, enemies, allies, etc) builtin to unity wouldn’t make any sense.

I don’t feel this way.

It works just as any big software product (that has been in development for over a decade) would. Meaning you need to spend some time learning and getting hang of it and should be ready to check the docs.

I find that the engine is fairly well documented, and documentation is of very high quality. It almost at Qt level.

So I don’t see going through the docs as a hassle or intmidating, as this is something I’d do ALL The time while programming.

3 Likes

Also generic behavior creatio and edition is still a hard problem hardly solved. HTML works because it’s anrrow and specific (a layout). But unity is supposed to make all sorts of game, unlike rpgmaker or even game maker. So far the easier it is to edit behavior, the more close, narrow and specific the editor is.

3 Likes

I have felt somewhat similar. Some things definitely seem to be more complicated than needed. I’ve also found that the resources available are out of date or contradictory very quickly.I think part of that is every year there is a complete re hauled version of unity made available. The other main issue is there is so many ways to do something and not really a right way , that there isn’t a lot of consensus so you end up doing everything a little bit different from everyone else. It seems that buying pre made assets is the way to go and really alleviates all that stress.

1 Like

Um ok, now compare getting an animated object to do something with physics and get it run on all platforms without using Unity.

I think it’s pretty easy.

2 Likes

I agree the animation system is a pain to use. I don’t use it very often, but when I do I find it very tedious and unintuitive for reasons I can’t exactly put my finger on.

Other than that though, I find Unity to be incredibly easy to prototype in. I can open a new project, whack up some scripts and get stuff happening in no time. It’s true what they say - and it’s the first of the main two reasons I like Unity - that Unity is a very ‘open-ended’ development environment that ‘doesn’t make any assumptions about what you’re doing’ - although that seems to be often used as a generic excuse in forum discussions for the lack (or wholly unsatisfactory implementation) of some complex yet basic feature that almost everybody needs.

I think you raise a good point - some things in Unity feel like reinventing the wheel every time you create a new project - but you don’t really show how it’s conceivable to solve the problem. I think the best solution, which is the second reason I like Unity, is the fact that it’[s possible to create almost any kind of editor tools - although it’s definitely arguable that a lot of things to do with editor scripting leaves much to be desired, and also that it’s not really a solution for people who aren’t really comfortable doing scripting in the first place.

I think that in the end it’s worth keeping in mind that the act of creating a game involves two main things: designing and creating a game concept, and programming the tools and game logic that are required to make it happen. And in some sense it’s very difficult to strengthen one’s ability to operate more easily in either of these spheres without requiring more from the other. To be able to offer all the game designers out there more options, the ‘game logic creation interface’ has to become more abstract. And to offer a programmer a greater measure of flexibility in terms of creating an artistic experience, necessarily more artistic handiwork is required.

I would say that Unity caters best to small teams of people with different skills, or individuals who can quite easily deal with both of these things. Right now I don’t think Unity (or any other game engine) offers a generic solution for people who are either uncomfortable programming the game (or the editor) or those who are uncomfortable with the artistic role of ‘experience detail management’. For these people, until some AI assistant gets made that can translate a wide range of simply formulated requests into a complex implementation, only specific implementations of a game engine editor will do, and for this unfortunately they require someone else to implement it for them.

1 Like

When you don’t already know how to do something due to lack of exposure etc it typically means having to hunt through documentation and find problematic half-answers on forums etc until you finally come to a clear picture of how to do it. It shouldn’t be that hard to do the simpler things. I mean, I realize you have to “learn” some stuff but it’d be far quicker and easier to do the simpler stuff in-editor without scripting and document-hunting.

2 Likes

I get what you’re saying. I think the difficulty, though, comes with asking what things fall into the category of ‘simple, no-coding’ tasks that should be covered.

You just want to bind an animation to an event. What would the ideal workflow be for you?

  • Drag model into scene
  • Right click in Scene view, choose ‘Animation → Add Animation’
  • Animator component gets added to object
  • Component has dropdown for ‘Activation’
  • Choose event from dropdown
  • Publish

That sounds fine. Until you consider alternate paths that people may want to take, or even you yourself might want to do as the project evolves. What if you want all animations to play on start, and swap in a different animation when that object is selected by the player? What if you want to randomly pick from a set of animations? What if you want to play a sound effect, too? What if you want to add multiple animations depending on conditions of that model (arms always go to “hold weapon ready”, but different stance depending on how many legs, for example)?

I’ve only published two assets so far (currently working on a third) and one thing I’ve learned is that it’s very difficult – almost impossible – to make things generic enough that they’ll work out of the box for everyone without extra coding. I think that’s why, despite its initial learning curve, the Component system works so well for Unity. You have to write code for most meaningful interactions, but I honestly can’t think how else it should work to be able to accommodate everyone.

1 Like

I think Input should be in that category. It’s required for every game on every platform but it requires a complex cascade of game objects and scripts and probably raycasts and physics components. It’s easy once you learn it all, but it’s the very first thing new users need to do and Google shows an enormous amount of overwhelmed people who don’t know where to start. Unity Answers is filled with the same input related questions over and over again.

If there was a UI system for connecting inputs (keyboard, mouse, touch) directly to gameObject transforms and properties, it would greatly contribute to giving users confidence to dive into more complex tasks.

1 Like

Unity’s Input system is pretty archaic. You’re absolutely right in that regard. Unity is at least well aware of this and has been working on a new system for what seems like 5 years now. I honestly believe it’s taking so long because they’re finding it difficult to create a system that’s as intuitive as everyone is demanding while being as powerful as everyone needs.

And as soon as they solve the “simple” question, it will lead to new “simple” thing lacking, it will never end, worse it will build up on top of the facility made.

Take for example making it simple to have an agent follow the player “without getting stuck on environment™”, that’s the navmesh, but user as complained that:

  • it’s not easy to have flying creatures
  • it doesn’t work on planet type of terrain
  • it’s limited to parallel ground
  • you can’t make “descent” like 3D level
  • You can update it manually easily, at your own rate, without adding some code that fetch many different things.
  • It’s hard to make dynamically area with specific cost for specific instance when they are in a specific state.
    I can assure you even if they solve these aspects, there will be a specific trivial case, maybe popularize by a random fulgurant success of the years (currently BOTW and Fortnite draws attention), that everyone will want to implement and emulate. It’s always simple, but simple on top of an engine that already hide complexity.

That’s why you have the asset store to provide competing solution. Making game__s__ is just not simple.

3 Likes

Unity shouldn’t have any of these gameplay-related things in the engine by default. If you want a cube to move you can write a script, do an animation, or download some tween asset from somewhere.

This is one reason they need visual scripting. It’s something they’ve been delaying for a long time - probably because someone important there doesn’t want it.

I could just attach a 2kb graph file to this post with a bunch of graphs that do everything you want in many different ways, but I’m not about to dump a bunch of .cs files here. We could give you a full FPS system at 20kb that doesn’t require a 500mb download from the asset store.

Unity is very much the Blizzard of game engines. It’s not that they don’t want it to be there. It’s that they don’t want to make a poor implementation only to be forced to support it for years because people have become familiar with it and don’t want to move to a proper implementation.

If you need an example of this problem just look at UnityScript and how long they had to continue providing support.

1 Like

I think a proper implementation is a fantasy. They said that with the UI system and that has issues, and even the new prefabs system has problems. They should just get something that works and release it. If it’s a package, they can always update it, just like any asset store item. We should have had VS and a new input system years ago.