Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

We have a big game project using Unity at school. There are 12 of us working on it. My teacher seems to be convinced it's an important tool to teach students, since it makes students look from the high level to the lower level.

I can understand his view, and I'm wondering: Is unity such an important engine in game development companies? Are there a lot of companies using it because they can't afford to use something else? He is talking like Unity is a big player in game making, but I only see it fit small indie game companies who want to do a game as fast as possible.

Do you think Unity is of that much importance in the industry? Does it endanger the value of C++ skills?

It's not that I don't like Unity, it's just that I don't learn anything with it, I prefer to achieve little steps with Ogre or SFML instead.

Also, we also have C++ practice exercises, but those are just practice with theory, nothing much.

share|improve this question

closed as primarily opinion-based by Anko, Seth Battin, Kevin Reid, jhocking, Byte56 Mar 28 at 17:36

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

The point of C++ and OOP is object re-use. Unity is a prime example of that, and of cross-platform portability. They offer all the tools you need to launch a game on XBox or the iPhone or the Wii. Are you seriously telling me you'd rather re-write all of that in C++ from scratch? –  Stephen Furlani Feb 14 '11 at 14:41
Absolutely not, that's not what I want to say. I'm just saying I'm not liking the garbage collected languages it is shipped with, and also the fact that you can't change the code since it's proprietary: you can't tweak it as much as you can tweak another existing engine. Your point is valid, but if I follow you, companies can also reuse their previous engine instead of just switching to Unity. With Unity, you stick to something you can't really change, that's always the biggest downer to me when I think of such tools: A proprietary engine doesn't have that problem. –  jokoon Feb 14 '11 at 14:59
Well you can change Unity assuming you get a source license (which is expensive, like most other professional source licenses). It also gets updated pretty frequently so it's not really static in terms of feature set. –  Tetrad Feb 14 '11 at 15:46
This is basically a "what technology to use" question. Also it's more discussion/opinion oriented. Sadly I can't vote to close for a second time... –  bummzack Aug 22 '12 at 6:53

9 Answers 9

up vote 24 down vote accepted

Unity is a perfectly valid solution in this context. Imagine for a second having 12 people, most of whom are still in the process of learning C++, writing a large and complex game application using it. In the amount of time spent debugging alone you will probably have been able to write another game in Unity.

I'm not saying knowing how to use C++ is not important - it is, especially if you plan on joining the 'mainstream' gaming industry. But perhaps your instructor is correct in this case - use this project as a learning experience in how to think about architecting a game, and have fun doing it. In the process, try to hone your C++ skills using exercises or even go so far as to write small games in the meantime using SFML or some other basic framework.

When it is all done, you will have learned a lot, probably become a better programmer, and your next project can be tackled in C++ with a lot more confidence.

share|improve this answer
Interestingly, there are schools that do teach purely C++ and expect students to build an entire game engine and game from scratch despite still being in the process of learning C++. Of course, actually practicing a skill is how you learn it (not class lectures and small homework projects, by larger semester or year long projects) which is why said schools produce top-tier programmers. Programmers who are capable of picking up tools like Unity very very quickly, or any other engine. It's better to force students to learn the hard stuff, since the easy stuff won't be an issue afterwards. –  Sean Middleditch Jul 29 '12 at 22:43
Not all of game development is programming, and using Unity isn't necessarily "avoiding the hard stuff." It just emphasizes different hard stuff than implementing from scratch. Gave design rather that programming. If a game was implemented from scratch, I would expect much more primitive "programmer art" and no characters or plot. –  wrosecrans Aug 23 '13 at 17:20

Unity is growing in popularity in the industry, mostly in smaller companies. However, it is an excellent teaching environment. It is an important teaching tool, but not particularly common among mainstream companies. It's okay that you don't prefer it.

Let me note something here, though, as I often see a confusion among programming students. "C++ skills" are not very useful in the long run. What you should be seeking out are "programming skills" and "design skills." If you understand programming language concepts and how a software system is put together, then language doesn't really matter. I don't consider myself an amazing developer, but I can pick up a new language and produce useful code in a day or two, because I understand the fundamentals.

Learning Unity will make you better at C++.

