Unity Game Engine 2d
Unity Game Engine 2d
Development
with Unity
Addison-Wesley Learning Series
Each title comes with sample code for the application or applications built in
the text. This code is fully annotated and can be reused in your own projects
with no strings attached. Many chapters end with a series of exercises to
encourage you to reexamine what you have just learned, and to tweak or
adjust the code as a way of learning.
Titles in this series take a simple approach: they get you going right away and
leave you with the ability to walk off and build your own application and apply
the language or technology to whatever you are working on.
Learning 2D Game
Development
with Unity
A Hands-On Guide
to Game Creation
Matthew Johnson
James A. Henley
Contents at a Glance
Preface xix
Acknowledgments xxv
About the Authors xxvii
Introduction 1
3 Creating 2D Sprites 41
14 UGUI 291
Index 323
This page intentionally left blank
Contents ix
Contents
Preface xix
Acknowledgments xxv
Introduction 1
Introduction to Unity 1
Downloading and Installing Unity 1
Project Wizard 4
Open Project Tab 4
Create New Project Tab 5
Packages 5
Setting Our Project 6
Project Structure 6
Folder Organization 7
File Naming Conventions 7
3 Creating 2D Sprites 41
Working in 2D 41
2D Behaviors 41
2D Workspace 42
Building Our Sprites 43
Import Settings 43
Pixels To Units 45
Sprite Editor 45
Sprite Packing 48
Packing Tag 48
Sprite Packer 48
Additional Sprite Packing Resources 49
Summary 50
Exercises 50
Colliders 125
Circle Collider 126
Box Collider 126
Edge Collider 126
Polygon Collider 126
Physics Materials 128
Constraints 129
Summary 134
Exercise 134
14 UGUI 291
UGUI Components 291
Creating Our Example Interface 293
Canvas Component 293
Rect Transform 296
UI Rect Tool 298
Adding the Mask 299
The Event System and Event Triggers 299
Summary 300
Index 323
This page intentionally left blank
Preface
Having started out as a great 3D game engine, Unity has blossomed into an end-all
development tool for creating games that you can then push to just about every plat-
form available. As time went on, the need for more 2D game tools became obvious,
and Unity jumped onboard, creating some of the most intuitive and easy-to-use 2D
tools available.
Another reason is how accessible Unity is. While the Pro version has some really
great additional features, they are tailored more to teams or people looking to really
fine-tune every aspect of their game. We will cover a few of the Pro features, but the
free version will work great for us.
these building blocks, we hope that at the end, you will have the confidence and skill
to either continue building on the example project or start your own game design.
However, we know this is not the case. There will be those who have an under-
standing of the game development process and are looking for a game authoring engine
upon which to build their idea and designs. So we have broken each chapter down into
individual lessons. That way those who are looking to learn about a specific mechanic
or process can easily jump ahead.
We encourage even those with a general understanding of Unity to read through all
of the chapters, as we cover many elements of the Unity engine, both old and new. We
have provided notes, tips, and figures throughout to help reinforce or reiterate a spe-
cific lesson, so look for these as well.
Here is a summary of each chapter:
nn Chapter 1, Setting Up the Unity Development Environment
This chapter will familiarize readers with the Unity interface, provide them
with an understanding of a Projects hierarchy, and begin to build the initial
Project for the game that will be created throughout this book.
nn Chapter 2, Understanding Asset Creation
In this chapter readers will start to build the foundation of the game by
importing the assets we will use for the game Project. They will get an
understanding of how the Unity engine uses GameObjects on which everything
in Unity is built. This chapter will break down how Components are the nuts
and bolts of a GameObject and how to utilize them to build upon each other for
complex behaviors. Last, this chapter will touch upon using third-party assets
and packages and how to bring them into our game environment.
nn Chapter 3, Creating 2D Sprites
In this chapter we will dive into the new tools and features added for building
2D gameplay. We will discuss the sprite editor, as well as some Pro-only
features and how we can work around them.
nn Chapter 4, Building the Game World
In this chapter we will take all of the existing prefabricated GameObjects
and start building the world our player will live in. We will learn to use the
Transform tools to place our GameObjects, and we will learn about sorting
our sprites for layering and depth. Finally, we will go over grouping sprites
and the parent-child relationship, and how keeping these organized and named
correctly will keep our Scene View and Hierarchy easy to manage.
nn Chapter 5, The Basics of Movement and Player Control
This chapter will teach a basic understanding of creating scripts and functions
to drive input and control the physical behaviors of our GameObjects. We will
discuss the basic scripts for controlling user input and building upon these for all
the necessary mechanics of our game. We will brief ly discuss the Unity native
xxii Preface
programming languages and the pros and cons of each. This chapter will also
discuss error handling and basic debugging of scripts.
nn Chapter 6, Adding Animations to Our Scene
This chapter will go into setting up and creating the animations for the
GameObjects and sprites. It will discuss creating animations with base
transform versus frame animations and the benefits of both methods. We will
then discuss creating 2D sprite behaviors with the Animator State Machine.
Here we will begin to create the mechanics for the characters for our game.
nn Chapter 7, Setting Up Player Physics and Colliders
This chapter will discuss adding physics for both 2D and 3D GameObjects. It
will discuss setting up GameObject collision and knowing which one is best to
maintain game performance. We will also discuss setting up the forces for our
GameObjects and creating dynamic physics.
nn Chapter 8, Creating and Applying Gameplay Systems
This chapter will discuss the creation of key gameplay elements such as picking
up collectibles, checkpoints, and respawning. Readers will be taught about
Unitys trigger system and the code methods that it uses. We will also include
some design theory related to these systems.
nn Chapter 9, Creating Hazards and Crafting Difficulty
This chapter will discuss the creation of some basic enemy types and the
underlying code that makes them work. We will add damage scripting and
teach the player how to hook enemies into spawning logic. This chapter will
also touch on some of the design theory related to difficulty and tuning.
nn Chapter 10, Creating the Menus and Interface Elements
In this chapter we will create the basic menus for getting into and out of our
game as well as the game interface elements that will make up the on-screen
player information and statistics. We will discuss basic input for menu selections
and game screens.
nn Chapter 11, Applying Effects to the GameObjects
This chapter will guide the reader in adding the final polish to the game
assets by adding animations, effects, and audio Components. It will discuss an
overview of the Unity particle system, adding audio listeners and effects to our
non-character gameplay elements.
nn Chapter 12, Organization and Optimization
We will go over final tips and recommendations for game optimizations and
compressions for deploying to the various platforms. We will also look into
some final organization tips for file handling and future revisions.
Preface xxiii
nn Exercises
At the end of almost every chapter are exercises for readers to complete. These
are based on the content of that chapter. After reading the chapter, they should
have gained a solid understanding of the information and should be able to use
it to complete more gameplay elements. The exercises are built to be easily
completed yet require a little bit of discovery and trial and error.
Supplementary Materials
The project development covered within this book will help you build a fully realized
game Project, complete with all of the sprites, audio, and script assets that we show.
The objective is to help you learn how to create all of these from scratch, but we do
understand that you might get stuck or confused about specific processes.
For this reason, we have provided a Web site to grant you access to the entire con-
tents of the Project we will make throughout the book. All of the Scenes, packages,
assets, and scripts will be available to you to follow along with, or to reference in case
you need a little extra help.
We have provided a series of video learning modules for you to watch and to fol-
low along with as well. These are designed to show the UnityProject coming together,
with audio commentary that explains our methods and approach to the game design.
The videos recapitulate the books contents, but sometimes a visual explanation is
warranted.
Register your book at informit.com/title/9780321957726 to access assets,
code listings, and video tutorials on the companion website.
Acknowledgments
Matthew Johnson
Thank you to Laura Lewin for taking a chance on me, and for not f lying to Florida to
strangle me. I know the urge was there and was warranted.
Thank you to Olivia Basegio for all of your support and guidance. You truly made
this experience enjoyable and as pain-free as you could.
Thank you to Songlin, Reshat, and Sheetanshu, whose wisdom truly made this
book that much better. Your suggestions and feedback always seemed to be spot-on.
Thank you to Kenny Vleugels for your great artwork and for making it easy to
access it. You are a godsend to game developers everywhere.
Last, to my colleague and friend James Henley: a thousand times over, thank you.
Thank you for all of your insight, humor, and hard work. Most importantly, thank you
for your understanding and patience in helping me see this book through. Without you
stepping in to take the helm, it would never have seen the light of day.
James A. Henley
Foremost, I would like to offer my sincerest thanks to K2, without whom I would not
have become the kind of developer that I am today. Years of design theory discussions,
feedback, and soundboarding have been integral to my growth as a developer.
I would like to express my great appreciation to the publisher, who provided me
with both the opportunity and the means to share some of my knowledge and experi-
ence. In particular, Id like to thank Laura and Olivia for taking the time to answer
my questions, no matter how mundane, as well as Songlin, Reshat, and Sheetanshu for
their hard work as editors and the many excellent suggestions they made.
I would also like to thank my stream regulars for sticking by me despite the many
interrupted or canceled casts this book caused.
Finally, I wish to thank you, the reader, for having the courage to pursue the dream
that is game development.
James A. Henleyis an experienced game developer who has worked on several major
titles and franchises, including Mass Effect, Dragon Age, Star Wars, and Skylanders,
over the past decade.He originally entered the industry via the Neverwinter Nights
modding community, where he was able to indulge his desires to craft content, tell sto-
ries, and write code all at the same time.He turned that love into a job opportunity at
BioWare, where he spent three years with the Edmonton studio and five more with the
Austin studio in a variety of design roles before brief ly working for Activision.
Currently, James is working as an independent developer on [TITLE REDACTED]
and is actively live streaming to share his love of games and game design in an inter-
active fashion.He may or may not also be a mad scientist.Analysis has proven
inconclusive.
This page intentionally left blank
Introduction
Welcome to the exciting world of Unity and game development! We hope you are
reading this because you want to learn what we have found to be an exciting and
rewarding career with indie game development.
Between the two of us, we have over a decade of game development experience
and hope to share our insights with you. Both of us have a strong passion for video
games and immersing ourselves in hundreds of different worlds and stories. While
game development can take a lot of time and effort, seeing someone else play your
creation is well worth it! Imagine an idea you have for a new game that you would
love to create. Now imagine creating it and then being able to share it with millions
ofothers.Exactly!
We have created this learning guide to get you up to speed quickly with Unity to
create your very own platform game from start to finish. This guide may not cover
every little detail of Unity as we are focused on a 2D development platform, but we
feel that after reading this you can go on to create your own game and dig deeper into
Unity, building on what you learn here.
Introduction to Unity
Lets go over the steps needed to get Unity up and running on your machine. We will
then take a look at creating a workf low for organizing your files and recommended
steps to avoid problems further along in development. Finally, we will describe the
basics of the Unity interface, file menus, and navigation. By the end, we hope you will
have a grasp of the Unity user interface and some solid principles for creating your
Projects. So lets get started!
While on the Unity download page, take a look at the System Requirements as well
as the License Comparisons pages. The System Requirements page lists the general
requirements for Windows or OS Xbased machines, along with those requirements
needed to publish to the various development environments. If you have a fairly recent
Operating System such as Microsoft Windows 7/8 or Apple OS X 10.5 (Leopard) or
newer, you will be fine.
The License Comparisons page gives you a full rundown of the features available
with the free versus paid versions of Unity, as well as the add-ons to Unity Pro for
building your game to their respective platforms. Unity Pro comes with a host of added
features that make game creation and debugging a lot easier and even more exciting.
Note
While there are a few Unity Pro features we could benefit from in our game development, you
will not need them to follow along in this guide. We will, however, mention a few of these in later
chapters just to discuss their advantages for those with access to Unity Pro.
Component Installs
Once you have downloaded and begun the installation, Unity will pause and prompt
you with the Choose Components screen (see Figure I.1). The items listed here are
additional resources and add-ons that you may wish to install along with the Unity
engine. We recommend installing all of them as they will be helpful in your journey
developing Unity Projects and games.
Example Project
Angry Bots is a feature-rich Unity Project developed by the minds at Unity Technolo-
gies. While it is a fun and immersive game experience, it is of greater significance as a
tool for developing your own games. All of the assets are easily viewable in the engine
as well as the scripts, Components, and animations. While the features and scope of
Angry Bots are beyond what we cover in this guide, we highly recommend looking it
over, especially if you are designing any type of 3D game experience.
Note
The Unity Asset Store also carries a bunch of old and new example Projects like this. There are
quite a few built by the Unity Technologies team. There is a very good 2D platformer Project
available from them that we highly recommend checking out. We will discuss more about the
Unity Asset Store and downloading Projects, packages, and assets in Chapter 2, Understand-
ing Asset Creation.
MonoDevelop
While we can get so far with our game assets and animations, its the core mechan-
ics and gameplay events that create the true experience for the gamer. You can have a
hero and a villain character with combat animations, but without gameplay scripts, you
wont be able to move them or have them interact. We can do all of this and more by
making a few simple scripts. MonoDevelop is the IDE that allows you to build those
runtime events and scripts for Unity. It is by far the most important of the add-ons you
can install. If you are fairly new to scripting and Unity, this is a must for creating your
game. We will go into MonoDevelop in a lot more depth as we go along, but for now
just continue by hitting Next.
Once everything has installed, open Unity by clicking the Unity icon on your desk-
top. From here you will be given a Unity Activation screen. Click the Register button
and finish the registration authorization. Once this is done, you should get a screen for
the Project Wizard.
4 Introduction
Note
By registering you will be given the option of a 30-day evaluation of Unity Pro and access to the
Unity mailing list for upcoming news and updates. Again, we will not have to worry about any of
the added Pro features here, but after finishing this guide, if you wish to dive deeper into them,
you will be able to update to either the 30-day evaluation or the full version by purchasing
UnityPro.
Project Wizard
The final step (before we see all of the beauty that is the Unity Editor!) is to create our
Project. A good way to understand a Project is to think of it as being like building a
house. Without having the right pieces such as the walls, doors, and a roof, and if its
not constructed in an organized and methodical manner, things could get unorganized,
messy, and come falling down. A Project in Unity can be viewed in the same way: we
want to keep it as simple and easy to comprehend as we can for both us and others who
are on our team.
Tip
We personally like to create a sandbox Project, a second Project that we use for testing game-
play scripts. We also use it to test assets so that we wont have to scrap them if we dont need
them in our game Project. By importing and then deleting assets in your Project, you can acci-
dentally leave unused assets, or more importantly remove assets or code, that can break your
game. Again, keeping our Project clean and clutter-free is vital.
Packages
Below the Project Location is a list of packages that come preinstalled with Unity.
Packages are collections of assets and GameObjects from a Unity Project that get
bundled and exported. You can then take them into other Projects and use them there.
This can be very useful for reusing scripts and certain elements rather than having to
remake them.
Some of these do require a Unity Pro license, but most of them are available in the free
version. These packages are very helpful when youre starting out and can get you up
and running quickly for testing simple gameplay ideas and mechanics. While we will
not be using any of these to start, note that they are here and available to use in your
Projects. We will revisit these packages in Chapter 2, Understanding Asset Creation.
Project Structure
Project structure refers to the hierarchy of files that are used in a Project, how they are
named, and their ordered layering. Having a firm grasp of how you keep your Hierar-
chy organized and named will help you from the beginning of a Project through to the
final build so that your game runs at its optimal frame rate. It also allows you to know
what is needed in your deliverable game so that there are no unwanted files or folders
that could bloat your game. Chapter 12, Organization and Optimization, will go
deeper into optimizing your game for best results, but understand early on that there
will be limits on the file size of your game that you cannot exceed. Each device and
publisher is different, and you must follow their guidelines when publishing your game.
The best way to understand the Project structure is the house analogy we made
earlier. The staple of a house is its name. Some call it home or pad. The point is,
the name is the base, just as our Project base should have a name. When we started in
the New Project window, we named it LearningUnity. This is the name we will use
throughout, and it best describes what the Project is about.
Your Unity Project is an extension of your Windows Explorer or Finder on Mac.
Just as you can create folders, move files in and out, and rearrange things, you can do
the same with your Unity Project. Anything you add into your Project will almost
instantly be updated and appear in your Explorer Project path and vice versa. This is so
important to remember; as we mentioned earlier, adding and deleting files can produce
some unintentional consequences.
Note
While it may seem simple to rename or delete a file, remember that Unity has underlying data
connections to the files and there may be unintended results.
Setting Our Project 7
Folder Organization
When you first build your Unity Project, you will see that it comes with some pre-
made folders: Assets, Library, Project Setting, and a Temp folder. The Library, Project
Setting, and Temp folders all contain files related to Unity and creating assets for your
game. Stay clear of these and most certainly do not delete them.
As we build our Project, we will be creating an abundance of assets, such as models,
sprites, scripts, and Materials. Keeping these assets in a neat and organized manner will
simply make things easier as your Project continues to grow. At this point we have yet
to import anything, but here is an example template for a folder structured for Unity:
Assets/
Materials/
Meshes/
Actors/
GoodGuy
BadGuy_A
BadGuy_B
Props/
GarbageCan_Clean
GarbageCan_Dirty
Plugins/
Prefabs/
Actors/
GoodGuy
BadGuy_A
BadGuy_B
Scenes/
Chapter_1/
Scripts/
the next day, we would most likely forget what these two scripts contained, let alone
a hundred or so of them! Having a concise naming convention in your work can help
you stay focused and organized. It works just as well in 2D and 3D packages.
We have compiled a list of some of the best practices to use when dealing with
namespaces inside of Unity:
1. Start with the most descriptive word, followed by an underscore. An asset named
alienShip.png is not bad; however, char_enemy_alienShip.png is much clearer.
2. Folders take up very little hard drive space. Use as many as you need, for exam-
ple, Assets/_meshes/_characters/_enemy/alienShip.f bx.
3. Try to use namespaces for linked assets. If you use alienShip.f bx for your mesh,
try to use alienShip.cs for the script and alienShip_death.anim for its death ani-
mation. Folder management will keep them organized.
4. While we will cover asset labels more in Chapter 2, Understanding Asset Cre-
ation, they are definitely worth mentioning here. As a sort of internal file sys-
tem, this simple tool will make locating assets quick and painless.
Note
While these recommended guidelines work for some, they may not feel right to you. Use your
best judgment when setting up your Project and when naming your files. The best advice is hav-
ing a plan in place from the start. As the Project grows and more files are added, understand-
ing your workflow will be key.
From here on we will dive into Unity and game design to start creating our 2D
platform game. We have a long road ahead of us, but as they say, Its all about the
journey and not the destination. So lets move on to Chapter 1, Setting Up the Unity
Development Environment, and get a look at what the power of Unity can do.
Tip
Take a look through the Unity documentation and learning resources provided on their Web
site. Unity provides a bunch of their own learning videos, follow-along tutorials, and tips, and
the Unity Community and Forum pages are just as valuable.
The Unity Manual is one of your greatest assets when creating games, so remember you
always have this available to you as well. You can access the Unity Manual, along with links to
their Community, Forum, and Answers pages, from the Help menu inside of Unity. Here are the
links to the Internet Web pages for all of this information:
In this chapter we will begin building the game world in which our main character
will move around. We will need to discuss level design and planning the game design.
We will explain how having a solid idea in place will keep you from designing without
reason and wasting a lot of time winging it.
We will then look at Unitys Transform tools and the differences between working
in 2D and 3D. We will go over the Hierarchy window and how we can use grouping
and parent-child relationships to keep things organized and easy to use. Last, we will
look at a few other settings to help us more easily build our Scene. By the end, we will
have a full level for our character to explore. So with that, lets get to it!
But there are still a few questions we should ask ourselves before we jump into Unity
and start throwing down sprites:
nn What is the end goal? What are we trying to achieve other than going from point
A to point B?
nn Will this level be easy or hard to complete? Are the puzzles in it fairly easy or
complex to solve?
nn Where in the overall game does this level take place? Where are we in the time-
line of the story?
nn Does this level take place in the daytime or nighttime? What are the weather
conditions? Is it bright sunshine or overcast and snowing?
nn How has our hero progressed to this point in the game? Do they have new weap-
ons, skills, or upgrades?
nn What are some challenges or experiences the user has encountered prior to this
point in the game that we may be able to build upon in this new level?
Answering these questions first will help us set some rules and standards, so that we
are designing the level we feel will give the user a fun and enjoyable experience.
Creating a Roadmap
Once we have all of the answers to these questions, we can create our level. We suggest
putting pen to paper, as they say, to rough out an idea of what it should look like first,
before jumping into Unity. This will help us understand things like the distance over a
gap, or where to place that hidden gem the player has to find.
We have gone ahead and created that roadmap (Figure 4.1), mapping out the con-
f licts, puzzles, and behaviors we will create. We will try to explain the theory behind
the layout and how we answered those earlier questions. Again, our ways of level
design may not be the best or the most effective, but we took what we know and
applied ithere.
The main objective of our game is getting our hero through the level to enter the
door to the castle. Original idea, right? In doing so, the player has completed the puzzle
and can move on to the next challenge. But there are some gameplay mechanics we
will be adding along the way to make it slightly more challenging.
When planning this, our approach was that this would be the first level encountered
in the game. That will make it fairly easy for us to map out the details and complex-
ity since this is just a demo for learning the technique. The level will take place in the
daytime, it will be fairly simple to solve, and it is designed with the idea that the user
has played these types of games before.
A few additions are needed to make this design unique. We tried to use the tools
and assets given to us to make something a little different, and we think they work
well. We are using some art that has already been created to make this a little easier for
us. Now lets take a look at a few rules of level design we might want to take into con-
sideration before f leshing out our level.
Note
Usually all game design, mechanics, and encounters have been solved before asset creation,
so you or the art team is making only the art that is needed. Working out all of the design
ahead of time will eliminate changes, roadblocks, and issues down the road. Everything should
have been planned in advance.
nn Players should start out by simply learning the mechanics of moving our hero left
and right, along with performing some basic jumping. The first few game screens
will be free of enemies to allow players to practice these moves.
nn The first obstacle our players will encounter is designed to test their learning
curve without any serious repercussions. We want them to succeed, but should
they fail, the hero will not lose health or die.
nn Our first contact with an enemy is a slow one that weakens our hero only
slightly. Its purpose is to set up an encounter so that players learn how they will
interact with enemies later on.
nn There will be a few simple puzzles for the player to solve. They will use colors to
help guide the player toward the solution, for instance, Find a blue key to open a
blue lock.
nn Players will know they have succeeded once the castle door opens. To present
this, the last puzzle will be placed within viewing distance of the door so that
players can see this transition.
Adding Details
Now that we have the basic design and gameplay elements laid out, we can look for
ways to liven up the world. It should be noted that this step comes well after the level
has been completely designed. All significant changes should be addressed and the level
should be signed off. Making things look pretty can wait till the end; otherwise you
might end up with something that looks great but plays terribly. As the saying goes, its
icing on the cake. Lets make sure the cake is good first.
56 Chapter 4 Building the Game World
Details can have a role in the overall feel and layout of a game and can affect game-
play just like anything else. But didnt we just say that adding details should come
after the level design is done? What we mean is that the initial questions have been
answered, and we have set the tone and the way we want the level to play out.
A good example of adding details that help the gameplay might be a dirt path to
lead the player. Another example might be a waterfall to guide the player downward.
Think of ways you can add subtle details to guide the player. We want the levels to be
somewhat challenging but also enjoyable, and we want to give the player enough help
to actually solve them.
Tip
If you lose focus of a GameObject, or wish to center your view on a particular GameObject, you
can reset the camera by selecting the object and tapping the F key. This will center the cam-
eras focus point to that of the selected object. Note that this needs to be done with the mouse
pointer over the Scene View.
Scene Gizmo
To begin, it helps to know how 3D space works. Take a look at the little colored Gizmo
in the top right corner of the Scene View. This is the Scene Gizmo (Figure 4.2).
In 3D space, there are three different axes that determine the direction you are fac-
ing or the direction in which an object is moving. The red (X-axis), green (Y-axis),
and blue (Z-axis) axes on the Scene Gizmo help clarify this. An easier way to under-
stand this concept is that the X-axis runs left to right, the Y-axis runs up and down,
Getting around Our Scene 57
and the Z-axis moves front (near) to back (far). We will get a better understanding of
this in just a bit when we move our cube around in 3D space.
Camera Controls
There are a few different methods for getting around in 3D space inside Unity. If you
come from any type of 3D background or have played a third-person-style game, you
will easily grasp this concept.
Arrow Keys
One method of moving around in the Scene View is using the arrow keys on your key-
board. If you are at all familiar with moving around in a third-person game, the arrow
keys work the same way: up and down to move you forward and back, and left or right
to pan the camera sideways.
WASD Movement
This is the movement that exactly replicates most PC-style games. While the arrow
keys method is very similar, this one uses the W, A, S, and D keys for movement while
using the mouse to direct the camera for that movement. To enable the WASD keys,
you must first hold down the right mouse button.
Mouse Shortcut
The mouse movement is the most efficient method as you can still easily move about in
the Scene but also keep the Transform tools for manipulating the GameObjects. While
this method is most effective with a three-button mouse, you can use a two-button (no
scroll wheel) or even a one-button mouse (most common for Macs or trackpad users).
Table 4.1 gives shortcuts to help clarify this.
Hand Tool
Another method is to use the Hand tool (Figure 4.4). You can access it by tapping the
Q key on the keyboard. In this mode, you are able to control the camera movements
simply by using the mouse.
By holding down the Alt or Ctrl keys, you can orbit or zoom the camera respec-
tively. Also, holding down Shift while using these will increase how fast the camera
orbits and zooms.
Table 4.1 Mouse Movement for One, Two, or Three Button Mouse
Action One Button Two Button Three Button
Transform Tools
In order for us to lay down our GameObjects, we need to know how to move them
around in Unity. We need to be able to position, rotate, and scale our objects and place
them exactly where we need them. We also need to know the key differences between
working in 2D and 3D and how we can still attain depth in our game.
Translate
You will mostly make use of the Translate tool when positioning your GameObject. In
Figure 4.5 you can see the X-, Y-, and Z-axes just like the Scene Gizmo has. In fact,
in 3D mode, you will see that the Translate Gizmo and Scene Gizmo match. This is
because in world space we will move along these axes.
The Translate button can be found next to the Hand tool in the Transform toolbar.
See Figure 4.4 if you do not remember this. You can also access the Translate tool by
tapping the W hotkey on the keyboard.
Simply left-click and drag on one of the colored arrows, and your object will move
along that axis. Moving along the direction the arrow points will move the object in a
positive direction, and negative in the opposite.
Note
The red, green, and blue colors are used to tell us what direction that axis is facing. Red indi-
cates the direction for the X-axis. Green is used for up and down or the Y-axis. Blue is for the
Z-axis.
Rotate
Tapping the E key will bring up the Rotate tool. This will let you rotate the object
along its pivot point. The colored circles again indicate the axes, but the object will
rotate around an axis. This tool is very handy for setting an object at a certain angle.
Figure 4.6 shows the Rotate Gizmo.
Scale
The last tool is the Scale tool (Figure 4.7). Scale means to increase or decrease the size
of an object in relation to its actual size. Using the axis handles will scale the object
only in that one axis. This can be handy if you want to adjust the appearance of an
object, such as making a cube into a rectangle or a sphere into an ellipse.
Note
Clicking on an individual axis will affect only the object in that axis. Affecting all axes at once is
different for each tool. To translate in all three axes, hold Shift and then left-click and drag from
the center of the Translate Gizmo. For rotation, select anywhere inside the white circle, but not
on a colored circle. With scale you simply left-click and drag within the white cube of the Scale
Gizmo.
Z-Depth
Positioning our objects with the Translate tool will help us set up our level and accu-
rately position objects in the Scene. But in a 2D setup this will only help us to place
them along the X-axis (horizontal) and Y-axis (vertical). This will work for most
everything, but we will want to have some depth to our levels. We want to have some
dimension and balance to our world so it doesnt appear f lat. Sprites like clouds moving
behind our player and allowing the player to walk in front of hills will help add a touch
of realism, even though it is 2D.
In a 2D game using Unity, we can still control the Z-depth using the selected
sprites Sorting Layer and Order in Layer attributes. These can be found on the Sprite
Renderer of your Sprite GameObject. Figure 4.8 shows an example of this on our
Player GameObject.
Sorting Layer
The most effective way we have of sorting our sprites is by using Sorting Layers. Sort-
ing Layers work very similarly to 2D editing package layers. You separate elements
into layers, and then place those layers above or behind one another to determine what
draws in front of the next. The only difference with Unity is that it draws from bot-
tom to top, with the top being drawn first, and then the next layer down over that. See
Figure 4.9 for the Sorting Layers we will set up.
Note
Sorting Layers are under the Tags & Layers Manager. We discussed where to find these back in
Chapter 1, Setting Up the Unity Development Environment, but as a quick reminder, they are
to the right along the toolbar. Choose the drop-down arrow and select Edit Layers to customize
these.
Lets add a couple of Sorting Layers for the Player GameObject and Scene elements
we will be adding:
1. With the Tags & Layers Manager open, click the drop-down to reveal the default
Sorting Layer.
2. Click the 1 icon to add a new layer. Rename this Foreground.
3. By default Unity will create new layers below the selected one. Left-click and
drag over the Layer 1 text and move this above the Layer 0 slot.
4. Create the remaining three layers for Character, Midground, and Background.
Order in Layer
Another way of layering sprites is with the Order in Layer attribute in the Sprite Ren-
derer. While we could make a bunch of Sorting Layers for each of our sprites, this can
be tedious, very hard to work with, and costly for our game. You may have a sprite
sheet that consists of elements that you wish to have sort with one another, but you
need the entire sheet to sort with other elements. For this we use Order in Layer.
The only difference from a visual standpoint is that Order in Layer sorts based on
a value. The higher the value, the later the sprite will draw, with higher values above
everything else. You may also find as you create the game that you need to assign a
sprite lower than 0. You can use negative values if needed.
Settings
We covered the Pixels To Units measurements for our sprites back in Chapter 3, Cre-
ating 2D Sprites. This ensures that the size of all of our game elements is comparable
Manipulating Objects in Unity 63
to that of our player, so that all of the GameObjects will be in scale with one another.
Once we have our worlds built, enemies placed, and props added, this will make sense,
but first we have to build these things.
Another benefit of setting the Pixels to Units size is that it will uniformly align all of
the tile sprites, allowing us to easily snap the ends of one tile to the next.
Grid
The grid in our Scene View will help us snap pieces of our levels together easily.
When we set the Pixels To Units size for the tile sprites (70), it made them equal to
their actual dimensions (70 pixels by 70 pixels). This means our tile will fit exactly into
a 1 3 1 Unity grid. Now we can easily snap one piece to the next.
Snap Settings
The Snap Settings (Figure 4.10) work in relation to the grid units. Snap Settings allow
you to position, rotate, and scale your objects with precise measurements. This tool will
become invaluable when we start building our level.
nn Move X (Y and Z): The number of units the object will move when using
snapping
nn Scale: The percentage an object will scale in size
nn Rotation: The degree of rotation the object will make
While we do not have to adjust the Snap Settings, it is helpful to know where to
locate them. They can be found under the Edit menu (Edit . Snap Settings).
Tip
By holding the Ctrl key and then left-clicking and dragging the tiles, you can easily snap them to
each other with precision. This is one method that helps you build your game levels quickly. We
also set the pivot point of each sprite to its bottom left, making snapping painless.
1. Find the grassCenter Prefab and drag it into the Scene View, trying to roughly
place it below the grassMid Prefab.
2. Open the Snap Settings window by going to Edit . Snap Settings.
3. With the values for Move X, Move Y, and Move Z all set to 1, click the Snap All
Axes button.
4. The grassCenter Prefab should now be snapped below the grassMid Prefab and
sitting in world space at 0, 21, 0 in X, Y, and Z respectively.
4. Hold Ctrl and left-click and drag the tiles one snapped unit to the right in the
Scene View. You will now have four sprites to make up the first part of our
ground-f loor tiles.
5. Continue duplicating and positioning these from left to right, until you have a
complete ground surface.
6. You should have something that resembles Figure 4.12.
Note
Most often when you duplicate an object a second time, it will spawn from the original
GameObject instead of the current one. It is best to deselect and then select the new
GameObject before duplicating again. You could also duplicate the number of times you
need and then select them individually.
Figure 4.12 Scene View with our initial GameObjects laid out
Our First Level 67
all 20 grassMid and grassCenter GameObjects, duplicate them, and position them; lets
see if we can find a more efficient way:
Note
Another useful way to make sure your tiles are aligned is with the Snap Settings. Marquee (left-
click and drag) a section of tiles or select them in the Hierarchy window. With the tiles selected,
open the Snap Settings and click the Snap All Axes button. This will ensure that any tiles are
snapped exactly to the absolute grid values. This is a very good technique for cleaning up tiles
whose Transforms may have moved slightly.
1. Select the fence Prefab from the _prefabs folder. Place this roughly at the end of
the first screen, just above the ground.
2. Duplicate this and move it to the right, into the second screen. Make two more
copies of this, placing them to the right.
3. Use the Snap All Axes tip from earlier to make sure these are lined up correctly.
Your Scene should resemble Figure 4.13.
68 Chapter 4 Building the Game World
Figure 4.13 Scene View with the newly placed fence GameObjects
4. Make sure to place the first fence Prefab we added to our Scene under the
Screen1 parent GameObject. Place the last three under the Screen2 version. This
keeps our Hierarchy clean, and we will be able to find elements later on much
more easily.
Last, we need to make sure we set the sorting for these, so our Player GameObject
will walk behind them. We could do this on a per-object level, but that would take
more time as well as make things less consistent. Doing this to the master Prefab in the
_prefabs folder will instantly update any of these we have added to our Scene.
Select the fence Prefab in the _prefabs folder and look at its properties in the Inspec-
tor. Select the drop-down for the Sorting Layer and change it from Default to Fore-
ground. Now our fence tiles will sort in front of our Player GameObject.
Now lets add the ledge and water. For this we will sort our sprites going back into
the Scene. To make our Scene look slightly more realistic, we will change the end of
our ground pieces to a ledge and add water:
1. Remove the last grassMid and grassCenter GameObjects from Screen2 by select-
ing them in the Scene View or Hierarchy and hitting the Delete key.
2. From the _prefabs folder again, select the grassCliff Right Prefab and drag it into
the Scene View. Place this roughly at the end of the tiles for Screen2.
3. Select the liquidWater Prefab and place it directly below the ledge sprite.
4. Last, select the liquidWaterTop_mid Prefab and place it directly over the grass-
Cliff Right GameObject.
5. Lets set the Sorting Layer for the water so it draws behind the ledge sprite.
Again, lets do this in the Prefab so that any instance of the water will automati-
cally sort correctly. Select the water Prefabs and in the Inspector, set the sorting
to be Background.
Summary 69
6. Finally, we need to make sure the GameObjects are positioned precisely. Select
the grassCliff Right and the two water GameObjects and hit the Snap All Axes
button again.
7. Your Scene should resemble Figure 4.14. We have gone ahead and added a few
additional sprites for Screen3, including an island and a bridge, as well as finished
out the water. Remember to use your Sorting Layer and Order in Layer attri-
butes to set the priority of the sprites. See the First_Level_Final Scene file if you
getstuck.
Continuing On
Now that we have a basic understanding of adding Prefabs to our tiles, positioning and
snapping them, and sorting our sprites, we can continue. We leave you here to carry on
and finish the rest of the level design. You are free to use the design we laid out at the
beginning of the chapter or to make your own. Most of what we will be adding in the
next few chapters can be done with any variation of the design, but we will show you a
few select GameObjects and enemies we have chosen.
Feel free to finish this one and keep this chapter handy should you need to review
any information. We have also included the final level completely laid out in the
Project files for this chapter. This Unity Scene file is in the Chapter 4_projectFiles .
_scenes folder and is named First_Level_Final. If you run into any roadblocks, check
the Inspector and Hierarchy windows.
Summary
In this chapter we learned a great deal of information on designing the first part of our
level. We had a brief overview of level design and reviewed a few simple principles to
make our level slightly more enjoyable.
70 Chapter 4 Building the Game World
After this we dug into Unity and using the Scene View and camera controls to navi-
gate our Scene. Using a variety of methods, you should now be able to easily move
around to view and place your GameObjects in world space.
We went into great detail on the Unity Transforms and Transform Components.
This is how we will position, rotate, and scale the elements of our game. We went into
2D projections and Z-depth and how we will use sorting and ordering to added depth
and priority to our sprites in the game.
Finally, we started building our first level, adding Prefabs, and setting up sorting and
some organization for our Scene. We set a few attributes in the master Prefab and saw
how this will directly update all instances in our Scene. From here you are left to carry
on and finish the design of your level.
In Chapter 6, Adding Animations to Our Scene, we will start bringing our char-
acters and Scene elements to life. We will learn how to add a series of complex behav-
iors and how we can make things move realistically in a short amount of time and with
little effort. With that, lets get moving!
Exercises
1. Finish up the Scene, adding elements such as grass, clouds, and props. Remem-
ber to set the position with the Snap Settings tool, and set the priorities for the
sprites.
2. Set the Sorting Layers in the master Prefabs themselves in the _prefabs folder.
This will ensure that all instances we add to our Scene carry them over.
3. Lets add some simple collision for our ground GameObjects. Select grassMid and
grassCliff Right in the _prefabs folder.
4. In the Inspector, click the Add Component button and select Physics 2D . Box
Collider. This will add a Collider Component for our ground sprites that our
Player GameObject will then be able to interact with.
5. The colliders are added, but centered to the pivot of our GameObjects. We need
to have the collision cover the bounds of the sprite. Make sure that grassMid and
grassCliff Right are still selected from the _prefabs folder.
6. Under the Box Collider Component, find the attribute for Center and set its val-
ues in X and Y to 0.5. This will move the collision to center exactly around our
sprites.
7. Dont forget to save your Scene!
Index
J overview of, 53
JavaScript code samples rules of, 55
collectible scripts, 307309 setting scene, 5354
enemy scripts, 309310 Levels, tying together
game system scripts, 310314 creating victory trigger script, 272274
GUI scripts, 314320 overview of, 269
hazard scripts, 320321 preparing victory trigger prefab, 269272
overview of, 301 retrieving coin value, 274275
player scripts, 301307 Licenses
system scripts, 322 installing Unity and, 2
JavaScript, supported by Unity3D, 7172 managing in Help, 18
Johnson, Matthew, xxv platforms requiring, 282
Jumping Lighting toggle, Scene View, 24
adding sound to player, 233234 Limit Velocity Over Lifetime module,
air control systems for, 7273 particle system, 218
implementing basic, 8082 Linked assets, namespaces for, 8
JumpForce property and, 7778 Linux, standalone Build Settings, 282283
Local tool, Transform Gizmo Toggles, 20
Lock View to Selected command, Edit
K menu, 12
Keyed frames, Graph Editor, 102103
Looping property, particle system
Keyframes
coin boxes, 220
adding animation to Fly enemy, 184
damage, 224
animation using, 102
defined, 217
recorded for current animation, 105
Losing game
creating Game Over screen,
L 201202
Labels recovering from, 278279
asset naming conventions, 8
GUI, 195 M
organization of, 249 Mac, standalone Build Settings, 282283
Lateral movement, implementing, 79 Main Camera
Layer Collision Matrix box cleaning up, 238239
overview of, 123124 Components, 3637
passing through players space, 171 as first Game Object, 3334
in Physics 2D Settings, 122 follow-cam setup, 83
Layers and Layout drop-downs, toolbar, 20 perspective vs. isometric view, 57
Layers, toolbar, 20 properties shown in Inspector, 2122
Layout drop-down window, 17, 20 title screen with, 200
Layouts, GUI, 197198 TrackPlayer() function and, 241
Level design UGUI Render mode settings for, 294
adding details, 5556 Make Parent command, GameObject, 15
adding timers, 286 Manage License command, Help menu, 18
carrying health forward from level to Manual Slicing, Sprite Editor, 4546
level, 286 Map graphics, 295296
creating roadmap, 5455 Mask Component, UGUI, 299
efficient, 6667 Mask GameObject, UGUI, 296, 298299
334 Index