Hochgeladen von Nutzer9292

gettingstartedwithunity5

Werbung
Getting Started with Unity 5
Leverage the power of Unity 5 to create
amazing 3D games
Dr. Edward Lavieri
BIRMINGHAM - MUMBAI
Getting Started with Unity 5
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval
system, or transmitted in any form or by any means, without the prior written
permission of the publisher, except in the case of brief quotations embedded in
critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy
of the information presented. However, the information contained in this book is
sold without warranty, either express or implied. Neither the author, nor Packt
Publishing, and its dealers and distributors will be held liable for any damages
caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the
companies and products mentioned in this book by the appropriate use of capitals.
However, Packt Publishing cannot guarantee the accuracy of this information.
First published: May 2015
Production reference: 1260515
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78439-831-6
www.packtpub.com
Credits
Author
Dr. Edward Lavieri
Reviewers
Project Coordinator
Shipra Chawhan
Proofreaders
Maxim Jankov
Stephen Copestake
Adam Larson
Safis Editing
Michael E. Miles
Indexer
Commissioning Editor
Monica Ajmera Mehta
Ashwin Nair
Graphics
Acquisition Editor
Sheetal Aute
Nikhil Karkal
Production Coordinator
Content Development Editor
Arvindkumar Gupta
Shweta Pant
Cover Work
Technical Editors
Rosmy George
Ankita Thakur
Copy Editors
Sonia Michelle Cheema
Ameesha Green
Arvindkumar Gupta
About the Author
Dr. Edward Lavieri is a veteran game designer and developer with a strong
academic background. He earned a doctorate of computer science from Colorado
Technical University, and three masters of science degrees in management
information systems from Bowie State University. His formal education includes
instructional design (from Capella University) and operations management (from
the University of Arkansas), demonstrating his passion for academic pursuits. He
has developed and taught computer-related courses since 2002 and currently teaches
at Southern New Hampshire University. Edward retired from the US Navy after 25
years as an intelligence specialist and command master chief.
As the founder and creative director of three19, a software design and development
studio, Edward is constantly developing software. He uses Unity as one of his
primary game development tools. He focuses on developing adaptive learning
systems, educational games, and mobile apps.
Edward authored Adaptive Learning for Educational Game Design, CreateSpace
Independent Publishing Platform, LiveCode Mobile Development HOTSHOT, Packt
Publishing, LiveCode Mobile Development Cookbook, Packt Publishing, Software
Consulting: A Revolutionary Approach, CreateSpace Independent Publishing Platform, and
was the technical editor of Excel Formulas and Functions for Dummies, Ken Bluttman,
Wiley Publishing. He has also developed numerous college courses, involving
computer science and information systems.
I would like to thank Colt for always bringing a smile to my face and
heart. To Noel and Josh, thank you for being in my life and creating
Colt. I love all three of you. My deepest appreciation and love goes
to Brenda. You are my world and let me tell you, I do love living
in it. I would like to express my gratitude to Fuel So Good Coffee
Roasters for fueling my writing and game development. I would also
like to thank the expert team at Packt Publishing, including Harshit,
Owen, Govindan, Shweta, Nikhil, the reviewers, technical editors,
proofreaders, indexers, and the marketing team. It is a pleasure to
have worked with such an amazing team.
About the Reviewers
Adam Larson has been programming since 2001. His first venture into the game
industry started as a programmer, working on digital downloadable titles for Xbox
Live Arcade. Since then, he has worked on titles on every modern platform. Adam
discovered Unity about 5 years ago, and has been a huge advocate of it as it has
grown into the powerhouse it is today.
He currently manages Zymo Entertainment, a small start-up located near Green Bay,
Wisconsin. The company focuses on business applications using Unity 3D as well as
video games.
I really want to thank my coworkers at Zymo Entertainment,
as they've let me bounce a few ideas off of them.
Michael E. Miles purchased his first computer in 1979 and since then, he has
been hooked on to programming, specifically at the machine language level. The
Z80 (TRS80) and 6502 (Apple II) microprocessors were top-of-the-line processors
at that time, and he began programming by creating custom commands for each
of the BASIC languages of these machines. As the graphic capabilities of PCs
increased, his interest in graphics and animation took over with the introduction
of AutoCAD. Combining his love for computer graphics and aircrafts, he became
an aerospace manufacturing engineer, creating visual/animated fabrication and
installation instructions for the manufacture of aircraft structures. To formulate these
instructions, he frequently uses CATIA, Blender, After Effects, and has recently
been incorporating game engines into his workflows, specifically, Unity and Unreal
Engine 4. Michael currently works for various aerospace companies in the aerospace
and defense industry as a contract manufacturing engineer, and is originally from
Seattle, Washington.
www.PacktPub.com
Support files, eBooks, discount offers, and more
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF
and ePub files available? You can upgrade to the eBook version at www.PacktPub.com
and as a print book customer, you are entitled to a discount on the eBook copy. Get in
touch with us at [email protected] for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign
up for a range of free newsletters and receive exclusive discounts and offers on Packt
books and eBooks.
TM
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital
book library. Here, you can search, access, and read Packt's entire library of books.
Why subscribe?
•
Fully searchable across every book published by Packt
•
Copy and paste, print, and bookmark content
•
On demand and accessible via a web browser
Free access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access
PacktLib today and view 9 entirely free books. Simply use your login credentials for
immediate access.
Table of Contents
Preface
Chapter 1: Getting Jiggy with the Unity Interface
viii
1
Chapter 2: Creating the Game Environment
19
Why Unity?
Getting your hands on Unity
Projects
Layouts
Views
The Scene view
The Game view
The Hierarchy view
The Project view
The Inspector view
Transform tools
Cameras
Summary
Game design
Game look
Player objectives
Gameplay
User actions
Artificial Intelligence
End state
Terrain
Creating the terrain
Adding mountains
Adding a river
Textures
2
3
4
7
10
11
11
12
13
14
14
17
18
20
20
20
21
21
22
23
23
24
26
26
27
Table of Contents
Additional environmental features
Natural bridge
Planting trees
Water
Creating the sky
Summary
32
32
33
38
40
42
Chapter 3: Working with Assets
43
Assets
Asset packages
Unity Asset Store
Adding assets to your game
Using the Unity Asset Store
Importing a custom asset package
44
46
49
50
50
56
Importing the game characters
Importing the buildings
Using Blender to create assets for your game
Summary
56
57
57
59
Chapter 4: Animating the Game Characters
61
Chapter 5: Scripting the Game
83
Animation basics
Character controllers
First person controller
Creating a third person controller
Animating player characters
Little farmer Colt
Old farmer character
Farm animals
Previewing animations
Creating animation clips
Summary
C# programming primer
Syntax
Naming conventions
61
62
63
64
73
74
75
75
75
77
81
84
84
85
Class, function, and method names
Camel case
Abbreviations
Special characters
85
85
85
86
Data types
Using MonoDevelop
Scripting with C# in Unity
Start and update functions
86
86
87
91
[ ii ]
Table of Contents
Scripting example
Unity scripting assets
Scripting our game
Script planning
91
92
93
94
Data requirements
97
Gathering corn
Gathering water
Feeding piglets
Feeding baby chicks
Feeding pigs
Feeding adult chickens
94
95
95
97
97
97
All about the pigs
Chicks and chickens
Corn and water
Initializing our data
98
100
101
103
Selective scripts
Selective script – global variables
Selective script – evoking the take animation
Selective script – feeding the farm animals
Organizing scripts
Summary
Chapter 6: Adding a Graphical User Interface
An overview of GUI
Functions of a GUI
Feedback
Control
Feedback and Control
103
103
104
105
106
107
109
110
110
111
112
113
Game Layers
Unity 5's UI system
Canvas
Render mode
Creating a GUI
HUD
Creating an HUD
Mini-maps
Creating a mini-map
Game navigation
Summary
Chapter 7: Polishing and Optimizing the Game
Sight and sound
Unity's sound capabilities
Audio listener
Audio clips
Audio source
113
114
114
115
115
116
116
120
120
123
128
129
130
130
130
131
132
[ iii ]
Table of Contents
Implementing sound effects
133
Visual effects
134
Spotlight orb with halo effect
Casting shadows
Trail rendering
135
137
139
Rendering options
The Profiler window
Rendering optimization
142
142
143
Optimizing scripts
Summary
145
147
Imposing limits
Baking images
144
144
Chapter 8: What's Next?
149
Improving our game
Audio
Visual effects
Functionality
Levels
Project management
Unity workflow
149
150
151
153
154
154
154
Art and animation
Scripts
Other assets
154
155
155
Scaling projects
Development concepts
Cross-platform considerations
Plugins
Attribution
Advanced topics
Particle systems
Inventory control systems
Dialog systems
Summary
155
156
156
156
157
157
157
159
159
160
Index
161
[ iv ]
Preface
With the pervasiveness of games and the use of gamification in nearly every
industry, the desire to discover how to use state of the art development software has
never been so great. There is an increasing number of software tools available to help
developers create amazing games for consoles, the Web, desktop computers, and
mobile devices. Game engines are among the most powerful of these tools available.
The Unity 3D game engine is one of the elite game engines. It has been used to create
popular 2D and 3D games by large game studios and indie developers. With a free
version available, and the release of Unity 5, the time has never been better to start
using Unity.
Getting Started with Unity 5 covers one of the most popular game engines available.
This book will guide you through the entire process of creating a 3D game, from
downloading the Unity game engine to publishing your game. You will enjoy
having complete coverage of exciting topics including player-controlled characters
and animation. Whether you are just getting started as a game developer or have
experience with Unity or other game engines, this book will provide you with a
guided tour of developing games with Unity 5. With clear explanations, tips, and
ample screenshots, you will be provided with detailed steps to develop your game.
This book takes a practice hands-on approach to learning Unity 5. As you progress
through each chapter, you will build a 3D interactive game called Little Farmer Colt.
As you create the game, you'll learn key features of Unity 5 including creating a
game environment, animating characters, scripting, and more. All meshes, models,
textures, animations, and other assets are available on the book's website.
By the time you complete the lessons in this book, you'll have full confidence to start
using Unity 5 to create your own games.
[v]
Preface
What this book covers
Chapter 1, Getting Jiggy with the Unity Interface, surveys the game engine landscape,
comparing other game engines with Unity to give you a full appreciation for Unity's
capabilities. You'll learn how to download and install Unity 5. You'll also learn about
Unity 5's user interface and core tools, including transform tools and cameras.
Chapter 2, Creating the Game Environment, will teach you about game design by
reviewing the book's game design of Little Farmer Colt. You'll start creating the game
environment with terrain, mountains, trees, a lake, and the sky.
Chapter 3, Working with Assets, is all about the assets used to develop games with
Unity 5. You'll learn about assets, where to get them, how to make your own, and
how to import them into your game. You'll also learn about free 3D object creation
software to create game objects compatible with Unity 5.
Chapter 4, Animating the Game Characters, is about Unity animations and player
controllers. You'll see our game characters come to life and give your users the ability
to control the player.
Chapter 5, Scripting the Game, is dedicated to teaching you how to script. You'll start
with a primer on C# and experience with MonoDevelop. You'll also gain experience
creating your own C# scripts for your game.
Chapter 6, Adding a Graphical User Interface, contains key information on graphical
user interfaces and their importance to games. You'll gain hands-on experience
with the Unity 5 user interface system. You'll learn to create a heads-up display,
an in-game mini-map, and full-screen navigation menus.
Chapter 7, Polishing and Optimizing the Game, will teach you several ways to make
your game shine and operate optimally. You'll gain appreciation for the importance
of audio and visual effects in games and how to create them. You'll gain experience
with sound effects, shadows, lighting effects, and camera rendering. You'll also learn
about optimizing scripts.
Chapter 8, What's Next?, is the final chapter where you'll receive several specific
suggestions on how to take the Little Farmer Colt game to a higher level. You'll
also learn about Unity workflow, project scalability, cross-platform issues, and the
importance of attribution. You'll also gain an appreciation for advanced topics.
[ vi ]
Preface
What you need for this book
In order to follow the examples in this book, you'll need a copy of Unity 5 or greater.
This software is available for free at http://unity3d.com/get-unity/download.
You can use up-to-date Windows or Mac operating systems. You'll also need an
Internet connection to download the graphic assets presented in this book.
Who this book is for
This book is written for people new to Unity or that have some experience with
a version prior to Unity 5. If you want to take a look at Unity 5, get a refresher,
or just want to see how games can be developed with a top game engine, this
book is for you.
Conventions
In this book, you will find a number of styles of text that distinguish between
different kinds of information. Here are some examples of these styles, and an
explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions,
pathnames, dummy URLs, user input, and Twitter handles are shown as follows:
"In that folder, you'll find four subfolders titled Assets, Library, ProjectSettings,
and Temp."
A block of code is set as follows:
public class EatCorn : MonoBehavior {
void Start ( ) {
}
void Update ( ) {
}
}
New terms and important words are shown in bold. Words that you see on the
screen, in menus or dialog boxes for example, appear in the text like this: "You will
see a Download link at the top-right section of the web page."
[ vii ]
Preface
Warnings or important notes appear in a box like this.
Tips and tricks appear like this.
Reader feedback
Feedback from our readers is always welcome. Let us know what you think about
this book—what you liked or disliked. Reader feedback is important for us as it helps
us develop titles that you will really get the most out of.
To send us general feedback, simply e-mail [email protected], and mention
the book's title in the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing
or contributing to a book, see our author guide at www.packtpub.com/authors.
Customer support
Now that you are the proud owner of a Packt book, we have a number of things to
help you to get the most from your purchase.
Downloading the example code
You can download the example code files for all Packt books you have purchased
from your account at http://www.packtpub.com. If you purchased this book
elsewhere, you can visit http://www.packtpub.com/support and register to have
the files e-mailed directly to you.
Downloading the color images of this book
We also provide you with a PDF file that has color images of the screenshots/
diagrams used in this book. The color images will help you better understand the
changes in the output. You can download this file from: http://www.packtpub.
com/sites/default/files/downloads/8316OT_ColorImages.pdf.
[ viii ]
Preface
Errata
Although we have taken every care to ensure the accuracy of our content, mistakes
do happen. If you find a mistake in one of our books—maybe a mistake in the text or
the code—we would be grateful if you could report this to us. By doing so, you can
save other readers from frustration and help us improve subsequent versions of this
book. If you find any errata, please report them by visiting http://www.packtpub.
com/submit-errata, selecting your book, clicking on the Errata Submission Form
link, and entering the details of your errata. Once your errata are verified, your
submission will be accepted and the errata will be uploaded to our website or added
to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/
content/support and enter the name of the book in the search field. The required
information will appear under the Errata section.
Piracy
Piracy of copyrighted material on the Internet is an ongoing problem across all
media. At Packt, we take the protection of our copyright and licenses very seriously.
If you come across any illegal copies of our works in any form on the Internet, please
provide us with the location address or website name immediately so that we can
pursue a remedy.
Please contact us at [email protected] with a link to the suspected
pirated material.
We appreciate your help in protecting our authors and our ability to bring you
valuable content.
Questions
If you have a problem with any aspect of this book, you can contact us at
[email protected], and we will do our best to address the problem.
[ ix ]
Getting Jiggy with the
Unity Interface
The purpose of this chapter is to familiarize you with Unity and its interface. We'll
start with a discussion of game engines to see how Unity stacks up. You'll be guided
through the download and installation process. We'll then discuss the Unity project
and its file structure in and out of Unity.
We'll also take a look at the Unity interface. We'll experiment with different layouts
to give you an idea of the different workflows you can set up. I'll explain each view
in Unity and discuss the purpose of each one. We'll spend extra time in the Scene
view using the transform tools, so that you'll be comfortable using them. This
chapter will end with a discussion on how cameras are used in Unity.
Through this chapter, you will:
•
Understand the Unity engine
•
Be able to download and install Unity
•
Understand the Unity projects
•
Be comfortable with the Unity layouts
•
Understand the purpose of each view
•
Be able to navigate using the Scene view
•
Be familiar with the transform tools
•
Be familiar with Cameras
[1]
Getting Jiggy with the Unity Interface
Why Unity?
There are several dozen game engines available for 2D and 3D game development.
So why choose Unity? I probably do not have to convince you of that because you
are reading this book. In case you still need convincing, let me tell you about some
of the competition, first.
Unreal and CryEngine are among the most capable game engines available. Large
game studios have created 3D games using these game engines for many years.
Both engines have been used to create high-grossing games. The pricing models and
complexities of using them are enough to make indie game developers and small
game development studios look the other way.
What about easy-to-use game engines? Game Salad, Game Maker, and Construct 2
are all easy to learn and use. In fact, you can create simple games with these engines
without having to program or script a single line of code. These are all 2D game
development engines and lack the capabilities of the larger engines.
This does not put Unity in the middle of the easy-to-use and most capable game
engines. Along the spectrum of capabilities, Unity is to the far right. See the
following diagram:
Let's review the following table so that these game engines can be compared based
on their capabilities, learning curve, and what programming languages are used to
develop games with each engine:
Game Engine
Learning Curve
Language
2D/3D
Unity
4 of 5
C#, JS, Boo
Both
Unreal
5 of 5
C++
3D
CryEngine
5 of 5
C++, Lua
Both
Game Salad
1 of 5
GML
2D
Game Maker
1 of 5
N/A
2D
Construct 2
2 of 5
JS
2D
[2]
Chapter 1
The Unity game engine sits in a sweet spot between tremendous capabilities and
difficulty to learn. This makes it the engine of choice for many developers. As you'll
see later in this chapter, we declare either 2D or 3D when we create a game project.
There are some other beneficial reasons for using Unity over the other game engines:
•
The ability to program with C#, JavaScript, Boo, or any combination of these
languages in the same game.
While Unity supports scripts in the different supported
languages (C#, JavaScript, and Boo) in the same game, I do
not recommend this. The best practice is to pick a single
programming language and use it throughout the game.
•
The ability to test play games in a separate view (window) without having to
create builds or leave the development interface
•
The ability to make changes to the game while it is being played and not
having those changes impact on the saved version. This is a great way to
experiment and test.
•
The ability to develop once and then deploy to mobile (iOS, Android,
Windows Phone 8, and BlackBerry 10), desktop (Mac, Windows, and Linux),
Web (Safari, Firefox, Chrome, and Internet Explorer), and console devices
(Xbox One, Xbox 360, PlayStation 3, PlayStation 4, PlayStation Vita, and Wii
U).
In addition to these great reasons to select Unity as your game engine of choice, it is
free for most purposes. There is a Pro version that costs money, but if you want to
get started without having to spend any money, Unity is for you.
Getting your hands on Unity
If you already have Unity installed on your computer, you can skip this section.
Otherwise, you can follow the steps in this section to download and install Unity
on your computer:
1. Go to the Unity home page: http://www.unity3d.com.
2. You see a Download link at the top-right section of the web page. Click that
link to go to Unity's download page, as shown in the following screenshot:
[3]
Getting Jiggy with the Unity Interface
3. On the download page, you'll see a Download Unity button that includes the
current version of the engine. For example, the button might say Download
Unity 5.1. The web page will know what operating system your computer
has and will download the correct version. Click on the Download button.
The installation file is quite large, well over 1GB, and could take several
minutes to download, especially if you have a slow Internet connection.
4. Once the download completes, simply double-click on the installation file
and let the installer do the work. Accept any defaults if prompted. Unity is
an industrial strength game engine, so do not be alarmed if the installation
process takes a while.
5. Now you are ready to launch Unity for the first time. Double-click on the
Unity icon.
Projects
The first thing we must do to use Unity is to create a project. Just like word
processing software using a document to create a letter, Unity uses projects to create
games. Projects are the enveloping structure for all the scripts, game objects, art, and
other source files that are used in a game. You'll see later in this chapter how the
external file structure of project files is replicated in Unity.
When Unity is launched, the first screen you should see is the welcome screen
window, as shown in the following screenshot:
[4]
Chapter 1
From this dialog window, you can easily open projects that you've recently worked on;
they'll be listed on the left under the Projects link. You can also open a new project by
clicking on the New project button in the upper-right section of the window.
Let's walk through creating a new project. Our first step is to click on the New
project button. This brings up the new project dialog window, as shown in the
following screenshot:
There are four decisions you need to make on this screen before you click on the Create
project button. First, you'll need to give your project a name. This is like naming a file,
and I recommend including the version number. For example, if you are working on
the first version of a new game called Java For Everyone, you might name your project
Java4Everyone 1.0, java_for_everyone_1.0, or something similar.
The next step is to tell Unity where you want the project saved. You can accept
the default or click on the eclipse icon to open a File Explorer window. Using this
window, select where you want your project to be saved. I recommend selecting a
folder or directory that is automatically backed up or linked to a cloud-based file
system. This will help to ensure that you do not lose your work.
[5]
Getting Jiggy with the Unity Interface
Next, we need to indicate whether we are creating a 2D or 3D project. If you are
creating a platform or side-scrolling game, you'll select 2D. Otherwise, you'll select
3D. You can certainly have both 2D and 3D components to your game. Unity gives
us a lot of flexibility in this regard. So, our initial selection simply indicates our
primary focus.
Our last decision to make is what, if any, asset packages we want to import. If you
already know what packages you will need, you can have them loaded when the
project is created. Alternatively, you can easily import packages after you've started
working on your project. This is the method I recommend because it ensures you
only load what you absolutely need. We'll discuss how this is done in a later chapter.
Once you've made the four decisions, click on the Create project button, as shown in
the following screenshot:
Unity will create your project and depending on how many packages you selected
to be included, it could take more than a few seconds to create. If the window
disappears and you do not see any indication that your project is being created, don't
panic. Unity is working in the background and will open the main interface as soon
as the project has been created.
[6]
Chapter 1
If you look at your filesystem, you'll see that Unity has created a folder with the
name of your project. In that folder, you'll find four subfolders titled Assets,
Library, ProjectSettings, and Temp. Unity keeps projects well organized with
these primary folders. As new game objects are added to your project, they will
be placed in these folders. You can also create additional folders to be even more
organized.
It is a good idea not to move files around or change folder names.
There is a chance you'll break linkages inside your project. Instead,
make any desired changes within Unity.
Layouts
One of the wonderful things about working with Unity is that you can customize
the way the user interface is laid out. You can use one of the predefined layouts of
2 by 3, 4 Split, Tall, or Wide, or you can create your own. Layouts refer to how the
various views in Unity are arranged on the screen. You'll learn about views in the
next section.
To change a layout, we simply click on the Layout button that is located in the far
top-right corner of the Unity interface:
[7]
Getting Jiggy with the Unity Interface
Let's look at each layout to see the differences. The first layout is the 2 by 3 layout.
This layout provides a nice arrangement with the Scene and Game views on the left,
the Hierarchy and Project views in the middle and a full Inspector view on the right,
as shown in the following screenshot:
The 4 Split layout provides four different views of the same scene, as shown in the
following screenshot. This is a good way to review how lighting and shading is
implemented in your game. We'll talk about lighting and shading later in the book.
[8]
Chapter 1
The Tall layout provides a tall, but not wide view of the Scene view with other
views located on the right, as shown in the following screenshot:
The Wide layout provides a wide view of the Scene view, with other views located
on the bottom and on the right, as shown in the following screenshot:
[9]
Getting Jiggy with the Unity Interface
The Default layout is a variation of the Wide layout. The difference is that with the
Default layout, the Hierarchy view is on the left, as shown in the following screenshot:
You can switch between views anytime you want without it impacting your game.
Most Unity developers do not work in just one view. Different views provide
different benefits and are appropriate for different tasks. You can also modify any
view by dragging any of the borders of a view. If you want to save a view, make any
changes to the current view, then select the Layout button and select Save Layout.
You will be prompted for a name.
Views
Unity views provide the ability to see, or view, specific components of the project.
There are five views in Unity.
[ 10 ]
Chapter 1
The Scene view
Scenes in Unity are the equivalent to levels in a game. You'll have a different
scene for every game level. The Scene view is where we put visual objects such as
characters, buildings, terrain, and more. We can also move, rotate, and scale these
objects in the Scene view by using transform tools, which we'll discuss in the next
section. Take a look at the following screenshot:
The Game view
One of the great features of Unity is that we can play our game right in the game
engine. This means we do not need to compile the game and play it outside of Unity.
If you're already a game developer, you'll appreciate the time saving. The Game
view is where the game is played during development.
Any changes made to the game while the game is being played will be reflected in
the game but are not saved when gameplay ends. This represents a wonderful way
to experiment and not risk breaking scripts or other game components.
[ 11 ]
Getting Jiggy with the Unity Interface
Like with most games, Unity games are played from a player's perspective.
Typically, a player controls an in-game character. We do not see the game world
through the in-game character's eyes. It might seem that way, but we are actually
seeing the game world as rendered by a camera or cameras. We'll talk more about
this later. For now, think of a camera hovering just above and behind our in-game
character's head. This makes it seem like we are seeing through their eyes:
The Hierarchy view
This view displays a hierarchical list of every object in the scene. When you
double-click on an object in this view, two things happen. First, the object is selected
and viewable in the Scene view. Unity orients the Scene view so that the selected
object is in the front and center. The second thing that happens is that the Inspector
view is populated to display the selected object's settings and components. You'll
gain great exposure to this later in the book. Take a look at the options shown in the
following screenshot:
[ 12 ]
Chapter 1
The Project view
The Project view provides us with a file structure of our game components including
objects, art, scripts, and so on. The file structure here is what is displayed on your
system's file structure. So, if you want to make changes, do it in the Project view, not
directly on your computer. You'll notice that this view has two columns. The first
column contains the file structure I mentioned as well as Favorites, which will help
you to find assets quickly. This is especially handy for large projects.
The second column contains folder contents. If, for example, you click on a folder in
the left Project view column, that folder's contents will be displayed in the second
column. You can drag objects directly from this view into the Scene view to add
objects to your game. I'll walk you through this later in the book. Take a look at the
options shown in the following screenshot:
[ 13 ]
Getting Jiggy with the Unity Interface
The Inspector view
When objects are selected in another view, their details are revealed in the Inspector
view. In many cases, you can make changes to an object directly in the Inspector
view. You'll be doing this a lot throughout the book.
Remember, layouts are made up of views and you have complete control over how
the interface is laid out. For the majority of this book, I'll use the 2 x 3 layout because
of its utility. You can use any view you want and will still be able to follow along
with the instructions and guides provided in the rest of this book.
Transform tools
Transform tools in Unity allow us to interact with the Scene view, edit terrain, move
objects, and make modifications. There are five buttons that make up the transform
tools, as shown in the following screenshot; they are located in the top-left corner of
the Unity Interface:
[ 14 ]
Chapter 1
The first button is the Hand tool or View Tool (
). When this tool is selected, our
cursor in the Scene view turns to a hand. This lets us know what mode we are in.
With this tool selected, we can scroll with our mouse to zoom in and out of the scene.
If you click on the left mouse button, you are able to pan around the scene. With
the right mouse button clicked, you are able to look around based on the current
position of your cursor.
If you hold down the Alt key on a PC or Option key on a Mac and click on the left
mouse button, you can orbit around the current area. Pressing that same key and the
right mouse button allows you to zoom in and out of the scene.
The second button is the Translate tool (
) and is in the shape of a quad arrow.
When an object selected and then click on the translate tool, the object will have three
gizmos, one for each axis. Clicking and dragging any of these gizmos moves the
object along the respective access, as shown in the following screenshot:
The third transform tool is the Rotate tool (
), which looks like two rotating
arrows. This tool allows us to rotate an object along any axis (x, y, or z). Instead of
line and arrow gizmos, this tool is instantiated with three colored rings, one for each
axis. Clicking a ring and dragging it rotates the object along that axis, as shown in the
following screenshot:
[ 15 ]
Getting Jiggy with the Unity Interface
The fourth transform tool is the Scale tool (
), which is represented with line
and block gizmos. Like the other transform tools, there is one gizmo for each axis.
Clicking and dragging one of these gizmos increases or decreases the object along the
selected axis. For example, you can make a cube wider, narrower, taller, or shorter.
If you want to maintain aspect ratio, you can click on the center square instead of the
red, blue, or green square. Now, when you click-and-drag, your object will grow or
shrink in perfect aspect ratio, as shown in the following screenshot:
The final transform tool is the Rect tool (
) and is represented by a rectangle
with intersecting points. The Rect tool can be used to move, resize, and rotate
an object in the Scene view. So, this is a versatile tool that also has corresponding
properties that you can edit directly using the Inspector view. Take a look at the
following screenshot:
[ 16 ]
Chapter 1
Cameras
Cameras render scenes so that the user can view them. Every scene must have at
least one camera. In fact, when a new scene is created, Unity creates a camera named
Main Camera. As you'll see later in this book, a scene can have multiple cameras.
In the Scene view, cameras are indicated with a white camera silhouette, as shown in
the following screenshot:
Cameras are game objects and can be edited using transform tools as well as in
the Inspector view. We can classify Unity cameras based on their projection. A
perspective projection camera renders a scene based on the camera angle, as it
exists in the scene.
The other project is orthographic. An orthographic perspective camera renders a
scene uniformly without any perspective. This type of camera is commonly used for
top-down games and is the default camera used in 2D and Unity's User Interface
(UI) system.
When a camera is selected in the Hierarchy view, its frustum is visible in Scene
view. A frustum is a geographic shape that looks like a pyramid that has had its top
cut off. The top plane is parallel to its base, in other words, the near and far plane.
[ 17 ]
Getting Jiggy with the Unity Interface
We'll use cameras in our game later in the book.
There are additional user interface components to Unity that
we did not cover. As we need them in the development of our
game, they'll be introduced prior to use.
Summary
In this chapter, we took a quick look at and compared game engines. We also took
a closer look at Unity and reviewed some of its key features. We downloaded and
installed Unity so that we're ready to start developing games. We discussed Unity
projects and created one in order to become comfortable with the process. To close
out the chapter, we walked through the Unity interface including looking at layouts,
views, transform tools, and cameras.
In the next chapter, we'll start designing the game we'll be making through this book
and you'll learn how to create the game environment.
[ 18 ]
Creating the Game
Environment
In the last chapter, we surveyed game engines, installed Unity, and became familiar
with the user interface. We're almost ready to start creating our game. Before we
do, we have two tasks to attend to: designing our game and creating the game's
environment. We'll handle both of these tasks in this chapter.
This chapter will set the stage for developing our game using Unity. We'll start
by examining our game's design, which will serve as the blueprint we'll follow
throughout the rest of this book. Next, we'll create our game's environment, which
will include terrain, water, and the sky. Our terrain will consist of trees, mountains,
and a river.
Through this chapter, you will:
•
Understand the purpose of a game design
•
Be able to create terrain in Unity
•
Be familiar with using textures
•
Be comfortable with creating mountains
•
Be comfortable planting trees
•
Be familiar with creating bodies of water
•
Be able to create a sky in Unity
[ 19 ]
Creating the Game Environment
Game design
A game's design is like a blueprint for a house. You would not consider building a
house without a blueprint and it is an equally bad idea to develop a game without
designing it first. Our game design will document the look of our game, what the
player's objectives are, what the gameplay will be, supported user actions, the
required artificial intelligence, and game flow.
Designing a game is significantly more complex than simply considering these six
elements. We do not have time to go through the entire game design process, so
you'll see the primary areas of the game designed in this chapter.
Our game will be called Little Farmer Colt. It will feature a young farmer named
Colt, who has to manage a farm. Let's look at the elements of game look, player
objectives, gameplay, user actions, artificial intelligence, and end state.
Game look
All games have a look to them. For a game that takes place in space, the game look
might be a futuristic/mechanical. If it is a children's math game, it might have a
cartoon style look. The importance of addressing a game's look is to ensure it is
consistent throughout the game.
Our game will take place on a small farm, so the game look will be rural farming.
It will consist of farm animals, appropriate buildings, crops, water, grass, and dirt.
One trick in maintaining game look consistency is to have the same graphic artist
create all the artwork. On large projects, this is not always feasible, but it will work
for our small game project. All the art used in our game was created by a single
graphic artist.
Player objectives
Users that play our game will need to know what their objectives are. These
objectives will give them a purpose in the game. Objectives also add fun to games.
Our game will include three objectives:
•
Objective 1: Learn how to farm the land. The player will accomplish this
objective by talking to the old farmer.
•
Objective 2: Raise chickens. This will be accomplished by gathering corn and
water and feeding the chickens.
•
Objective 3: Raise pigs. The player will meet this objective in the same
manner as with the chickens: by providing food and water.
[ 20 ]
Chapter 2
To support these objectives, we'll provide cornfields and a stream. The player will
harvest corn from the fields and collect water from the stream. Both corn and water
will be used to feed the farm animals.
Gameplay
Gameplay is a reference to how players interact with a game. For our Little Farmer
Colt game, players will use both the keyboard and the mouse. The mouse will be
used to rotate Colt; the main game character and the keyboard arrow keys will be
used to navigate Colt in our game world.
The following image is a graphic view of our controls. They are standard and Unity
makes it easy to use these controls. We'll take care of this later in the book:
User actions
Another element of game design is defining what actions players will be able
to perform. These actions might include sailing a ship, launching a rocket,
swimming, climbing, and more. For our game, our player will be able to
perform the following actions:
•
Walk throughout the game world
•
Pick up corn
•
Pick up water
[ 21 ]
Creating the Game Environment
•
Feed chickens
•
Feed pigs
•
Talk to the old farmer
This list of actions can serve as a checklist for things we need to implement in our
game. We'll do just that later in the book.
Artificial Intelligence
Artificial Intelligence (AI) is achieved when we program game objects based on real
objects that exhibit intelligence. The player will control Colt, the game character, so
that just leaves a couple of game objects that we can implement AI for. These objects
are the old farmer, chickens, and pigs.
We'll use the old farmer to demonstrate a dialog system. So, he will not have
any AI; rather, he will have a predefined set of responses based on Colt's dialog
menu selections.
Both the chickens and pigs will have similar AI implemented. They will start out as
baby chicks and piglets. Given enough water and corn, they'll grow into adulthood.
When fully grown, they will automatically produce baby chicks and piglets. We'll
also include some criteria for them to die if they are not provided with enough water
and food.
So, our AI list for this game is as illustrated in the following table:
Gameobject
AI
Comments
Colt
N/A
Player controlled
Old farmer
N/A
Governed by dialog system
Baby chicks
Eat/drink
There will be multiple instances of
this game object
Grow to Chicken
Die
Chicken
Eat/drink
There will be multiple instances of
this game object
Create baby chicks
Die
Piglet
Eat/drink
There will be multiple instances of
this game object
Grow to adult pig
Die
[ 22 ]
Chapter 2
Gameobject
AI
Comments
Adult pig
Eat/drink
There will be multiple instances of
this game object
Create piglets
Die
End state
The final part of our game design is to determine how the game will end. There are
two types of end states: victory and defeat. The victory condition is the end goal.
This lets players know what they are working towards. We need to determine how
players will beat the game. For Little Farmer Colt, we'll send the victory condition
to the game state containing five full-grown chickens and five full-grown pigs. Full
grown will be designated as blue ribbon animals. In a larger game, this end state
might signify the ending of the first level. This gives you the opportunity to further
develop the game when you are finished reading this book.
The other end state is defeat. We have already identified that the animals can die. So,
we'll set the defeat condition to occur if there is not at least one of each type of animal.
It will not matter whether the animals are chicks and piglets or chickens and pigs.
Okay, our game is fully designed. Now we can start creating our game environment.
We'll start with terrain in the next section.
Terrain
Our game environment will be a rural farming setting with water and land features.
We'll create our terrain with a water feature running down the middle of the land
and a natural bridge that allows the player to travel between sides. On the left side
of our terrain, we'll put Colt's farmhouse and areas for both chickens and pigs. The
old farmer will have a farmhouse on the right side of the terrain, surrounded by a
corn maze.
[ 23 ]
Creating the Game Environment
To make the land look a bit more interesting, we'll include some hills and trees.
The following diagram shows a mockup up of what we'll create in the remainder
of this chapter:
Terrain Mockup
Pig Area
Little Farmer
Colt's
Farmhouse
Chicken Area
Corn and Corn Maze
Water
Natural Bridge
Corn and Corn Maze
Old Farmer's
Farmhouse
Corn and Corn Maze
Water
We'll create a Unity project and continually update it throughout the remainder of
the book. To create the project, perform the following steps:
1. Launch the Unity application on your computer.
2. Click on the New Project button on initial Unity dialog window.
3. Enter LittleFarmerColt for the project name.
4. Select a folder location for your project. I recommend selecting an area that is
automatically backed up by your system.
5. Ensure 3D is selected.
6. Click on the Create Project button.
After you follow these steps, Unity will open your new project. In the next section,
we'll start creating the terrain.
Creating the terrain
Unity treats terrain as a game object. You'll see reference to this in Unity as
GameObject. Game objects are a fundamental feature in Unity. Everything is a
game object, including characters, trees, lights, cameras, and more. These objects
act as containers for components.
[ 24 ]
Chapter 2
In Unity, projects contain game objects of all kinds. You'll be able
to see all game objects in the Project view. You'll use some of these
game objects in your scene. So, things (game objects) in a scene
are visible in the Hierarchy view. When we drag game objects
from the Project view into the Hierarchy view, we are creating an
instance or copy of that game object.
You'll see later in the book how we can add components to game objects. For now, we
want to create our game's terrain. We'll do this by performing the following steps:
1. In Unity, projects contain game objects of all kinds. You'll be able to see all
game objects in the Project view. You'll use some of these game objects in
your scene. So, things (game objects) in a scene are visible in the Hierarchy
view. When we drag game objects from the Project view into the Hierarchy
view, we are creating an instance or copy of that game object.
2. Select the GameObject drop-down menu, then select 3D Object, and click
on Terrain. This will create a terrain object. You'll see the object listed in
Hierarchy and Project views:
3. Next, we'll reduce the size of the terrain to something more manageable.
We'll accomplish this by selecting Terrain in the Hierarchy view, and then
selecting the Terrain Settings button (
) in the Inspector view. Scroll
down and change both the Terrain Width and Terrain Length to 250. This
will result in the terrain being resized to 250x250.
[ 25 ]
Creating the Game Environment
When we initially create a terrain in Unity, the origin of that
terrain is in a corner. You can change the scene origin to (0,0,0)
so that it is in the middle of the terrain. This can make it easier
to manage the terrain.
4. Still in the Inspector view, click on the Paint Height Tool button (
) and
then click on the Flatten button. Note that when you "flatten" the terrain, the
object may leave the frame in the Scene view. You can double-click on the
object in the Hierarchy view to bring the object back in frame.
The terrain is created and we are now ready to add some features to our terrain.
Adding mountains
We'll create mountains and hills on our terrain to give it some character. Since our
game is predominately a farm, we'll only put mountains around the edges of the
terrain. This will help us keep things under control and prevent Colt, our game
character, from falling off the edge of the earth.
Unity makes erecting mountains as simple as dragging your mouse's cursor. Here
are the steps we'll use to create our mountains:
1. In the Inspector view, click on the Raise/Lower Terrain tool (
).
2. You'll see a variety of brush types available to you in the Inspector view
below the tool icons. Select one of the brush types with a single click. You
can also change the brush size with the slider in the Inspector view or by
entering in a numeric value.
3. Move your mouse over to the Scene view. When you push the left mouse
button and drag the cursor over the terrain, you'll notice that you start
painting mountains on the terrain.
4. Paint a row of mountains along all four edges of the terrain.
Our mountains and terrain do not look like much yet, so we'll get to that shortly.
Adding a river
Our next task is to create a river. You'll remember from our terrain mockup that we
want the river to flow from one end of the terrain, down the middle to the opposite
end. We'll tackle this task in two phases. The first phase is digging a trench, or
lowering the terrain where we want the river. The second phase is adding the water.
We'll take care of the first phase now. To do so, perform the following steps:
1. In the Inspector view, click on the Raise/Lower Terrain tool (
[ 26 ]
).
Chapter 2
2. Select a large brush size.
3. Move your mouse cursor into the Scene view.
4. Hold the Shift key down and keep the left mouse button pressed. Now, as
you drag your mouse over the terrain, you'll be lowering the terrain.
5. Lower the terrain in the center, from one end of the terrain to the other.
This will create an area for water that will effectively split the terrain in
half visually.
6. If you did not leave an area for Colt to walk across the water, raise an area in
the center now.
We will add water, the second phase of creating our river, later in this chapter.
Textures
Textures in Unity are image files that can be used for adding a textured surface to
an object. At the onset, we do not have any textures loaded into Unity. We'll quickly
add some terrain textures by performing the following steps:
1. Select the Assets drop-down menu, then select Import Package, and click on
Environment, as shown in the following screenshot:
This will result in an Import Package dialog window popping up.
[ 27 ]
Creating the Game Environment
2. All the objects in the package will already be selected, so you simply need to
click on the Import button to add this package to your Unity project. Click on
the Import button.
This is a large package, so it might take a minute or more to import. We'll talk more
about packages later in the book. For now, know that this is a quick way to add a lot
of objects to your project.
Unity's Environment package came with several textures. If you expand the
selections in the Project view, you'll notice that there is now a folder named
Standard Assets or SampleAssets. The Environment package of assets is located in
that folder. Within the Environment folder, you'll see a Terrain folder, as shown in
the following screenshot:
The Terrain folder contains, among other things, textures that we'll use to enhance
our terrain. Let's do that now by performing the following steps:
1. Select Terrain in the Hierarchy view.
2. In the Inspector view, select the Paint Texture button (
[ 28 ]
).
Chapter 2
3. Still in the Inspector view, under the brushes section, you see an Edit
Textures button to the far right. Click on that button:
4. Clicking on the Edit Textures button results in a mini pop-up window. Select
Add Texture from this menu.
5. In the Add Terrain Texture window, click on the Select button under
Texture.
6. In the Select Texture window, scroll down until you see
MudRockyAlbedoSpecular icon. Double-click on that icon.
7. Click on the Add button to add this texture to your terrain.
[ 29 ]
Creating the Game Environment
Your terrain should now have that texture applied to it and will look similar to the
following screenshot:
Our terrain looks a bit more realistic because we have applied a texture to it. Next,
let's use a different texture to paint on the mountains. We'll accomplish that by
performing the following steps:
1. Select Terrain in the Hierarchy view.
2. In the Inspector view, select the Paint Texture button.
3. Still in the Inspector view, under the brushes section, you will see the Edit
Textures button to the far right. Click on that button.
[ 30 ]
Chapter 2
4. Clicking on the Edit Textures button results in a mini pop-up window. Select
Add Texture from this menu.
5. In the Add Terrain Texture window, click on the Select button under Texture.
6. In the Select Texture window, scroll down until you see
CliffAlbedoSpecular icon. Double click on that icon.
7. Click on the Add button to add this texture to our available textures
for painting.
8. Click on the new texture in the Inspector view.
9. Select a brush size that you are comfortable with.
10. Move your mouse cursor into the Scene view.
11. Hold down the left mouse button and move your cursor over the mountains.
This will paint the next texture on the mountains.
Your terrain now has different textures for the ground and for the mountains, as
shown in the following screenshot:
[ 31 ]
Creating the Game Environment
In the next section, we'll create the natural bridge, plant trees, add water, and create
the sky.
Additional environmental features
We are now ready to enhance our terrain with additional features. First, we will add
a natural bridge, and then we'll selectively plant trees. We'll also add water to the
center of our terrain and create the sky.
Natural bridge
There are several ways to build a bridge for our game. We want the player to be able
to walk from one side of the game map to the other. The approach we'll take is to use
a textured geometric shape. Here are the steps:
1. Use the transform tools in the Scene view to zoom into the area you want to
place the bridge. I will put it in the center of the terrain.
2. Select the GameObject drop-down menu, select the 3D Object, and click
on Cube.
3. Right-click on the cube in the Hierarchy view and select Rename. Rename
the cube as Bridge.
4. Use the transform tool to increase the width and length of the cube. A scale
of 12, 5, 58 works nicely.
5. Use the translate tool to move the bridge in place. Be sure to place both ends
just beneath the surface so it does not look:
[ 32 ]
Chapter 2
6. Right now, the bridge looks like a concrete slab. Let's apply a texture to it so
it looks more natural. In the Project view, navigate to Assets | SampleAssets
| Environment | TerrainAssets | SurfaceTextures, and then in the second
column of the Project view, select the GrassRockyAlbedo. Drag this texture
to the bridge in the Hierarchy view:
There we are, our bridge is in place and looks natural. Save your scene and
your project.
Planting trees
Planting trees is easier in Unity than it is in real life. In fact, Unity gives us a few
options. The option that gives us the most flexibility is to create our own tree from
scratch. This is a bit time-consuming, but can result in highly unique trees.
We can also use pre-existing tree assets. There are some that are part of the
SampleAssets that ship with Unity. And, as you would expect, there are several
assets that are available from external sources. For our game, we'll use a tree that
is readily available to us.
[ 33 ]
Creating the Game Environment
Before we start planting trees, we need to know where we want them. If you refer
back to our terrain mockup, you'll see that we did not make any annotations for
trees. Since our game involves farming, we do not have a great need for trees. We'll
just plant a few for decorative purposes and to help make the game world seem
more real.
We'll plant our trees by performing the following steps:
1. Use the transform tools in the Scene view to zoom out. You'll want to be able
to see all or a large section of the terrain.
2. Select Terrain in the Hierarchy view.
3. In the Inspector view, click on the Place Trees (
) button.
4. Below this button, you'll see a Trees section and, beneath that, an Edit Trees
button. Click on that button, as shown in the following screenshot:
5. When you click on the Edit Trees button, you'll be presented with a pop-up
window. In that pop-up window, select Add Tree.
6. Click on the small circle to the right of the Tree Prefab line in the Add Tree
dialog window. This will result in a Select GameObject dialog window.
7. In the Select GameObject dialog window, double-click on the
Conifer_Desktop tree icon.
8. Click on the Add button in the Add Tree dialog window.
[ 34 ]
Chapter 2
Now that we have added a tree to our terrain in the Inspector view, we can start
placing them in our scene. First, we'll need to adjust some of our settings. We'll
do this in the Settings section of the Terrain in Inspector view as shown in the
following screenshot:
To add trees in our scene, perform the following steps:
1. Change the Brush Size to 8 and slightly reduce the Tree Height slider by
moving it to the left.
2. Move your mouse into the Scene view and click on each spot you want to
place a tree. You can use your mouse as a paintbrush to paint trees wherever
you desire.
[ 35 ]
Creating the Game Environment
3. A quick method to get a lot of trees on your terrain is to use the Mass Place
Trees button, which is just under the tree image in the Inspector view. When
you click on this button, a Place Trees dialog window appears. Change the
Number Of Trees field to 50 and click on the Place button, as shown in the
following screenshot:
4. The function of randomly placing trees can be a big time saver. It can also
place some trees where you do not want them. To erase trees, you simply
select the Place Trees button in the Inspector view and shift-click on the
trees in the Scene view. This erases any unwanted trees.
[ 36 ]
Chapter 2
As you can see in the following image, I erased trees that were in the way of our
farmland and in the river:
[ 37 ]
Creating the Game Environment
Water
We'll use a quick trick to add water to our terrain. Our approach will be to add a
water object that comes standard with Unity and shape it in a manner that makes it
look like a true body of water. To do so, perform the following steps:
1. In the Project view, navigate to Assets | Sample Assets | Environment |
Water (Basic) | Prefabs. This will display two water objects in the second
column of the Project view.
2. Click on the WaterBasicDaytime object in the second column of the Project
view and drag it to the scene. You'll notice that the water is a flat, circle object.
[ 38 ]
Chapter 2
3. Use the transform tools to change the size and location so that it covers the
river and does not overflow on the bridge or land. Your terrain should now
look similar to the following screenshot:
[ 39 ]
Creating the Game Environment
Creating the sky
The last enhancement we'll make to our terrain is to create a sky. We will use
Skybox, which is a six-sided cube visible to the player beyond all other objects.
Perform the following steps to create a Skybox:
1. Click on the Assets folder in the Project view.
2. Using the top menu bar, select Assets | Create | Material. This will create a
new material object in the Assets folder.
3. Rename the new material as Skybox.
4. Select the Skybox asset in the Project view.
5. In the Inspector view, the Shader option is defaulted to Standard. Change
that to Skybox/ 6 Sided. This will create six textural slots for your new
material, as shown in the following screenshot:
[ 40 ]
Chapter 2
6. Drag the six image files from the Skybox set, which starts with the name
CloudyLightRays into your Assets folder. You'll find these images in the
folder 3852_02_SkyboxTextures, which is available with this book.
7. Drag each new file to the corresponding slot in the Inspector view. You'll notice
that the files contain back, down, front, left, right, or up. Each of these has a
corresponding slot in the Skybox. Once you finish this step, your Inspector
view should present your Skybox, as shown in the following screenshot:
[ 41 ]
Creating the Game Environment
8. In the Hierarchy view, select the Main Camera.
9. Click on the Add Component button in the bottom of the Inspector view.
Then, select Rendering and then Skybox. This will create new component in
the Inspector view for your main camera:
10. Drag the Skybox asset we created into the Custom Skybox slot of the
Skybox component in the Inspector view:
Now you can see in both the Scene view and Game view that the player has a
360 view of our Skybox.
Be sure to save your scene and your project.
Summary
In this chapter, we dabbled in the concept of game design and documented our
Little Farmer Colt game. The game design will serve as a reference point for our
remaining work on the game throughout this book. The game design also informed
the characteristics of our terrain. We created a terrain, added a texture to the terrain,
added mountains, trees, and a river. We even created a natural bridge. We concluded
our chapter by adding a Skybox.
Our game's foundation is now created and you have the experience to create your
own game environments.
In the next chapter, we'll take a close look at how to import and use assets in Unity.
We'll do more than experiment; we'll actually import our game's main character Colt,
the old farmer, and the animals.
[ 42 ]
Working with Assets
In the last chapter, we designed our game and created our game environment, the
virtual world that our players will interact with during the game. Now, we are ready
to start populating our game environment with more than just trees and water.
In this chapter, we will take a close look at importing Unity and third-party assets from
Unity's Asset Store directly into our game. These assets will be used to make our game
environment more enjoyable for users. We'll add our pig, piglet, baby chick, adult
chicken, old farmer, and Colt, our young farmer. These are our game's characters.
We'll import barns for the two farmers. We'll also create our own 3D asset using free
software and import it into our game.
After reading this chapter, you will:
•
Understand what a Unity asset is
•
Be able to import a Unity asset into your game
•
Be able to import a third-party asset into your game
•
Understand Unity packages
•
Be able to import a Unity package into your game
•
Be able to use Blender to export a 3D object
•
Be able to import a 3D object made in Blender into your game
[ 43 ]
Working with Assets
Assets
Assets are defined as useful or valuable things. In Unity, assets are useable game
objects. There are three basic types of assets: Unity, user-created, and third party.
As the names suggest, they are based on how the asset is created. Unity comes with
free assets and offers a library of premium (not free) assets. User-created assets are
those that you create yourself. We will create our own assets later in this chapter. The
final asset type is third party, which indicates that someone other than you or Unity
created it.
When we select the Assets drop-down menu, we see several functions available to
us. The functions we'll cover in this chapter are Create, Import New Asset…, and
Import Package, as shown in the following screenshot:
[ 44 ]
Chapter 3
Navigating to Assets | Create reveals several types of assets we can create directly
from within Unity. You'll notice that assets can be scripts, shaders, prefabs, materials,
animations, and more. Assets are essentially any item we use in our game. We'll use
some of these in later chapters as we complete our game.
[ 45 ]
Working with Assets
We can also create basic 3D assets, such as a cube and a sphere. To create a physical
3D object, you would navigate to GameObject | 3D Object, as shown in the
following screenshot, and select what object to create. Using these objects may not
be what you need for your game, and we certainly do not need them for Little Farmer
Colt. These assets are great for testing components and scripts in Unity projects. We
can delete them that than we can create them, so they make great and expendable
test assets. These objects are great for prototyping. We can use them in our games to
experiment before we spend any time on final graphics.
Asset packages
In the last chapter, we imported an asset package so that we could create and modify
our game's terrain. In this section, we'll look at what these packages are and how
we'll use them in Unity and for our game.
Asset packages are bundles of assets grouped together. We can create packages
to share our assets with others or to save them for use in another game or Unity
application. We can even create asset bundles to sell in Unity's Asset Store.
[ 46 ]
Chapter 3
To create an asset package, you simply select all the assets you want in the package,
using the Project view. Then you have two options. Your first option is to right-click
and select Export Package. The second option is to navigate to Assets | Export Package.
Both options result in the same outcome.
In addition to the ability to export packages from Unity, we can also import asset
packages into Unity. To import an asset package, we simply navigate to Assets |
Import Package menu option:
[ 47 ]
Working with Assets
When importing asset packages, we can select from one of the 12 asset packages that
ship from Unity. These packages are listed when the Assets | Import Package menu
is selected, as shown in the following screenshot. Selecting one of these packages
to import results in Unity decompressing the package, then displaying the package
contents to you:
After the package has been decompressed and before the assets in that package are
imported into your Unity project, you have the opportunity to review, select, and
deselect assets in the package. Once you have the desired packages selected, you
simply click on the Import button. Unity will place the package in your project.
You'll be able to see the assets in Project view.
The actual files are stored in your project's folder hierarchy in the same file/folder
structure you saw when you reviewed the assets prior to importing them. This
makes things easy to find.
Be sure not to move assets using your computer's file and folder
system. Relocating assets outside of Unity can result in linkage
problems for your project. You can move things around from
within Unity in the Project view with no consequences.
[ 48 ]
Chapter 3
We also have the option to import a Custom Package option by navigating to Assets
| Import Package menu selection. When this option is selected, you'll be presented
with a dialog window so you can indicate where on your computer the package is.
The file extension for Unity packages is .unitypackage.
Unity Asset Store
Unity operates a store called the Unity Asset Store. There are a great number of assets
available to Unity developers. The store is accessible directly on the Web at http://
assetstore.unity3d.com. You can also open a window within Unity to display the
Asset Store. This is accomplished by navigating to Window | Asset Store.
Regardless of how you connect to the Unity Asset Store, you'll see a hierarchical
category listing in the top-right corner of the store:
Clicking on the triangular icons to the left of each category reveals subcategories.
Some categories have multiple subcategories, which helps you find what you are
looking for quickly.
When you click on a category, its contents will be viewable. Clicking on a specific
asset will display several characteristics of that asset. These characteristics include:
•
Title
•
Publisher
•
Rating
[ 49 ]
Working with Assets
•
Price
•
Purchase button or, in the case of free assets, an "Open in Unity" button
•
Version of Unity required
•
Description
•
Package contents
•
File size
•
Version number (of the asset)
•
Images
•
Videos (not always available)
•
Link to publisher's website
There are a couple of things to consider regarding obtaining assets from the Unity
Asset Store. First, you'll want to make sure that you have the requisite rights to use
the asset as you plan to. For example, if you do not have commercial use rights, you
will not want to use that particular asset in your commercial game.
Another thing to consider before selecting assets from the Asset Store is how large
the files are. Fortunately, this information is part of the metadata displayed when
you preview an asset.
In the next section, we'll visit the Unity Asset Store, select an asset, and add that asset
to our game project.
Adding assets to your game
Let's add some assets to our Little Farmer Colt game. First, we'll visit the Unity Asset
Store, select an asset, inspect it, download it, and add it to our game. Next, we'll
import a custom asset package.
Using the Unity Asset Store
The following steps illustrate how to find an asset from the Unity Asset Store and
add it to our game. We'll look at specific characteristics of the asset, so you know
what to look at when using the store.
1. Launch Unity and open your project. Remember, we named our project
LittleFarmerColt.
[ 50 ]
Chapter 3
2. Open your scene by navigating to File | Open Scene menu selection. This
will bring up a Load Scene file dialog box with your project's Assets folder
displayed. The name of my scene is FarmScene. Double-click on the scene
file to open it. Alternatively, single-click on the scene file and click on the
Open button, as shown in the following screenshot:
Now we are ready to open the Unity Asset Store. We will search for an object
appropriate for our game.
3. From the drop-down menus, navigate to Window | Asset Store. This will
open the Asset Store in a new window.
4. If you are not already logged in with your Unity account, log in now. You'll
see a Log In link in the top-right corner of the window. You should have
created an account when you downloaded Unity. If not, use the Create
Account link, as shown in the following screenshot:
[ 51 ]
Working with Assets
5. Once you are logged in, you'll see your name in the top-right corner of the
store's window, replacing the Create Account and Log In links, as shown in
the following screenshot:
6. Using the search box just below your username, type pickaxe and hit the
Return key:
7. You'll see several assets returned in your search. Scroll through the search
results until you find the pickaxe asset from Unity Technologies, as shown in
the following screenshot:
Because the Unity Asset Store is continuously updated, it is possible that the
pickaxe from Unity Technologies might not be available. If this is the case,
browse through the assets and select one that is free and, preferably, from
Unity Technologies.
[ 52 ]
Chapter 3
8. Click on the pickaxe image icon to bring up details on that asset.
We are presented with several key pieces of information about the asset. The title
and image preview are the most notable. In the top left area, we see the category
and sub-categories the asset belongs to, the publisher, rating, and price. Below that
section is a Download button.
Just below the Download button, there is a brief description of the asset and copyright
information. This area's content will differ, based on the asset that you are viewing.
In addition to asset changes in the Asset Store, the layout and search functionality is
subject to change. So, if you see something different to the screenshots presented in
this chapter, do not be alarmed.
[ 53 ]
Working with Assets
The next section of the asset preview shows the version number, file size, and a link
to the publisher's website. If you have questions about the asset or problems with
it after you download it, you can use the link shown in the following screenshot to
contact the publisher:
The final section of the asset preview is the Package Contents area. Here you'll see
a hierarchical list of all elements of the package. Remember, an asset package is a
collection of assets.
The pickaxe package contains four items. It contains a text file with licensing
information, a material file, the pickaxe object, and a .png file. Some assets can be
previewed in the editor. Try clicking on the .mat file to see the preview. The preview
is shown in the following screenshot:
1. Click on the Download button in the Unity Asset Store window. This
will bring up an Importing Package dialog window. Depending on your
Internet connection, this could take anywhere from a few moments to several
minutes. All assets in the package are selected by default. If you do not want
specific components of the package, you can deselect them here.
[ 54 ]
Chapter 3
2. Click on the Import button.
3. In the Project view, right-click on the top Assets folder and navigate to
Assets | Create | Folder menu choice. Name the folder pickaxe.
4. In the Project view, drag the components of the pickaxe package into the
pickaxe folder you just created. Once you have completed this, your Project
view should look similar to the following screenshot:
5. Close the Unity Asset Store window.
[ 55 ]
Working with Assets
Now you have the pickaxe asset available to you for the game. For now, we'll leave it
in the Project view.
Importing a custom asset package
We are now ready to upload our game characters and buildings. There are two
asset packages on the book's web page. The first package, character_assets.
unitypackage, contains the two farmers, piglet, pig, baby chick, and chick. The
second package, building_assets.unitypackage, contains the two barns, one
for each famer. We'll upload them individually.
Importing the game characters
Perform the following steps to load the game characters into your game:
1. Download the character_assets.unitypackage from this book's web page.
2. Launch Unity and open your project.
3. From the top drop-down menu, navigate to Assets | Import Package |
Custom Package. This will display the Import Package dialog window.
4. In the Import Package dialog window, navigate to where you saved the
character assets file. Select that file.
5. Click on the Open button.
6. Unity will automatically decompress the package and then display the
Importing Package dialog window. All of the assets will already be selected.
Click on the Import button. You will see a Hold On progress window that
displays each component as it is imported. Once the import is completed,
you'll see several new objects in the Project view.
[ 56 ]
Chapter 3
You can see that there are now chick, chicken, farmer, farmer boy, pig adult, and
piglet assets. We'll work with these in later chapters.
Save your project.
Importing the buildings
Perform the following steps to load the buildings into your game:
1. Download the building_assets.unitypackage from this book's web page.
2. Launch Unity and open your project.
3. From the top drop-down menu, navigate to Assets | Import Package |
Custom Package. This will display the Import Package dialog window.
4. In the Import Package dialog window, navigate to where you saved the
building assets file. Select that file.
5. Click on the Open button.
6. Unity will automatically decompress the package and then display the
Importing Package dialog window. All of the assets will already be selected.
Click on the Import button. You will see a Hold On progress window that
displays each component as it is imported. Once the import is completed, you'll
see that the barn1 and barn2 assets are now available in the Project view.
7. Save your project.
Using Blender to create assets for
your game
We previously discussed the ability for us to create assets outside of Unity, export
them into a format compatible with Unity, and then import them into our game. In
this section, we'll do just that.
There are several tools that can be used to create 3D objects for use in Unity. One of
the most commonly used is Blender. Blender is a free and open source 3D modeling
program that has an impressive array of capabilities. There are several books and
online tutorials that can teach you how to use Blender to create assets. Teaching you
how to create them from scratch is beyond the scope of this book.
What we do have time to discuss is how to take a Blender object and export it into a
Unity-supported format. Let's do that together by performing the following steps:
1. If you do not already have a copy of Blender on your computer, download a
copy from http://www.blender.org.
2. Download the corn_stalk.blend file from this book's web page.
[ 57 ]
Working with Assets
3. Launch Blender.
4. In Blender, navigate to File | Open to open a file dialog window.
5. Navigate to the corn_stalk.blend file you previously downloaded. Select
the file.
6. Click on the Open Blender File button, which is located in the top-right
corner of the window. You'll now be able to see the object in Blender.
Take a look at the following screenshot:
The preceding screenshot shows how the object looks after it has been created in
Blender. Now, we simply need to export it so we can use it in Unity. To do so,
perform the following steps:
1. Navigate and select File | Export | FBX (.fbx) to export the object to
an .fbx file.
2. Select a file location for the file.
3. Click on the Export FBX button located in the top-right corner of the window.
4. Launch Unity and open your project.
[ 58 ]
Chapter 3
5. Navigate and select Assets | Import New Asset from the drop-down menu.
This brings up the Import New Asset dialog window.
6. Navigate to where you saved the .fbx file. Select the file and click on the
Import button.
7. Close Blender.
8. Save your Unity project.
You'll now see the corn stalk asset listed in the Project view.
Summary
In this chapter, we covered Unity assets and asset packages. You visited the Unity
Asset Store and reviewed what information is available on assets located in the Store.
You gained experience downloading and importing assets into your game. You also
learned a little about how to create 3D objects using Blender, a free and open-source
3D modeling tool.
In the next chapter, you'll animate the game's characters. The animations will include
idle animations for all characters, both human and animal, talk animations for
the farmers. Colt, our player-controlled character, will also receive walk and take
animations. The take animation will be for the harvesting of corn and water. And,
just for fun, we'll give Colt the ability to jump.
[ 59 ]
Animating the Game
Characters
So far, our game's design is complete, our game environment has been created,
and we have imported game characters and other assets into our game. The game
characters we added were the pig, piglet, baby chick, adult chicken, old farmer, and
Colt, our young farmer. Our game characters would be boring if they just stood there
like a rock. We'll breathe life into our characters and game by adding animations to
each of the characters.
We will give each animal two animations so they can have some movement
when they are idle, as well as when they eat. The old farmer will have talk and
idle animations. The young farmer is our player-controlled character, so he will
be able to walk, talk, run, take, and be idle.
After reading this chapter, you will:
•
Understand what Unity animations are
•
Understand what a player controller is
•
Be able to preview animations
•
Be able to animate the game's characters
•
Be able to create an animation clip
Animation basics
Animation is defined as a simulated movement, which is created by displaying a
series of pictures or frames. In Unity, animations are displayed similar to the method
used in movies, which involves displaying of a specific number of progressive
frames each second. We use animations to bring our characters to life.
[ 61 ]
Animating the Game Characters
When a player uses arrow keys or another input device to move the game's main
character around the screen, it is being animated. So, the game is responding to the
user's input and playing the appropriate animation. For example, when the player
holds the left arrow key down, the game's main character walks to the left. This is a
walking animation in Unity.
Animations are typically created by using a 3D modeling tool such as Blender,
3D Studio Max, or Maya. As you will see later in this chapter, we can also create
animations from within Unity.
For our game, we have two primary concerns regarding animation. First, we want
to animate the young famer character so that the user can control where he goes and
what he does. The first thing we need to do is to create a character controller.
Character controllers
There are two types of player characters in games: those controlled by human
players and those controlled by computers. The first type is known as a player
character while the other type is referred to as a non-player character. Player
characters can be almost anything you can imagine. In modern games, player
characters are usually human or humanoid. This is not to say you cannot create
a game in which the player character is an uprooted tree or a rock with seven legs.
For our game, the player character will be a human boy named Colt.
Unity uses a game object called a character controller to enable user controls. There are
two types of character controllers in Unity. The two types are first person controller
and third person controller. The types refer to the user perspective, first or third, used
during the game. Take a look at the following image that shows the player perspective:
[ 62 ]
Chapter 4
With first person controllers, only part of the player's character is visible on screen.
Most games will display hands, arms, fists, weapons, or some combination. The
perspective the game is played is essentially through the character's eyes. Third
person controllers allow the entire character to be seen during gameplay.
First person controller
We will not need a first person controller in our Little Farmer Colt game, but it
is important to understand how to create one for other games you might create
with Unity.
This section provides instructions based on the assumption that you
have worked through the previous chapters. If you get stuck on a
step, refer back to the earlier chapter that covers that step.
To create a first person controller, perform the following steps:
1. Launch Unity.
2. Create a new 3D project.
3. Import the Characters and Environment Asset Packages.
4. Create a new terrain and add a texture to it. This will help you see the first
person controller object in the Scene view.
5. In the Project view, navigate and select Assets | Sample Assets | Characters
| FirstPersonCharacter | Prefabs.
6. In the Project view's second column, select the FPSController object and
drag it to the Scene view. Release the mouse and you will have a first person
controller in your scene:
[ 63 ]
Animating the Game Characters
A cylinder shape represents the first person controller. The controller can be tied
to an avatar so that it looks like an actual character. Because this is a first person
controller, you will not see any part of the character when you put your game in
play mode.
Click on the play button to test the controller in game play mode. You can move the
controller around with the arrow keys.
There is a lot more to the first person controller. If you intend to create a game that
uses this controller, you'll gain great insights in Unity's online documentation. For
more complex games, developers typically create custom controllers.
Creating a third person controller
Unity comes with a third person controller asset as part of the character package. The
avatar associated with this controller is called Ethan.
[ 64 ]
Chapter 4
This is a great avatar to experiment with, but there is no place for Ethan in our game.
To allow players to control the little farmer character, we'll need to implement a third
person controller for him instead of Ethan. To do so, perform the following steps:
1. Launch Unity.
2. Open the game project.
3. Load the scene.
4. Using the transform tools in Scene view, adjust the view of the terrain so we
are looking at the bridge from ground level. This will help you see where to
place the character.
5. In the Project view, select the SampleAssets folder.
[ 65 ]
Animating the Game Characters
6. From the top menu, navigate and select Assets | Import Package |
Characters. The asset package will be decompressed and then the Importing
package dialog window will be displayed. Ensure all items are checked and
then click on the Import button.
7. In the Project view, expand the folders until you see SampleAssets |
Characters | ThirdPersonCharacter | Prefabs. Click on the Prefabs
folder. In the Project view's second column, you will see an object labeled
ThirdPersonController.
8. Click on the ThirdPersonCharacter object and drag it into the Scene view.
Drop the object on top of the bridge.
[ 66 ]
Chapter 4
9. Zoom in on the new object and you will see that it is Ethan encased in a
character controller.
At this point, you can run the game in play mode and use Ethan to explore the
game environment. Next, we'll swap out Ethan for Colt. To do so, perform the
following steps:
1. In the Scene view, expand the ThirdPersonController object. You will see
three items listed, all starting with the name Ethan:
[ 67 ]
Animating the Game Characters
2. Delete the three items that start with the name Ethan. At this point, our third
person controller still exists; it is just lacking an avatar.
3. In Project view, navigate and select Assets | Farmer Boy and then, in the
second column, select the FarmerBoy object.
4. Drag the FarmerBoy object from the Project view to the Hierarchy view and
drop it on top of the ThirdPersonController object:
[ 68 ]
Chapter 4
5. You will now see Colt standing on the bridge, instead of Ethan.
6. Save the scene and the project. You should do this often.
7. The next thing we need to do is to tell Unity which controller to use for the
Animator. In the Hierarchy view, navigate and select ThirdPersonController
| FarmerBoy.
[ 69 ]
Animating the Game Characters
8. In the Inspector view, select the small circle icon to the right of the Controller
text box. This is in the Animator section of the Inspector view.
9. The Select RuntimeAnimatorController window will appear. Click on the
Assets tab and then double-click on the Farmer_Boy item:
[ 70 ]
Chapter 4
10. Select the third person controller that was chosen in the Hierarchy view.
11. In the Inspector view, you will notice that we have Ethan as our avatar.
Although we have already changed this, changing the Runtime Animation
Controller option has changed the setting:
12. So, if you see Ethan listed as the avatar in the Animator section of the
Inspector view, click on the little circle to the right of that field and select
FarmerBoyAvatar from the Select Avatar dialog window.
[ 71 ]
Animating the Game Characters
13. In the Scene view, zoom in on the character so you can see the player
controller. Remember, a light green-framed cylinder represents the player
controller. You'll notice that the cylinder is smaller than Colt. We must make
sure that our character fits inside the character controller.
14. Select the ThirdPersonController option in the Hierarchy view. With
this selected, we will make changes to the Capsule Collider section of the
Inspector view.
15. In the Inspector view, in the Capsule Collider section, change the Center Y
value to 0.8, the Radius value to 1, and the Height value to 6.
16. The Capsule Collider should now completely encapsulate Colt. Zoom in on
Colt in the Scene view to make sure your collider is large enough.
[ 72 ]
Chapter 4
17. We need to make one final change. We'll change Colt's y coordinate so
that he is slightly above the ground. In the Inspector view, change the
Position Y Transform value to 0.2. This will prevent Colt from falling
through the terrain.
You can now put your game into play mode and watch the Colt character come
to life. You can use the arrow keys to rotate him and to have him explore the
game world.
One word of caution: Colt cannot swim, nor can he walk on
water. So, at least for now, I recommend keeping him out of
the water.
In later sections, we'll add more animations and functionality to Colt.
Animating player characters
Our game, like most games, will consist of animated characters. Even if a non-player
character only has a looped idle animation, it is important that they be animated.
Otherwise, the characters will be more of a statue than a character.
[ 73 ]
Animating the Game Characters
Little farmer Colt
Let's continue working on our Colt character and ensure all of his animations work.
By browsing the assets in the Project view, you can see there are five animations
associated with Colt. The animations are idle, run, take, talk, and walk. These
animations have already been created, so we are able to use them in our game.
Some of the animations will simply just seem to work because of the character
controller we used. For example, if you test the game in play mode, you'll see that
our walk animation is responsive to the navigation keys on our keyboard as well as
the WASD keys. Also, although we did not create a jump animation, Colt already
knows how to jump. You can test this by pressing the space bar while in game mode.
[ 74 ]
Chapter 4
This is not magic; rather, it is a benefit of using the Unity game engine's third person
character controller. Some animations will be part of the character by default, others
we will create in external tools, and some we will create within Unity.
Old farmer character
We can add the old farmer character to our game by simply dragging the object from
Project view into Scene view. We are not ready to do that just yet, but we do want to
review his animations. By navigating through the Project view assets, you will notice
that the old farmer has idle, talk, and walk animations. Although we will not use the
walk animation for our game, it is included so you can expand the game after you
finish working through the instructions provided in this book.
Farm animals
Browsing the remaining assets reveals that the chick, chicken, pig adult, and piglet
each have an idle and eat animation. There is nothing more for these animals to do
than stand around and eat. As you'll see later in this book, we will add scripts to the
animals so that we know how much they eat and grow.
Previewing animations
When our game is being played, the characters will all have idle animations that play
when the character is idle. The eat animations will be played when there is food to
eat or water to drink. Colt's walk animation will be played in response to keyboard
or mouse input. We'll add scripts that handle Colt's "take" animation, as well as the
talk animations for the two farmers.
Unity provides us with the ability to preview animations without having to complete
the game first and add our scripts. Our game has 16 animations, so being able to
preview them without programming them into our game is a great time saver.
[ 75 ]
Animating the Game Characters
Let's preview Colt's animations. The steps are the same for all animations. In the
following steps, we'll focus on the take animation:
1. In the Project view, navigate and select Assets | Farmer Boy |
FarmerBoy_Take.
2. In the Inspector view, click on the Animations tab, as shown in the
following screenshot:
3. In the Inspector view, click and drag the expand section bar upward
so that the window with Colt in is large enough to view, as shown in
the following screenshot:
4. With the preview window large enough to view, click on the play
button in the top-left corner of the preview window. You will now
see the animation play.
[ 76 ]
Chapter 4
Now that you know how to preview animations in the game project, you
should check the remaining 15 animations so you know how they work.
In the next section, we will create our own animation by using Unity's
built-in animation clip creation functionality.
Creating animation clips
Animation clips are small animation sequences in Unity. They can be very small,
isolated pieces of motion. For example, walking is a valid animation. Associated
animation clips will be walk right, walk left, look up, look down, bounce, and more.
Multiple animation clips can make up a single animation.
Unity has internal capabilities to create custom animation clips. This represents a
great and relatively quick way of building an animation clip. Perform the following
steps to create a short animation clip for our Colt character:
1. Launch Unity.
2. Open the Little Farmer Colt project and scene.
3. In Hierarchy view, select the ThirdPersonController object.
[ 77 ]
Animating the Game Characters
4. In the Scene view, zoom in as necessary so that you can clearly see the
Colt character.
5. Using the drop-down menu, navigate and select Window | Animation. This
will bring up the Animation window. You'll see that the Colt character has a
lot of animation clips listed in the window.
You'll notice in the top-left section of the Animation window, there are play controls
and just beneath them, the Idle_boy animation is selected. If you were to click on
the play button in the top-left corner of the Animation window, you would see
the Idle_boy animation clip play in the Scene view. This is another method of
previewing animation clips.
[ 78 ]
Chapter 4
Now, perform the following steps:
1. In the Animation window, click on the up/down ( ) button to the right of
the Idle_boy (Read-Only) text. This will bring up a list of animations for the
current character, as shown in the following screenshot:
2. At the bottom of the current pop-up dialog, select [Create New Clip]. This
will bring up a Create New Animation dialog window. The dialog window
prompts you for a name of the new animation and a place to store it. Name the
animation Wave_boy, accept all other defaults, and click on the Save button.
3. The Animation window now has the Wave_boy animation selected and no
animation clips are associated with it yet:
4. If necessary, move the Animation window so that it does not obstruct your
view of the Scene view.
5. Click on the record (
) button. Once this button is clicked, you are ready to
start recording the new animation. You'll notice that the record button is now
highlighted in red and there is a vertical red line in the timeline portion of the
Animation window.
[ 79 ]
Animating the Game Characters
6. Click on the Add Property button in the Animation window.
7. Expand the Transform section of the pop-up dialog window, as shown in the
following screenshot:
8. Click on the plus symbol (
) to the right of Transform | Position. This
adds a starting position to our animation. If the character is not standing on
the ground, use the transform tools as needed.
9. We have a starting position, now we'll advance the timeline to the 2-second
mark. To do this, drag the vertical red line in the timeline to the right.
If you do not see enough granularity in the timeline, you
can expand the Animation window.
An alternative method to adjusting the timeline is to type the desired
position directly into the frames text box:
[ 80 ]
Chapter 4
10. In the Animation window, navigate and select Transform | Rotation and
then click on the plus icon. This adds another action to the animation.
11. In Scene view, slightly rotate the character to the right.
12. Move the timeline to the 4-second mark.
13. Click on the Add Property button in the Animation window.
14. Navigate and select Character1_Reference | Transform | Rotation and then
click on the plus icon.
15. In Scene view, slightly rotate the character to the left.
16. In the Animation window, click on the play button to test the animation.
It might not look much like a wave, but the character does move back and
forth. This is a great start to a wave animation.
17. Click on the record button to stop the recording.
18. Close the Animation window.
19. You'll now see the animation clip listed in Project view.
Summary
In this chapter, you learned how to add life to your game with the use of animations.
You gained experience with first and third person controllers and learned about
game player perspectives. This chapter guided you through the process of
customizing the third person controller so our game would feature our little farmer
character. You previewed animations and even created your own custom animation.
In the next chapter, you will be introduced to scripting with Unity. You'll learn
how to use a tool called MonoDevelop and how to access your game's scripts.
Specifically, we'll script our game so that, by the end of the chapter, you will
be able to play a working version.
[ 81 ]
Scripting the Game
Our game is really taking shape. So far, we've completed the game design, game
environment, player character, non-player characters, and animations. That is a lot of
work for just four chapters. There are a few things we need to accomplish in order to
complete our game. First on this list is scripting the game.
In this chapter, we will write scripts for:
•
Managing the amount of water and corn that Colt collects
•
Monitoring how much water and corn each farm animal is given
•
Managing when a piglet becomes a pig and when a baby chick becomes an
adult chicken
•
Managing when pigs and chickens reach blue ribbon status
Before we dive right into scripting, I'll provide a C# programming primer for those
that need it. We'll also review how scripting is accomplished in Unity, where to find
scripts, and how to use MonoDevelop.
After reading this chapter, you will:
•
Understand the fundamentals of C#
•
Be able to use MonoDevelop to create and edit scripts
•
Be able to locate scripts in a Unity project
•
Understand how to read Unity scripts
•
Be able to create custom scripts
Throughout this chapter, you will see the terms scripting
and programming used interchangeably. In the context of
this chapter, they are the same thing.
[ 83 ]
Scripting the Game
C# programming primer
C# is a comprehensive programming language. Teaching you how to use this
language is beyond the scope of this book. I'll provide enough information in this
section so that you can understand the custom scripts we'll be writing for our game.
For a deeper understanding of how to program using the
C# language, you can use one of the many books available
from Packt Publishing on the subject.
C# is both a function-based and object-oriented language. Functions are reusable
sections of code that we script. For example, if we create a script called feedPig, it
might handle transferring water and corn from Colt to a pig. Since we have multiple
pigs in our game, this function would probably get used a lot.
As I've mentioned, C# is also an object-oriented programming (OOP) language.
OOP languages use classes, which are sets of data and functions. If we have a
babyChick class, for example, that class can hold data on how much corn the baby
chick has eaten. That same class can perform the operation of growing the chick into
an adult chicken.
Syntax
Programming language syntax is similar to written sentence structure and grammar.
When we program in any language, we must be aware of how to structure our
syntax. To illustrate these points, let's consider the following line of C# code:
int cornAmount = 0;
The following is a list of what that line of code is about:
•
On the left side of the equals sign is int cornAmount. A new variable
(cornAmount) is being declared as an integer. So, int followed by a variable
name is how we declare an integer.
•
The = 0 attribute assigns a value to the integer. In this case, the value is zero.
•
The end of the line of code is signified by the semicolon (;)
The following are a few tips to remember regarding programming in C#:
•
Spaces do not generally matter unless they are part of a string. For the most
part, extra spaces are simply ignored by C#.
•
Case (uppercase and lowercase) makes a difference. For example,
cornAmount and cornamount are not the same.
[ 84 ]
Chapter 5
Naming conventions
It is helpful to use a naming convention system when programming. There are a
couple of reasons for doing this. First, it makes the code easier to read. It also makes
it easier for people other than the original programmer to quickly understand the
code. A third benefit of using a naming convention is so that you can program faster.
The following are some examples of standard naming conventions.
Class, function, and method names
Names of classes, functions, and methods should have the first letter of each
word capitalized. In the following example, EatCorn, Start, and Update
follow this convention:
public class EatCorn : MonoBehavior {
void Start ( ) {
}
void Update ( ) {
}
}
Camel case
Variables and arguments use the convention known as camelCase where the first
word is lower case and each subsequent word starts with an uppercase letter. The
following are three examples:
pigletGrowth
coltCornHolding
chickenEatCorn
Abbreviations
Abbreviations should be avoided when programming, with a few exceptions. You've
already seen me use int for integer. In addition to this being an abbreviation, it is a key
word in C#. The following are some examples that show when not to use abbreviations:
Bad Example
p1CrnCon
cknay
Good Example
piglet1CornConsumed
chickenArray
[ 85 ]
Scripting the Game
Bad Example
plyH20Hld
Good Example
playerWaterHeld
The point of this convention is to make the scripts more readable.
Special characters
Special characters such as dashes and underscores should generally be avoided. They
can increase the number of possible mistakes that could be made when scripting. So,
use chickenArray instead of chicken_Array. Of course, if you are comfortable using
dashes and underscores, I recommend that you maintain consistency in their use.
Data types
There are over a dozen types of data used in the C# programming language and you
can even create your own. The following are the ones we'll use in our Little Farmer
Colt game:
Data Type
Description
Boolean (bool)
True or False
Integer (int)
Whole number between -2,147,483,648 and 2,147,483,647
String (string)
String values such as "Hello Farmer Colt"
Array
You can think of arrays as spreadsheets of data in memory
Using MonoDevelop
When we are scripting, we need to use some sort of editor. We could use a standard
text editor and achieve great results. But instead of using a text editor, programmers
typically use a scripting editor. Scripting editors use color-coding that make the code
more readable. They also provide spacing that makes looking at code blocks easier.
The good news is that Unity comes with MonoDevelop. It can handle all of Unity's
supported languages (C#, JavaScript, and Boo). MonoDevelop has code completion
support and other tools that make scripting more efficient.
You'll gain experience with MonoDevelop in the next section.
[ 86 ]
Chapter 5
Scripting with C# in Unity
Let's get our feet wet by jumping right in and start scripting. The following are the
steps to create a new script in Unity using C#:
1. Launch Unity.
2. Open the game project.
3. From the top menu, navigate and select Assets | Create | C# Script.
4. You'll see the script in the Project view and you'll be in script name edit mode.
Name the script testScript. We'll delete this script when we are finished:
The script is now visible in the Inspector view.
[ 87 ]
Scripting the Game
5. In the Project view, under Assets, double-click on the script. This will launch
MonoDevelop and provide you with the ability to edit the script:
6. Add the following line of code in MonoDevelop in line 8:
print("Hello Little Farmer Colt!");
7. Your script should now match the following screenshot:
8. In the MonoDevelop top menu, navigate and select File | Save or File |
Save All.
9. Close the MonoDevelop window.
[ 88 ]
Chapter 5
10. Review the script using the Inspector view to ensure that your changes were
saved, as shown in the following screenshot:
11. Click on the Main Camera option in the Hierarchy view.
12. In the Project view, single-click on the script and drag it to the Main
Camera option in Hierarchy view. This attaches the script to the Main
Camera option. For scripts to be used in your game, they must be attached
to a game object.
13. With the Main Camera option selected in Hierarchy view, you'll see the
script listed as a component in the Inspector view:
14. Next, click on the play button. The script was executed and the output
message was written to Unity's console pane. You'll find this in the
lower-left corner of the Unity interface:
[ 89 ]
Scripting the Game
You can also access the output console by navigating and selecting the Window |
Console menu option. This will bring up the console in a separate window, as shown
in the following screenshot:
If you followed these steps using the Little Farmer Colt game project, you'll want
to delete the script. The following are the steps to completely delete the test script
we created:
1. In Hierarchy view, select the Main Camera object.
2. In Inspector view, click on the cogwheel to the right of the script object.
3. Select Remove Component.
4. In the Project view, right-click on the script. Click on Delete.
5. Click on the Delete button in the pop-up window, as shown in the
following screenshot:
[ 90 ]
Chapter 5
Start and update functions
You probably noticed that when we first created our C# script, the script shell had
two functions:
void Start () {
void Update () {
}
}
We put our line of code in the Start function so that it would run the first time the
object it is attached to is initiated. The Main Camera option is initiated when the
game starts.
If we print our statement in the Update function, it will be run every frame. Our
game is set for several frames per second, so that would be a lot of unnecessary
output and processing.
Scripting example
Let's look at a larger script to complete our overview of scripting in Unity. The script
you see in the following code is used to get user input via keyboard buttons. It is
okay if you do not fully understand this script. It is presented here so that you can
gain an appreciation for how scripts look in Unity. This is not something you need to
type or add to your game:
using UnityEngine;
using System.Collections;
public class ButtonInput : MonoBehaviour
{
public GUITexture graphic;
public Texture2D standard;
public Texture2D downgfx;
public Texture2D upgfx;
public Texture2D heldgfx;
void Start()
{
graphic.texture = standard;
}
void Update ()
{
bool down = Input.GetButtonDown("Jump");
bool held = Input.GetButton("Jump");
[ 91 ]
Scripting the Game
bool up = Input.GetButtonUp("Jump");
if(down)
{
graphic.texture
}
else if(held)
{
graphic.texture
}
else if(up)
{
graphic.texture
}
else
{
graphic.texture
}
= downgfx;
= heldgfx;
= upgfx;
= standard;
guiText.text = " " + down + "\n " + held + "\n " + up;
}
}
Downloading the example code
You can download the example code files for all
Packt books you have purchased from your account
at http://www.packtpub.com. If you purchased
this book elsewhere, you can visit http://www.
packtpub.com/support and register to have the
files e-mailed directly to you.
This script contains a ButtonInput class that has a Start and an Update method.
The Start function is executed once the game first starts. The Update method is
executed in each frame of the game while it is running. This function is how we
would detect the button input associated with "Jump."
As you can probably tell, there are four possible states for this button: down, held,
up, and nothing. We do not need to look for the button's nothing state as that is the
default—that the player is not touching the button. The down, held, and up states are
self-explanatory.
The code is offered here so you can get used to looking at it. Once you start learning
how to program in C#, this code will be easier to read.
[ 92 ]
Chapter 5
Unity scripting assets
You already have experience with Unity's Asset Store and might already have
noticed that scripting is one of the asset categories in the store. There are thousands
of scripts for free or paid that are readily available in the Asset Store.
The following screenshot shows a sample free script from Unity Technologies, the
folks that created Unity:
The Lens Flares scripting asset includes sixteen lens flares that you can use in your
games. Because the asset is free, you merely need to click on the Open in Unity button.
You can save a lot of time by using pre-existing scripts.
Now that you have a basic understanding of the C# language and how scripts are
used in Unity, it is time to apply this to our game. We'll do that in the next section.
Scripting our game
Before we dive into scripting our game, we need to do a little planning. We will look
at what we want to script and what events we want to trigger those scripts. We'll
also determine what our data needs are. Since our game is relatively simple, this will
not be a difficult set of tasks.
[ 93 ]
Scripting the Game
Script planning
Let's review our game's design to determine what needs to be scripted. We know
that the primary action a user will take is to navigate the player character in the game
environment. As you've already seen, this has been taken care of for us by Unity.
This functionality is already in place with no other programming required.
We'll need to plan for events regarding the player gathering corn and water and
feeding the animals.
Gathering corn
We've designed our game so that the player character can collect corn and feed it
to the farm animals. The way we will accomplish this is to detect when the player
character and the corn game objects collide. While that collision is taking place, if the
player uses the take command, then corn will be gathered. The following flowchart
shows this more clearly:
[ 94 ]
Chapter 5
So, we know that we have three scripting tasks to complete:
1. Add a collider so that we know when the player controller and corn stalk
objects are colliding.
2. Give the player the ability to evoke the take command. We'll program this to
the T keyboard button. If we were making this a game for mobile devices, we
would need a non-keyboard solution.
3. Determine whether the player is using the take command while the collision
is occurring.
4. Keep track of how much corn the player has.
Gathering water
Gathering water is similar to gathering corn. We'll use a listener to detect the
collision and determine whether the player has evoked the take command.
Then, we'll need to track how much water the player has.
Our scripting tasks for gathering water are:
1. Add a collider for the collision.
2. Determine whether the player is using the take command during
the collision.
3. Keep track of how much water the player has.
Feeding piglets
The game will start with 10 piglets on Colt's farm. In order for them to grow, they
will need water and corn. We will not program any consequences for not feeding the
piglets, but will not reward this inaction either. We will set our piglets to grow into
adult pigs after they have been given five units of corn and five units of water.
[ 95 ]
Scripting the Game
The following diagram shows how the process will work:
[ 96 ]
Chapter 5
It might look like a complicated process, but feeding the piglets will be an easy
scripting task.
Feeding baby chicks
Feeding the baby chicks will work exactly as the process works for the piglets. We'll
let the baby chicks grow into adult chickens after they have 5 units of water and 5
units of corn.
For both sets of animals, we will handle the transformation from child to adult in the
same manner. When a piglet has been given 5 units of corn and 5 units of water, we
will reveal an adult pig at the same X, Y, and Z coordinates of the piglet. Then, we
will hide the piglet. This will show a quick change. We'll do the same thing to turn a
baby chick into an adult chicken.
Feeding pigs
Once a piglet has been transformed into an adult pig, the pig will start with a count
of zero units of corn and zero units of water. The pig will need 10 units of corn and
10 units of water to become a blue ribbon pig. The pigs can consume water and corn
beyond 10 units each, so we will not need to limit them.
Achieving blue ribbon status for a specific number of pigs and chickens will be the
player's goal.
To script the feeding of the pigs, we'll mimic what we did for the piglets.
Feeding adult chickens
Feeding adult chickens will work in the same manner as for the adult pigs. Chickens
will achieve blue ribbon status once they have been fed 10 units each of water and
corn. Again, there will be no limit on their consumption.
Data requirements
It is important for us to think about what data requirements our game will require
before we start programming. We start by conceptualizing at a high level. For
example, we know we need to track information about the piglets, pigs, baby chicks,
and adult chickens. Mainly, we need to know how much they consume. We also
need to keep track of how much water and corn Colt gathers and has.
We'll take a closer look at our data requirements and decide what to name
our variables.
[ 97 ]
Scripting the Game
All about the pigs
There will be 10 piglets and 10 adult pigs. For each of those animals, we need to track
how many units of corn and water they have been provided. The following table
shows the ranges for each data element:
Animal
Visible
Corn
Water
piglet1
Y or N
0, 1, 2, 3 . . .
0, 1, 2, 3 . . .
pig1
Y or N
0, 1, 2, 3 . . .
0, 1, 2, 3 . . .
Based on what you learned earlier in this chapter, you can probably guess what
types of data we'll use for each element. The visible element will be Boolean and
the corn and water will be integers.
Since this data lends itself well to table, we will use two arrays. One array will be for
piglets and the other for pigs. Because arrays use a single type of data, we'll use 0
and 1 to represent non-visible and visible instead of the Boolean data type. The first
column will be the sequential number of the animal, so the values will be 0, 1, 2, 3, 4,
5, 6, 7, 8, and 9.
The second column will indicate whether the piglet is visible. A zero (0) will indicate
the piglet is not visible and a one (1) will indicate that the piglet is visible. The third
and fourth columns will represent the number of units of corn and water respectively.
The following is how we will script the creation of the piglet array:
[ 98 ]
Chapter 5
Line 6 of the Arrays script is how we create an array with 10 rows and three
columns. Remember, arrays start with zero, so a 10 by 3 array would look as follows:
In lines 10 through 15, we use a for loop to populate the array with initial data. We
start by looping through each row of the array starting with zero and ending with
nine. Lines 12, 13, and 14 put values into the array. As you can probably see, the
first column is set to one to indicate that the piglet is visible. The next two columns
indicate that there is zero corn and zero water units.
To see this in action, you can add the following line in between the current lines 14
and 15:
Debug.Log ("Piglet " + i + "\t" + pigletArray[i,0] + "\t" +
pigletArray[i, 1] + "\t" + pigletArray[i, 2]);
When you save the script, you'll need to drag it to the Main Camera option as we did
earlier in this chapter. Now, let the game run and watch the output console. You'll
notice that there are ten piglets, each with a "1" in the first column, followed by zeros
in the remaining two columns:
[ 99 ]
Scripting the Game
Now, let's modify the Array script to include the adult pigs as well. As you can see
with the script in the following screenshot, we essentially replicated what we did
for the piglet to take care of the pig-related data needs. We changed pigletArray to
pigArray and set the second column to zero instead of one because the pigs will not
initially be visible.
Chicks and chickens
Our baby chicks and adult chickens have the same data requirements as their Suidae
farm companions. We'll replicate the lines of code we wrote for the piglets and pigs
to take care of our feathered farm animals:
Suidae is the scientific name for the pig family.
[ 100 ]
Chapter 5
We now have four arrays, one for each type of animal.
Corn and water
Our game environment has an unlimited amount of corn and water. When the player
gathers corn, no corn is removed from the field. When the player gathers water, no
water is actually removed from the river. In a more complex game, we might take a
different approach.
[ 101 ]
Scripting the Game
So, we merely need to create integers for corn and water. Let's create a new script
and name it GameData. You can enter the script based on the next screenshot and
then attach it to the Main Camera game object:
On lines 6 and 7 of the script, we created public integers of corn and water. We
declared the variables and set their initial values with one line of code for each
variable. By making these variables public, we can see and change the values
in the Inspector view:
You can see that the arrays values are not accessible in the Inspector view, but the
GameData values are. This is because we declared the GameData variables of corn
and water as public. The variables declared in the Arrays script are private.
[ 102 ]
Chapter 5
Initializing our data
We have three basic groups of data for our game. The first set is for the piglets and
adult pigs. The second set of data is for the baby chicks and adult chickens. Both
of these data groups were scripted in the Arrays script. Within that script, the data
declarations and initial values were in the Start function, which means that part of
the script will be executed when the object it is attached to is first initialized. Since
that script is attached to the game's Main Camera option, it will be run when the
game first loads.
The corn and water variables, the third group of data, are set in the Start function of
the GameData script, which is also attached to the Main Camera option.
The Inspector view shows script names differently than the
Project view. For example, we created a GameData script and it
is displayed in the Project view correctly. In the Inspector view,
it shows up with a space in between the two words. All variables
displayed in the Inspector view will also show up with spaces. Do
not be alarmed. Instead, just be aware. It has no impact on the game.
Selective scripts
You can download the full game from the book's web page and review all of the
game's scripts. In this section, I'll share several scripts from the game with some
explanatory text to help you read the scripts.
Selective script – global variables
The following script is the GameData script that we previously created, but with
some important changes. You'll remember that we attached this script to the Main
Camera option in the Hierarchy view. Scripts must be attached to game objects or
they will not be run.
This script sets up the water and corn variables so that they can be used globally.
Each variable is first declared as a private static int, with an underscore
preceding the variable name. These are our master variables. We can use GameData.
water and GameData.corn to retrieve the current value of the variables.
[ 103 ]
Scripting the Game
To make a change to the variables, we can easily increment or decrement them by
using a line of code such as GameData.water = GameData.water +2; or GameData.
water +=2;:
using UnityEngine;
using System.Collections;
public class GameData : MonoBehaviour {
private static int _water = 0;
private static int _corn = 0;
public static int water
{
get { return _water; }
set { _water = value; }
}
public static int corn
{
get { return _corn; }
set { _corn = value; }
}
}
Selective script – evoking the take animation
Our plan was to enable the player to use the T (uppercase or lowercase) keyboard
key to evoke the take animation. The following script does a couple of things to
include detecting when the user pressed the T keyboard key. That is done by using
the conditional if attribute and evaluating (Input.GetKeyDown (KeyCode.T)).
If the player did press the T key, the take animation is played. This is accomplished
by first declaring the anim attribute as a variable type of Animator. Next, we create an
integer named takeHash and set the value to the take animation with = Animator.
StringToHash ("Take"). Now, we can simply reference the animation with anim.
Play (takeHash);:
using UnityEngine;
using System.Collections;
public class Take : MonoBehaviour {
Animator anim;
int takeHash = Animator.StringToHash ("Take");
void Start () {
[ 104 ]
Chapter 5
anim = GetComponent<Animator> ();
}
void Update () {
if (Input.GetKeyDown (KeyCode.T)) {
anim.Play (takeHash);
GameData.water = GameData.water +1;
Debug.Log (GameData.water);
}
}
}
Selective script – feeding the farm animals
Our game will detect when the player-controlled character, Colt, collides with an
animal. To do this, we add a sphere collider to each animal. The following are the
steps to accomplish that:
1. Select the farm animal in the Hierarchy view.
2. From the top menu, navigate and select Component | Physics | Sphere
Collider. This will create a sphere around the animal.
3. In the Inspector view, adjust the Radius of the Sphere Collider so that the
animal is contained within the sphere, as shown in the following screenshot:
4. Next, in the Sphere Collider section of the Inspector panel, we need to select
the Is Trigger checkbox:
[ 105 ]
Scripting the Game
5. Now, we'll script the collider. Create a new script with the Assets | Create
| C# Script menu selection. Name the script FeedChicken, or give it a more
appropriate name if you have a different farm animal selected.
6. Edit the script so that it matches the following:
using UnityEngine;
using System.Collections;
public class FeedChicken : MonoBehaviour {
void OnTriggerEnter(Collider other) {
if (GameData.water > 0) {
GameData.water = GameData.water - 1;
// add water to chicken's holdings
}
if (GameData.corn > 0) {
GameData.corn = GameData.corn - 1;
// add corn to chicken's holdings
}
}
}
7. Our last step is to assign the script to the game object. With the animal object
selected in the Hierarchy view, navigate and select the Component | Scripts
| Feed Chicken menu choice. This will assign the script to the game object.
Previously, you did this by dragging the script from the Project view onto
the game object in the Hierarchy view. Both methods work.
You can program one each of the four farm animals and
then duplicate them. This will save you a lot of time.
Organizing scripts
If you are working on large game projects, you might find the number of
scripts difficult to manage. There are a couple of tactics you can use to keep
your scripts manageable.
The first, and perhaps the easiest, approach is to simply create a scripts folder
in Project view and keep all of your scripts there. Of course, if you have several
dozen or more scripts, you might want to use a folder structure to keep things
even more organized.
[ 106 ]
Chapter 5
A second approach is to preface each script file with an identifiable string, such
as script_. With this schema, our FeedChicken.cs script would be named
script_FeedChicken.cs.
In the Project view, there is a list of four Favorites, each proceeded with a search icon.
Clicking on the All Scripts favorites will result in a list of all scripts in the project.
Summary
In this chapter, you learned about scripting with C# in Unity. You gained a cursory
understanding of C# fundamentals including syntax and naming conventions. You
were guided through the use of MonoDevelop so that you can edit scripts by using
the code editor that comes with Unity. The chapter provided insights on how to
create scripts and how to attach them to game objects. Using a hands-on approach,
you were guided through the creation of your first C# script in our game.
In the next chapter, we'll add a graphic user interface to our game. We'll explore
Unity 5's new UI system. We will create and script a full-screen navigational menu,
a heads-up display, and a minimap. By the end of the next chapter, you will have
created a professional-looking game with a full set of graphic user interface features.
[ 107 ]
Adding a Graphical
User Interface
Our game is nearly complete. One feature that players expect is a graphical user
interface (GUI). That is, the set of images, text, and buttons that a player interacts
with during the game. We do not want to disappoint or alienate our users, so we'll
add some key GUI components to help professionalize our game.
This chapter begins with an overview of Unity 5's User Interface (UI) system,
followed by a look at game navigation. Also in this chapter, we will create the
following GUI components:
•
Heads-up display (HUD)
•
Minimap
•
Full-screen navigation navigation
Before we start building our GUI, I'll cover the importance of GUI components and
Unity's UI tools.
After reading this chapter, you will:
•
Understand the significance of GUIs
•
Understand Unity 5's UI system
•
Be able to create HUD
•
Be able to create minimaps
•
Be able to create full-screen navigational menus
[ 109 ]
Adding a Graphical User Interface
An overview of GUI
A GUI is a collection of visual components such as text, buttons, and images that
facilitates a user's interaction with software. GUIs are also used to provide feedback
to players. In the case of our game, the GUI allows players to interact with our game.
Without a GUI, the user would have no visual indication of how to use the game.
Imagine software without any on-screen indicators of how to use the software. The
following image shows how early user interfaces were anything but intuitive:
We use GUIs all the time and might not pay too close attention to them, unless they
are poorly designed. If you've ever tried to figure out how to use an app on your
Smartphone or could not figure out how to perform a specific action with desktop
software, you've most likely encountered a poorly designed GUI.
Functions of a GUI
Our goal is to create a GUI for our game that both informs the user and allows
interaction between the game and the user. To that end, GUIs have two primary
purposes: feedback and control. Feedback is generated by the game to the user and
control is given to the user and managed by user input. Let's look at each of these
more closely.
[ 110 ]
Chapter 6
Feedback
Feedback can come in many forms. The most common forms of game feedback are
visual and audio. Visual feedback can be something as simple as a text on a game
screen. An example would be a game player's current score being ever-present on
the game screen. Games that include dialog systems where the player interacts with
non-player characters (NPC) usually have text feedback on the screen that informs
the user what the NPC's responses are. Visual feedback can also be non-textual, such
as smoke, fire, explosions, or other graphic effects.
Audio feedback can be as simple as a click sound when the user clicks or taps
on a button or as complex as a radar ping when an enemy submarine is detected
on long-distance sonar scans. You can probably think of all the audio feedback your
favorite game provides. When you run your cart over a coin, an audio sound effect
is played, so there is no question that you earned the coin. If you take a moment
to consider all of the audio feedback you are exposed to in games, you'll begin to
appreciate the significance of it.
Less typical feedback includes device vibration, which is sometimes used with
smartphone applications and console games. Some attractions have taken feedback
to another level through seat movement and vibration, dispensing liquid and vapor,
and introducing chemicals that provide olfactory input.
We'll include the following feedback GUI elements for our Little Farmer Colt game:
•
The number of units of corn Colt currently has
•
The number of units of corn Colt has gathered in total
•
The number of units of water Colt currently has
•
The number of units of water Colt has gathered in total
•
The number of piglets, pigs, and blue ribbon pigs currently on the farm
•
The number of chicks, chickens, and blue ribbon chickens currently on
the farm
[ 111 ]
Adding a Graphical User Interface
The following mockup indicates how we will layout the aforementioned GUI
elements. You'll note in the mockup that only the top and bottom portions of the
screen are represented:
Control
Giving players control of the game is the second function of GUIs. There is a wide
gambit of types of control. The most simple is using buttons or menus in a game. A
game might have a graphical icon of a backpack that, when clicked on, gives the user
access to the inventory management system of a game.
Control seems like an easy concept, and it is. Interestingly, most popular console
games lack good GUI interfaces, especially when it comes to control. If you play
console games, think about how many times you have to refer to the printed or ingame manual. Do you intuitively know all of the controller key mappings? How do
you jump, switch weapons, crotch, throw a grenade, or go into stealth mode? In the
defense of the game studios that publish these games, there is a lot of control and it
can be difficult to make them intuitive.
By extension, control is often physical, in addition to graphical. Physical components
of control include keyboards, mouse, trackballs, console controllers, microphones,
and other devices.
We'll include the following control GUI elements for our Little Farmer Colt game:
•
Keyboard arrow keys control Colt
•
Keyboard space bar jumps Colt
•
Keyboard T evokes the take animation and function
•
Full-screen game navigation buttons
[ 112 ]
Chapter 6
Feedback and Control
Feedback and control GUI elements are often paired. When you click or tap a button,
it usually has both visual and audio effects, as well as executing the user's action.
When you click on (control) a treasure chest, it opens (visual feedback) and you hear
the creak of the old wooden hinges (audio feedback). This example shows the power
of using adding feedback to control actions.
Game Layers
At a primitive level, there are three layers to every game. The core or base level is
the Game Layer. This is your game and, in context of this book, the Little Farmer Colt
game. The top layer is the User Layer; this is the actual person playing your game.
So, it is the layer in between—the GUI Layer that serves as an intermediary between
a game and its player. The following figure shows the three layers:
It becomes clear that designing and developing intuitive and well-functioning GUIs
is important to a game's functionality, the user's experience, and a game's success.
[ 113 ]
Adding a Graphical User Interface
Unity 5's UI system
Unity's UI system has recently been re-engineered and is now more powerful than
ever. Perhaps the most important concept to grasp is the Canvas object. All UI
elements are contained in a canvas. Projects and scenes can have more than one
canvas. You can think of a canvas as a container for UI elements.
Canvas
To create a canvas, you simply navigate and select GameObject | UI | Canvas from
the drop-down menu. You can see from the GameObject | UI menu pop-up that
there are 11 different UI elements, as shown in the following screenshot:
Alternatively, you can create your first UI element, such as a button, and Unity will
automatically create a canvas for you and add it to your Hierarchy view. When you
create subsequent UI elements, simply highlight the canvas in the Hierarchy view
and then navigate to GameObject | UI menu to select a new UI element.
The following table is a brief description of each of the UI elements:
UI element
Description
Panel
A frame object.
Button
A standard button that can be clicked.
Text
Text with standard text formatting.
Image
Images can be simple, sliced, tiled, and filled.
Raw image
Texture file.
Slider
Slider with min and max values.
Scrollbar
Scrollbar with values between 0 and 1.
Toggle
Standard checkbox; can also be grouped.
[ 114 ]
Chapter 6
UI element
Description
Input field
Text input field.
Canvas
The game object container for UI elements.
Event system
Allows us to trigger scripts from UI elements. An
event system is automatically created when you
create a canvas.
You can have multiple canvases in your game. As you start building larger games,
you'll likely find a use for more than one canvas.
Render mode
There are a few settings in the Inspector view that you should be aware of regarding
your canvas game object. The first setting is the Render Mode. There are three
settings: Screen Space – Overlay, Screen Space – Camera, and World Space, as
shown in the following image:
This render mode is the one we'll use in our game. I'll show you how to do that later
in the chapter. In this render mode, the canvas is automatically resized when the user
changes the size or resolution of the game screen. The second render mode, Screen
Space – Camera, has a plane distance property that determines how far the canvas is
rendered from the camera. The third render mode is World Space. This mode gives
you the most control and can be manipulated much like any other game object.
I recommend experimenting with different render modes so that you know which
one you like best and when to use each one.
Creating a GUI
Creating a GUI in Unity is a relatively easy task. We first create a canvas, or have
Unity create it for us, when we create our first UI element. Next, we simply add
the desired UI elements to our canvas. Once all the necessary elements are in your
canvas, you can arrange and format them.
[ 115 ]
Adding a Graphical User Interface
It is often best to switch to 2D mode in the Scene view when placing the UI elements
on the canvas. This simply makes the task a bit easier:
If you have used earlier versions of Unity, you'll notice that
several things have changed regarding creating and referencing
GUI elements. For example, you'll need to include the using
UnityEngine.UI; statement before referencing UI components.
Also, instead of referencing GUI text as public GUIText
waterHeld;, you now use public Text waterHeld;.
HUD
A game's HUD is graphical and textual information available to the user at all times.
No action should be required of the user, other than to look at a specific region of the
screen to read the displays. For example, if you are playing a car-racing game, you
might have an odometer, speedometer, compass, fuel tank level, air pressure, and
other visual indicators always present on the screen.
Our game will have these on-screen elements:
•
The number of units of corn Colt currently has
•
The number of units of corn Colt has gathered in total
•
The number of units of water Colt currently has
•
The number of units of water Colt has gathered in total
•
The number of piglets, pigs, and blue ribbon pigs currently on the farm
•
The number of chicks, chickens, and blue ribbon chickens currently on
the farm
Creating an HUD
The following are the steps to create our game's HUD:
1. Open the game project and load the scene.
2. Navigate and select the GameObject | UI | Text option from the drop-down
menu. This will result in a Canvas game object being added to the Hierarchy
view, along with a text child item. Rename this item as HUD_Line_1, as
shown in the following screenshot:
[ 116 ]
Chapter 6
3. Select HUD_Line_1 in the Hierarchy view. Then, in the Inspector view,
change the Text to "Units Held / Gathered".
4. In the Inspector view, change the Font Size value to 24.
5. Still in the Inspector view, change the Horizontal Overflow option from
Wrap to Overflow, as shown in the following screenshot:
6. Zoom out in the Scene view until you can see the GUI Canvas. Use
the transform tools to place the HUD_Line_1 GUI element in the top-left
corner of the screen.
Depending on how you are viewing the scene in the Scene view,
you might need to use the hand tool to rotate the scene. So, if your
GUI text appears backwards, just rotate the scene until it is correct.
[ 117 ]
Adding a Graphical User Interface
7. Navigate and select the GameObject | UI | Text option from the drop-down
menu. This will add a second text element to the GUI. Rename this item as
HUD_Line_2.
8. Select HUD_Line_2 in the Hierarchy view. Then, in the Inspector view,
change the Text to "Corn: 000 / 0000".
9. In the Inspector view, change the Font Size value to 24.
10. Still in the Inspector view, change the Horizontal Overflow option from
Wrap to Overflow.
11. Zoom out in the Scene view until you can see the GUI Canvas. Use the
transform tools to place the HUD_Line_2 GUI element just below the HUD_
Line_1 element.
12. Navigate and select the GameObject | UI | Text option from the drop-down
menu. This will add a second text element to the GUI. Rename this item as
HUD_Line_3.
13. Select HUD_Line_3 in the Hierarchy view. Then, in the Inspector view,
change the text to "Water: 000 / 0000".
14. In the Inspector view, change the Font Size value to 24.
15. Still in the Inspector view, change the Horizontal Overflow option from
Wrap to Overflow.
16. Zoom out in the Scene view until you can see the GUI Canvas. Use the
transform tools to place the HUD_Line_3 GUI element just below the
HUD_Line_2 element. Your Canvas should look similar to the following
screenshot (zoomed in top-left corner):
17. Next, we'll create four more GUI elements using the GameObject | UI |
Text menu selection.
[ 118 ]
Chapter 6
18. Rename the four new text elements as HUD_Line_4a, HUD_Line_4b, HUD_
Line_5a, and HUD_Line_5b. These elements will be used as indicated in the
following illustration:
When completed, your Canvas object should look like the following in the
Hierarchy view:
The previous image shows the Canvas child objects. They are also
representative of render order, which indicates which order they
will be displayed on the canvas. It is possible to have gameobjects
overlap or cover another. This should be considered when deciding
on placing your UI elements.
19. Make the following changes to each of the four text elements created in the
previous step:
°°
Change the Font Size value to 24
°°
Change the Horizontal Overflow option from Wrap to Overflow
°°
Move the objects so that they are arranged in accordance with the
following Game view screenshot:
20. Save your scene and your project.
21. Put the game in play mode and see how the HUD looks. You'll see that the
HUD elements remain on the screen at all times.
[ 119 ]
Adding a Graphical User Interface
We now have specific GUI text elements to reference in our scripts, so that we can
control what feedback to provide to the user via the HUD.
Mini-maps
Miniature-maps or mini-maps provide game players with a small visual aid that helps
them maintain perspective and direction in a game. These mini-maps can be used for
many different purposes, depending on the game. Some examples include the ability
to view a mini-map that overlooks an enemy encampment, a zoomed out view of the
game map with friendly and enemy force indicators, and a mini-map that has the
overall tunnel map while the main game screen views the current section of tunnel.
While we do not necessarily need a mini-map for our Little Farmer Colt game, we'll
create one so that you can replicate the task in your own games.
Creating a mini-map
The following are the steps we'll use to create a mini-map for our game:
1. Navigate and select GameObject | Camera from the top menu.
2. In the Hierarchy view, change the name from Camera to Mini-Map.
3. With the mini-map camera selected, go to the Inspector view and click on the
Layer button, then Add Layer in the pop-up menu.
4. In the next available User Layer, add the name Mini-Map:
[ 120 ]
Chapter 6
5. Select the Mini-Map option in the Hierarchy view, and then select Layer |
Mini-Map. Now the new mini-map camera is assigned to the Mini-Map layer.
6. Next, we'll ensure the main camera is not rendering the Mini-Map camera.
Select the Main Camera option in the Hierarchy view.
7. In the Inspector view, select Culling Mask, and then deselect Mini-Map
from the following pop-up menu:
8. Now we are ready to finish the configuration of our mini-map camera. Select
Mini-Map in the Hierarchy view.
9. Using the transform tools in the Scene view, adjust the camera object so that
it is above Colt's farm. Zoom in and out of the Scene view as necessary to
ensure the camera can only see Colt's farm.
10. In Inspector view, under Camera, make the settings match the following values:
Setting
Value
Clear flags
Depth only
Culling mask
Everything
Projection
Orthographic
Size
25
Clipping planes
Near 0.3; Far 1000
[ 121 ]
Adding a Graphical User Interface
Setting
Value
Viewpoint rect
X 0.75; Y 0.75; W 1; H 1
Depth
1
Rendering path
User player settings
Target texture
None
Occlusion culling
Selected
HDR
Not selected
11. With the Mini-Map camera still selected, right-click on each of the Flare
Layer, GUI Layer, and Audio Listener components in the Inspector view
and select Remove Component.
12. Save your scene and your project.
13. You are ready to test your mini-map. Put the game in play mode and
you'll see that even as Colt travels to Pa Poo's barn, Colt's farm is visible
in the mini-map:
[ 122 ]
Chapter 6
Mini-maps can be very powerful game components. There are a couple of things to
keep in mind if you are going to use mini-maps in your games:
•
Make sure the mini-map size does not obstruct too much of the game
environment. There is nothing worse than getting shot by an enemy
that you could not see because a mini-map was in the way.
•
The mini-map should have a purpose—we do not include them in games
because they are cool. They take up screen real estate and should only be
used if needed, such as helping the player make informed decisions. In our
game, the player is able to keep an eye on Colt's farm animals while he is out
gathering water and corn.
•
Items should be clearly visible on the mini-map. Many games use red dots
for enemies, yellow for neutral forces, and blue for friendlies. This type of
color-coding provides users with a lot of information at a very quick glance.
•
Ideally, the user should have the flexibility to move the mini-map to a corner
of their choosing and toggle it on and off. In our game, we placed the minimap in the top-right corner of the game screen so that the HUD objects
would not be in the way.
Game navigation
Many games start with a full-screen game navigation menu when the game is first
launched. Typical elements on these screens are text, images, and buttons. The text
will normally display the game's title and the images will be related to the game. One
or more buttons are also a normal UI element on main game screens. A very simple
game might have a single Play button, while more complex games can have several
buttons such as play, mode, level, instructions, campaign, and more.
We do not need a fancy game menu screen to allow the user to navigate between
scenes or levels. It is important to be able to create these types of screens for more
complex games, so we'll dive into this a bit and add a functional button to our
existing HUD canvas.
By performing the following steps, we will create a new scene to our game. This will
be the main scene that shows a play button. When a user clicks on the play button,
the farm scene will be loaded:
1. Save the current scene and the project.
2. Select File | New Scene to create a new scene.
[ 123 ]
Adding a Graphical User Interface
3. Save the new scene as _MainScene. Let Unity store the scene in the Assets
folder, which will be the default location.
I begin the names of all my scenes with an underscore (_) so that they
always show up at the top of the Project view. Alternatively, if you have
a lot of scenes, you can create a Scenes folder in Project view. Keeping
your project organized will save you a lot of time and frustration. For
larger games, you'll probably want to name your scenes with sequential
numbering, such as 01_Main, 02_Jungle, 03_Cave, and so on.
4. You should now be viewing the new _MainScene data with only a main
camera and directional light in the Hierarchy view. Do not worry, all your
_FarmScene data is still intact.
You can easily switch between scenes by double-clicking on the
scene name in the Project view. If you have any unsaved edits
on the current scene, Unity will ask you if you want to save or
abandon the edits.
5. Next, select the File | Build Settings menu choice to access the build settings
dialog.
6. Drag both scenes from the Project view to the Scenes in Build box of the
Build Settings dialog.
[ 124 ]
Chapter 6
7. Drag and drop the scenes so that the _MainScene scene is scene 0 and _
FarmScene is scene 1.
8. Close the Build Settings dialog window.
9. Save your project.
Next, we'll add a button to the new scene that, when clicked, will load
_FarmScene.
10. Navigate and select the GameObject | UI | Button menu option. This adds
a canvas with a child button, as well as an EventSystem game object.
[ 125 ]
Adding a Graphical User Interface
11. Expand the button UI element in the Hierarchy view to reveal the text
component. All buttons have a text component:
12. Rename the button as Play_Button in the Hierarchy view.
13. Change the text component's text to Play in the Inspector view. You should
now have a Play button in the center of the canvas:
14. Navigate and select Assets | Create | C# Script to create a new script. This
will be our script that is executed when the player clicks on the play button.
15. Rename the new script as LoadSceneOnClick.
16. Double-click on the new script to edit it in MonoDevelop.
17. Edit the script so that it matches the following script:
using UnityEngine;
using System.Collections;
public class LoadSceneOnClick : MonoBehaviour {
public void LoadScene(int scene)
{
Application.LoadLevel (scene);
}
}
18. Save the script and return to Unity.
19. Drag the new script to the canvas.
20. Select the Play_Button in the Hierarchy view.
[ 126 ]
Chapter 6
21. In the Inspector view, you will see the On Click() function at the bottom of
the Button (Script) component, as shown in the following screenshot:
22. Click on the + sign at the bottom of the Button (Script) section to add a
function to the On Click () list.
23. Drag the Canvas section from the Hierarchy view to the None (Object) area
of the Inspector view, just below the On Click () label.
24. Using the No Function pop-up menu in the On Click () area, navigate and
select LoadSceneOnClick | LoadScene (int).
25. Our last step is to change the parameter we are passing in to the LoadScene
(int) function. Change the parameter in the On Click () area from 0 to 1, as
shown in the following screenshot:
26. Save the scene and save the project.
[ 127 ]
Adding a Graphical User Interface
Now, when you put the game in play mode, you'll note a couple of changes. First, the
new scene we created with only a Play button is displayed first. No user actions are
possible except to click on the play button. This is our second change. When the user
clicks the play button, the farm scene is loaded and the game can be played as usual.
This is arguably a crude implementation of a full-screen game navigation system.
Given a little effort, we could add an instructions button that displayed information
on how to play the game. We could also add an exit or quit button. If we wanted to
spruce things up a bit more, we could add a background image that represents the
game. These are just some of the possibilities.
Summary
In this chapter, you learned about the UI system in Unity 5. You gained an
appreciation of the importance of GUIs in games we create. As you've learned,
there are different types and functions of GUIs. You gained hands-on experience
with creating a HUD and a mini-map. You also learned how to create a scene to
handle the game's initial load. You walked through the steps of creating a clickable
button and scripted the button to load a scene other than the current one. Most
importantly, you achieved a level of confidence in creating GUI elements and
referencing them in scripts.
In the next chapter, we will look at ways to give our game some final touches.
Specifically, we'll add sound effects to breathe life into our game. We'll add shadows
to make the game look more realistic. We'll even create some special lighting effects.
Our next chapter is about more than just polishing the game; it also contains ways to
optimize our game through rendering options and code optimization.
[ 128 ]
Polishing and
Optimizing the Game
Okay, all of the heavy lifting is completed. We've completed our game and can play
it without running into any errors. You can download the final Unity project from
the book's web page. You can extend the game, experiment, and make it your own.
Now it is time to clean things up a bit. Our game needs some final touches to help
make it shine. In this chapter, I'll show you how to add audio and visual effects
such as sound effects, shadows, and lighting effects. We'll use some of Unity's
functionality and explore how we can expand them.
This chapter begins with a brief discussion of the importance of audio and visual
effects in games. From that discussion, the chapter shifts focus and shows you how
to implement specific effects. We'll start with some key sound effects and then add
shadows and lighting effects to our game.
After reading this chapter, you will:
•
Be able to add sound effects
•
Be able to add shadows to game assets
•
Be able to create lighting effects
•
Understand how to edit cameras to change rendering options
•
Be able to optimize scripts
[ 129 ]
Polishing and Optimizing the Game
Sight and sound
Let's try a quick experiment. Sit down at your computer, console, or mobile device
and get set to play your favorite game. First, mute the sound. Now, adjust the video
settings so the screen is dim and, if possible, black and white. Okay, now play your
game. I'll bet the game is not as fun as you remember. Go ahead and reset any
settings you changed. Now, play the game again. What a difference!
Even if you did not go along with my experiment, I'll bet you understand the impact
those changes would have on your ability to enjoy the gaming experience. This
underlines just how important audio and visual effects are for gamers. Imagine an
explosion without a sound. You get the point, audio and visual effects are important.
So, why talk about them at all? Adding appropriate audio to games is considered a
best practice. We'll consider best practices in implementing audio and video in Unity.
Unity's sound capabilities
Unity has great support for playing audio in games. There are a few basics that
must be understood before we can start playing audio in our games. First, sounds
originate from a source file. Unity supports several audio file formats to include
AIFF, MPEG1, MPEG2, MPEG3, OGG, and WAV. One format is not necessarily
better than the others. What does matter is if the file is native or compressed.
•
Native files are ones that are stored in your game project without
compression coding
•
Compressed files will take up less disk space but require decompression
at runtime, which, depending on the hardware can be enough processing
overhead to make your game experience lag
If audio is important to the games you will create in the future, then I recommend
exploring Unity's documentation and experimenting with different formats.
Audio listener
Unity creates an Audio Listener as a component of a project's main camera. When
you select the main camera in the Hierarchy view, you can see Audio Listener listed
in the Inspector view.
[ 130 ]
Chapter 7
Audio listeners are simple components without any properties. Ideally, you'll only
have one audio listener at a time. For our game, we want the audio listener to be
attached to the main camera, which, as you'll remember, we attached to our third
person controller game object. This is how the user will be able to hear audio from
their audio output device such as computer speakers.
Audio clips
In Unity, we reference an audio source file as an instance of an audio clip. Audio clips
are variable types. They are flexible so that we can use essentially any audio type.
The final version of our Little Farmer Colt game has a Pigs Crying audio asset. The
source file is a WAV. When viewed in the Inspector view, you can see there are a few
settings that we can change:
[ 131 ]
Polishing and Optimizing the Game
We can, for example, select Force To Mono, which will reduce the audio file in the
compiled game.
Unity supports mono and stereo. Mono audio is when a single
channel of audio is used, while stereo has two channels. With
mono audio, the same sound is sent to both left and right
speakers. Stereo audio can be used to send different channels
to each speaker simultaneously.
Audio source
One of the things we need to do is to add an audio source to our main camera.
We accomplish this with the following steps:
1. Select Main Camera in the Hierarchy view.
2. In the Inspector view, click on the Add Component button.
3. Navigate and select Audio | Audio Source. This will add an Audio Source
component to the main camera, as shown in the following screenshot:
4. Next, we'll drag the Pigs Crying audio file to the AudioClip field of Audio
Source in the Inspector view.
5. Select the Play on Awake checkbox. This will start playing the audio clip as
soon as the main camera is instantiated.
6. Select the Loop checkbox. This will endlessly play the audio clip.
[ 132 ]
Chapter 7
You can play the game now and see that the piglet's sound is constant.
One of the important settings in the Inspector view is an audio source's priority. By
default, it is set at 128, which is right in the middle of the high and low ends of the
spectrum. When there are multiple sounds for Unity to play, it uses the priority of
each to determine which sounds get played. The lower the number is, the higher the
priority will be. The following screenshot shows the Audio Source's Priority option:
Implementing sound effects
In addition to attaching sounds to an audio source and selecting Play on Awake and
Loop, we can implement sounds via a script. To demonstrate this, deselect the Play
on Awake and Loop checkboxes. Then, perform the following steps:
1. Update the Take.cs script to match the following. There are four new lines
of code to add, each with a // new line comment following the line of code:
using UnityEngine;
using System.Collections;
public class Take : MonoBehaviour {
Animator anim;
int takeHash = Animator.StringToHash ("Take");
public AudioClip points;
private AudioSource source;
// new line
// new line
void Start () {
anim = GetComponent<Animator> ();
source = GetComponent<AudioSource> ();
// new line
}
void Update () {
if (Input.GetKeyDown (KeyCode.T)) {
anim.Play (takeHash);
GameData.water = GameData.water +1;
source.PlayOneShot (points);
}
}
}
[ 133 ]
// new line
Polishing and Optimizing the Game
The new lines of code add a sound effect each time the player presses
the T key.
2. Next, select ThirdPersonController in the Hierarchy view.
3. In the Inspector view, drag the Points audio file from the Project view to the
Points field in the Take (Script) area of the Inspector view:
4. With ThirdPersonController still selected in the Hierarchy view, click on the
Add Component button in the Inspector view.
5. Select Audio | Audio Source.
6. Uncheck the audio source's Play on Awake checkbox. This will stop the clip
from automatically playing when the game loads.
Now, every time Colt's take animation is played, the "points" audio clip is
also played.
Visual effects
There are several ways to bring attention to objects in a game including visual effects.
This section will take you through the following examples:
•
Spotlight orb with halo effect
•
Casting shadows
•
Trail rendering
[ 134 ]
Chapter 7
Spotlight orb with halo effect
When you take a closer look at the sign on Colt's barn, you see that it is nondescript:
Let's add a spotlight orb and add a halo effect to it:
1. Select Materials in the Project View.
2. From the top menu, navigate and select Assets | Create | Material.
3. Rename the new material Mat_Yellow.
4. With the Mat_Yellow asset selected in the Project view, change the color
from the default white to a bright yellow.
5. From the top menu, navigate and select GameObject | 3D Object | Sphere.
6. Rename the sphere as SignLight.
7. Move the SignLight sphere above Colt's barn sign and flush with the door.
8. Resize the sphere so that it looks appropriate on the door.
[ 135 ]
Polishing and Optimizing the Game
9. With the SignLight sphere selected in the Hierarchy view, drag the Mat_
Yellow asset to the Mesh Renderer | Materials | Element 0 field in the
Inspector view.
Now that the orb is created, we are ready to create the spotlight.
10. Navigate and select GameObject | Light | Spotlight from the top menu.
11. In the Hierarchy view, drag the Spotlight section to make it a child of the
SignLight section, as shown in the following screenshot. While this is not
necessary, it provides an extra layer of organization to our project:
[ 136 ]
Chapter 7
12. Move the Spotlight section in the Scene view so that the spotlight appears to
be inside the sphere.
13. Rotate the Spotlight section so the light shines appropriately on the sign.
14. With the Spotlight section selected, change Range to 3 in the Inspector view.
15. Also in Inspector view, change the color to the same bright yellow that you
used for the Mat_Yellow asset.
16. Select the Draw Halo checkbox.
17. Save the scene and the project.
18. Test the new visual effect in play mode.
Casting shadows
You might have noticed that all of our trees cast shadows, but our animals, player,
and barns do not. The Terrain, by default has the Cast Shadows setting enabled.
This accounts for the larger mountains that are casting shadows in our scene:
[ 137 ]
Polishing and Optimizing the Game
The trees are also casting a shadow. This originates from the directional light we
have in the scene. You can simply disable the directional light by deselecting it in
the Inspector view:
What if we want our two farmers and farm animals to cast shadows? We can add
shadows to each game object with two steps:
1. Navigate and select Farmer | Character1_Reference | Farmer in the
Hierarchy view, as shown in the following screenshot:
2. Navigate and select the Shader | Legacy Shaders | Diffuse option
in the Farmer-texture section of the Inspector view, as shown in the
following screenshot:
[ 138 ]
Chapter 7
Now, you can see that Pa Poo, our old farmer, casts a shadow. Watch his animations
and you'll see that the shadow is dynamic.
Trail rendering
We can create a visual effect in Unity that shows a trail behind an object as it moves.
Like a ship leaving a wake, a trail shows where an object has been, in what direction
it is heading, and an indication of speed. This is not a feature that we need in our
game, but you could easily use this in other games you create. So, we'll demonstrate
it with our Colt character. To do so, perform the following steps:
1. Select ThirdPersonController in the Hierarchy view.
2. In the Inspector view, click on the Add Component button.
[ 139 ]
Polishing and Optimizing the Game
3. Next, navigate and select the Effects | Trail Renderer pop-up menu option,
as shown in the following screenshot:
4. In the Inspector view, set Cast Shadows to on. This will allow the rendered
trail to cast shadows. The actual shadows will depend on the size of the trail,
as well as its locational relation to light sources.
5. Ensure the Receive Shadows checkbox is checked. With this setting, you can
determine whether or not the rendered trail can receive shadows. This can
add a level of realism to your game.
6. Drag the Mat_Yellow asset to the Materials | Element 0 field to apply the
bright yellow material to the trail:
7. You can now test the visual effect by putting the game in play mode.
[ 140 ]
Chapter 7
You'll see that Colt is leaving a yellow trail behind him. The arc in the screenshot
shows where Colt jumped:
There are a few other Trail Renderer settings to consider:
Setting
Description
Time
Here, you set the length of the trail. The value refers to seconds.
Start width
The width size of the trail at the start position. This would be at Colt's
feet.
End width
The width size of the trail at the end position. This would be the bitter
end of the trail.
Autodestruct
You can set your object to autodestruct after it has been idle for the
number of seconds you have in the Time setting.
To become completely familiar with this visual effect, I recommend saving your
scene, saving your project, and experimenting.
If you employ the Autodestruct function of the Trail Renderer,
your object will be destroyed after the number of seconds you
specify in the Time setting. If your Trail Renderer is attached
to Colt, you'll see him autodestruct after he is idle. So, this
feature is great for things like sparks and fireballs, but not for
our main character.
[ 141 ]
Polishing and Optimizing the Game
To disable this effect, simply uncheck the Trail Renderer component in the
Inspector view.
Rendering options
As you know, rendering is the act of creating a 3D image from images, colors, and
shading. In other words, creating a visual presentation. Depending on your game,
this can be a lot of work for the Unity engine. We can keep our eye on this by
selecting Window | Profiler from the top menu. This brings up the Profiler window.
The Profiler window
The Profiler window gives us a view of CPU usage, rendering, memory, audio,
physics, and physics (2D). Reviewing these areas can help us determine how our
game is performing and where there are potential areas to optimize. We'll focus
on the Rendering section:
[ 142 ]
Chapter 7
You can switch between any of these Profiler areas. To look at Rendering, select that
from the left pane of the Profiler window. When you put the game in play mode and
start navigating the world, the Rendering area of the Profiler window will start to
populate, as shown in the following screenshot:
In addition to the color-coded charting that happens on the top portion of the
Profiler window, very specific rendering information is provided in text format
in the bottom section.
Rendering optimization
There are a few things that we can do to decrease the processing overhead related to
rendering during game play. Perhaps the most important concept is that realism is
costly. We might want to create the most photo-realistic game, and Unity can help
us do that. Some of the problems we are likely to run into are game file size, lag, and
hardware constraints, for example:
•
File size might only be an issue if you are deploying your game digitally or if
you are submitting it to a mobile app store that has a file size limit
•
The lag issue comes into play when you overstress processing capability or
run into bandwidth limitations based on the user's network limitations
•
The final issue is of potential hardware constraints. Mobile devices have
impressive processing capabilities, but they still underperform when
compared to consoles and desktop computers. For example, the issues
of alpha transparency and the number of draw calls are important
considerations when developing for mobile devices
[ 143 ]
Polishing and Optimizing the Game
Imposing limits
The following are a few techniques you can use to help reduce the rendering
processing overhead and time:
•
Avoid or limit the use of in-game fog
•
Limit the use of dense particle effects
•
Limit shadows
•
Limit reflections
•
Use light maps instead of dynamic lighting
Baking images
Another important concept to grasp is the baking of images. We can use baked
images to simulate shadows and depth. Using images such as the one for the Colt
character in the following screenshot, we can bake special features into the core
artwork. This mitigates the need for shadows and lighting effects:
[ 144 ]
Chapter 7
Software such as Photoshop can be used to bake lighting into our 3D models and
objects. One technique is to create the lighting effects on a separate layer and then
export the final artwork with all layers.
Optimizing scripts
We want our scripts to be optimal in regards to memory usage and processing. A
great approach to script optimization is to simply code your game and run it with
the Profiler window open and select the CPU Usage tab from the left pane, as shown
in the following screenshot:
Using this view, you can see what processes are taking the most CPU power. The
visual graph makes it easy to spot significant jumps in CPU usage. The Overview
section, which can be found below the visual graph, provides a very detailed view
of how much CPU processing is allocated to each object and process.
[ 145 ]
Polishing and Optimizing the Game
Another section of the Profiler window is the Memory tab. Reviewing that tab's
information can tell you how much memory is allocated, how much system memory
is used, and counts of Textures, Meshes, Materials, AnimationClips, AudioClips,
Assets, and GameObjects:
Once we know where our problems or potential issues are, we can do a few things to
optimize our scripts:
•
We can destroy objects that we no longer need with
Destroy(theGameObject). Of course, if you intend to reuse the object, think
twice about destroying it, as it will take additional processing and can, in
some circumstances, result in game lag.
•
If we have an object that we need to exist but it does not currently hold a
value, we can set the value to null with theGameObject = null.
There are other, more advanced techniques to optimize Unity scripts. There is a nice
section of the online Unity Manual that references this.
[ 146 ]
Chapter 7
Summary
In this chapter, we have looked at the importance of audio and visual effects as a
method of enhancing the gaming experience for our users. We explored Unity's
capabilities to help us manage audio with audio listeners, audio clips, and audio
sources. We put our new knowledge into practice and add two sound effects to our
game: pigs crying and a "points" sound that is played when our game character picks
up an item. We looked at visual effects included implementing a spotlight orb with
halo, casting shadows, and trail rendering.
We also looked at how to optimize our game with Rendering settings. You were
introduced to Unity's Profiler window and how to read the Rendering, CPU usage,
and memory data. You learned about rendering optimization and the specific
techniques of imposing limits and baking images.
Lastly, we looked at script optimization to ensure our game performs well.
In the next, final chapter, we'll look at what you can do to improve our Little Farmer
Colt game, the Unity workflow, how to scale projects, physics with collisions,
and some cross-platform considerations. We'll also look at a few advanced topics
including versioning control and file management.
[ 147 ]
What's Next?
With our Little Farmer Colt game fully developed, we can look at ways you can
improve the game once you put the book down. You'll gain inspiration to make the
game your own with additional content, functionality, and levels.
In the second section of this chapter, we'll look at project-related issues including
workflow with Unity projects and how to scale projects. In the third section, we'll
look at development issues including cross-platform considerations, plug-ins, and
attribution issues.
In the chapter's final section, we'll look at several advanced topics including particle
systems, an inventory control system, and a dialog system.
After reading this chapter, you will:
•
Understand ways to improve the Little Farmer Colt game
•
Understand Unity's workflow
•
Understand how to scale projects
•
Understand cross-platform issues
•
Understand the importance of attribution
•
Have an appreciation for advanced topics
Improving our game
We can be proud of our game, but there is not much for a game player to get excited
about once they've played the game for a while. Here are some suggestions to make
our game more robust and more enjoyable for users to play.
[ 149 ]
What's Next?
Audio
Together, we added sound effects for pigs crying and a "points" sound when Colt
takes corn or water. The following are some opportunities for additional audio in
the game:
•
Background music: A subtle background clip played on a loop will go a
long way to making the game more immersive. We created something that is
appropriate for the game environment. Be sure to review the priorities you
set for each audio clip.
•
Animal sound effects: Ideally, each animal could have three sounds, idle,
eating, and drinking. The "pigs crying" sound effect we already added to our
game would work for the pig and piglet idle clips. Adding the additional
sound effects will help make the game seem more real and add an element
of fun.
•
Old farmer: Currently, the old farmer has several animations. One of these
animations is talking. Perhaps an audio clip could be added that sounds
muffled. This technique shows that the NPC is talking, but the actual words
are indiscernible.
•
Water: Our game has a large body of water that we've set up as a hazard
and a resource. So, Colt can fall into the water and he can retrieve water.
This gives us the opportunity to add two water-related sound effects;
a water splash when Colt falls in the water and another sound when
Colt is taking water.
•
Colt: Adding a couple of sound effects to the game's main character will help
engender players to the character. When Colt jumps, a "woo-hoo" sound
could be played or a soft thud could be heard when he lands back on the
ground. Maybe after the player has been running for more than x seconds,
his breathing could get heavy.
You can use your imagination to help enliven the game by adding audio clips.
Not everything needs a sound effect, so you'll want to keep that in mind as
you start experimenting.
[ 150 ]
Chapter 8
Visual effects
Adding visual effects to our game will help make it shine. Other than lighting and
shadows, our game does not have any visual effects. Here are some ideas you can
consider when improving the visual effects for the game:
•
Water: When Colt falls into the water, it would be great if a splash were seen.
Also, when Colt is submerged, air bubbles would be a nice visual addition.
•
Mirror: We've made the game with a first person perspective. This means
that the players never actually see the character they are playing, Colt.
We went through a lot of trouble to create the 3D model and animations,
so players deserve to see it. Instead of making the game a third-person
perspective game, we can add a mirror to the side of one of the barns. You
could accomplish this by adding a reflection probe.
The following are the steps to create a mirror in Unity:
1. Create a cube by navigating and selecting the GameObject | 3D Object |
Cube menu selection.
2. Using the transform tools, reshape the cube so that it is flat and the size of
mirror that is sufficient to fit on the side of Colt's barn.
3. Move the cube to the side of Colt's barn.
4. With the cube selected in the Hierarchy view, click on the Add Component
button in the Inspector view, then navigate and select the Rendering |
Reflection Probe option.
5. In the Inspector view, select Type | Realtime to have the reflection occur
during the game dynamically.
6. Still in the Inspector view, navigate and select Type | Refresh Mode | Every
frame. This will ensure your mirror is continually updated during the game.
7. Rename the cube as MirrorCube.
8. Drag the MirrorCube section from the Hierarchy view to the Project view to
make it a prefab.
[ 151 ]
What's Next?
9. In the Inspector view, make the following changes to the Mesh Renderer
section:
°°
Set Reflection Probes to Blend Probes
°°
Drag the MirrorCube prefab from the Project view to the Anchor
Override input box:
You might need to experiment with the Mesh Renderer and Reflection Probe
settings to get the mirror exactly how you want it.
[ 152 ]
Chapter 8
Functionality
You can add almost any functionality you want to this game. It just takes assets and
scripting. The following are some things that would be appropriate for the game
based on what we've done so far with it:
•
Body of water: Currently, not much happens when Colt falls into the water.
We've already discussed audio and visual enhancements regarding the
water. For functionality, it would be nice if the player could walk on the
bottom of the lake and be able to climb back out. Currently, neither of those
actions is possible. To make things even more interesting, the player could
have a limited amount of oxygen with an on-screen indicator. This would
compel the user to work feverishly to get out of the water. If the player does
not exit the water fast enough, they (the game character) could die.
•
Corn: The corn and cornstalks in our game are somewhat arbitrary. You
could add a script to the game so that each ear of corn can only be taken
once. Each time the player executes the "take" action, the ear of corn the
player is colliding with could disappear (destroy game object).
•
Old farmer option one: The old farmer character is more than just a pretty
face. He is capable of so much more than just standing there and being idle. A
good option for this character would be to implement a dialog system so the
player character can interact with him. To make this viable, the game would
need to force the player to interact with the old farmer before going too far in
the game. Perhaps, Colt could start the game with no animals. Once he has a
conversation with the old farmer, he could receive piglets and baby chicks.
•
Old farmer option two: If you are feeling extra adventurous, you can edit the
game so that a single player controls both the old farmer and Colt. The player
would need to have a way to switch between the two characters. Having two
sets of farm animals to tend to will make the game more challenging.
•
Old farmer option three: The next suggestion is not for the faint-hearted, but
is worth considering. You can edit the game so two players can play it at the
same time via network or web server. One player could control Colt, and other
the old farmer. The game could have two modes: cooperative and versus.
[ 153 ]
What's Next?
Levels
Our game has a single level that never ends. That is okay, but it would be much more
interesting if the game had multiple levels. Each level would need a specific goal and
set of requirements before the player can move on. What will the additional levels
consist of? That is for you to decide. The following are some rough suggestions:
•
Each new level could add one additional farm animal such as cows, horses,
and goats
•
Each new level could add another resource to gather such as grain, milk,
oats, and more
•
The number of each type of animal could increase for subsequent levels,
making it more difficult to manage
•
The size of the farmland could increase with each level
You are only limited by your imagination.
Project management
When developing games in Unity, you'll want to ensure you have a project
management plan mapped. The adage of the larger the team, the greater the need, is
certainly appropriate for developing with Unity. As you've seen with our Little
Farmer Colt game, the number of assets in even a small project can quickly add up.
If you are an indie developer, you do not need to be overly concerned about project
management, but if you have two more people on your team, I recommend taking a
few moments to determine your project's workflow.
Unity workflow
There is no ideal or perfect workflow for working with Unity. Every team does
things a bit differently. So, instead of suggesting a specific workflow, I'll mention a
few important parts of any workflow and suggest methods of approaching them.
Art and animation
Typically, the team members that work on art and animation are different from
those that write the scripts. It stands to reason that the art and animation team
(or teams) should be able to progress with their work while developers are scripting.
We can, for example, work on scripting a game's inventory control system without
actual item graphics. We can easily create cubes and spheres as temporary or
placeholder issues while the art team finalizes their models. This permits two
processes to occur simultaneously.
[ 154 ]
Chapter 8
With this example, there would need to be a way for the development team to know
when the new art/models are ready. Use of a project management tool such as JIRA
or BaseCamp can help. Also, if you are using Unity Pro, you'll have access to Team
License, formerly known as Asset Server. This feature is an asset and version control
system. To use the system, you'll need to download additional software from the
Unity website, install the software on a server or computer with network access,
and administer the system. If you are interested in this, you can learn more from the
Unity documentation.
Scripts
If you have more than one person working on scripts, you will want to keep
your scripts in a central location for easy access. You can use the tools previously
mentioned in this chapter or something as simple as an online file storage system
that supports versioning.
Other assets
It is important for everyone on the project's team to understand where assets are
stored and what their naming conventions are. Implementing a standardized naming
convention for assets is a great way to embed organization. Relying on file extensions
is often not sufficient. You can poll your team to determine what will work best.
Scaling projects
Unity has a reputation as being a great game engine for indie developers and
small game projects. This is somewhat of a bad rap. Unity can be used for largescale projects. As with using any other game engine, several issues that need to be
addressed include:
•
File management
•
Asset management
•
Level control
•
Build documentation
•
Data backups
•
Milestones
•
Version control
[ 155 ]
What's Next?
Development concepts
There are a few things worth talking about as you make your way through the last
couple of pages of this book. The concepts of cross-platform considerations, plugins,
and attribution are covered in this section.
Cross-platform considerations
You can create multiplayer games and have users on Android and iOS devices
playing with or against one another. To accomplish this, you can use something
such as Google Play's games services.
Another consideration is the various screen sizes of mobile devices. Apple has a
finite number of mobile devices using iOS, but Android runs on a lot more different
screen sizes and resolutions. You do not have to create one version for every screen
size. Instead, you'll need to consider relative layouts and flexible dimensions.
As always, test your game on as many different devices as you can and be sure to
vary operating system versions, screen sizes, and screen resolutions. In absence of
actual hardware for testing, use software emulators.
Plugins
We scripted our game by writing our own scripts in Unity using MonoDevelop. We
can also leverage code written outside of Unity. If you've developed or have rights to
use a plugin, you can simply place it anywhere inside your project. It makes sense to
create an Assets | Plugins folder in your Project view.
One thing about many third-party plugins is that they can take more time to
integrate into your game than to simply code the functionality yourself. So,
it is worth considering both options.
[ 156 ]
Chapter 8
Attribution
One mistake many indie developers make is to use assets they obtain from the
Internet. There are several repositories available including the Unity Asset Store.
It is important to ensure you have the requisite permission to use downloaded
content in your game.
If you are working on a commercial project, you'll want to ensure your asset comes
with royalty-free commercial use clause. If you are not certain, you should contact
the source where you obtained the asset.
Just because you pay for an asset, it does not mean you have
permission to use it for commercial purposes. Always check with
the publisher of the asset to be sure you have explicit permission
to use the asset for commercial use.
Advanced topics
This entire chapter could have been named advanced topics. And this section could
be additional advanced topics. In this section, we'll take a quick look at particle
systems, inventory control systems, and dialog systems.
Particle systems
Unity includes an impressive capability to render particles in games. We use
particles to represent dynamic visuals such as fog, smoke, fire, sparks, pixie dust,
and more. You can think of particles as multiple tiny images in motion. Think of a
fireworks display. They consist of hundreds of tiny lights all in motion. Using Unity's
particle system, we can replicate this type of imagery.
[ 157 ]
What's Next?
To implement a particle system in Unity, navigate and select GameObject |
Particle System from the top menu. This will result in a Particle System object
being placed in your Hierarchy. Reviewing the Particle System in the Inspector
view shows a host of settings that can be used to change how the particle system
functions and is rendered.
[ 158 ]
Chapter 8
If you plan to implement a particle system in your game, I recommend consulting
the Unity documentation for instructional information.
Inventory control systems
Inventory control systems are key parts of a lot of games. Unity does not provide this
as a component, so you'll have to either use a third-party plugin or develop one on
your own. There are six simple steps to creating an inventory control system:
1. Create a table of all possible inventory items your game will feature. Be sure
to record attributes as well.
2. Categorize your inventory items.
3. Mock up the GUI for how your user will interact with the inventory
control system.
4. Create the artwork in a standardized way so that all items fit within
your GUI.
5. Script the inventory control system.
6. Thoroughly test your system.
Dialog systems
Dialog systems can be fun game components when humanoid NPCs are involved.
You do not have to have actual spoken text, but that can be a huge bonus. What is
standard is on-screen text with branched answers. It is likely that you've used this
feature in many games and are familiar with them. The following are a few tips to
keep in mind when developing your own dialog system:
•
Map out the entire dialog on paper using flowcharts before scripting. This
will help ensure your dialog trees have no dead ends.
•
Always give the player an option to end the dialog.
•
Ideally, from a user interface perspective, users will not have to scroll to see
all the response choices.
[ 159 ]
What's Next?
Summary
In this chapter, we looked at ways to improve our Little Farmer Colt game. Suggested
improvements were grouped into audio, visual effects, functionality, and levels.
We also looked at workflow project-related issues including workflow with Unity
projects, how to scale projects, and how to manage multi-person team projects.
You also learned about development issues, which included cross-platform
considerations, plugins, and attribution. We ended the chapter by looking at a few
additional advanced topics. Specifically, we looked at particle systems, an inventory
control system, and a dialog system.
Enjoy your journey developing games with Unity!
[ 160 ]
Index
Symbols
3D assets
creating 46
A
animation clips
creating 77-81
animations
about 61, 62
previewing 75-77
Artificial Intelligence (AI) 22
asset package
about 46
creating 47
importing 48, 49
assets
about 44
adding 50
adding, Unity Asset Store used 50-56
creating 45
creating, Blender used 57, 58
custom asset package, importing 56
functions 44
third party assets 44
Unity assets 44
user-created assets 44
Asset Server 155
attribution 157
audio
improving, ways 150
B
Blender
URL 57
used, for creating assets 57, 58
bridge
natural bridge, building 32, 33
C
cameras 17, 18
character controllers
about 62, 63
first person controller 63, 64
third person controller 64-73
C# programming primer
about 84
data types 86
naming conventions 85
syntax 84
Cross-platform considerations 156
custom asset package
buildings, importing 57
game characters, importing 56, 57
importing 56
D
data requirements, game scripting 97-102
data types, C# programming primer 86
dialog systems 159
E
end states
defeat 23
victory 23
environmental features
about 32
natural bridge 32, 33
planting trees 33-36
[ 161 ]
sky, creating 40-42
water 38
F
feedback GUI elements, Little Farmer
Colt game 111
first person controller
creating 63, 64
functions, GUI
Control 112
Feedback 111, 112
Feedback + Control 113
G
I
inspector view 14
inventory control systems 159
J
Java For Everyone 5
L
layouts 7-10
levels 154
Little Farmer Colt game
feedback GUI elements 111
game
scripting 93
game design
about 20
Artificial Intelligence (AI) 22
end state 23
game look 20
Gameplay 21
player, objectives 20
user actions 21
game, improving
audio 150
functionality 153
levels 154
visual effects 151
game layers, GUI 113
game navigation 123-128
Gameplay 21
game view 11
graphical user interface (GUI)
about 110
functions 110-112
game layers 113
M
H
O
heads-up display (HUD)
about 116
creating 116-119
hierarchy view 12
Miniature-maps (Mini-maps)
about 120
creating 120-123
mirror
creating 151, 152
MonoDevelop
using 86
mountains, terrain
creating 26
N
naming conventions, C# programming
primer
abbreviations 85, 86
about 85
Camel case 85
class names 85
function names 85
method names 85
special characters 86
non-player characters (NPC) 111
object-oriented programming (OOP) 84
optimization, rendering
about 143
images, baking 144, 145
limits, imposing 144
[ 162 ]
options
rendering 142
P
particle systems 157-159
player characters
about 62
animating 73
Farm animals 75
Little farmer Colt 74, 75
Old farmer character 75
plugins 156
Profiler window
about 142
Rendering section 143
project
creating 4-7
project management 154
project view 13
R
rendering 142
river, terrain
adding 26, 27
rotate tool 15
S
scale tool 16
scene view 11
scripting with C#, in Unity
about 87-90
assets 92, 93
example 91, 92
start function 91
update function 91
script planning
about 94
adult chickens, feeding 97
baby chicks, feeding 97
corn, gathering 94, 95
piglets, feeding 95
pigs, feeding 97
water, gathering 95
scripts
optimizing 145, 146
organizing 106
selective scripts
about 103
actions, detecting of player-controlled
character 105, 106
global variables 103
take animation, evoking 104
sky
creating 40, 42
sound capabilities
audio clips 131, 132
audio listener 130
audio source 132
sound effects
adding 130
implementing 133, 134
T
terrain
about 23, 24
creating 24, 25
mountains, adding 26
river, adding 26
textures 27-32
third party assets 44
third person controller
creating 64-73
Trail Renderer settings 141
transform tools 14-16
trees
adding, to scene 35, 36
planting 33-35
U
UI system, Unity 5
about 114
canvas, creating 114, 115
GUI, creating 115, 116
render mode 115
Unity
about 2, 3
downloading 4
game view 11
hierarchy view 12
inspector view 14
installing 3
[ 163 ]
project view 13
scene view 11
sound capabilities 130
URL 3
views 10
Unity assets 44
Unity Asset Store
about 49
characteristics 49, 50
considerations 50
URL 49
used, for adding assets 50-56
Unity workflow
about 154
art and animation 154
other assets 155
scaling projects 155
scripts 155
user-created assets 44
User Interface (UI) 109
V
visual effects
about 134
improving, ways 151
shadows, casting 137-139
spotlight orb, adding with
halo effect 135-137
trail, rendering 139-141
W
water
adding, to terrain 38
[ 164 ]
Thank you for buying
Getting Started with Unity 5
About Packt Publishing
Packt, pronounced 'packed', published its first book, Mastering phpMyAdmin for Effective
MySQL Management, in April 2004, and subsequently continued to specialize in publishing
highly focused books on specific technologies and solutions.
Our books and publications share the experiences of your fellow IT professionals in adapting
and customizing today's systems, applications, and frameworks. Our solution-based books
give you the knowledge and power to customize the software and technologies you're using
to get the job done. Packt books are more specific and less general than the IT books you have
seen in the past. Our unique business model allows us to bring you more focused information,
giving you more of what you need to know, and less of what you don't.
Packt is a modern yet unique publishing company that focuses on producing quality,
cutting-edge books for communities of developers, administrators, and newbies alike.
For more information, please visit our website at www.packtpub.com.
Writing for Packt
We welcome all inquiries from people who are interested in authoring. Book proposals should
be sent to [email protected] If your book idea is still at an early stage and you would
like to discuss it first before writing a formal book proposal, then please contact us; one of our
commissioning editors will get in touch with you.
We're not just looking for published authors; if you have strong technical skills but no writing
experience, our experienced editors can help you develop a writing career, or simply get some
additional reward for your expertise.
Unity 3D UI Essentials
ISBN: 978-1-78355-361-7
Paperback: 280 pages
Leverage the power of the new and improved UI
system for Unity to enhance your games and apps
1.
Discover how to build efficient UI layouts
coping with multiple resolutions and
screen sizes.
2.
In-depth overview of all the new UI features
that give you creative freedom to drive your
game development to new heights.
3.
Walk through many different examples of UI
layout from simple 2D overlays to in-game 3D
implementations.
Learning C# by Developing Games
with Unity 3D Beginner's Guide
ISBN: 978-1-84969-658-6
Paperback: 292 pages
Learn the fundamentals of C# to create scripts for
your GameObjects
1.
You've actually been creating scripts in your
mind your whole life, you just didn't realize
it. Apply this logical ability to write Unity
C# scripts.
2.
Learn how to use the two primary building
blocks for writing scripts: the variable and
the method. They're not mysterious or
intimidating, just a simple form of substitution.
3.
Learn about GameObjects and Component
objects as well as the vital communication
between these objects using Dot Syntax. It's
easy, just like addressing a postal letter.
Please check www.PacktPub.com for information on our titles
Unity 3D Game Development by
Example [Video]
ISBN: 978-1-84969-530-5
Duration: 02:30 hours
Learn how Unity 3D "Thinks" by understanding
Unity's UI and project structure to start building fun
games in Unity 3D right away
1.
2.5 hours of Unity screencast tutorials, broken
into bite-sized sections.
2.
Create 3D graphics, sound, and challenging
gameplay.
3.
Build game UI, high score tables, and other
extra features.
4.
Program powerful game logic with C# scripting.
Getting Started with Unity
ISBN: 978-1-84969-584-8
Paperback: 170 pages
Learn how to use Unity by creating your very own
"Outbreak" survival game while developing your
essential skills
1.
Use basic AI techniques to bring your game
to life.
2.
Learn how to use Mecanim; create states and
manage them through scripting.
3.
Use scripting to manage the graphical interface,
collisions, animations, persistent data, or
transitions between scenes.
Please check www.PacktPub.com for information on our titles
Herunterladen