share|improve this answer
Gameforge and BigPoint are world-leading companies and they use Unity :) –  daemonfire300 Feb 14 '11 at 16:09
+1 for being a very good answer. Learning -a- game engine is a very very important thing for schools to do because 99% of the time you will not be making one from scratch. Being able to dive into an existing engine and recognize the parts of it, discern the data flow and such are all very key things. As mentioned above, the language does not matter despite it being C/C++ 99% of the time, but being able to understand the engine, or more generally just someone else's code, is an invaluable skill in any programming field... especially the time critical high stress word that is video games :) –  James Feb 14 '11 at 17:18
I sort of disagree with this answer. For me there are differences between scripters and programmers. Unity's developpers are programmers, Unity's users are scripters. The result is the same, they make games, but in the long run, using Unity can be a problem. The game industry is rich and now allows tools like Unity, but to me it's because computers are faster. so you can throw a lot of code, it works: Unity is clearly made for development speed, something the market likes because of dollars, but I don't think that's a real plus. –  jokoon Feb 22 '11 at 15:46
jokoon: What's the difference between scripting and programming? A power user of Unity writes shaders, manages render order, and writes AI code. Unity "scripts" are compiled, and it can be extended with honest-to-goddess low-level coding if you want. And good Unity coding follows the same principles as good non-Unity coding. There's no magical difference between the two paradigms. –  Gregory Avery-Weir Feb 22 '11 at 16:09

Are there a lot of companies using it because they can't afford to use something else?

Yes, but "afford" is so much more than just straight up dollar values.

Yes, the feature set that Unity Pro gives you at the cost they charge is ridiculous, especially considering the fact that it's seat licenses instead of per-title licenses.

But on top of that, it's a really easy tool to use. You're not spending as much time training artists and designers how to use the art pipeline. It's easy to say "just drag in your textures and models and they're good to go.

On top of that, it's one of the very few tools that actually let's you do 3D in a browser with any kind of regularity. They support pretty much every shader platform from fixed function to DX9+ as well as Mac and Windows. That tech alone is invaluable if you want to target the growing "browser based game" market.

From a programming side of things, what you get from Unity is a firm grasp of component design (compared to rolling your own C++ engine, which is usually too heavy on the inheritance side), as well as a very quick and visual environment to try out game code. You'll hopefully learn good design practices by using Unity, that you can take over to future C++ engines.

Sure, it's fine to have a preference of one language over another. Personally I prefer C# over C++. But what language you use is really driven by the project requirements more so than anything else. Developers can't really afford to be fanboys since you don't want to lock yourself out of a market because you happen to not like the tools or language for one reason or another.

Besides, once you really learn a second language you can see that it's mostly just picking up new syntax and paradigms, and it really isn't that hard usually to add new tools to your tool belt. Yes, you should learn and understand C++, but on a high level you need to understand good design first.

share|improve this answer
clarification: Do you mean that Unity Pro's license is worth it compared to plain old Unity? Your comment was a little unclear to me. –  Kyle C Feb 14 '11 at 17:09
I've not used the free one, just that the $1500/seat license is dirt cheap compared to other commercial engine licenses. –  Tetrad Feb 14 '11 at 17:11

The core issue, from what I can see, is not C++ or Unity3D, but rather do you need a high-level solution or a low-level solution.

A low-level solution is one which you get dirty with the processes of handing input, managing memory or loading the models. A high-level solution is which you get one neat package, like Unity3D.

To me, whether to use Unity3D (or any other game engine) or C++ depends on the goals of your game and project.

  • Use Unity3D, if development time has to be quick and/or your game is not performance intensive or is not on the high end of graphical/computational performance. If you wish to concentrate on the game-play, and the default tools that Unity3D provide is all right, you may wish to consider using Unity3D

  • C++ with other libraries, if you have longer development time, the game requires more computational/graphical power, or employs some technology that Unity3D cannot incorporate.

