Learn to Code by Making Games - Complete C# Unity Developer
4.6 (23,326 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
168,776 students enrolled
Wishlisted Wishlist

Please confirm that you want to add Learn to Code by Making Games - Complete C# Unity Developer to your Wishlist.

Add to Wishlist

Learn to Code by Making Games - Complete C# Unity Developer

Game development & design made fun. Learn C# using Unity 4.6 & Unity 5. Your first 7 2D & 3D games for web & mobile.
Bestselling
4.6 (23,326 ratings)
Instead of using a simple lifetime average, Udemy calculates a course's star rating by considering a number of different factors such as the number of ratings, the age of ratings, and the likelihood of fraudulent ratings.
168,776 students enrolled
Created by Ben Tristem
Last updated 5/2017
English
English
Current price: $10 Original price: $195 Discount: 95% off
1 day left at this price!
30-Day Money-Back Guarantee
Includes:
  • 46 hours on-demand video
  • 16 Articles
  • 39 Supplemental Resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
What Will I Learn?
  • Learn C#, a powerful modern language.
  • Develop a positive attitude to problem solving.
  • Gain an excellent general knowledge of game creation.
  • Learn how object oriented programming works in practice.
  • Transfer your knowledge to .NET, other languages, and more.
View Curriculum
Requirements
  • Mac or PC capable of running Unity 3D.
  • A copy of Unity 4.6.3 for early content, free from Unity.
  • A copy of Unity 5 for later content, also free.
  • A copy of Blender, free from www.Blender.org
  • Either some experience of coding, or the will to do self-study.
Description

The course is continually updated, a major improvement was made in Glitch Garden in March 2016, and over 30 new quiz questions were added in June 2016.

This is the online game development school that was a runaway success on Kickstarter. As a result there are English closed-captions throughout.

Learn how to create video games using Unity 3D, the free-to-use game development tool. We start super simple so you need no prior experience or Unity of coding! With our online tutorials, you'll be amazed what you can achieve.

Benefit from our world-class support from both other students, and Ben is on the forums regularly. Go on to build several games including a full 3D version of Pong with an online multiplayer scoreboard, and more.

You will have access to a course forum where you can discuss topics on a course-wide basis, or down to the individual video. Our thriving discussion forum will help you learn and share ideas with other students. Check out our reviews to see how people love this feature.

Unity 5: The first part of the course is taught in Unity 4. 6, as this is well established and stable. When you get to Bowlmaster we upgrade to Unity 5, and start using it's great new features. You can use Unity 5 from the start if you wish, with only minor code differences.

The course is project-based, so you will not just be learning dry programming concepts, but applying them immediately to real indie games as you go. All the project files will be included, as well as additional references and resources - you'll never get stuck. There are talking-head videos, powerful diagrams, quality screencasts and more.

Oh, and it's just bigger and better than the competition. See the length and the reviews.

For each demo game you build you will follow this process...

  • Be challenged to build the entire game yourself.
  • Be shown step-by step how to build it.
  • Be challenged to apply, and re-apply your knowledge regularly.

You will get full lifetime access for a single one-off fee. The creators are qualified and experienced coders and avid gamers, so are able to explain complex concepts clearly, as well as entertain along the way. Most courses teach scripting using only C#.

You will learn C#, including Test Driven Development, a highly valuable skill. By the end of the course you'll be very confident in the basics of coding and game development, and hungry to learn more.

What this course DOESN'T cover...

Whereas this course is already huge, we can't possibly cover everything in that time. Here are some things we will not be covering...

  • Performance optimization.
  • Editor plugins or modifications.
  • Physics engine modification*

* Separate mini-course to cover these this now available.

Anyone who wants to learn to create games: Unity 3D is a fantastic platform which enables you to make production-quality games. Furthermore these games can be created for Windows, MacOS, iOS (even iOS 9), Android and Web from a single source!

If you're a complete beginner, we'll teach you all the coding and game design principles you'll need. If you're an artist, we'll teach you to bring your assets to life. If you're a coder, we'll teach you game design principles.

Note: access to this course comes with an optional, free community site where you can share games and 3D models, as well as connect with other students.

Dive in now, you won't be disappointed!

Who is the target audience?
  • Competent and confident with using a computer.
  • Artists who want to learn to bring their assets into games.
  • Some programming experience helpful, but not required.
  • Complete beginners who are willing to work hard.
  • Developers who want to re-skill across to game development.
Students Who Viewed This Course Also Viewed
Curriculum For This Course
Expand All 306 Lectures Collapse All 306 Lectures 52:12:59
+
Introduction And Setup
13 Lectures 54:36

In This Video...

  • What’s in the course.
  • Why you should take the course.
  • Good re-cap if a while since signed-up.

Preview 03:00

IN THIS VIDEO...

  • We’re excited because we see your improvement.
  • The more you put in, the more you get out.
  • Explaining Unity versions used.
  • Students on 24/7, I’m on every few days.
  • Section notes attached.
Welcome To The Course
03:00

Get Unity downloading, and see an overview of how Unity fits into your suite of programs.

Introducing The Unity Ecosystem
04:04

  • Making it easier for someone to answer means you're more likely to have your problem solved
  • The process will often solve problems before the question is even asked
  • The attitude isn't just appropriate for game development or programming, but for life in general
How To Ask Good Questions
15:26

IN THIS VIDEO...

  • Checking the version you already have installed.
  • If 4.6.X installed already, you’re good to go.
  • If 5.x installed, install Unity v.4.6.X as well.
  • Finding Unity v.4.6.X in Unity’s download archive*
  • Installing and registering Unity.

* http://unity3d.com/get-unity/download/archive

Installing Unity
04:32

IN THIS VIDEO...

  • How Unity and Mono relate.
  • Create, delete and rename scripts in Unity.
  • Edit your scripts in Mono.
  • Save your changes to disc in Mono.
  • Unity will then read / run the script for you.
Unity, Your IDE and Your Files
04:05

How You Can Follow With Unity 5.X
00:24

IN THIS VIDEO...

Let's take our first look at the Unity Editor.

We'll make a few tweaks to help us out in the course, and show you how to navigate in the scene.

After this video you will be able to:

  • Change the play mode tint to make the editor state more explicit
  • Open an existing project
  • Move editor pane around
  • Change the editing mode using the editor buttons
  • Change the editing mode using keyboard shortcuts
Introducing the Unity Editor
07:50

Ben outlines the (minor) differences between the Mac and PC version of Unity.

Mac And PC Differences
02:50

IN THIS VIDEO...

  • We'll take a tour of the MonoDevelop IDE.

After this video you'll be able to:

  • Change the indenting mode
  • Learn and change keyboard shortcuts
  • Use autocomplete to help you program faster

SOME USEFUL LINKS...

Enable Mac Magic Mouse - MagicPrefs

(NOTE YOU CAN CLICK THESE LINKS BELOW)

Monodevelop 101
04:15

IN THIS VIDEO...

  • Save your code, and exit Mono.
  • Practice moving windows again.
  • Toggle 2D & 3D.
  • Rename and save your scene.
  • Save your project when you exit Unity.
  • Move the whole folder if required.
  • Optional: Re-open if you want to carry on.
Saving And Closing Your Project
05:10

IN THIS VIDEO...

  • Should I install Unity 5?
  • What's new in Unity 5?
  • How do I extend Gamebucket?
  • MonoDevelop doesn't start on Win8.1
Frequently Asked Questions
9 pages

Here are some useful links for you while using Unity to make games. If you can think of anything to add, don't hesitate to mention it :)

Section 1 Useful Resources
2 pages

A few basic questions to ensure we communicated the fundamentals of setting-up correctly.

Section End QUIZ
6 questions
+
Number Wizard: Basic Scripting
11 Lectures 01:00:31

An Introduction to your first Unity Game! Let's get comfortable with coding in Unity. After this section, you'll be able to create and edit your own scripts and print out information on the console.

Preview 01:51

Section notes as a Google Doc, you can download latest version as a PDF from the link if you wish.

https://docs.google.com/document/d/1YIUkHCqH8fNHR4ohrWXazteJt6eIH0QMGZ5iT1DcH9E

Section 2 Notes
00:05

After watching this video, you will know:

+ How to create a script in Unity

+ How to handle text in your script using strings

+ How to print out messages to the console

Preview 07:31

After watching this video you will be able to:

+ Create variables in your script

+ Perform basic maths in your programs

+ Understand what the type of a variable is and why this is important

Preview 04:23

After watching this video you will be able to...

+ Respond to a player's key presses.

+ Explain what the `Start()` and `Update()` methods do.

+ Navigate Google and Unity docs with more confidence.

Responding To Key Presses
08:09

Mid Section QUIZ
8 questions

After this video you will be able to:

+ Make your programs behave differently depending on conditions using `if` statements

Using IF To Make Choices
05:52

After watching this video you will be able to...

+ Give a basic explanation of "scope".

+ Use variables in appropriate scope.

+ Use "instance" variables for global access.

+ Use MonoDevelop's autocompletion to help you code faster.

+ **Declare** and **Initialise** variables.

Scope And Context Of Variables
09:20

After watching this video you will be able to:

+ **Refactor** your code in order to make it neater.

+ Create your own custom function.

Simplifying By Creating Functions
04:05

In this video we'll clean up our game a little bit and make sure the game restarts properly every time. After watching this video, you will have learnt enough to build your own min console game in code :-)

Completing Number Wizard
05:48

Brice covers the following in his video...

  • The Compiler Is Our Friend.
  • The Rubber Duck Sensei.
  • Assume Nothing / Mars Climate Orbiter.
  • The Minimum Viable Test Case.
  • Scientific Debugging.
  • How to debug small programs.
Preview 11:12

Section End QUIZ
5 questions

In this video we will review the Number Wizard Console Game and what we learnt while building it. We'll also talk about how we could improve it and a few possible extensions. We'll then take a peek at what's ahead in the next section.

Section 2 Wrap Up
02:15
+
Text101 - Text Adventure
16 Lectures 01:32:17

IN THIS VIDEO...

  • What Text 101 teaches
  • Increase our scripting skills (nearly 200 lines!).
  • The basics of “finite state machines”.
  • Invite you to create and share your own story.
  • Build our game to the web.
  • Share with the world.
Introduction To Text101
02:19

Section 3 Game Design Document
4 pages

Your Text 101 Assets
1 page

Section 3 Notes
11 pages

IN THIS VIDEO...

  • Recap how to create and save projects
  • Set Up and save your Text 101 project
  • What gets 'carried over'
  • Import your prison image asset
  • Save your project
Creating New Projects
07:12

IN THIS VIDEO..

  • Adding a UI > Text element to a scene
  • Setting the camera background colour
  • Moving and scaling your text
  • How to programatically change text
  • Challenge: Change text only on key press
  • Challenge: Add and scale the image
Adding 2D User Interface Text
16:08

Word Wrapping & Joining Strings
09:07

IN THIS VIDEO...

  • The structure of our “engine”
  • What's an enum?
  • Challenge: complete the story
Building Your Game Engine
16:09

Our TextController.cs Script
2 pages

IN THIS VIDEO...
  • Update Your Update() Method
  • Rename freedom to corridor_0
Re-Organising Your Code
11:28

IN THIS VIDEO...

  • Add New State Methods.
  • Create your own text adventure.
  • How to enable code folding in Unity.
  • How to use Region to fold code.
  • Local Play Testing.
Extending Our Prison Story
14:54

Our Extended Story Script
4 pages

IN THIS VIDEO...

  • Encourage you to create your own story.
  • How to build for the web.
  • Test your build locally.
  • Share using GameBucket.io or similar.
  • Post to the course discussions & Facebook.
SOME USEFUL LINKS...
  • GameBucket - Home
  • Complete Unity Developer Facebook page
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Build For Web & Share
08:17

  • Upgrade to Unity 5.
  • About Web GL builds.
  • Build for Web GL and share.
Text101 Unity 5 & Web GL Build (Optional)
05:24

DOWNLOAD Section 3 Unity Project
00:22

Section End QUIZ
5 questions

IN THIS VIDEO...
  • Recap and what's next
  • Did you write your own story?
  • Go on, be brave!
  • Maybe ask a friend to write it?
  • Build for the web.
  • Share in the Udemy Discussions, or www.CompleteUnityDeveloper.com (link below)
Section 3 Wrap Up
00:57
+
Number Wizard UI
16 Lectures 01:34:58

In this section, we will go through building a basic User Interface consisting of simple menus. We'll be reusing the code from our previous section to recreate a visual Number Wizard game. After this section, you'll be able to add and modify scripts on objects in your game and create simple menus that respond to mouse input.

Introduction To User Interface
02:01

The Game design Document for the Number Wizard UI Game.

Section 4 Game Design Document
3 pages

These notes are meant as supplementary material for Number Wizard UI.

Section 4 Notes
9 pages

In this video, we discuss basic Object Oriented Programming principles and introduce you to the terminology. By the end, you will be able to define the following terms in the context of Object Oriented Programming:

+ Class

+ Instance

Resources

https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

About Objects And Classes
02:41

After Watching this video, you will be able to

+ Create and Save new Levels

+ Understand that Levels and Scenes are interchangeable terms

Creating and Saving Levels
04:22

After watching this video, you will be able to:

+ Add a Canvas to a scene

+ Add Text to a Canvas

+ Position Text in a Canvas

How To Add Text To The Scene
13:36

After watching this video you will be able to...

+ Turn a UI Text object into a button by adding the button component

+ Get the text to change colour on mouseover and click

Adding a Start Button
05:49

After watching this video you will be able to:

+ Create a new script

+ Attach Scripts to objects using various methods

+ Trigger function calls from UI buttons

Calling Scripts from Buttons
09:01

Mid Section QUIZ
5 questions

After watching this video you will be able to:

+ Use `Application.LoadLevel()` in your scripts to load a new level

+ Use `Application.Quit()` in your games to quit the game

+ Understand when `Application.Quit()` Won't work as expected

How To Load Scenes and Quit
12:44

After watching this video you will be able to:

+ Create your own Game Design Document (GDD)

+ Copy and paste scenes hierarchies for fast duplication

+ Understand the purpose and limits of a GDD

Using A Game Design Document
10:38

After watching this video you will be able to...

+ Import assets into a Unity project

+ Extract method from your code

+ Connect a script's methods to UI Objects

Importing Previous Number Wizard Script
18:33

The `NumberWizard.cs` file to be imported for reference.

Old Number Wizard Code
1 page

After watching this video you will be able to...

+ Change the text to reflect the computer's guess at the start of the game.

+ Use `Random.Range()` to generate random numbers

Finishing Number Wizard UI
05:36

  • Upgrade to Unity 5.
  • About Web GL builds.
  • Build for Web GL and share.


NW UI Unity 5 & Web GL Sharing (Optional)
06:29

DOWNLOAD Section 4 Unity Project
00:22

Section End QUIZ
5 questions

In this video, we talk a little more about the structure of the course and how you should approach the challenges. We also show you how you can send us feedback on the course and how to get in touch with us.

Section 4 Wrap Up
03:06
+
Block Breaker
43 Lectures 05:52:46
IN THIS VIDEO...
  • 2D Collisions & destroying objects.
  • Triggering SFX and music.
  • Responding to mouse input.
  • Automated playtesting.
  • Build & share your own levels.
Introduction To Block Breaker
02:03

Section 5 Game Design Document
3 pages

Your Block Breaker Assets
1 page

Section 5 Notes
34 pages

IN THIS VIDEO...

  • How to use GIMP as an alternative to PhotoShop (link below)
  • Selecting in Gimp
  • Cropping and Scaling
  • Adjusting Colour and Exposure
  • Saving Your Image
Gimp Image Editing 101
10:58

IN THIS VIDEO...
  • Researching brick sizes.
  • Source an appropriate image.
  • Edit our brick sprites.
  • Create new project and import.
Creating A 2D Brick Sprite
09:20

IN THIS VIDEO...
  • Export the menus from Number Wizard UI.
  • Import to this project.
  • Customise the words & fonts.
  • Wire up the buttons.
Import The Menu System
09:36

IN THIS VIDEO...

  • How persistent music improves quality.
  • Add a Music Player Game Object.
  • Add a music track of your choice.
  • Use GameObject.DontDestroyOnLoad().
  • Test your music plays consistently.
SOME USEFUL LINKS...
  • Sounds - Freesound.org
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Playing Background Music
09:38

IN THIS VIDEO...

  • How a static can help us here.
  • Watch Unity's short video*
  • Preventing duplicate music players.

SOME USEFUL LINKS...

  • Unity 3D Statics
(NOTE YOU CAN CLICK THESE LINKS BELOW)
About Statics & Singletons
03:32

Using Static Variables
07:57

Explaining that we don't use the music manager again for a while.

A Note About The Music Manager
00:06

  • Introducing Script Execution Order*
  • Exactly when do scripts get called?
  • Debugging & explaining our music glitch
  • A simple fix using the Awake() method

SOME USEFUL LINKS...

*http://docs.unity3d.com/Manual/ExecutionOrder.html

(NOTE YOU CAN CLICK THESE LINKS BELOW)

Execution Order & Singletons
09:45

In this video...

  • What z-depth means.
  • The problem: sprites becoming semi-transparent or invisible for unknown reasons.
  • The solution: look at the z-position of sprites relative to the background.
Z-Depth in 2D games
02:50

Setting Up Your Play Space
08:48

IN THIS VIDEO...
  • Add a ball to your space
  • Import the ball sprite to Sprites folder.
  • Set a sensible “Pixels Per Unit” value.
  • Place the ball in the middle of the play space.
Ball + Gravity + Colliders = Fun
08:07

IN THIS VIDEO...
  • What are colliders
  • If colliders overlap during a frame then…
  • … messages may be passed by the engine.
  • What is message passing?
  • Signatures of messages passed
  • Types of colliders explained
Colliders, Triggers & Collisions
09:41

IN THIS VIDEO...
  • Delete Music Player on Level_01 scene.
  • Setting Game window to 800 x 600.
  • Two handy keyboard shortcuts.
  • Remove Canvas and Event System from Level_01.
  • Make loose collider load next level.
Tidying Up Before Moving On
08:35

IN THIS VIDEO...
  • Add our brick sprite as a player paddle.
  • Choosing our paddle collider type.
  • Rigid Body 2D
  • CHALLENGE: Add components to our paddle.
Choosing Collider Type In Unity
08:25

Mid Section QUIZ
7 questions

IN THIS VIDEO...
  • What is a physics material.
  • Add a bouncy material.
  • Observe funky physics.
Using Physics Materials
06:34

IN THIS VIDEO...

  • Using Input.MousePosition.x
  • Screen.width to get screen width.
  • Move the paddle this.transform.position
  • Introducing float and Vector3.
  • Using Mathf.Clamp to constrain paddle.
  • Fix the paddle's “Pixels per unit” to 128.

SOME USEFUL LINKS...

  • Unity Scripting API

(NOTE YOU CAN CLICK THESE LINKS BELOW)

Movement By Mouse
13:11

IN THIS VIDEO...
  • Start the ball sitting on the paddle.
  • Capture the relative position from the editor.
  • Respond to Input.GetMouseButtonDown(0).
  • rigidbody2D.velocity to launch the ball.
  • Using bool hasStarted to keep track.
Launching Ball On Mouse Click
14:22

IN THIS VIDEO...
  • Setup all your play space wall colliders.
  • Adjust the initial velocity and gravity.
  • Understanding Gravity Scale
Invisible Colliders & Gravity Scale
10:21

IN THIS VIDEO...
  • What is a prefab in Unity
  • Why prefabs are useful.
  • Setting up your prefabs.
  • How prefab linking works.
Creating & Using Unity Prefabs
13:05

IN THIS VIDEO...
  • How Edit > Snap Settings works.
  • Snap initially to get on the grid.
  • You can do this with multi-select.
  • Hold cmd (ctrl) while dragging!
  • Build your first level
Unity Editor Snap To Grid
05:42

IN THIS VIDEO...
  • Make everything a prefab!
  • Set Main Camera background to black.
  • Move & group Loose Collider.
  • Test by making new level.
Making Everything A Prefab
09:42

IN THIS VIDEO...
  • Why linking prefabs programmatically helps.
  • Unity doesn't support “nested prefabs”.
  • How to use GameObject.FindObjectOfType< >
  • Link the ball to the paddle programatically.
  • Challenge: do this for LevelManager
GameObject.FindObjectOfType
08:55

IN THIS VIDEO...
  • Create Loose Scene, modify LooseCollider.cs
  • Add LoadNextLevel() to LevelManager.cs
  • Add all our levels to Project > Build Settings
  • Modify Block.cs by adding SimulateWin()
  • Test that game transitions between levels
Level Build Order
10:58

IN THIS VIDEO...
  • How the Destroy() method works.*
  • Why we destroy gameObject not this.
  • Challenge: only destroy on max hits
SOME USEFUL LINKS...
  • Object Destroy - Unity scripting API
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Destroying When Hit
10:18

IN THIS VIDEO...
  • Why a sprite sheet is useful.
  • Key features of a sprite sheet.
  • Creating sprites for partially broken blocks.
  • Importing sprites into Unity.
Importing Sprite Sheets
15:41

IN THIS VIDEO...
  • The affordance principle
  • What is an array?
  • Using arrays to store these sprites.
  • Loading sprite when hit.
Swapping Sprites In Script
11:57

IN THIS VIDEO...
  • What are tags?*
  • Why tags are useful for keeping track.
  • Tagging unbreakable bricks.
  • Use tags to decide when level is won.

SOME USEFUL LINKS...

  • Unity 3D Tags

(NOTE YOU CAN CLICK THESE LINKS BELOW)

Consolidating Hit Counting
12:48

IN THIS VIDEO...
  • Why loading levels could be problematic.
  • How a static Brick variable can help.
  • Keeping track of breakable bricks in the level.
  • Creating a simple BrickDestroyed “message”.
  • Testing inc. when 2 bricks destroyed at once.
SOME USEFUL LINKS...
  • Statics to detect win condition end state
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Statics To Detect Win Condition
14:00

IN THIS VIDEO...

  • Using audio.Play() to play “boing” sound;
  • Why AudioSource.PlayClipAtPoint useful.
  • Using this for playing “crack”.
  • Test & demonstrate.

SOME USEFUL LINKS...

  • Playing sound effects on impact end state

(NOTE YOU CAN CLICK THESE LINKS BELOW)

Playing Sound Effects On Impact
12:03

Using Random.Range()
08:35

IN THIS VIDEO...
  • Create & tidy your levels
  • Ensure Hierarchy is tidy in each level.
  • Give each level a different 800x600 background.
  • Play test all the levels.
  • Ensure level order is right in File > Build Order.
Automated Play Testing
14:05

IN THIS VIDEO...

  • Revising setting your Game window.
  • How to tweak sound levels.
  • Doing a test web build and playing locally.
  • Revising building and sharing to web.
  • Looking forward to seeing your levels!
SOME USEFUL LINKS...
  • AudioSource - Unity Scripting API
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Build & Share On The Web
07:46

IN THIS VIDEO...
  • How to reproduce the problem?
  • Debug to find the root cause.
  • Make the fix, and re-test.
  • Remove debug code.
  • Challenge: Fix the bug
Fixing User Reported Bugs
05:57

IN THIS VIDEO...
  • What's a polygon collider.
  • Why it can help us improve our game.
  • How to manipulate polygon colliders.
  • Challenge: Chamfer your paddle.
More Complex Collider Shapes
12:47

IN THIS VIDEO...
  • The coding trade off triangle.
  • Think about your future self on the project.
  • Renaming a game object and class.
  • Using Debug.LogError().
Making Code Extendable
07:10

IN THIS VIDEO...

  • Create a simple particle system.
  • Make brick look like it goes “up in smoke”.
  • Write code to trigger smoke puffs.
  • Tweak the smoke prefab while play testing.
SOME USEFUL LINKS...
  • Unity - Manual: Particle Systems
  • Object Instantiate - Unity Scripting API
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Using Particle Systems
11:09

OPTIONALLY converting your project to Unity 5, and sharing with Web GL.

BB Unity 5 Upgrade & WebGL Build
04:25

DOWNLOAD Section 5 Unity Project
00:22

Section End QUIZ
5 questions

IN THIS VIDEO...

  • Recap and what's next
  • Congratulations, you've learnt a lot.
  • Make your own levels.
  • Ask a friend to make levels.
  • Care with commercial music.
  • Share your creation in Discussions, or www.CompleteUnityDeveloper.com (link below)


Section 5 Wrap Up
01:32
+
Laser Defender
27 Lectures 04:24:27

IN THIS VIDEO...

  • Laser Defender introduction
  • What Laser Defender teaches
    • Animation basics
    • Using Trigger colliders
    • Introduction to Particle Systems
Introduction to Laser Defender
01:33

Section 6 Game Design Document
3 pages

Your Laser Defender Assets
1 page

Section 6 Notes
132 pages

IN THIS VIDEO...
  • Open our previous game and import the menu system
  • Create a unity package
  • Import package into Laser Defender
  • Alternatively, we can use the unitypackage from the section bundle at the beginning of this section
Importing The Menu System
05:01

IN THIS VIDEO...

  • Find a suitable sprite asset
  • Import into our game
  • Create a Player Controller Script to move it
  • Restrict the movement to the playspace
SOME USEFUL LINKS...
  • OpenGameArt.org
  • Kenney · Game development studio, Netherlands · Home
  • Space Shooter Redux
(NOTE YOU CAN CLICK THESE LINKS BELOW)
A Starship We Can Control
11:16

IN THIS VIDEO...
  • How to stop the spaceship from going outside the playspace
  • We will check the position when moving and restrict it to something sensible
Restricting The Player's Position
15:38

IN THIS VIDEO...
  • Creating the enemy prefab
  • Create an EnemySpawner that will generate enemies at runtime
  • Make the EnemySpawner generate a single enemy on start
Creating The Enemies
10:17

IN THIS VIDEO...

  • Create a position within the EnemyFormation
  • Use OnDrawGizmos() to show the position
  • Turn the position into a prefab
  • Change the spawning script to keep track of positions
Creating Enemy Positions
14:22

IN THIS VIDEO...
  • Showing the Formation in the Editor
  • Show all four sides of the formation
  • Move the formation side to side
Moving The Enemy Formation
18:07

IN THIS VIDEO...

  • Fix the boundary issue with the formation getting stuck on the edge of the playspace
Fixing The Formation Movement
06:05

IN THIS VIDEO...
  • Player object should spawns laser when [space] is pressed
  • Create a laser prefab
  • We use Instantiate() to create a new one
  • We give the projectile velocity
Spawning Projectiles
19:38

What did we need to do to get the Laser Defender game set up? We'll review some of the key learnings and new concepts introduced.

Mid Section QUIZ
9 questions

IN THIS VIDEO...
  • Enemies will respond to the projectile hitting them.
  • We use Kinematic Rigidbody Triggers for the enemies
  • On trigger, enemy takes damage according to projectile component
  • Defining the projectile behaviour
  • Detect laser collisions
  • Getting the damage from the lasers
Shooting Enemies
18:09

IN THIS VIDEO...
  • Enemies will randomly shoot back with a tuneable frequency
  • Make enemies shoot at the player
  • Create enemy projectile
  • Getting hit by the enemy
  • Tuning the frequency
Enemies Shooting Back
22:51

IN THIS VIDEO...
  • Player shoots itself when firing!
  • Lasers hit each other!
  • We need the player's projectile not to collide with itself or the player
  • We need the enemy projectiles to not collide with enemies or each other
Controlling Collisions with Layers
08:12

IN THIS VIDEO...
  • We need to know when all enemies are dead
  • We use the childCount property of a transform on the positions - an empty position is a dead enemy
  • We re-spawn the enemies when that happens
Detecting Enemies Have Been Destroyed
08:58

In this video we will:

  • Learn how to use recursive functions for the first time
  • Make something happen multiple times with a delay between each time
Spawning Enemies One By One
10:12

Mid Section QUIZ
9 questions

IN THIS VIDEO...
  • Enemies should animate in, rather than appear
  • Create an Animator and Animation Controller
  • Create states to represent arriving and flying
  • Add the appropriate animation
Enemy Position Animation
19:55

IN THIS VIDEO...
  • The background looks a little barren
  • Let's add a starfield with parallax effect to give some sense of depth
  • We can use a Particle System to do this.
  • Explore Particle Effects
Creating A Starfield
12:20

IN THIS VIDEO...
  • Requires Some object to keep track of the scores
  • Create the UI for the score
  • We'll create a ScoreKeeper that we attach to the score
  • When an Enemy dies, we'll call the ScoreKeeper
Keeping Score
13:52

IN THIS VIDEO...
  • Adding sound to your game
  • Will make a huge difference to our game
  • Easy enough to do
  • We'll look at playing sounds independently of an object, so that we can play a death sound for the enemies
Sound Effects For Fun And Profit
07:33

IN THIS VIDEO...
  • Sprite rendering order changes which sprites are drawn on top
  • Lets missiles from the player be drawn below the ship when instantiated
  • Create appropriate sorting layers
  • Laser defender now with layers
Sprite Rendering Order
07:07

IN THIS VIDEO...
  • Replacing the menu style
  • Passing the score to the ends
Polishing The Menu System I
15:23

IN THIS VIDEO...

  • Adding our own music to the game
  • Adding a background starfield
SOME USEFUL LINKS...
  • OpenGameArt.org
  • Clearside home
  • Clearside music
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Polishing The Menu System II
12:02

  • Upgrade to Unity 5.
  • About Web GL builds.
  • Build for Web GL and share.
LD Unity 5 & Web GL Sharing (Optional)
03:32

Here is our Unity project at this point in the section. Use it to compare code / settings etc if you get stuck. Once un-zipped you can use File > Open Project in Unity, or browse the folders for any .unity file.

You can get to ALL videos end-state by...

1. Visiting https://github.com/CompleteUnityDeveloper

2. Clicking on the section name.

3. Clicking XX Commits at the top-left (XX will vary)

4. Against the video you want, click the <> button on right.

5. On final page (example) click Download Zip button.

Good luck!

DOWNLOAD Section 6 Unity Project
00:11

Section End QUIZ
12 questions

IN THIS VIDEO...
  • Recap and what's next
  • New in your toolkit
  • Trigger Colliders
  • Sprite Animations
  • Particle Systems
  • Physics Layers
  • Sorting Layers
Section 6 Wrap Up
02:13
+
Glitch Garden: A Plants vs. Zombies Clone
55 Lectures 10:51:28

LEARNING OBJECTIVES

MAJOR: 2D Animation (frame, and rigged)

Minor A: Mobile compatible, no keyboard use.

Minor B: Components to make code extendable.

Minor C: Options Menu scene & PlayerPrefs.

Introduction To Glitch Garden
01:54

Section 7 Game Design Document
00:05

Your Glitch Garden Assets
1 page

Section 7 Notes
47 pages

In this video...

  • What is a splash screen
  • Why use a splash screen
  • Singleton-free music manager
  • Make you splash-screen
  • Add music, and make Start Menu auto-load

Some useful links...
  • Fonts: dafont.com
  • Sound: Freesound.org - Freesound.org

(Note you can click these links below)

Making A Splash Screen
14:26

IN THIS VIDEO...

  • We're building for “mobile first” here.
  • No use of keyboard, just tap & drag.
  • Mobile device aspect ratios.
SOME USEFUL LINKS...
  • Handling resolutions and aspect ratio of common mobile devices for web, application and game development
  • Unity 3D - Manual: Rect Transform
  • Unity 3D - Canvas Scaler
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Scaling & Aspect Ratios
13:57

IN THIS VIDEO...
  • An alternative MusicManager.cs architecture
  • Customise your Win and Loose scenes.
  • Test it all looks and sounds good.
Alternative Music Manager
13:36

IN THIS VIDEO...
  • Customise Win and Loose Scenes.
  • Add a new Options scene (blank for now).
  • Add two buttons: “Back”, “Defaults”.
  • Make Level_01 with “Win” and “Loose” buttons.
  • Test all the navigation and music works properly.
Menus, Options & Music
17:29

IN THIS VIDEO...
  • Adding a nice fade-in to the Start Scene.
  • Giving-up on spelling loose / lose / whatever.
  • Add background image to levels.
  • Check it all flows / scales nicely.
Adding Fade Transitions
12:48

IN THIS VIDEO...
  • Canvas Scaler “Screen Match Mode”.
  • Use a “Raw Image” & grass texture.
  • Define play space, and quiet zones.
  • Setup our Level with prefabs.
Scaling Level Backgrounds
08:49

A brief talking-head video where Ben Tristem introduces how to use PlayerPrefs in Unity.

Introducing PlayerPrefs
02:56

IN THIS VIDEO...
  • What is PlayerPrefs, and why is it useful?
  • Limitations of PlayerPrefs
  • Why we're providing our own wrapper class.
  • Create PlayerPrefsManager.cs static wrapper.
Our PlayerPrefsManager.cs
09:46

Ben recaps where we are, and continues building the PlayerPrefsManager.

Our PlayerPrefsManager - part 2
11:33

IN THIS VIDEO...

  • Introducing UI sliders.
  • Add volume and difficulty sliders.
  • Create OptionsController.cs.
  • Ensure sliders work.
UI Sliders For Options
18:03

Mid Section QUIZ
6 questions

IN THIS VIDEO...

  • The sprite sheet (AKA sprite atlas).
  • Comparison to bone-based animation.
  • Importing & slicing sprite sheets.
  • Making your first animation.
Sprite Sheet Animation
14:38

  • The fundamentals of ratio math(s).
  • What screen aspect ratios mean.
  • How to convert between different aspects.
Ratio Math Primer
05:04

IN THIS VIDEO...
  • Change to world space canvas for levels.
  • Adjust grass tiling (using UV Rect).
  • Add temporary “Core Game” panel.
  • Translate & scale the level canvas.
  • Adjust & prefab the camera.
World Space UI Canvas
15:54

IN THIS VIDEO...
  • How animators, states & motion clips relate
  • Adding multiple animation states & clips.
  • Options for transitioning between them.
  • Again, only animate one character for now.
The Animation Controller
15:27

IN THIS VIDEO...

  • Why my Lizard animation looked fuzzy.
  • What to do about it.
  • Max texture size for mobile devices.
  • A bit about MIP Mapping while we're here.
SOME USEFUL LINKS...
  • Mobile Max Texture Size
  • TexturePacker - Create Sprite Sheets for your game!
  • ShoeBox
  • Glitch
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Texture Size & Compression
10:13

IN THIS VIDEO...

  • Introducing “bone based animation”.
  • Using Gimp on Mac or PC to slice images*
  • How to import and set pivot points.

*Same principles apply to any other image editor.

Using Gimp To Slice Images
11:37

IN THIS VIDEO...
  • Animating Position, Rotation and Scale.
  • Challenge: create your bone animation(s).
2D “Bone-Based” Animation
15:45

  • Different ways of animating objects
  • Different ways of moving transforms
  • Options for combining these.
Animating Our Lizard
11:24

  • Animating the cactus from scratch
  • Re-capping the 5-step process.
Animating Our Cactus
08:30

  • Finishing the defender animations
  • How to make a sprite face the other way.
Finishing Our Defenders
11:53

  • Finish our attackers
  • How to access our code on GitHub.
Finishing Our Attackers
11:04

IN THIS VIDEO...
  • Giving our projectiles rotation in the animator.
  • Giving them translation from the animator*
  • Seeing the combined motion.
*We will change translation to script later.

SOME USEFUL LINKS...

  • GameBucket
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Projectile Animation
09:59

IN THIS VIDEO...

  • What's Unity Remote and why's it useful.
  • Unity Remote 4 on app stores (iOS and Android)
  • How to use it.
  • It's limitations.
SOME USEFUL LINKS...
  • Unity Remote 4
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Using Unity Remote
07:36

IN THIS VIDEO...
  • Read music volume on load, improve Win & Lose.
  • Catch 1st order error with autoLoadLevelAfter().
  • Alternative fade without coding (thank Ryan).
  • Save our scene of sprites & prefab everything.
  • Our current project state is attached.
Review & Improvements
12:55

Mid Section QUIZ
7 questions

IN THIS VIDEO...
  • Create an Attacker.cs component.
  • Why this component model is useful.
  • Tune our animation to avoid “moon walking”.
Moving Attackers From Script
11:42

IN THIS VIDEO...
  • Using OnTriggerEnter2D (Collider2D collider).
  • Why we are using triggers not physics.
  • Why we won't use the collision matrix this time.
  • Adding appropriate colliders to all objects.
Collision Matrix In Script
16:57

IN THIS VIDEO...
  • The “what” and “why” of animation events.
  • What methods can be called, and what can't.
  • Modify Attacker.cs to accept speed events.
  • Get animation transitions working for all attackers.
  • Add “wishful” StrikeCurrentTarget() method.
Using Animation Events
18:13

IN THIS VIDEO...
  • The different approaches to abstraction.
  • The benefits of a component model.
  • Get StrikeCurrentTarget() working.
Components “vs” Inheritance
19:31

IN THIS VIDEO...

  • Why a separate component makes sense.
  • Create & attach Health.cs component.
  • Test destruction, and initial play tuning.
Using A Health Component
15:37

IN THIS VIDEO...
  • Three approaches to 2D projectile animation.
  • Separate defenders from their projectiles.
  • Animate projectile using script and animator.
  • Fix-up defender animation states.
Animating Defenders & Projectiles
21:32

IN THIS VIDEO...
  • Why fire by animation events.
  • Create Shooter.cs for shooting defenders.
  • Create FireGun() method in Shooter class.
  • Attach a gun gameObject to spawn projectiles.
  • Arrange for animator to fire projectiles.
Animator Firing Projectiles
18:15

IN THIS VIDEO...
  • Why our Gnome fires too fast.
  • Possible solutions to this type of issue.
  • Why we choose to create a “fire” state.
  • Fine-tune projectile size & spawn position.
Separate Attack & Fire States
10:02

IN THIS VIDEO...
  • Make projectiles damage Attacker with Health.
  • Setup a play space, and start tuning.
  • Tweak damage and health levels.
  • We'll play tune again later.
Handling Projectile Damage
06:39

IN THIS VIDEO...
  • Setting up buttons for defender (tower) selection.
  • Initially they just toggle sprite colour.
  • Setup DefenderSelector.selectedDefender static
  • Test that static is set at start, and on button press.

(Unique Video Reference: 33_GG_CUD)

“Tower” Selector Buttons
16:43

IN THIS VIDEO...

  • The problem with the Projectiles placeholder.
  • Useful blog article on best practices*
  • A pattern for checking and creating.
SOME USEFUL LINKS...
  • *Blog - Unity3D Best Practices
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Creating When Needed
10:06

IN THIS VIDEO...
  • Ensure existing defenders' colliders mask square.
  • Calculate the world-units position of a click.
  • Calculate the nearest play-space grid centre.
  • Spawn the currently selected defender there.
Spawn Defenders To Grid
21:59

IN THIS VIDEO...

  • Place enemy spawners.
  • Decide how spawning is controlled.
  • A word about the Flow Channel*
  • Write script(s) to control spawning.

SOME USEFUL LINKS...

  • *Game Theory Applied: The Flow Channel
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Enemy Spawning & Flow
21:08

IN THIS VIDEO...
  • Find a way of defenders detecting attackers.
  • Only shoot at attackers if ahead in lane.
  • Modify Shooter.cs to make this work.
  • Test that defender enter and leave “attack” state.
Shooters Detect Attackers
18:19

IN THIS VIDEO...
  • Add a sun scoreboard to the game space.
  • Star Trophy animation calls script to add sun.
  • Write StarDisplay.cs class to update scoreboard.
  • Write defender.AddStars(int amount) method.
  • Wire these scripts together.
Using Stars As Currency
14:34

IN THIS VIDEO...

  • Assign a star cost to every defender.
  • Prevent placement until you can afford it.
  • Spend stars when defenders are placed.
  • Use an enumeration to pass meaning.
  • Rough play tuning to create a challenge.
Spending Star Currency
15:16

IN THIS VIDEO...
  • Remove lose test button.
  • Create a lose collider.
  • Setup lose triggering & transition.
  • Improve lose screen.
Handle Lose Condition
09:23

IN THIS VIDEO...

  • Create a UI slider to visually show level progress.
  • Make the slider to “count down” to level end.
  • When time runs out…
  • Show “You Survived” text, and play a sound.
  • Auto-load next level.
UI Slider Level Timer
22:04

IN THIS VIDEO...
  • Tidy Spawner.cs > isTimeToSpawn()
  • Adjust colliders so attackers hit defenders.
  • Fix the gravestone animation transitions.
  • Creates prefabs of our work.
Review & Tidy Up
14:48

IN THIS VIDEO...
  • Display the defender cost on buttons.
  • Tweak the spawn frequency of attackers.
  • Adjust the health of attackers & defenders.
  • Choose amount of damage for projectiles.
  • Play and make sure it's a challenge.
Play Testing & Tuning
17:14

IN THIS VIDEO...

  • Downloading & installing Android Studio.
  • How to solve common issues.
  • Check Android Studio loads.
SOME USEFUL LINKS...
  • Android Studio
(NOTE YOU CAN CLICK THESE LINKS BELOW)
Installing Android Studio
04:44

IN THIS VIDEO...
  • Setting up Build Settings for Android.
  • Deploying to Android device*
  • Play testing on the device.

* You'll need a device connected with a USB cable.

Building To Android
10:21

IN THIS VIDEO...

  • Setup Build Settings in Unity.
  • Build to iOS simulator (Mac “needed”).
  • To build to physical device you “need” a dev kit.
  • Briefly play-test, and note improvements.
  • Share your creation with the world.
Build To iOS Simulator
08:59

IN THIS VIDEO...
  • Simplify by removing SetStartVolume.cs*
  • Destroy tagged game objects on Win condition.
  • … this also solves the “You Win” issue.
  • Add a simple STOP button to game.

* Thanks to Marko for suggesting this.

User Testing Tweaks
12:59

  • Upgrade to Unity 5.
  • About Web GL builds.
  • Build for Web GL and share.
GG Unity 5 & Web GL Sharing (Optional)
03:45

DOWNLOAD Section 7 Unity Project
00:22

Section End QUIZ
5 questions

Section 7 Wrap Up
02:54
+
Bowlmaster: 10-Pin Bowling
53 Lectures 10:56:49
Introduction to Bowlmaster
01:24

About the Game Design Doc

• This part of the section notes is a simple reference for the important specifications of the game. • This is just for reference, we'll refer to it as needed during the videos.

Section 8 Game Design Document
10 pages

IN THIS VIDEO...

  • Your Bowlmaster assets attached.
Your Bowlmaster Assets
1 page

IN THIS VIDEO...

  • What BowlMaster Teaches
  • Manipulating a 3D world.
  • Test driven development.
  • Introducing Unity 5.

SOME USEFUL LINKS...

  • Section Links

(Note you can click these links below)

Section 8 Notes
48 pages

IN THIS VIDEO:

  • How to keep Unity 4.6.3 as well
  • Installing the latest Unity 5
  • A brief tour of what's different
Installing Unity 5
04:12

IN THIS VIDEO...

  • Get used to 3D controls.
  • Create a bowling lane floor according to GDD.
  • Set your main camera to look down the lane.
Creating 3D Cube Floor
12:43

IN THIS VIDEO...

  • Blender is a 3D art program.
  • We need it to import .blend files.
  • It's amazingly powerful, but tricky to get started.
  • You only need to install for this course, not use.
  • www.CompleteBlenderCreator.com to learn more.

SOME USEFUL LINKS...

  • www.CompleteBlenderCreator.com

(Note you can click these links below)

How To Install Blender
05:17

IN THIS VIDEO...

  • Import our bowling pin from Blender*
  • Learn about render and collider meshes.
  • Create a pin prefab.
  • Lay-out all 10 bowling pins on the floor.
SOME USEFUL LINKS

* Find out more at www.CompleteBlenderCreator.com

(Note you can click these links below)

Import Pin From Blender
19:58

In this video...

  • Create a 3D sphere of the right size.
  • Apply a temporary texture so we can see it roll.
  • Add a sphere collider.
  • Add a Rigidbody (3D) and set properties.
  • Make the ball roll down the lane.
Some useful links...
  • Floating Bowling Balls
(Note you can click these links below)
3D Sphere As Bowling Ball
11:09

IN THIS VIDEO...

  • Create CameraControl.cs for the Main Camera.
  • Make the camera track the ball.
  • Stop when it gets close to the headpin.
Control Camera To Track Ball
08:37

IN THIS VIDEO...

  • Add Rigidbody to the pins.
  • Adjust physics so that collisions work*
  • Create new, richer pin prefab.

* We will make this more lifelike later

3D Collisions & Convex Meshes
13:36

IN THIS VIDEO...

  • Create a render texture* ready for camera output.
  • Position a top-down camera looking at pins.
  • Create a user interface panel.
  • Embed a “Raw Image” with this render texture.
SOME USEFUL LINKS

* http://docs.unity3d.com/Manual/class-RenderTexture.html

(Note you can click these links below)

Top Camera Render Texture
11:05

IN THIS VIDEO...

  • Add new UI > Panel ready for swipe gesture.
  • Set scaling & anchors for UI panels
  • Make sure it scales well.
Improve UI Scaling
06:53

IN THIS VIDEO...

  • Re-factor Ball.cs to create public Launch ()
  • Write DragLaunch.cs component for ball.
  • Wire the UI Panel's events to DragLaunch.cs
  • Test new drag control system.
Simple Touch Control System
19:23

IN THIS VIDEO...

  • Add another UI panel at bottom of screen.
  • Ensure this panel “occludes” the touch input.
  • Add two arrows, for moving ball left and right.
  • Write a simple method to allow this at start.
Adding Arrows To Nudge Ball
15:35

IN THIS VIDEO...

  • Overview the pinsetter and our end-goal.
  • Setup “swiper” bar to tidy & reset pins.
  • Add a “Swipe” animation for pin clearing.
  • About animation sub state-machines.
  • Managing pin tidying and resetting.
Animation Sub-State Machines
16:31

IN THIS VIDEO...
  • Unity doesn't support “nested prefabs”.
  • Care: the pins in Pins assembly are unlinked.
  • Adding Pin.cs to the right place(s).
  • About transform.rotation.eulerAngles.
  • Writing code to detect if pins are standing
Working Around Nested Prefabs
17:24

IN THIS VIDEO...

  • About setting-up game object communication.
  • Setup a simple UI Text display for pin count.
  • Create a PinSetter box, and PinSetter.cs
  • Continuously count standing pins.
  • Only find standing pins after ball enters box.
Counting Upright Objects
13:40

Ben encourages you to keep going, even though the lectures are long, and the subject matter is more complex.

Keep Going!
01:23

IN THIS VIDEO...

  • Use the PinSetter's trigger collider to detect ball.
  • Only start counting upright pins when ball enters.
  • Detect when pins have stopped wobbling.
  • Update pin count display to green.
  • Set lastStandingCount to -1 when settled.
Detecting Pins Have Settled 1
19:49

Detecting Pins Have Settled 2
22:01

IN THIS VIDEO...

  • Overview how Tidy & Reset will work.
  • Modify the architecture of the game.
  • Learn about sub-state machines.
  • Learn about default transitions.
  • Setup Tidy & Reset sub-states.
Sub-states & Default States
16:43

IN THIS VIDEO...

  • Add temporary UI Buttons for Reset and Tidy.
  • Write RaisePins() to lift all the standing pins up.
  • Write LowerPins() to lower them down again.
  • Test state machines work properly.
Calling Animator Helper Scripts
16:15

IN THIS VIDEO...

  • A bit more about Transform.Translate().
  • Using the Step button to slow things down.
  • The perils of moving static colliders.
  • How default animation blends can cause issues.
  • Warnings about moving motion clips around
Some Debugging Tips
17:31

IN THIS VIDEO...

  • A reminder about Fixed Timestep.
  • About bounciness & default materials.
  • Issues of scale & effect on Physics Settings.
  • Stopping rigidbody's passing through each other.
Common Physics Issues
21:07

IN THIS VIDEO...

  • About re-factoring your code.
  • Single Responsibility Principle*
  • Wider framework of SOLID.

Some useful links...

  • *Single Responsibility Principle

(Note you can click these links below)


Tidying & Refactoring Code
12:24

Mid Section QUIZ
5 questions

IN THIS VIDEO...

  • Read how bowling scoring works*
  • Draw an Object Communication Diagram.

Some useful links...

  • *Bowling Scoring You Tube
  • *Ten Pin Bowling Wikipedia

(Note you can click these links below)

How 10-Pin Bowling Scoring Works
06:40

IN THIS VIDEO...

  • An overview of Test Driven Development (TDD).
  • The Red > Green > Refactor loop.
  • NEVER refactor with a failing test.
Some useful links...
  • Test Driven Development
(Note you can click these links below)
Test Driven Development (TDD)
05:15

IN THIS VIDEO...

  • What Unity Test Tools are*
  • How to find and install them.
  • Setting up your first failing test.
Some useful links...
  • *Unity Asset Store
(Note you can click these links below)
Install Unity Test Tools
13:26

IN THIS VIDEO...

  • Setup our ScoreMaster.cs class.
  • Write our first few tests.
  • Get the first frame scoring properly.
Making Your First Test Pass
18:54

IN THIS VIDEO:

  • Go through a few more TDD loops
  • Remember Red > Green > Refactor
  • Be strict with yourself, build the discipline
  • Save a version snapshot regularly
  • Have fun!


Red > Green > Refactor
19:00

IN THIS VIDEO:

  • Finish the Control Code
  • Go through the Red > Green > Refactor loop strictly
  • Focus your failing tests on edge cases
  • Keep your ActionMaster.cs looking clean
  • Stop when you're confident it's done
  • Challenge the community to write a failing test!
Finishing Our Control Code
21:11

IN THIS VIDEO:

  • Failing tests challenge
Failing Tests Challenge
17:24

IN THIS VIDEO:

  • A brief overview of a TDD bug reporting cycle
  • Creating relevant tests from user bug reports
  • Sticking to the TDD discipline
Bug Reporting Cycle
13:32

IN THIS VIDEO:

  • Connect PinSetter.cs to ActionMaster.cs
  • Refactor PinSetter.cs to report pin fall
  • Connect PinSetter.cs to the animator
  • Remove the Tidy and Reset test buttons
  • Ensure our game controls it's self now
Wire-Up ActionMaster.cs
19:57

IN THIS VIDEO:

  • Recap the problem with the current setup
  • Use OnTriggerExit () for objects leaving colliders
  • Refactor PinSetters.cs for the new paradigm.
Using OnTriggerExit()
14:46

IN THIS VIDEO:

  • Taking the time to refactor
  • Being your own boss
  • Our current architecture
  • A target architecture
  • Keeping our tests in place
Creating A Testable Architecture
19:02

IN THIS VIDEO:

  • Removing unnecessary Unity Testing folders
  • Importing an animated gif texture
  • Quaternion.Euler() & Quaternion.Identy()
  • Using a boolean flag to prevent dragging
  • Using continuous dynamic collision detection
Tidying Before Moving On
13:13

IN THIS VIDEO:

  • Refactor your ActionMaster tests for new API
  • Refactor your code to single responsibility*

SOME USEFUL LINKS...

  • Single Responsibility Principle

(Note you can click these links below)

Refactoring Code & Tests
18:25

IN THIS VIDEO:

  • Correcting a bug due to incorrect responsibility
  • Create GameManager.cs and PinCounter.cs
  • 'Weed' PinSetter.cs into these new classes
  • Call the static ActionMaster.Next Action()
  • Repeatably test everything still works ok
A Game Manager With State
21:01

IN THIS VIDEO..

  • An overview of the challenge (and delight) ahead
  • Find and move ScoreMasterTest.cs to Editor folder
  • Temporarily disable ActionMasterTest.cs
  • Write cumulative scorer in ScoreMaster.cs
  • Set THE challenge
An Epic TDD Challenge
11:09

IN THIS VIDEO...

  • How we solved the scoring problem.
  • A reminder that it's the destination that counts.
  • How tests protect your refactoring.

“Make things as simple as possible, but not simpler”
Albert Einstein

NOTE: I use a for loop in my solution, which you can read about in the resources below. You can just as easily use a while loop.

Realtime Bowling Scoring Solution
20:15

IN THIS VIDEO...

  • What golden copies are.
  • Why they are useful for verification testing.
  • Using the [Category (“Name”)] test annotation.
  • Using binary search to find the failing test(s).
  • Commenting our code for future readability.
Golden Copy Testing
10:44

IN THIS VIDEO...
  • Rearrange your UI to make space for scores.
  • Create your scoreboard.
  • Wire-up your scoreboard.
An Array Of UI Text
16:20

IN THIS VIDEO..
  • Break your whole game!
  • Trace your bug via console.
  • Discuss handling undefined states.
  • Discuss isolating and fixing bugs.
Tracing Errors Using Console
13:27

IN THIS VIDEO...

  • How to decouple code with try{}, catch{}
  • Mainly used in file handling applications
  • Could be used in a team so one could move on
  • Isolating our ScoreDisplay.cs issues
  • Making our game fail gracefully
Try, Catch For Error Handling
05:02

IN THIS VIDEO..
  • What it means to define a class as static.
  • The perils (and advantages) of statics.
  • Why we're using static here.
  • Refactoring a class to be static.
  • Learning to accept other people's code!
Static Classes In C#
08:33

IN THIS VIDEO..

  • Monobehaviour classes are hard to test*
  • Code a testable static helper method.
  • Create our testing structure.

SOME USEFUL LINKS

  • Testing Monobehaviours

(Note you can click these links below)


Unit Testing Monobehaviours
12:59

IN THIS VIDEO...
  • public static string FormatRolls (List<int> rolls)
  • Write your own tests as you go.
  • Stick to the red-green-refactor loop.
  • Aim for 20 lines or less of beautiful code.
  • Enjoy the process & share with [SPOILER].

SOME USEFUL LINKS

  • Our Score Display Test 1

(Note you can click these links below)

Designing Your Own Tests
17:35

IN THIS VIDEO...

  • Stopping nudging ball off the floor*
  • Make ball collisions detection continuous
  • Suggestions for improvement
  • * Thanks Yang

(Note you can click these links below)

Final Fixes & Finishing Off
08:41

  • Fix display of spare on last bowl.
  • Check that 0X displays properly.
  • Talk about upgrading Unity Test Tools.
Bug Fixes & Upgrading Test Tools
04:15

DOWNLOAD Section 8 Unity Project
00:22

Section End QUIZ
5 questions

Section 8 Wrap Up
01:01
+
Zombie Runner FPS
28 Lectures 04:00:38
  • Creating a stunning 3D terrain.
  • Built-in character controllers.
  • AI navigation and pathfinding.
  • VR compatible HUD interface.
  • Item pick-ups.
Introduction to Zombie Runner
00:34

About this document...

  • A brief specification of your game.
  • Can change as you go along.
  • Meant to help keep you focused
  • … and to remind you of your original idea.
  • We suggest you write one every time.
Section 9 Game Design Document
2 pages

Your Zombie Runner Assets
00:02

In this section...
  • Creating a stunning 3D terrain.
  • Built-in character controllers.
  • AI navigation and pathfinding.
  • VR compatible HUD interface.
  • Item pick-ups.
Section 9 Notes
19 pages

  • Ensure you have Unity 5.1 or later installed.
  • What's new in Unity 5.1
  • What we'll be using in this section.
About Unity 5.1 Features
05:05

  • Read the Game Design Document.
  • How to setup your terrain.
  • Some Unity terrain settings.
  • Raising and lowering terrain.
  • Painting textures on terrain.
Creating A Terrain
14:41

  • What is a First Person controller.
  • Why would we want to use it?
  • Using the standard First Person controller.
  • Previewing your terrain from ground level.
  • About slope limits.
First Person Character Controller
11:12

  • How to place trees on your terrain.
  • How to paint grass details.
  • About grass and billboards.
  • Performance impact of grass.
Placing Trees & Details
10:02

  • Using Unity 5's wonderful water prefab.
  • Create a “water table” in your terrain.
  • Dig down to create some water hazards.
  • Paint mud under the water's surface.
  • Preview water from the ground.

===

Full Lecture Transcript...

00:00:00.000 --> 00:00:07.940

Hey hey, welcome back! So, we're going to be adding a water table, and you are in for a treat,

00:00:07.940 --> 00:00:13.750

because Unity 5 comes with beautiful water shaders built in, for free now! So, let's

00:00:13.750 --> 00:00:17.980

take a look! We're going to be using Unity 5's wonderful water prefab to create a water

00:00:17.980 --> 00:00:22.680

table in your terrain. Water table

meaning a height in the terrain below

00:00:22.680 --> 00:00:27.240

which there is water, although you'll see

that it's just a surface, but let's take

00:00:27.240 --> 00:00:31.949

a look. Dig down to create some water hazards, paint some mud under the water

00:00:31.949 --> 00:00:37.530

surface even, and previewing the water from the ground. So, let's dive

00:00:37.530 --> 00:00:42.469

into Unity and take a look at this. Under your Standard Assets under Environment,

00:00:42.469 --> 00:00:45.030

if you've imported the package, which I

hope you have by now, you should

00:00:45.030 --> 00:00:50.330

have Water and Water Basic. Go for Water Water, that's the folder we're looking for.

00:00:50.330 --> 00:00:55.240

Standard Assets, Environment, Water, Water, and get a prefab, and we're going to go for

00:00:55.240 --> 00:01:00.340

WaterProDaytime, I think for now. They look very similar, by the way. If you drag

00:01:00.350 --> 00:01:05.330

that WaterProDaytime into the scene

and double click it, you'll see that it's

00:01:05.330 --> 00:01:09.470

made a little circle, but it'll have made a

circle in completely the wrong place.

00:01:09.470 --> 00:01:14.490

So, how high do we want this, for a start? Well, maybe 5 meters below our ground,

00:01:14.490 --> 00:01:19.610

so in my case that's at 45. So, that's looking a little bit better. Now, we need to move it

00:01:19.610 --> 00:01:23.680

into the middle of the terrain. So,

remember you can click the Y arrow to

00:01:23.680 --> 00:01:27.439

look at the world from above, and then,

move it roughly to the middle of your

00:01:27.439 --> 00:01:32.040

terrain. Look at your settings, remind

yourself how big your terrain is, if

00:01:32.040 --> 00:01:40.290

necessary go to Terrain Settings 600 by

600. Ok. So, your water, and I'm just going to call

00:01:40.290 --> 00:01:48.090

it Water Table, should be at 300 by 45 by

300, in my case. And if we use

00:01:48.090 --> 00:01:51.960

the Transform Tool, we can confirm there

that it is right in the middle of the

00:01:51.960 --> 00:01:57.960

terrain. Cool! So, the problem with it now is it's too small. So, what size does it need to be?

00:01:57.960 --> 00:02:02.939

Well, if we want it to go out to these corners over here then, it's

00:02:02.939 --> 00:02:10.500

going to need to have a radius of at

least 300, so 300 by 300.

00:02:10.500 --> 00:02:15.420

I'm sorry, the Y direction doesn't matter, because it's just a flat circle, but 300 is going

00:02:15.420 --> 00:02:19.270

to get to the edge here but it's not

going to get to the edges here. So, let's

00:02:19.270 --> 00:02:22.570

do a little calculation. How are we going to find out how big it needs to be to

00:02:22.570 --> 00:02:28.060

go to the edge? Well, it's going to be the

square root of 2, isn't it. If you're any good at

00:02:28.060 --> 00:02:31.840

math, you'll know that it's going to be

the square root of 2, which is 1.4

00:02:31.840 --> 00:02:42.540

times the 300. So, 425 will do. If we make a scale 425, in both directions,

00:02:42.540 --> 00:02:48.350

X and Z. Boom! Now, we have a water

table that is just as big as our terrain.

00:02:48.350 --> 00:02:53.000

It just about touches the edges of the

terrain, and wherever the terrain is lower

00:02:53.000 --> 00:02:56.930

than that, it will intercept the water

table. So, let's go right down to the

00:02:56.930 --> 00:02:59.790

FPS Controller and have a quick look

around, to start with.

00:02:59.790 --> 00:03:04.880

Now, if you've got any low-lying areas, like this big hole I'm heading over towards at breakneck speed

00:03:04.880 --> 00:03:10.700

over here, then, you're going to be in for a treat in a minute, because we're going to get Unity 5's wonderful

00:03:10.700 --> 00:03:19.240

water shader in our face. Look at that! And without even making any changes to the settings, it's already not looking half bad.

00:03:19.240 --> 00:03:24.640

Look at that! How cool is that? And you can look back at the Sun and have lots of fun. Now, we're going to

00:03:24.640 --> 00:03:28.880

improve the lighting, we're going to do all sorts of things, but I just wanted to show you how nice the

00:03:28.880 --> 00:03:35.160

water shader actually is in here. So, what that's done is it's put a water circle underneath the

00:03:35.170 --> 00:03:40.120

entire terrain, at a fixed height. Now,

anywhere that you decide to go and drop

00:03:40.120 --> 00:03:44.230

the height of the terrain, now the water

will appear, which is what I meant by a

00:03:44.230 --> 00:03:49.670

water table. So, you might want to create

some water hazards, some water areas, where

00:03:49.670 --> 00:03:54.010

your zombies are going to attack you,

and you don't want them to get across the

00:03:54.010 --> 00:04:01.370

water. So, as you drop the terrain, it will

automatically now create water

00:04:01.370 --> 00:04:06.840

effectively. You're going to end up with some trees. So, remember you go to trees, and you hold

00:04:06.840 --> 00:04:13.190

down Shift and you just delete trees

like that. Ok. And then, your FPS controller you may

00:04:13.190 --> 00:04:20.400

want to move across into say the middle.

Where is the middle? 300 by 300.

00:04:20.400 --> 00:04:25.760

Let's see where we end up, probably in

the water. Now, we're stuck underwater. Now, when

00:04:25.760 --> 00:04:31.460

you're underwater, it doesn't look like you're under water, because it's just not how the renderer

00:04:31.460 --> 00:04:35.310

works. And later on, we're going to put some colliders in, so that if we actually end

00:04:35.310 --> 00:04:39.990

up in the water we die, but in the meanwhile, I just want to show you how cool this looks, hey. Really coming

00:04:39.990 --> 00:04:46.320

together nicely. Now, there are some settings on your Water Table Prefab, let's look at it. It has a Water Plane Mesh,

00:04:46.320 --> 00:04:52.949

which is slightly different to a Normal Mesh. It has some materials here, it also has a

00:04:52.949 --> 00:04:57.880

Water Script, and you can choose whether

it's Reflective, Refractive,

00:04:57.880 --> 00:05:01.840

or Simple. So, if you go reflective then, it only reflects off the surface.

00:05:01.840 --> 00:05:06.400

I kind of prefer that actually, and I'm

probably going to leave mine reflective.

00:05:06.400 --> 00:05:11.540

But if you do want to better see under the

surface, you can make refractive water, which is

00:05:11.550 --> 00:05:14.800

even more complicated. Now, that will

reflect off the surface, but it will also

00:05:14.800 --> 00:05:19.370

show into the water. It's up to you which one of those two you use. I've never seen water quite

00:05:19.370 --> 00:05:24.440

this clear, so I think I'm going to just

go with reflective. The other benefit of

00:05:24.440 --> 00:05:28.760

going with reflective is, if you're with

refractive then, you have to start going

00:05:28.760 --> 00:05:32.660

in and painting under the water,

otherwise it looks silly. So, if we go to

00:05:32.660 --> 00:05:37.100

this area here, it looks silly for there to be grass growing under the water.

00:05:37.100 --> 00:05:41.300

You could of course go to your terrain, your Paint Tool, get your muddy widget here.

00:05:41.300 --> 00:05:47.460

Maybe a smaller brush, and you could paint mud under the water surface, diligently in

00:05:47.470 --> 00:05:50.479

all of your ponds. Now, if you've got the

patience for that, well then I commend you,

00:05:50.479 --> 00:05:57.679

and that would be great and it would look a lot better. But if you look in there, it's still ridiculously clear water

00:05:57.680 --> 00:06:02.780

isn't it? So, unless you've got a setting in the water for how clear the water is, I would suggest

00:06:02.780 --> 00:06:05.210

you just go Reflective water. It's entirely up to you.

00:06:05.210 --> 00:06:08.930

Alright and then, you can choose various other things, which I don't think

00:06:08.930 --> 00:06:12.250

we need to be messing around with now.

You've also got some options under

00:06:12.250 --> 00:06:17.490

WaterProDaytime here, which we can look at, but It's best off if we can see the game view.

00:06:17.490 --> 00:06:26.020

So, I'm going to unmaximize on play, click play, go to the water's edge like so. Now, I can mess

00:06:26.030 --> 00:06:30.930

around with the Water Scale, and that changes the Wave Scale of the water. In fact, I recommend

00:06:30.930 --> 00:06:34.509

a slightly lower Wave Scale. So remember, if you make these changes in

00:06:34.509 --> 00:06:37.699

Play Mode it's going to forget them when

you get out. And unfortunately, being a

00:06:37.699 --> 00:06:41.940

shader you can't copy these things, so you're just going to need to remember them. So you've

00:06:41.940 --> 00:06:46.320

got your reflection distortion here,

which is changing how much it's distorting

00:06:46.320 --> 00:06:50.690

those trees. You see, if I put it down to 0,

you see how kind of glassy it is.

00:06:50.690 --> 00:06:53.820

So, that's cool! Refraction Distortion is not going to make any difference here, because we've got a

00:06:53.820 --> 00:06:59.770

purely reflective shader. Alright so,

that's the shader, which is the thing

00:06:59.770 --> 00:07:02.880

which is responsible for choosing how

that surface of the water looks.

00:07:02.880 --> 00:07:06.979

The water is actually just flat, and the

shader is very cleverly making it look

00:07:06.979 --> 00:07:12.160

like it's not flat. So, play with the

properties of your water yourself, and

00:07:12.160 --> 00:07:15.509

get your water looking how you would

like it to look.

Adding A Water Table
07:17

  • Moving scene view to character view.
  • Adding fog to your scene.
  • Add a lens flare to the sun.
  • Add a flare layer to the FPSController camera.
Awsome-ify Your Scene Lighting
12:12

  • What is a Navmesh.
  • Setting up a terrain Navmesh.
  • About bake settings.
  • Bake our NavMesh.
  • Preview to ensure it suits our terrain.
Setting Up Your Navmesh
09:14

  • Using a reference cube in your scene.
  • Setting your first person character eye height.
  • Checking character scale against environment.
Scaling Your Characters
10:44

  • Setup player spawn points in hierarchy.
  • Update FPSController prefab before deleting.
  • Create a PlayerSpawner.cs script.
  • Arrange for player to spawn randomly on Start()
Setup Player Spawn Points
14:19

  • About the Unity Input Manager.
  • Create input for view zoom (default v).
  • Create input for call helicopter (default h).
  • Give both inputs basic 'placeholder' behaviour.
  • Preventing duplicate key presses.
Using Input Mapping
11:56

  • About 3D sounds.
  • Attaching and tweaking your first 3D sound.
  • Arranging simple helicopter landing.
  • About 2D / 3D Spatial Blend.
  • Using multiple audio sources.
Adding 3D Helicopter Sound
14:34

  • Introducing Unity's Mechanim system.
  • Exploring how Ethan is constructed.
  • Finding the rigging and muscles tool.
Rigged “Mechanim” Animation
08:42

  • An overview of how Ethan is animated.
  • About re-targeting animations.
  • Introducing Blend Trees.
  • What is Inverse Kinematics (IK)?
Exploring Humanoid Animation
10:27

  • A little about Earth's orbit.
  • Coding a simple day-night cycle.
  • Using a time scaling parameter.
Simple Day-Night Cycle
08:15

  • Looking for a suitable landing place.
  • Which type of collider to detect a clear area?
  • Creating a simple system.
  • Our vision for the game.
Searching For Clear Area
13:50

  • Introducing SendMessageUpwards()*
  • Creating a message for the helicopter call.
  • Making the helo respond to the message.
http://docs.unity3d.com/ScriptReference/Component.SendMessageUpwards.html
Using SendMessageUpwards
09:58

  • Using an inner voice to guide the player.
  • Recording some sound prompts.
  • Triggering sound prompts at the right time.
  • Handling multiple AudioSources.
  • Using audio priority.
Inner Voice To Guide Player
12:02

  • BroadcastMessage() sends down the hierarchy.
  • Creating a natural parent RadioSystem object.
  • Creating a new child of player called InnerVoice.
  • Reduce to one Audio Source per game object.
Using BroadcastMessage()
10:42

  • Sending messages up and down the hierarchy.
  • Using Invoke() to delay audio playback.
  • Writing RadioSystem.cs for radio communication.
Refactoring Our Message System
16:27

Recording dialog placeholders.

Remember you may need a .mp3 licence*

About normalizing sound volume.

Organising and attaching audio.

Normalizing Audio Files
07:56

  • Creating a landing area prefab.
  • Using the flare particle effect.
  • Setting the game to start at dusk.
  • Making the player deploy the flare.
Landing Area Prefab
09:39

  • What we've left-out and why.
  • Checking our project is tidy.
  • How to compact your Unity folder.
  • Finding our code on GitHub.
  • Over to you.
Compacting Your Unity Folder
08:54

The end state of our Zombie Runner project is attached for download.

DOWNLOAD Section 9 Unity Project
00:22

Section End QUIZ
5 questions

Section 9 Wrap-Up
01:32
+
Twin Sticks 2.5D
19 Lectures 02:21:46

In this video Ben Tristem explains what you will learn about Unity 5 in this tutorial section, including...

  • How to build a 2.5D game in Unity.
  • How to save your game to PlayerPrefs.
  • Using World Space UI in a 3D game.
  • More about using anchors for a responsive UI.
  • Making your game cross platform in Unity.
Welcome to Twin Sticks
04:09

A PDF of the slides used in this section.

Section 10 Notes
13 pages

Your Twin Stick Assets
00:03

  • Why you may want to use version control.
  • An overview of how we use it.
  • Follow us on GitHub.
  • Where to find the course repositories.
Introducing Version Control
06:39

  • How Git can help you share your project.
  • How we use Git for the course.
  • What's different about how you may use it.
  • Read Dan's blog post*

http://leereilly.net/2012/11/29/hosting-games-on-github.html

Sharing Your Game With Git
10:07

  • Download SourceTree
  • Creating local & remote repos.
  • Using a .gitignore file for Unity.
  • Connect to GitHub (or BitBucket).
  • Share your repo in the discussions.
Using SourceTree & Git
14:41

  • What is CrossPlatformInputManager.
  • How a virtual control layer works.
  • Setting-up an reading control values.
Using CrossPlatformInputManager
13:58

  • About using gamepad input.
  • Setting up a PS4 controller on a Mac.
  • Using an Xbox controller on a PC.
  • Using the input gravity setting.
  • Other input settings such as sensitivity.
Using Analog Gamepad (Optional)
06:49

Mid Section QUIZ
5 questions

  • Import the Characters standard asset pack.
  • Use the RollerBall prefab game object.
  • Using physics freeze position constraints.
  • Explore the control options.
Using The RollerBall Prefab
05:32

  • An overview of replay systems.
  • Deterministic vs. non-deterministic replays.
  • An overview of how we will do things.
  • Introducing a circular (ring) buffer.
Designing A Replay System
05:58

  • Why we're not using Unity's Keyframe struct*
  • Comparing classes and structs as options.
  • Creating our own MyKeyframe struct.

http://docs.unity3d.com/ScriptReference/Keyframe.html

Class Vs Struct In C#
07:57

  • An overview of our replay system code.
  • Implementing a ring buffer for frames.
  • Testing our record and playback.
Creating A Replay System
10:38

  • Create a simple Game Manager.
  • Use it to keep track of recording / playback.
  • Wire it to the ReplaySystem.cs script.
  • Test playback.
Building A Game Manager
06:53

  • Create a simple Game Manager.
  • Use it to keep track of recording / playback.
  • Wire it to the ReplaySystem.cs script.
  • Test playback.
Touchscreen Joystick Control
11:03

  • Dig-up your old PlayerPrefsManager
  • Add code to handle level unlocks.
  • Create a simple proof of concept.
Level Unlocks In Unity
08:12

Pausing Your Game
10:43

  • Reading from 3rd and 4th joystick axis.
  • Import & explore “selfie stick” prefab.
  • Write code to make camera track player.
  • Write code to make right stick orbit the camera.
  • Test it’s all working.
Reading From 2nd Stick
16:52

DOWNLOAD Section 10 Unity Project
00:22

Section End QUIZ
5 questions

Section 10 Wrap-Up
01:09
2 More Sections
About the Instructor
Ben Tristem
4.7 Average rating
45,743 Reviews
234,752 Students
10 Courses
Best-selling Instructor, Game Developer, Online Entrepreneur

Hi, I'm Ben. I have a degree in computing from Imperial College London, and a physics diploma from the Open University.

I started working for myself at the age of 15, and never looked back. I explored careers as varied as being a commercial pilot, stunt-man, rock climbing instructor, and more. None of these provided a continued challenge, and stable income in the same way technology does.

After building and selling a home computer support business, I became an angel investor and business mentor here in Cambridge UK. I fell in love with teaching game development through one of my investments, and I now spend all of my time sharing my passion with people like you.

I can't wait to help you experience the fulfilment, and financial freedom, that having a deep understanding of technology brings.

So why not start learning to make games with me and my team now?

See you soon!

Ben