The purpose of this blog is to chronicle the development of our game using the UDK Engine and Blender. First and foremost: we are not experts, we are just two guys who happen to love gaming so much that we decided to try to make our own.
As of now (the format may change in the future), our posts
will detail our progress (and lack thereof) in developing our game. This will
include tutorials on how to accomplish tasks we’ve found to be especially
daunting and random narratives about how we have encountered and overcome various
issues in indie game development.
This first post will describe the steps for getting started in making your game, including: preparation, engine choice, and collaboration. In addition, I've given a narrative of the path we chose and explain the decision process that led to us following our specific path.
Step 1: Prepare (to
be frustrated)
Making your own game sounds like fun, and it can be a very
rewarding process, but you will undoubtedly run into plenty of frustrating
issues along the way. Keep in mind that this is a learning process. Be prepared
to run into unexplained issue after unexplained issue, followed by a visit to
your friendly neighborhood Google for hours on end. If you run across a forum where a user answers your question with “you can’t do that,” keep searching, this answer is typically
wrong.
The smartest thing you can do is to plan ahead. Make a roadmap
of short term and long term goals, decide what kind of game you want to make,
and evaluate your resources. The Epic Games website actually has a good
"getting started" overview, and I recommend using it.
Step 2: What’s
Under the Hood?
Numerous factors go into trying to decide which game engine to use, or whether to use one at all. Without going into too much detail, a game engine provides a basic framework for a game; this saves time by keeping you from having to “reinvent the wheel.” Usually the engine already has features that you would otherwise have to program from scratch, like lighting and physics, incorporated into the system that you build on top of.
If you aren’t a coding expert, and don’t have an unlimited amount of time to spend coding your game from the ground up, then you probably want to consider using an engine. Some of the most popular engines are the Unreal Development Kit (“UDK”), CryEngine, and Unity.
There are probably more than a dozen different game engines
out there, but not all of them are built alike. Some have better graphics than
others, some are only for 2D games, some are free, and others are expensive. If
you want to offer your game on multiple platforms, there are some engines that
streamline the conversion process so that you (in theory) only have to code
your game once.
Because we didn’t have the time (and likely the coding
expertise) to start from scratch, it was a no-brainer that we were going to be
using an engine. When it came time to decide which engine to use, we evaluated
our goals and resources. Here’s what we came up with:
- We had a total of two committed team members with some photoshop and coding skills (zero 3D modeling or animation skills present).
- Between the two of us, we had a medium amount of free time and basically no money to spend.
I also took into account the fact that since both of us were
brand new to the game building world it would make both of our lives much
easier if we chose a popular engine with plenty of tutorials scattered across
the net. UDK has indie friendly prices and hundreds of free tutorials available,
so we went with that. If you choose a different engine, the rest of this blog
probably won’t be very helpful to you beyond a possible entertainment value.
Step 3:
Collaboration
When you have a team working on a software project, you need
to have an efficient way for your team members to put their individual pieces
of the puzzle together. UDK has a
third-party subscription service called “Perforce” integrated into the UDK
installer, so that’s one option. I’ve also heard of people using services like
Dropbox to collaborate (you’ll likely need to upgrade from a free Dropbox
account, which is limited to two gigabytes of storage). In addition, there are
numerous other collaboration services called “revision control systems” with
acronyms like SCM’s and SVN’s.
My partner, Itsmyroad, had prior revision control system experience so he took
the lead in choosing and setting up this service. Staying true to our budget of
zero dollars, we chose the free options and decided to use Git with Bitbucket as our hosting service. To be clear, if you aren’t a distributed revision
control guru, Git is the software on your computer that monitors changes in the
folders you’re working on, and when you’re ready to share those changes with
the group, it facilitates the process of sending those files out to be shared
with the group. Bitbucket is the file hosting website (cloud storage) that
stores all these files for your team members to download (using the Git
software installed on their respective computers). This type of program is a
great time saver because you only upload and download the files that were
actually modified, as opposed to sharing the whole project with each update.
Git also gives you the option to save your changes in different isolated
“branches” so that you can share and test your latest changes in those separate
branches without having to worry about corrupting your stable build located on
the main branch.
Step 4: Get to
Work
Now that you’ve made your roadmap, decided which engine
you’re going to use (if any), and set up team collaboration, it’s finally time
to begin working on the game. To make most efficient use of your time, each team
member needs his own job (or jobs) unique from other team members. You don’t
want four people working on level design, one guy coding, and nobody making 3D
models. Make sure each team member has a job and a task to work on without
having to wait for one member to finish before the next can start.
Itsmyroad was in charge of coding, and my job was to learn
UDK and set up the initial game level. Our short term goal was to get some
basic game features working using some rough 3D models. At this point, I began
watching tutorials showing how the UDK works and how to use it. I was under the
naïve impression that I could download and experiment with free 3D models from
various websites without needing a 3D editor. I eagerly downloaded over a
hundred random royalty-free 3D models, all in various file formats that
(unbeknownst to me at the time) weren’t even compatible with UDK. When I
finally sifted through, found, and imported a UDK-compatible 3D model, I was
brought to the realization that most of these models weren’t built with an eye
toward using them in video games. Even certain models labeled “game ready”
still needed to be edited before they would be ready to be thrust into a video
game. This is when I decided that it was time for me to switch gears and begin
my journey into 3D modeling.
I already knew that Autodesk products would be out of my
price range, so I installed Blender. Blender is a free, open-source program
that is a pretty powerful alternative to the industry standard Autodesk
products. I played with the program some
and followed numerous Youtube tutorials until I mastered the Blender basics.
Within a few weeks I had progressed from making blocky models that were
reminiscent of my Lego modeling days (I was not good with Legos) to creating a
fairly realistic spaceship interior scene that I was actually proud to show
off. Unfortunately, this elation did not last long because I faced issue after
issue trying to import the model into UDK.
One of the benefits about working with UDK-- the vast
amount of tutorials available--became one of the biggest hindrances. UDK has
been around for a while, and certain aspects of the system have evolved over
the years. I realized that I would now have to carefully screen every tutorial
to make sure I wasn’t being fed obsolete information. I trusted nothing posted
on Youtube earlier than 2010 and I was even suspicious of material more than a
year old. Make sure that all your information is up to date so that you don’t
waste precious time on an outdated method that may not even be compatible with
your version of UDK.
No comments:
Post a Comment