65
\$\begingroup\$

We are doing our school project with Unity3d, since they were using Shiva the previous year (which seems horrible to me), and I wanted to know your point of view for this tool.

Pros:

  • multi platform, I even heard Google is going to implement it in Chrome
  • everything you need is here
  • scripting languages makes it a good choice for people who are not programming gurus

Cons:

  • multiplayer ?
  • proprietary, you are totally dependent of unity and its limit and can't extend it
  • it's less "making a game from scratch"
  • C++ would have been a cool thing

I really think this kind of tool is interesting, but is it worth it to use at school for a project that involves more than 3 programming persons ? What do we really learn in term of programming from using this kind of tool (I'm ok with python and js, but I hate C#) ? We could have use Ogre instead, even if we were learning direct x starting january...

\$\endgroup\$
9
  • \$\begingroup\$ Another Con would be you need to be familiar with 3D modeling/design, but another look at the site and this does not seem the case.. as 2D games are possible \$\endgroup\$ Feb 4, 2011 at 16:51
  • 1
    \$\begingroup\$ @Johnny Quest Just not really what it was meant for might make it awkward to use. \$\endgroup\$
    – Spooks
    Feb 4, 2011 at 17:48
  • 7
    \$\begingroup\$ 'C++ would have been a cool thing' - seriously, what? Writing in C++ is 'cool' now? Personally I hate the language (all the typing, Python all the way :p), but it certainly is a great language feature and library wise. \$\endgroup\$ Feb 4, 2011 at 18:35
  • 1
    \$\begingroup\$ Unity is an amazing engine but... A few cons to be aware of: 1) Unity tends to be somewhat of a memory hog. It takes more memory than you think it should; probably due to caching things like textures. This can cause problems debugging and even OOM errors on mobile devices. 2) Performance problems can be hard to locate, address, and fix since you are dealing with a black box (no source code). Examine your shaders closely and watch how you manage the scene. \$\endgroup\$
    – milkplus
    Sep 26, 2012 at 1:59
  • 2
    \$\begingroup\$ @milkplus: that's why I think unity is not what student should learn with. example: I'm okay to teach student about programming, teaching them python at first, but at one point or another, you have to teach them about how level stuff works, even the basics. People should use a tool when they know everything about what that tool does. If not, it's a disaster waiting to happen. You can't always justify Knuth's quote with something as complex as unity. \$\endgroup\$
    – jokoon
    Sep 26, 2012 at 14:54

6 Answers 6

67
\$\begingroup\$

The main "pro" of Uinty3D is that it's crazy fast. I'm not talking about performance here, but about development speed. You have:

  • Unified asset pipeline. No need to spend time on resource subsystem at all, no buggy import routines to write and fix: just drop a file into folder, and it works.
  • Integrated level editor. No need to spend time on level tools: just get straight to business.
  • Great tweaking and debugging support: all your gameplay variables are shown right as you play, and can be changed on the fly too - and all this without writing a single line of code. Pause the game anytime, or step through code one statement at a time.
  • Quite comprehesive library of ready-made components. Rendering, sound, physics, controls - a lot of "boilerplate" code is already written.
  • Mono as a script host. While one can argue about merits of C# as a language, Mono's base class library offers a wealth of functions. Collections, I/O, multithreading, and insanely expressive LINQ all speed up development considerably.

Also, Unity3d is really good on multiple platforms. Of course, you can't create, say, a windows .exe game and then magically have it "just work" on the iPhone; but Unity gets pretty close to that. What is required is "tweaking" more than "porting".

Of course, in some cases Unity3D is not ideal. Network multiplayer integrated in Unity is OK for some LAN peer-to-peer play, but anything that requires central server pretty much requires you write all network code from scratch. Unity's GUI system is quite quirky and slow, so making complex in-game GUIs is a pain. However, all other game GUI systems I've seen are painful too, so Unity's one is not that bad overall.

And, of course, Unity3D is a little less flexible than "game engines" like OGRE, that offer only a library/source code. Its performance is not exactly top-notch, and since you only have a scripting sandbox, you can't use some clever low-level hacks to improve it. For example, if Unity's built-in tree renderer doesn't satisfy you for some reason, you can't write your own one (well, you could, but it would be working through scripts and most probably be too slow and too much hassle). Still, it's possible to do just about anything with Unity so long as you don't mind losing a bit of performance.

