Monday, August 24, 2015

Unity3D At Home Project - Introduction

So, I find myself at a curious point in my professional career. By now, you probably know (or should) I'm a game developer. I work at Robot Entertainment, where I get to work on some pretty fantastic games. Right now, I am the Project Lead for the dashboard. The dashboard is the application you use to launch the actual game. It handles all your inventory, your decks, provides access to the store, etc. In short, it's a pretty darn big project in and of itself, and its written entirely in Unity. As I've been working on it for over 15 months now, I've become pretty proficient in Unity. But, the dashboard is an application. And while it's got some very game-like aspects to it, it is not, strictly speaking, a game in and of itself.

So as such, I find that while I've become pretty darn familiar with building an application in Unity, I know almost nothing about its core game systems. I know, right?

It's been some 4 years now since I released Atomic City Adventures, and during that time, I've not done any at home game development, save for what was needed for work. But I've been itching more and more of late to actually sink my teeth into some honest to goodness game systems, so have finally decided I'd work on something small at home.  Of course, you know me - I can never do anything small.

The Goal
The goal is, in short, to get familiar with some of Unity's game systems. I know plenty about Unity - but I don't know much about making a game in unity. But Unity is a big engine these days. You could spend months in it and not become familiar with all the pieces. So I need to settle on some core ones. Here they are:

  • Terrain - I know a lot of games these days don't even use terrain any more, but Unity has a terrain system, so I want to know how it works.
  • Character & Camera - I want to drive a character of some sort around, and have a camera that follows it. Basic stuff.
  • Animation - And by that, I mean character animation. Specifically, the Mecanim system.
  • Networking - Unity 5 has introduced an entirely new multiplayer/networking layer. I'm itching to dig into that and try it out.
  • Gamepad - I've taken a shine to playing games on the XBox One. For a change, I'm going to actually be design towards usage with a gamepad, as opposed to mice & keyboard.  And no, don't even talk to me about mobile. 

Stretch Goals
If we get really industrious, there are a few other pieces I might like to dig into:

  • Physics - I'm thinking about destructible objects and models, most specifically
  • AI & Pathfinding - I haven't decided if I'll mess around with AI yet or not, but it's kind of ironic that I spent most of my professional career doing pathfinding and movement, and aren't event attempting to mess with it here. 

The Game
I spent a lot of time thinking about the game's design.  Whole minutes even.  Here it is:

Drive around in a giant robot and shoot things.

I know right?  Genius.  But that's what I want to do.  Specifically, if I can lean back in my chair, drive a giant robot around with big guns, and shoot another player that's also trying to shoot me, I'm going to call the game a success. Anything more than that is gravy.

And yes, I know I can probably download an entire kit from the Asset Store that does just about all of this for me, but the object is for us to get familiar with Unity. Not to get familiar with someone else's code that is already familiar. So in order to ensure that, I'm setting the following restriction on myself for the project:

The asset store is to be used for art/content assets only.

That is, models, animations, particle effects, explosions, textures, etc.  But all game systems, we'll build ourselves, or use what Unity 5 provides us.

And that's about it. I've already started, but now you know what I'm doing, and why.