The good thing about Unity3D is that it still employs scripting languages which mirror real world development (C# or JavaScript). The OOP and software engineering concepts you learn (Singletons, facade, state machines, decorators, composition) can be applied in Unity3D. It helps to take care of the cookie-cutter processes such as resources management, scene graph, model loading, rendering, saving of scenes and etc. Even better, if there is a functionality you need which Unity3D don't provide, you can do DLL coding.

Where does that leave C++? C++ is a language, and there are many programming concepts you do in C++ you can do in Unity3D, sans memory management or perhaps templates ( With Unity 3.2, the language specs have improved to cover closures, for example).

So as I have stated, it's not really C++ vs. Unity3D. It is more of "C++ plus libraries/SDK or roll your own engine" vs. Unity3D. It depends on your goals and objectives. For high-end games or games where you need control over the rendering pipeline or input, you may want to use C++ plus an engine which allows you to mess under the hood. If not, I go with Unity3D as my default choice for 3D games.

However, knowledge with Unity3d is not under the hood experience, but it is a good place to start for learning the overall process of developing games. For instance, you probably will need a semester worth of studying to write a renderer and load a model in OpenGL, plus a basic scenegraph and input. You get that done in Unity3D in less than a day.

share|improve this answer
or work with Ogre3d ! –  jokoon Feb 14 '11 at 16:28
The last time I work with Ogre3D was long ago; I think it requires more work than Unity3D to get a game up, and it is a good middle-ground to get a peek at how the under-the-hood stuff work. –  Extrakun Feb 14 '11 at 16:47
+1 on this one. You can't prefer C/C++ and Unity per se because it's an apples and oranges thing. What you can prefer though is the idea of working at the lower level of development provided by C/C++, or the higher level development that Unit allows. –  Tim Holt Feb 14 '11 at 20:14

No, Unity3D in no way endangers C++ skills. In fact, knowing C++ is way more important for a game programmer.

Unity3D is a really great tool for game development. I really like it myself, and would recommend it for almost any game, especially for small teams. But Unity3D itself is written in C++; and you have to know C++ (and also a bunch of other low-level stuff) to really understand how it works.

Even if you use Unity3D, only C++ skills and low-level understanding of principles and algorithms involved would allow you to use it to its full potential. This applies to other game engines too, by the way.

And to do a really good job, to squeeze every last bit of performance out of your platform of choice, and cram as many state-of-the-art effects and algorithms as possible, you can't use anything but C/C++. With bits of assembler, probably.

share|improve this answer
This is the answer i was waiting for to +1 :] –  Notabene Feb 14 '11 at 21:07

As far as I can tell, it depends on your target platform, AAA games and console (XBOX, Wii, etc) games will typically be in C++ to get maximum performance, however if you'r writing a browser based game Unity is also frequently used.

However as to your question, I think its simply to do with that tools like Unity give you a large standardized framework to work in, which in a project of half a year can make the difference between half baked prototype and pretty fleshed out game.

share|improve this answer

I went to the University of Pennsylvania's Computer Graphics and Game Technology Master's Program, where we did all of our projects at the lowest levels, with projects in C++, OpenGL, CUDA, etc. Our projects included physics-based animation, architecting character animation and IK, representing various forms of Bezier curves... you know, really baseline stuff that leverages expertise in programming, linear algebra, and calculus.

Then, I downloaded Unity and found that everything that I worked my butt off to create was bottled up in this free suite that anyone can use.

Was I annoyed by it? A little, admittedly, but I found that having that understanding from school makes me that much more dangerous when I utilize tools like Unity. I currently work in games, where we bring games from concept to market in less than a year, and I'm still the go-to guy when it comes to "that math stuff." My advice to you is go through the motions; you'll be absolutely invaluable when you enter the industry.

share|improve this answer
You could (theoretically) get a badge out of it. :) –  Cyclops Oct 6 '12 at 11:12
There is no necroing here, because questions don't get old and "die" like in forums. :) Late answers are always OK. –  Jonathan Hobbs Oct 7 '12 at 0:12

I might be late in replying but this will help some of the people having this confusion..

Initially I'm a c++ programmer, who used to hate using third party engines (for example unity) as, I don't feel like there is much learning process involved in terms of low level programming.

After trying unity, I came across the following things that is must for a Game developer.Here i'm listing not specifically to unity but listing out the advantages of going in HIGH LEVEL Perspective.

  1. Understanding how to design at high level is more important than bothering about low level optimizations.
  2. Engines which have Entity system of architecture (component based architecture) will help in learning how exactly this architecture will be helpful.
  3. You will know the latest technology (at-least the terminology) and you will be at-least up to date with the industry regarding Graphics.- this is the main reason I choose to try unity!
  4. Skipping time spending on different resource importer tools.(of-course i will still love to write my own 3d importers in c++ as it will be more fun in free time)

Above are some of the reasons for choosing high level engine. But at the same time, You should not stop learning C++ as its the most required and useful lang for a perfect Game dev.

First understand visualizing in the high level and do some quick prototypes with Unity and use that experience in designing a good game in c++.

Soon I will be back to c++ as i had gained a good experience at higher level with unity :)

Good luck!

share|improve this answer

C4 Engine is good alternative for learning game programming with C++

There is Academic license as well http://www.terathon.com/c4engine/licensing.php

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.