The biggest "con" of Unity3D, though, is source control. As already mentioned, Unity's own Asset Server costs a pretty penny. And it sucks, really, really hard. It doesn't even have branching. While Unity3D theoretically supports 3rd-party SCM systems, using them is wrought with peril too. I've seen import settings "magically" change after SVN commit, or all objects' parameters disappear after using Perforce. All these can be worked around, but anyway, Unity3D + Source control = pain.

So, to actually answer your question. I believe Unity3D is one of the best, if not the best, choice of game engine for a "little" game. Especially in prototype stage.

That said, if we're talking about an educational project, I' recommend against it. To learn how games work it's better to write one on as low level as possible. Game engines are a great tool; but to use it for maximum gains, it's necessary to understand how they work, and why they work that way. And the best way to learn this is write your own game engine - even if it turns out crappy in the end.

\$\endgroup\$
13
  • 3
    \$\begingroup\$ i'll quote "Unified asset pipeline. No need to spend time on resource subsystem at all, no buggy import routines to write and fix: just drop a file into folder, and it works." \$\endgroup\$
    – nkint
    Feb 5, 2011 at 1:00
  • 7
    \$\begingroup\$ and "The biggest "con" of Unity3D, though, is source control." \$\endgroup\$
    – nkint
    Feb 5, 2011 at 1:03
  • 2
    \$\begingroup\$ and "That said, if we're talking about an educational project, I' recommend against it." \$\endgroup\$
    – nkint
    Feb 5, 2011 at 1:04
  • \$\begingroup\$ About your "tree gen" problem. I think esepcially in C#, you can write a C++ tree gen, put it into a .dll and treat it as managed c++. So you can theoratically access your own "engine fixes" into unity. \$\endgroup\$ Mar 8, 2011 at 10:13
  • \$\begingroup\$ I admit that the Unity GUI 2.0 system is nothing else, than "render a rect with text"-system, but it is very very easy extendable. Look @AffinityUI or other Unity UI projects that are very light-weight, open-source and make the UI-system worth. \$\endgroup\$ Mar 8, 2011 at 10:14
28
\$\begingroup\$

I'll start by commenting on your list:

  • Scripting is not just a benefit to non-programmers. Being a (good) programmer is more than just knowing a language, it's knowing how to deconstruct problems and think in a particular way. Scripting languages can allow a programmer to leverage those higher-order critical thinking skills in order to produce more powerful, more interesting results in less time than he or she might need to produce equivalent results while also worrying about lower level details that some languages (C++ comes to mind) force into the picture.

  • Multiplayer support (or lack thereof) is only an issue one way or another if your project needs it.

  • I fail to see how "proprietary" is a con. If this is a school project you're probably not going to want to be spending time hacking on the source of the framework you use, or anything. Besides, DirectX is proprietary too.

  • There is absolutely nothing wrong with using higher-level frameworks or tools like Unity. "Making a game from scratch" is a non-achievement -- what exactly do you consider "from scratch?" You're still going to be using somebody else's graphics API. Somebody else's runtime (even C requires a runtime library). "Making a game" is what earns respect, not "making a game without using any useful tools."

  • C++ being a "cool" thing is a bit subjective. The language is used very often by professionals in the industry, but probably not for the reasons you would think. As a language, it's starting to show its age and can be extremely cumbersome compared to more modern options. In any cases, languages are just tools and a good programmer should be able to pick up new ones with relative ease.

The big advantage to using Unity for your school project is that it's a high level framework with a lot of infrastructural work already in place for you -- this will allow you to focus on your game and not on building a foundation. You have, presumably, a relatively limited window in which to produce this game so the more you can leverage existing tools, the more time you'll have to produce logic or assets that are specific to your game and will make your game look and feel more complete -- there's a learning curve for Unity, but you end up with much more at your disposal much quicker.

