What is Unity?
First, in a picture, Unity is this (big image):
In short, Unity is an integrated game engine and editing environment. It's closest direct analog is probably the Unreal Development Kit, though Unity is much more flexible and has much more enticing licensing terms for indie developers. The engine itself isn't quite up to Unreal 3 standards, but it's damn close, and is more than passable for indie titles.
Unity comes in two forms. The basic Unity package is free to download and use. You can even build and release your game using the free package, provided it's not a commercial endeavor. If you want to release commercially, or use some of the Pro level features, there is a $1500 USD license fee. Pro does support several features that the free level does not, but they are not "game breaking". You can still create a full featured game with just the free package, you just lose some of the flexibility. For a complete version break down, see here:
http://unity3d.com/unity/licenses
There are also license add ons you can purchase for various platforms. The real beauty of Unity is that it supports basically every gaming platform you could possibly develop for. Obviously to develop for the consoles, you need to be in the registered developer program for that console and have a dev kit. For most indie developers, these are just pipe dream features, but it's nice to know the flexibility is there.
Why would I use Unity instead of X?
This depends entirely on what X is, but I have a few answers from various other packages I've used.
Unreal Development Kit: This is a neat tool, but it ultimately greatly limits your flexibility to go commercial with your idea without Epic's direct involvement. The chances of an indie developer being able to "step up" to a full UE3 license are slim to none. If you really don't give a lick about ever taking your game commercial, I doubt Unity offers much this doesn't (although I think it's easier to start from "scratch" with Unity, as the UDK is still completely tooled to be an FPS system and that has to be stripped away).
XNA: XNA is really a lower level tool than Unity. It doesn't provide the editor environment that Unity does. It's also not a complete engine, so much as a set of tools to interact with the XNA framework. If you are dead set on releasing your game on XBox, this is probably still your best bet unless you think you can get in the dev kit program. In addition, you lock yourself to Windows and XBox with this path.
Ogre3D: This is sort of the middle ground between XNA and UDK/Unity. No editing environment, and no game framework to speak of, but the 3D engine is very complete. Supports the major desktop platforms (Windows, OSX, Linux), but doesn't easily support the consoles. You will spend a lot of time writing a game engine and tools around this 3D engine, but if you just want a high performance 3D engine this is a good choice.
What are some basics I need to know?
Games in Unity are made up of three things: GameObjects, components and scripts. Scripts are actually a type of component, but we want to make a distinction between them. In addition, there are scenes, which are essentially the world that your game objects make up.
GameObjects
GameObjects in Unity are the building blocks of your game. They make up the physical and non-physical world objects in your various scenes. In their blueprint form, these are known as Prefabs and are displayed in your Project view. In the game world, they are full GameObjects and are displayed in your Hierarchy view.
Moving between the two states is seamless. You can build up a detailed game object from a series of prefabs, then drag that game object in to the Projects view and seamlessly turn it in to a prefab.
Components
Game objects are made up of components. Components can be everything from an asset, such as a model or a texture, to a script. Components are how behavior is added to game objects. Adding a component to an object is as easy as dragging the component from your Project view and dropping it on the object in the Hierarchy you want your component to link to.
Unity contains tons of built in components. Everything from particle emitters to collision primitives.
Scripting
Scripting in Unity is done in one of three languages: C#, Boo or JavaScript. Internally, Unity uses the Mono open source .NET platform to run it's scripts. You can mix and match the three available languages in your project, though it's probably not conducive to a clean programming environment.
Scenes
Scenes are the sandboxes your game takes place in. In the simplest case, you can think of them as your levels. In reality, they are just containers of game objects. As such, they could have absolutely nothing graphical in them and still be a valid scene. A scene could just be a ton of scripts, or a camera pointing at a billboard with a 2D image, or just a GUI overlay. Things like your main menu or your loading screen will likely be represented as scenes.
Where can I get more info?
The best place to start is here:
http://unity3d.com/unity/
You can download Unity here:
https://store.unity3d.com/shop/ (don't worry, the free package just goes through the store for it's download)
You can start reading documentation here:
http://unity3d.com/support/documentation/Manual/index.html
You can find various other resources, including some starter assets, here:
http://unity3d.com/support/resources/
The helpful Unity community is here:
http://forum.unity3d.com/
In addition, Unity has it's own StackOverflow-like system:
http://answers.unity3d.com/
Posts
First off, I've spent five or six years now trying to write a custom game engine. It was quite a bit of fun at first, but after a while, I realized something: I wasn't writing a game, or even getting close. My dream has been to build a game, not an engine. As a programmer by trade, an engine is just something easier for me to wrap my head around.
Unity has saved the day for me. I am actually writing a game now, not an engine. I've been working with Unity for about a month now and I've made actual, real progress on my game idea. I'll post more about that idea, and some screen shots, eventually, but I just wanted to get the ball rolling and see if we couldn't get some other PA'ers in to using Unity and posting about it.
Thanks for posting about this!
Unity runs natively on the Mac if that's what you have in lieu of a PC.
If you know Java, C# is easy. Syntactically they are very similar. You'll spend more time learning the Unity API than you will learning the syntax of C#. You could also use JavaScript if you were more comfortable with that.
I'm currently knee-deep in my second XNA game, my first having failed miserably on Xbox Live Indie Games. The second is meant to be more market-friendly, but seeing as how XBLIG is niche-of-the-niche, any future success on there will be relative, barring accidental creation of The Next Big Thing.
Once I'm done with my second game, I'm probably going to move to Unity 3D. It supports the 360 and the Wii (although you'll need a dev kit and access to XBLA and WiiWare), but it also does PC, Mac, iPhone, and Android support is coming soon. That's a TON of reach. Although it doesn't absolve you of making a creative, high-quality game, it does give you access to a much more vast market. Which is always awesome.
Better still for the indie minded folks, Unity 3D games can be played in your native web browser after you install a plugin that doesn't require admin access (I tried it successfully on my work computer). Since indie games are just as vulnerable to piracy as anything else released on the PC, creating a browser-based game allows you a bit more control and safety that you could otherwise expect. And an even bigger market to reach.
Definitely going to look into it.
Yeah from my brief time looking at C# it looked like some kind of lovechild of Java and C++.
It's really more Java than C++. There are a couple of "C++'ism" in there, like the fact that the 'extends' and 'implements' keywords in Java are replaced with a C++ style comma separated inheritance list (you are still only allowed to inherit one real class, but can implement as many interfaces as you want, just like Java).
So, in Java:
public class C extends B implements IA { }becomes this in C#:
public class C : B, IA { }Interestingly enough, I am trying to do an input system I haven't seen done in Unity (I'm sure it has, I just can't find any examples): Point and click movement, e.g. Diablo or Dragon Age when in the overhead tactical view. If I get it working, I'll post the script for others to use.
Also, I am learning some amazing things about the scripting environment right now. I've learned how to create a dynamic mesh using the terrain class to create a dynamic polygon that approximates the surface of the terrain. Then I use this dynamic mesh to project a decal on to the terrain, such as a "move here" or "attack this" symbol.
Very impressive for a streaming browser engine.
For example, Arcen Games made their puzzler, Tidalis, in Unity from the ground up. They also just recently ported AI War: Fleet Command into the Unity engine. What's funny is it looks like everything that they are doing and plan on doing is 2D. Maybe not A Valley With Wind, the Tower Defense game they are planning, but Alden Ridge is definitely going to be 2D, and most likely will be done in Unity too.
I've noticed that a lot of people are talking about Unity in the indy world these days. It's definitely got me interested in resurrecting my programing skills and seeing what the fuss is all about.
From my understanding, yes. There are also features missing from the free version (like real-time shadows, which is a biggie for any sort of 3D game). There are no "game required" features missing from the free version though. You can create a whole game with it, you will just be missing some bling bling features.
I am doing a full 3D game, and I get around the lack of real-time shadows by using blob shadow projectors in my current mockup. If it ever gets to the point where this game is close to release as a commercial product, I will save up the money to go Unity Pro and get all the features opened up to me. That's the nice thing about Pro being $1500 USD. It's not a small amount of money, but it's a reachable goal for most people if they are serious about it.
Pricier versions are more powerful and enable more features, like post-processing shading and fun stuff like that. The free version will get you pretty far, though.
Ahhh, I wasn't aware you could charge for them. I knew about the splash screen.
e: There is a complete version comparison listed in the OP if anyone wants to know what features are missing in the free version.
Yah, unfortunately Android support is just like iPhone support: You need Unity Pro, and then the platform add-on, which is another $500 each (so $500 for iPhone and $500 for Android).
edit: took a look at the EULa and it says this: So basically if your company hasn't made more than a hundred grand in the last year you can publish games with the free version.
Ok that's awesome.
I understand the idea behind free->entry level features, expensive->neato features, but getting your game to stand out isn't just a matter of hammering home some good gameplay with the free version. For instance, the creators of Super Meat Boy and Love (different teams) made their games stand out by, among other things, achieving an eye-catching art design using custom shaders and post-processing effects.
Which they couldn't have done on Unity Indie. The visual appeal of those games is part of their charm, which would have gone missing on Unity Indie.
Not that I'm hemming and hawing, mind you. I understand how businesses work. I'll probably get my hands on Unity Pro at some point, but I'm going to cringe as I part with $1500.
Also, I am confused how everything they did in Super Meat Boy and Love couldn't be done in Unity Free? They are both 2D games, there is nothing in Unity Free that is stopping you from making Super Meat Boy. Only if you wanted Super Meat Boy to be in 3D, and use deferred rendering or real-time shadows, would Unity Free stand in your way.
e: You might not be able to do Love, only because I can't tell if Love is rendered 2D using watercolor backgrounds, or if it's rendered in 3D using a watercolor post-process shader. If it's the former, you can do Love in Unity Free just fine. If it's the former, you would need Unity Pro for the post-process shader.
And yeah, I'll definitely shell out for Unity Pro if I think it's worth it. I do have a Torque Game Engine Advanced license sitting around here... but I'm not too keep on using it.
Only if you wanted to do a true post-processing chain, that was resolution independent, and was high performance enough to work in the 3D realm, would you need Unity Pro.
What the fuck.
Ok that's it, I'm getting this and showing my friend, we've been looking for an engine that would allow something like this for a while.
But in the mean time I need to think of a compelling game design anyways.
Word of advice? Start simple. Really absurdly simple. Simplest complete game you can think of. Work on more complicated ideas after you've opened up that pandora's box.
My first game in OpenGL took a ton of programming for a week to get something reasonably playable with three basic objects. My next project I switched over to Python for development (it's faster to develop in than C++, right?), with a slightly more complicated idea... and spent a month developing an engine with absolutely no gameplay whatsoever.
I thought I was safe. It could happen to you.
Blog | Twitter | Free games | Unmaintained backloggery
The web is quite literally filled to the brim with C# and JavaScript tutorials. You can also learn the scripting pretty easy just by looking at the built in scripts that Unity ships with. They are all written in JavaScript, which Unity recommends that new/non-programmer use.
e: One thing to note, some people call Unity's JavaScript implementation "UnityScript", but in reality it's just Microsoft's extended JavaScript made for .NET. I think it's an ISO or ECMA standard now, along with C#.