What are the downsides to using Unity?

Started by
24 comments, last by Daaark 11 years, 8 months ago
I've removed some off topic posts, please keep further replies constructive.
Advertisement
So say I start with Java, and I want to make a pong rip-off(again, for my own enjoyment) to get my feet wet. Should I focus on using game. commands? All they taught us in school was nonsense problems(never got enough of Loan Calcs >.<). I'd love to earn the knowledge of building my own engine, and creating my own game.
For Java there's Andengine. I've worked with it before and it's pretty nice. It's actually very similar to Cocos2d-x which I liked. Although I'm not sure if it was just me or what, but the tiled maps were hard for me to get working at first.

EDIT:
Andengine is android only. Forgot to mention that.
As a long-time user of Unity:

downsides:

  • Although it's amongst the best in asset management, the module does have its quirks and can ruin your day if you're not careful.
  • Hard to "patch" asset/ scene files since they are binary (see 500mb comment above ). [They are switching to a text-based scene format so this will change very soon ]
  • Some web-game developers complain about users leaving the game page once they see the Unity logo [ which in the free version has to be there ]. This is a side-effect of so many people having access to the free version and so much shovelware being developed. I have my doubts about it.
  • Jack of all trades dilemma. It does everything but doesn't really shine in any particular category. It's not exactly a downside but surely not an upside either.
  • Really bad GUI implementation. The inbuilt GUI system is a performance drain at best. [ This is bound to change with ver. 4.x ]
  • Binary SDK. As a c++ enthusiast, source code access would make my day.

upsides:

  • Extremely easy-to-use. I love UDK, Corona, Cocos2D and even ShiVa but they just aren't in the same ballpark when it comes to ease-of-use.
  • Awesome cross-platform support. [ with 4.0 ] Linux, Web ( plugin and flash), Windows, Mac, iOS and android. And all of them free [ basic versions anyway ].
  • Well documented scripting. Some of the best documentation this side of a complex engine.
  • Decent to great performance on mobile devices. Couple of tricks to make it run great but it eventually gives.
  • Great community. They've got their trolls and whiners but overall the community is great.
  • Asset management. Both a blessing and a curse.

corrections:
[ Daaark ] Getting the correct orientation is not a bug nor an inconvenience. It's just the coord. system they use ( common y-up system ). The problem lies rather with the authoring tools [ z-up for 3ds max for example :| ]. Nothing some decent planning won't take care of.
corrections:
[ Daaark ] Getting the correct orientation is not a bug nor an inconvenience. It's just the coord. system they use ( common y-up system ). The problem lies rather with the authoring tools [ z-up for 3ds max for example :| ]. Nothing some decent planning won't take care of.
Actually, it's both a bug,and an inconvenience. Every program uses their own coordinate system, this is nothing new. But when the conversations are made, the new imported asset should have a rotation of 0,0,0. Unity's fbx import will convert it, but have non zero values in the rotation fields, with no way to set the default rotation to identity (0,0,0). This causes nothing but problems. Especially when writing scripts to instantiate objects and have them facing the right direction. It has to be relative to the mystery rotations that came in on import.

If Unity wanted to do it right, they'd actually rotate the data on import instead of just adding them to the model's rotation data. If I can edit normals, tangents, lightmap UVs, and everything else in the object inspector, I should be able to fix the default rotation too.

Unity's fbx import will convert it, but have non zero values in the rotation fields, with no way to set the default rotation to identity (0,0,0).

Especially when writing scripts to instantiate objects
[/quote]

I'll have to agree on that. Was thinking from a manual import POV. However I remember you can get a 0,0,0 rotation if you pre-rotate the object/ pivot in 3DS Max before exporting. Will have to check this out again as my memory is not to be trusted.
We're not all using 3ds max. It doesn't matter what any of the DCC programs do. It matters how Unity handles it.

My exporter in Blender handles the conversion to Unity's coordinate system properly. It does a (+/-)90 X rotation, and it's all good. Unity undoes it, and and then adds the -90 to the rotation field. *banging head on desk*. Now I have to remember this when spawning objects. I also often have to do a -180 on the Z. So if I change my object a bit I have to go back and possibly re-edit the bullshit layers of rotations, and it's a nightmare to maintain.

It comes up in the forums and answers wiki all the time, and they get flooded with answers by people who don't understand the problem. They want to charge 1500 for the pro version, and can't take 2 minutes to add a button to bake in a new default rotation. It's a button in the inspector and a for-loop.
Unity has some serious memory management issues. A lot of people get hit by performance spikes (5-50msecs) caused by poor Mono garbage collector. There are no good mechanisms to profile memory usage and detect where your memory is leaking/consumed. The GUI system behaves badly with this respect. These issues are worsened by crash bugs in Mono 2.6, googling for "too many root sets" and "too many heap sections" will find some links [1], [2], [3], [4], [5]. The common practices are to avoid allocating new objects while your game is running, to avoid the risk of fragmenting the Mono heap to the point where it crashes.

Not happy to say that so far (about three years of Unity development), we haven't been able to write an application for Unity that could sustain a stable uptime of a week without crashing in Mono/GC. Some apps we've built do run ok for about 24h, but they've mostly been an exception. Whenever using a closed source middleware/engine, one naturally is afraid of finding these kind of showstoppers, but I think the above issue is the only one we've met with Unity. If writing server software/long uptime is not a particularly important goal, then I think Unity's gonna be ok.
@Estabon;

I see your point about making a game engine from scratch, but I also see a new persons development stand point. I highly doubt that the first thing you did when you first learned programming was take a skill you already were familiar with and start to write SDL shaders or GUI handling from I/O devices on day one. I hardly doubt that any tutorial you learned from also sayed that you need to tackle the most complex thing there is to bug's and said, "Don't worry you need to learn to fly in order to walk." My point being is the OP learning from other engines and improving on it will help him 100x more than just throwing him with a bunch of libraries with little to no programming experiance and say make something of it. Programming is easy to some and worse than algrebra to others. Some understand basic logic and finite math, where as others don't understand that computers are as smart as you tell them to be. Telling someone to grow balls right up is not the right attitude, if anything you linking a game engine source with some examples to an easy to use game engine like Pong, Tetris for math matrix handles or even a clone of Angry Birds to show collision and vectors would be more helpful than all of your posts combined. There is alot more to just 'learning programming'.

With that being said,

My experiance with Unity3D is a short lived one sadly. We had an issue when it came to 2D assets and applying set textures to a 3D object on the scene. The engine is built for 3D and only wants to render in 3D. When force to use a 2D asset, when applying a 3D asset to the scene the game engine needs some custom scripts to run. All in all we found it a little to troubling and ditched Unity3D and started to tear down UDK. Thats where we are right now. In my scope of using it this is where I had issues:

-Files get messy because Unity wants to control them all
-Everytime we update a build we have to create a fresh install and re-distro to everyone vs a simple patch change. Very annoying when we do 30-40 builds a week.
-Had a couple lock ups happen when pre-defined scripts would attempt to run during play testing.
-As stated by CLB we also has memory management issues, ours came during development more than anything because of the scripts issue.
-Importing models gave us issues when we used Cell Shaded. It would mess up the draw points for outlines and everyone would have mustaches as it would start tracing the models in a wierd pattern it apparently thought was the priorities or the way the model was built. Not really sure what it was doing but our engineer said it to me so I said Ok. Point being, it hated it.

-M
I usually just give my 2 cents, but since most of the people I meet are stubborn I give a 1$ so my advice isn't lost via exchange rate.

Another downside: Every week they fix 3 bugs and issue a new 500+MB download instead of a small patch.

This topic is closed to new replies.

Advertisement