A disadvantage is that you're potentially sinking time into learning a specific tool that involves knowledge that might not be transferrable, especially if you decide that Unity's workflow and environment just aren't for you and you don't ever want to use it again. Also, Unity doesn't have the most obvious 2D workflow -- it's very focused on 3D games, which all the overhead in art assets that tends to involve. But I think that, for a school project like you're describing, Unity is a pretty good choice.

\$\endgroup\$
3
  • 13
    \$\begingroup\$ i'll quote "Making a game" is what earns respect, not "making a game without using any useful tools." \$\endgroup\$
    – nkint
    Feb 5, 2011 at 0:55
  • 3
    \$\begingroup\$ "There is absolutely nothing wrong with using higher-level frameworks or tools like Unity. "Making a game from scratch" is a non-achievement -- what exactly do you consider "from scratch?" there is absolutely nothing wrong, but comes to mind that people who create new technologies are going as low level as possible for example Uncharted 2 even used an in house modified graphics API. \$\endgroup\$
    – concept3d
    Mar 8, 2011 at 7:52
  • 2
    \$\begingroup\$ Any developer wanting to be on the absolute cutting edge of computer graphics will need to be focusing on the lowest level and making their own engine with their game; but this is about 1% of all game developers it seems. If a company were making a game as advanced as Uncharted 1, at the time Uncharted 3 was coming out, they could likely use some existing framework (not necessarily Unity). The question being: Are you creating Uncharted 4? \$\endgroup\$
    – Katana314
    Jun 26, 2013 at 16:51
9
\$\begingroup\$

One major problem with Unity is the source control. If you're not working in a team this isn't going to matter as much (arguably), but that's pretty likely not going to be the case.

You can use Unity Asset Server, but that requires 1) Unity Pro ($1500), and 2) a per-seat Asset Server License ($500). I'm assuming you can get some kind of educational discount, but it isn't free.

Alternatively, you can use something like SVN with Unity. To properly support it you still need Unity Pro.

You can't really just check a non-pro version of Unity into SVN and expect it to work flawlessly. Their mechanism for binding GUIDs to assets and so forth isn't exactly SCM-safe.


Multiplayer functionality is pretty decent, although to be honest I haven't shipped a game with it. In theory you just attach network views to things and tell it what you want to serialize to set up replication properly. From there it's some UI work to connect to other peers and set up. It's mostly peer-to-peer, though. You might be able to do client/server programming running unity in headless mode, but I haven't messed with it. But just getting person A to run around on person B's screen is pretty easy and fast to do.

Also C# is a positive as far as I'm concerned. LINQ is super expressive. It has proper exception handling and garbage collection. It has much more modern paradigms like delegates, lambdas, interfaces and better generic support than C++. (Edit: this is obviously controversial. My point is that C# is hardly a bad language. I don't want to get into a long debate about the pros and cons of the language vs. C++.)

The biggest positive of using Unity, though, is probably the art pipeline. You can take a PSD or Max file (assuming you have 3ds max installed) in the folder and it gets imported.

\$\endgroup\$
9
  • 3
    \$\begingroup\$ @DeadMG, yes, very well actually. Yes I know about boost, template metaprogramming, etc. But I find C# to be a more modern language. \$\endgroup\$
    – Tetrad
    Feb 4, 2011 at 20:41
  • 3
    \$\begingroup\$ @DeadMG I think the point is that C# is extremely smooth for many use-cases that C++ leaves a lot to be desired. Not that C++ can't do those things. \$\endgroup\$
    – Nate
    Feb 4, 2011 at 20:42
  • 3
    \$\begingroup\$ The only thing on his list I might disagree with was 'better generic support than C++'. \$\endgroup\$
    – Kylotan
    Feb 4, 2011 at 22:19
  • 1
    \$\begingroup\$ @Kylotan "for (vector<vector<int>>::iterator iterator = scores.begin(); iterator != scores.end(); iterator ++) {" VS "foreach (var scoreset in scores)"...yup, I'm with C#. \$\endgroup\$
    – Katana314
    Jun 26, 2013 at 16:56
  • 3
    \$\begingroup\$ @Katana314 Of course in C++11: for ( auto x : xs ). \$\endgroup\$
    – Eric
    Jul 1, 2013 at 16:18
6
\$\begingroup\$

Update: Unity now provides all of these features even in the free version, so please disregard the answer below.


Something worth noting- if you are using the free version of Unity3D you will be unable to use several effects, including post-processing shaders (like bloom) and, much more importantly, dynamic shadows. These obviously will not have much of an effect on the workflow for the project, but they do place constraints on what can be achieved for free with the engine.

\$\endgroup\$
3
  • 1
    \$\begingroup\$ This is no longer accurate and should be updated or removed. \$\endgroup\$
    – House
    Feb 7, 2016 at 14:20
  • \$\begingroup\$ @Byte56 Thanks. In the future, you should be able to update old posts yourself without needing to leave a comment. \$\endgroup\$ Feb 8, 2016 at 16:49
  • \$\begingroup\$ I was responding to a flag to remove this answer and I wasn't suggesting you update it to say it's no longer accurate. I was suggesting you update it to be accurate, or remove it. This answer doesn't currently answer the pros and cons of Unity 3D as a choice. I'm sure you can figure out a way to save it though. (You could update it to include all the features that Unity now does provide and the ones they don't for free). \$\endgroup\$
    – House
    Feb 8, 2016 at 17:11
3
\$\begingroup\$

Nevermind's answer covers things pretty thoroughly, but just to pitch in on the source control side of things, it's actually not that terrible once you learn to look out for a handful of gotchas:

  • First off, yes Asset Server is expensive, and quite horrible for all but basic use. It's major benefit is being integrated into Unity, and while that is valuable for ease of use and worth it on simpler projects, for anything larger (which would typically be the projects with budget for AS) it just isn't flexible enough.
  • Moving on to external version control, it's important to realize that Meta Files have to be treated like any other asset and always added to/updated in version control. Not doing this is likely what happened in Nevermind's scenario of settings vanishing.
  • Finally, working with any version control system in Unity (including Asset Server), team communication becomes essential when working with binary assets to avoid stomping on each others' work.

In case you want more detail on these points, I posted a while ago on using git with Unity based on my experience on some fairly large Unity projects: http://goo.gl/ivJVR

\$\endgroup\$
2
  • \$\begingroup\$ Ok, wow, excuse the necropost. I just noticed this was asked (and answered) in 2011! I added to it because it popped up in the stackexchange gamedev news letter this week. \$\endgroup\$
    – FlintZA
    Jul 1, 2013 at 10:28
  • \$\begingroup\$ No such thing as "necro" on SE. Case in point, my comment. :P \$\endgroup\$
    – Cypher
    Feb 8, 2016 at 21:57
2
\$\begingroup\$

Actually. Multiplayer is supported. It simply a matter of choosing a server that you want to run your game.

The hot one on the market now is "SmartFox Server" they offer a few different packages, all of which are free (to an extent). It's only free if you plan on having a certain amount of players, as each package allows a certain amount of players for "free".

If you chose to upgrade, the price is pretty steep for an indie developer. So... In the long run, if you have a lot of players on your server than you will have to charge for your game rather than uploading it on sites like Download.com as a free full game. This may not be an issue for some, but most of us can't afford $2,500 out of pocket for a server.

For Example - SmartFox pro allows 20 players for free. If you want to upgrade it will cost you 500 Euros, which is a bit more in US, around 600-700, and that allows for 100 connections.

The next upgrade is for max amount of players of 500, and it is 1000 Euros, but... You don't have to pay the 1000, you pay the difference.

So you will have to pay only 500 more Euros, rather than the whole 1000. The last upgrades supports unlimited amount of connections, for 2,000 Euros. Which is almost $3,000 US.

So if you upgrade from the 500 connections, you pay 1000 Euros, if you upgrade from 100 connections you pay 1,5000 Euros, and of course, 2,000 Euros to upgrade from free.

Also, this server is very easy to setup with Unity and there are numerous tutorial videos of how to do it exactly on Youtube.

\$\endgroup\$
1
  • \$\begingroup\$ I worked extensively with SmartFox Server since 2005, and it does rock big time. Very stable and mature. \$\endgroup\$
    – FilippoG
    Apr 10, 2018 at 22:26

Not the answer you're looking for? Browse other questions tagged .