Complete C# Unity Game Developer 3D
4.6 (21,334 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
116,874 students enrolled

Complete C# Unity Game Developer 3D

Design & Develop Video Games. Learn C# in Unity Engine. Code Your first 3D Unity games for web, Mac & PC.
4.6 (21,358 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
116,892 students enrolled
Last updated 7/2020
English [Auto], French [Auto], 5 more
  • German [Auto]
  • Italian [Auto]
  • Polish [Auto]
  • Portuguese [Auto]
  • Spanish [Auto]
Current price: $135.99 Original price: $194.99 Discount: 30% off
11 hours left at this price!
30-Day Money-Back Guarantee
This course includes
  • 34 hours on-demand video
  • 2 articles
  • 26 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Learn C# from scratch. A powerful modern language.
  • Get experience using Unity 2017 - a very versatile 3D tool.
  • Gain an excellent general knowledge of video game design.
  • Make 2.5D and 3D games in Unity.
  • Transfer your knowledge to .NET, other languages, and more.
  • Learn how object oriented programming works in practice.
  • Develop a positive attitude to problem solving.
  • Practical exercises EVERY VIDEO to build actual skills.
  • Learn good coding and design patterns.
  • Learn to use source control, a valuable tool for working in small teams.
Course content
Expand all 218 lectures 33:53:41
+ First Steps - Getting Set Up
9 lectures 01:16:45
  1. Get the latest version of Unity 2017 (5GB PC, 10GB Mac).
  2. We are using version 2017.1.1, version on slides.
  3. We'll update at the start of each section.
  4. How to find previous versions if needed.
  5. For Mac users only: downloading Visual Studio Mac.
  6. Later: change Unity to use VS on Mac.

(Unique Video Reference: 1_FS_CU2)

Preview 08:05
  1. How Unity and Visual Studio relate.
  2. How to ask good questions & get the best help.
  3. Use the Q&A system for questions that need answers.
  4. Use the Community site for sharing work and ideas.
  5. Use our Discord chat server for live chat.

(Unique Video Reference: 2_FS_CU2)

How To Use This Course
  1. How to setup and save a new project.
  2. Pick 3D (you can change and add asset packs later).
  3. Introducing Hierarchy, Scene, and Project tabs (default view)
  4. Build a simple block car.
  5. Save, screenshot & share.

(Unique Video Reference: 3_FS_CU2)

Introducing Unity
  1. Parent and child GameObjects and transforms.
  2. What, why and how to prefab everything.
  3. Build a 2nd object (e.g. bike, person, street lamp, tree).
  4. Compose a small scene & share.
  5. Save and explore the files on disc.

(Unique Video Reference: 4_FS_CU2)

The Wonder Of Prefabs
  1. How an IDE helps us to write code.
  2. How to create a script from the Unity editor.
  3. How to chose which IDE Unity uses*.
  4. Setting your font size.
  5. How to attach a .cs script to a GameObject.
  6. Particularly how to make Unity use Visual Studio on a Mac.

(Unique Video Reference: 5_FS_CU2)

Introducing Visual Studio

Checklist to go through in order to fix the problem where Visual Studio is not auto completing.

(UVR: 5a_FS_CU2)

Fixing Visual Studio Problems
Check Your Understanding 1.1
5 questions
  1. How these hangouts work.
  2. Thanks for your introductions.
  3. MonoDevelop vs Visual Studio.
  4. Mac vs PC considerations.
  5. Answering some common questions.

(Unique Video Reference: 5b_FS_CU2)

Instructor Hangout 1.1
  1. What you learned in this section.
  2. Please make the effort to engage in our community.
  3. Start the next section right away.

(Unique Video Reference: 6_FS_CU2)

Section 1 Conclusion
+ Terminal Hacker - Basic C#
25 lectures 03:22:57
  1. About the provided terminal asset.
  2. You will learn foundational C# skills.
  3. Experienced developers should skim this section.

(Unique Video Reference: 1_TH_CU2)

Welcome To Section 2
  1. Identify our game design intention for the Terminal Hacker game.
  2. Game flow and screens required for this game.
  3. Creating our library of anagrams.

(Unique Video Reference: 2_TH_CU2)

Terminal Hacker Game Design
  1. Download the asset from lecture resources.
  2. Import your first asset pack.
  3. How to rename a Unity project.

(Unique Video Reference: 3_TH_CU2)

Import WM2000 Terminal Asset
  1. Introducing our Terminal.WriteLine() command.
  2. Your firs look at our Docs.
  3. Write and share your game menu screen.

(Unique Video Reference: 4_TH_CU2)

Using Our Terminal.WriteLine()
  1. How C# is organised into functions, classes, etc.
  2. The format of a C# function (without parameters).
  3. About naming and encapsulating.

(Unique Video Reference: 5_TH_CU2)

Preview 07:10
  1. Why we are introducing variables at this stage.
  2. What a variable is and how to use one.
  3. Using our first variable.

(Unique Video Reference: 6_TH_CU2)

Introducing Variables
  1. Where we are in our journey towards messages.
  2. How go DECLARE, DEFINE & CALL functions with parameters.
  3. How to PASS variable parameters to a function.

(Unique Video Reference: 7_TH_CU2)

Functions With Variable Parameters
  1. Messages vs. Functions in C#.
  2. An analogy to help you understand messages.
  3. Using our OnUserInput(string input) message.

(Unique Video Reference: 8_TH_CU2)

Messages Are Special Functions
  1. Operators are like special functions that do things.
  2. Syntax is the rules about the way code is written.
  3. Expressions evaluate to something, e.g. 1 == 2 is false
  4. Using an pure expression to detect if the user typed 1.

(Unique Video Reference: 9_TH_CU2)

C# Operators & Expressions
  1. How important being able to "branch" is.
  2. The syntax (structure) of an if statement.
  3. Giving our player control over the menu system.

(Unique Video Reference: 10_TH_CU2)

Conditional Program Flow Using if
Check Your Understanding 2.1
10 questions
  1. A brief explanation of supplied function.
  2. How to download previous versions of Unity.
  3. A little more about the void keyword.
  4. About our "spiral syllabus" approach.
  5. A quick overview of our optoinal forum.

(Unique Video Reference: 10b_TH_CU2)

Instructor Hangout 2.1
  1. Well done getting this far.
  2. You've learned ALL the programming basics now.
  3. I'd love your comments against this lecture.
  4. What are we doing well? What could we do better?
  5. We're about to pick up pace and code much faster.

(Unique Video Reference: 11_TH_CU2)

We’re About To Pick-Up Pace
  1. What member variables are.
  2. Why they are useful.
  3. Use member variables sparingly to hold state.

(Unique Video Reference: 12_TH_CU2)

Member Variables To Hold State
  1. Introducing a finite state machine.
  2. How 'enum'erations are helpful here.
  3. Declaring and using our first 'enum'

(Unique Video Reference: 13_TH_CU2)

Enumerating Our Game States
  1. Getting an eye for when code it too complex.
  2. Using the "extract" tool of your IDE.
  3. A function should only do one thing.
  4. Moving our game forward.

(Unique Video Reference: 14_TH_CU2)

Refactoring Our Code
  1. Don't be afraid to fail.
  2. A solid challenge for you.
  3. Getting basic password working.

(Unique Video Reference: 15_TH_CU2)

Your First Solo
  1. What an array is.
  2. Why we would use one.
  3. How to create an array in C#.
  4. Using arrays to store our passwords.

(Unique Video Reference: 16_TH_CU2)

Arrays Of Variables
  1. A trick with using bool and if.
  2. Introducing switch
  3. When to use switch vs if

(Unique Video Reference: 17_TH_CU2)

switch vs if
  1. How namespaces can "clash" with Random.
  2. Using Unity's Random.Range().
  3. How random numbers benefit your game.
  4. How to avoid "caching" information.

(Unique Video Reference: 18_TH_CU2)

Introducing Random Behaviour
  1. Introducing ASCII art.
  2. How to engage your player's emotions.
  3. An opportunity to get creative.

(Unique Video Reference: 19_TH_CU2)

Creating A Win Screen
  1. Adding a third difficulty level.
  2. Introducing const for constants.
  3. Correcting typos!

(Unique Video Reference: 20_TH_CU2)

Section 2 Integration Challenge
  1. Refactoring & extra steps on PC (thanks Daniel).
  2. Playback speed, closed caption and self-pacing.
  3. Comments on switch vs if (thanks Jeepty).
  4. How to use our spiffy course repo on GitHub.
  5. About deleting your Library folder (ShadeWolf).
  6. Keep sharing screenshots, video clips next.
  7. We’d love a review :-)

(Unique Video Reference: 20b_TH_CU2)

Instructor Hangout 2.2
Check Your Understanding 2.2
10 questions
  1. How to create a WebGL build.
  2. Using
  3. Share your game for feedback.
  4. Our first play testing session.

(Unique Video Reference: 21_TH_CU2)

Share Online & Play Test
  1. How to take feedback.
  2. Bug fixes.

(Unique Video Reference: 22_TH_CU2)

Feedback & Bug Fixes
  1. Congratulations.
  2. A recap of what you learned.
  3. Some notable C# you didn't learn.
  4. Some further challenge ideas.
  5. Start the next section right away.

(Unique Video Reference: 23_TH_CU2)

Section 2 Wrap-Up
+ Project Boost - Basic Unity
39 lectures 06:12:53
  1. This game is based on the old classic Thrust.
  2. We'll be using Unity's physics engine.
  3. Rick will be teaching design.

(Unique Video Reference: 1_PB_CU2)

Welcome To Section 3
  1. This game is based on the old classic Thrust.
  2. We'll be using Unity's physics engine.
  3. Rick will be teaching design.

(Unique Video Reference: 2_PB_CU2)

Project Boost Game Design
  • Common game design challenges that we need to resolve.
  • What is onion design and how are we using it to inform priorities for developing our game.

((Unique Video Reference: 3_PB_CU2)

Onion Design
SourceTree Differences on Mac
  1. About version control and why we care.
  2. How version control helps with game development.
  3. Setting up Git and SourceTree with Unity.

(Unique Video Reference: 4_PB_CU2)

Introducing Version Control
  1. What a .gitignore file is.
  2. Unity's Library folder is a cache.
  3. How to easily add a Unity .gitignore.

(Unique Video Reference: 5_PB_CU2)

Add Unity .gitignore Easily
  1. Which axis is right, forward and up in Unity.
  2. Everything should be prefabbed.
  3. How to create a material.
  4. Setting our world origin.

(Unique Video Reference: 6_PB_CU2)

The Origin Of Our World
  1. Guidelines for setting up compound game objects.
  2. Using primitive shapes to create placeholder art.
  3. Creating our first rocket ship!

(Unique Video Reference: 7_PB_CU2)

Placeholder Art From Primitives
  1. How to read direct from keys.
  2. Testing key logic with the Console.
  3. Preparing to launch our ship.

(Unique Video Reference: 8_PB_CU2)

Basic Input Binding
  1. How to access a rigid body in Unity 2017.
  2. Using AddRelativeForce().
  3. Adjusting mass to get our ship hovering!

(Unique Video Reference: 9_PB_CU2)

Physics and Rigidbodies
  1. Some things in 2D and 3D have handedness.
  2. This is important when making computer games (and drugs).
  3. How to use your hands to predict rotations.

(Unique Video Reference: 9b_PB_CU2)

Coordinate System Handedness
  1. Using a "Play Mode Tint".
  2. How to make things frame-rate independent.
  3. Using 'Time.deltaTime' to predict frame time.
  4. Getting our ship rotating in space.

(Unique Video Reference: 10_PB_CU2)

Preview 08:58
Check Your Understanding 3.1
10 questions
  1. Why Git rather than Unity Collab (Jason).
  2. Clarifying the handedness rule finger order.
  3. Struggling SourceTree on Mac? Forum (Frank).
  4. How to re-centre pivot point on rocket (Rory).
  5. Adding box collider to odd shaped rocket (Andy).
  6. Adding [Prefix] to Q&A question and comments.
  7. Mad How Disease, and that 1000y old text!

(Unique Video Reference: 10b_PB_CU2)

Instructor Hangout 3.1
  1. There's an Audio Listener on the Main Camera.
  2. An Audio Source component makes sounds.
  3. How to create and attach an Audio Clip.
  4. Making sounds when the rocket thrutsts.

(Unique Video Reference: 11_PB_CU2)

Adding A Touch Of Audio
  1. A minor code refactor.
  2. Update our ship prefab.
  3. Create new gameplay platforms.
  4. Use Rigid Body Constraints.
  5. Using rigidBody.freezeRotation = true
  6. Adding some Drag to our ship.

(Unique Video Reference: 12_PB_CU2)

Resolving Movement Bugs
  1. Multiply a vector by a float to change length.
  2. SerializeField vs public to expose to Inspector.
  3. Creating design "levers".
  4. Tweaking our rocket movement.

(Unique Video Reference: 13_PB_CU2)

Using SerializeField vs public
  1. The pros and cons of using tags in Unity.
  2. How to use OnCollisionEnter().
  3. Differentiating between collisions.

(Unique Video Reference: 14_PB_CU2)

Tagging Game Objects As Friendly
  1. Tweak our camera to suit our design intention.
  2. Design a simple game moment to form the basis of our level.
  3. Add a backdrop.

(Unique Video Reference: 15_PB_CU2)

Basic Level Design
  1. What design levers do we currently have at our disposal?
  2. Some examples of extreme tuning.

(Unique Video Reference: 16_PB_CU2)

Design Levers And Tuning
  1. Improving the look of our current level.
  2. Creating a new scene to create a new level.

(Unique Video Reference: 17_PB_CU2)

Making A Second Level
  1. Understanding what happens when a new prefab is created.
  2. Exploring when an instance gets changed if a prefab is updated.
  3. Adding a landing pad prefab.

(Unique Video Reference: 18_PB_CU2)

Prefabs In Detail
  1. How to add scenes to the build order.
  2. About the build index vs the scene name.
  3. Why we need using UnityEngine.SceneManagement.
  4. Using SceneManager.LoadScene()

(Unique Video Reference: 19_PB_CU2)

Level Loading & Scene Management
  1. How to fix scene getting dark on level load.
  2. Creating an enum for our player state.
  3. Using Unity's Invoke() to delay load.

(Unique Video Reference: 20_PB_CU2)

Invoke() As A Coroutine Warm-up
Check Your Understanding 3.2
10 questions
  1. Abrupt sound stopping issue (thanks Gregory).
  2. Care of differences in Debug mode (thanks Jeff).
  3. Side-effect in FreezeRotation + code reviews (Jeff).
  4. Well done Morgaine for 1st screen recording!
  5. Curtis & Robert re “too slick for neophytes”.
  6. Default values & [SerializeField] (Mitchell)
  7. Frame-rate & FixedUpdate (Straesso).
  8. Tip about solid background (Manuel).
  9. Loving the levels on forum (resources).
  10. Keep engaging even if it’s all clear!

(Unique Video Reference: 20b_PB_CU2)

Instructor Hangout 3.2
  1. You don't need a default audio clip on a source.

  2. Use [SerializeField] AudioClip clipName to expose a clip.

  3. Use audioSource.PlayOneShot(clipName) to play.

  4. How to handle multiple audio clips.

(Unique Video Reference: 21_PB_CU2)

Playing Multiple Audio Clips
  1. What a particle effect is.
  2. How we designate which effect to play.
  3. Using ParticleSystem.Play() to trigger effect.

(Unique Video Reference: 22_PB_CU2)

Introducing Particle Effects
  1. Using [DisallowMultipleComponent] attribute.
  2. Using [Range(0,1)] attribute.
  3. A pattern for moving platforms.

(Unique Video Reference: 23_PB_CU2)

Moving Platform Pattern
  1. How to initialise a Vector3.
  2. Using Mathf.Sin() for oscillation.
  3. Getting your offsets right.
  4. Making thrust frame-rate independent.

(Unique Video Reference: 24_PB_CU2)

Mathf.Sin() For Movement Cycles
  1. Use Mathf.Epsilon for floats.
  2. Tidy code.
  3. Remember our Discord chat server.

(Unique Video Reference: 25_PB_CU2)

Protecting Against NaN
  1. Create new folders within our Assets directory.
  2. Create new layout to help visualise all our assets.
  3. Manage our hierarchy by using empty Game Objects.
  4. Discover and address prefab linking issues.

(Unique Video Reference: 26_PB_CU2)

Organise Your Assets
  1. Understand all of the lights currently impacting your scene.
  2. Add point light and spotlight to your scene.
  3. Add light to your player object.

(Unique Video Reference: 27_PB_CU2)

Light Your Scene
  1. Challenge - understand how nested prefabs work using our rocket ship.
  2. How Prefabs are copied as game objects when nested under a prefab.
  3. Solution is to instantiate which we will cover in the next section.

(Unique Video Reference: 28_PB_CU2)

Nested Prefab Joy
  1. Recap of all the design levers we now have at our disposal.
  2. Examples of a number of game moments and level layouts.
  3. Level flow options.
  4. Challenge to capture your game moment using screen capture software and share.

(Unique Video Reference: 29_PB_CU2)

Make Game Moments
  1. What debug keys are.
  2. Why they are useful.
  3. Setup debug keys to ignore collisions, and immediately load next level.
  4. Using Debug.isDebugBuild to keep debug keys out of final player build.

(Unique Video Reference: 30_PB_CU2)

Debug Keys & Builds
Check Your Understanding 3.3
10 questions
  1. When will we teach mobile inputs? (Ken)
  2. Important to be good at math? (Adam & Cam)
  3. One script versus many scripts?
  4. What to do next with the project?

(Unique Video Reference: 30b_PB_CU2)

Instructor Hangout 3.3
  1. Use SceneManager.GetActiveScene().buildIndex to get current Scene in Unity 2017
  2. SceneManager.sceneCountInBuildSettings to count scenes in build settings.
  3. Why we can't yet record total levels won.

(Unique Video Reference: 31_PB_CU2)

Looping Through Levels
  1. More details about build order.
  2. Sharing with a teaser video.
  3. Using OBS to record your teaser.

(Unique Video Reference: 32_PB_CU2)

Sharing With Teaser Video

Note there were some off-screen changes by Rick before this video. 1. This is an open-ended video where we apply bugfixes and improvements.

(Unique Video Reference: 33_PB_CU2)

Spit & Polish
  1. Great work in this section!
  2. We covered a lot of great C#, Unity and Game Design territory this section.
  3. Let's push on to the next section of the course.

(Unique Video Reference: 34_PB_CU2)

Section 3 Wrap-Up
+ Argon Assault - Rails Shooter
47 lectures 07:33:46
  1. This game is based on classics like Star Fox and Panzer Dragoon.
  2. We will be using Unity 2017's brand-new Timeline facility.
  3. This will be fast-paced fun rail-shooter.

(Unique Video Reference: 1_AA_CU2)

Welcome To Section 4
  1. A quick look at an example of a Rail Shooter.
  2. What are our core game features and priorities?
  3. Creating a prototype to answer key questions.

(Unique Video Reference: 2_AA_CU2)

Argon Assault Game Design
  1. Update to at least Unity 2017.2.
  2. Create a new 3D project.
  3. Set up your repo.

(Unique Video Reference: 3_AA_CU2)

Update Unity & Create Project
  1. Add terrain to your level.
  2. Use the raise and lower terrain tool to make mountains.
  3. Resize and reposition the terrain.

(Unique Video Reference: 4_AA_CU2)

Create Terrain

1. What are differences in user interface for the terrain tools between Unity 2017 and 2019.

(Unique Video Reference: 4B_AA_CU2)

Terrain & Later Unity Versions
  1. Find texture assets on the Unity Asset Store.
  2. Add terrain texture, change scaling, change metallic and smoothness.
  3. Bump Maps versus Height Maps versus Normal Maps.

(Unique Video Reference: 5_AA_CU2)

Texture The Terrain
  1. Procedural versus 6-sided skyboxes.
  2. Applying skybox asset to your scene.

(Unique Video Reference: 6_AA_CU2)

Add A Skybox
  1. Some performance tweaks to help avoid slowdowns.
  2. Downloading asset pack for space ship.
  3. Building modular spaceship.

(Unique Video Reference: 7_AA_CU2)

Add Player Ship
  1. What a splash screen is.
  2. Make first game scene load after delay.
  3. Choose background music for your game.

(Unique Video Reference: 8_AA_CU2)

Setup A Splash Screen
  1. About game objects getting destroyed by scene load.
  2. Ben's injection pattern for persistent music.
  3. Using DontDestroyOnLoad().

(Unique Video Reference: 9_AA_CU2)

Playing Music Between Scenes
  1. Import Standard Assets > Utility.
  2. Setup a waypoint circuit using WaypointCircuit.cs.
  3. Use the WaypointProgressTracker.cs script.
  4. Make the camera follow a fixed path.

(Unique Video Reference: 10_AA_CU2)

Unity’s Waypoint Utility Scripts

Section 4 Quick #1

Check Your Understanding 4.1
10 questions
  1. Considerations for Waypoint system versus Timeline.
  2. Q&A answers and responses.
  3. Good tips from students.

(Unique Video Reference: 10b_AA_CU2)

Instructor Hangout 4.1
  1. About using virtual controls.
  2. Introducing CrossPlatformInputManager.
  3. Understanding control throw for keyboard and gamepad.

(Unique Video Reference: 11_AA_CU2)

Using Cross Platform Input
  1. How input sensitivity & gravity work.
  2. Using [Tooltip("Handy tip")] attribute for inspector tips.
  3. Understanding throw and movement speed.

(Unique Video Reference: 12_AA_CU2)

Input Sensitivity & Gravity
  1. Using transform.localPosition
  2. How to use Mathf.Clamp()
  3. Constrain our player movement to the screen.

(Unique Video Reference: 13_AA_CU2)

Mathf.Clamp() To Restrict Movement
  1. Getting clamped vertical movement working.
  2. Defining Roll, Pitch and Yaw.
  3. How to rotate to aim at the right place.

(Unique Video Reference: 14_AA_CU2)

Understanding Roll, Pitch & Yaw
  1. Experience order sensitivity in rotations.
  2. Using Quaternion.Euler().
  3. Setting localRotation from code.

(Unique Video Reference: 15_AA_CU2)

How To Set Local Rotation
  1. Set pitch based on screen position.
  2. Set pitch based also on control throw.
  3. Set yaw based on screen position.
  4. Set roll based on control throw.

(Unique Video Reference: 16_AA_CU2)

Rotate Ship With Position & Throw
  1. Tune rail speed and camera FOV.
  2. Tune ship speed, rolls, clamps.
  3. Note about 16:9 aspect ratio in game window.
  4. Tweak the rail position to give the feeling of speed.

(Unique Video Reference: 17_AA_CU2)

Time To Tweak And Tune
  1. Use particles to visualise where our ship is shooting.
  2. Introduction to Unity's particle systems.
  3. Create particle system that looks like bullets or lasers.

(Unique Video Reference: 18_AA_CU2)

Create Bullet Particles
  1. Create explosion particle effect.
  2. Attach SFX component to explosion particle.
  3. Use more of the particle system modules.

(Unique Video Reference: 19_AA_CU2)

Explosion Particles & SFX
  1. Create obstacles to avoid.
  2. Create placeholder enemies for the player to aim at and shoot.
  3. Create 10-20 seconds of gameplay setup, ready for our functionality.

(Unique Video Reference: 20_AA_CU2)

Dodge And Shoot
Check Your Understanding 4.2
10 questions
  1. Deep dive into the player movement including understanding why we have created xOffset, what exactly Time.deltaTime is calculating and why we clamp our movement.
  2. Q&A answers and responses.
  3. Good tips from students.

(Unique Video Reference: 20b_AA_CU2)

Instructor Hangout 4.2

In this video (objectives)...

  1. Organise Assets folder.

  2. Check right game objects have prefabs.

  3. Scan read code looking for major errors.

  4. Discuss idea of running the game from any scene.

After watching (learning outcomes)...

When returning to a project, or switching modes from designer to coder, you should be able to tidy your project, and feel ready to dive back into the code.

(Unique Video Reference: 21_AA_CU2)

Project Tidying Checklist

In this video (objectives)...

  1. Attempt to detect collisions with the terrain.
  2. Explore Unity (and Ben's) collision matrix.
  3. Discuss static, rigidbody and kinematic rigidbody colliders.
  4. Use OnTriggerEnter() to detect player hitting things.

After watching (learning outcomes)...

Determine what sort of colliers to add to in order to raise collision and trigger messages.

(Unique Video Reference: 22_AA_CU2)

Triggers & Collisions In Unity

In this video (objectives)...

  1. Correct an error in Unity's WaypointCircuit.cs
  2. How NOT to use "Manager" in the name of your scripts.
  3. Create a new CollisionHandler component.
  4. Rename our Player to PlayerController.
  5. Use SendMessage() to communicate between components.

After watching (learning outcomes)...

Create a new well-named component to prevent your existing component code from getting too large.

(Unique Video Reference: 23_AA_CU2)

SendMessage() Between Components

In this video (objectives)... 1. Attached our bundled VFX and SFX prefab to the player. 2. Show consequence of disabling in the Inspector. 3. Use .SetActive(true) to enable a game object during play.

After watching (learning outcomes)...

Enable a game object from C#, useful for combined special effects (FX) prefabs.

(Unique Video Reference: 24_AA_CU2)

Enable A Gameobject From C#

In this video (objectives)...

  1. Over the singleton pattern as it applies to the Music Player.
  2. Pseudocode the logic.
  3. Use FindObjectsOfType().

After watching (learning outcomes)...

Setup a singleton pattern for self-destroying objects in Unity, without using the concepts of static variables.

(Unique Video Reference: 25_AA_CU2)

Singleton Pattern Without Statics

In this video (objectives)…

  1. Turn on World collisions on our particle system.
  2. Ensure our enemies have non-trigger colliders.
  3. Use 'OnParticleCollision()' to detect collision.

After watching (learning outcomes)…

Use particle systems as bullet streams, and detect the collisions with game objects (e.g. enemies)

(Unique Video Reference: 26_AA_CU2)

Detecting Particle Collisions

In this video (objectives)…

  1. Remove colliders from asset pack prefabs, returning to vanilla state.
  2. Arrange for enemies to add their own colliders on start.

After watching (learning outcomes)…

Arrange for game objects to add their own required components at run time, reducing their dependency on assets being setup a particular way.

(Unique Video Reference: 27_AA_CU2)

Making Scripts Add Components

In this video (objectives)…

  1. Discuss how to recreate our explosion prefab.
  2. Why we use prefabs differently for the enemies.
  3. Instantiate an explosion on enemy death.
  4. Make the explosion FX self-destruct.

After watching (learning outcomes)…

Instantiate game objects at run time, parent them to in the hierarchy, and chose their position in world space.

(Unique Video Reference: 28_AA_CU2)

Instantiating At Runtime

In this video (objectives)…

  1. Add a UI text element to our game.
  2. Overview the new Canvas object.
  3. Add a score and customise the font.

After watching (learning outcomes)…

Add UI text elements to the game, and position and scale them. Also find and use free custom fonts.

(Unique Video Reference: 29_AA_CU2)

Add Simple Score UI

In this video (objectives)…

  1. Overview what a class is in programming.
  2. Add ScoreBoard.cs to our UI text.
  3. Write our first public method.

After watching (learning outcomes)…

Describe in basic terms what a class is in Object Oriented Programming (OOP).

(Unique Video Reference: 30_AA_CU2)

A ScoreBoard Class
Check Your Understanding 4.3
10 questions

In this video (objectives)…

  1. Deep discussion regarding Component.SendMessage.
  2. Some tips from students.
  3. Some questions from students.

After watching (learning outcomes)…

Have greater clarity on how Messages are used.

(Unique Video Reference: 30b_AA_CU2)

Instructor Hangout 4.3

In this video (objectives)…

  1. Ensure our Canvas Scaler is set correctly.
  2. Use FindObjectOfType() to find the scoreBoard.
  3. Communicate between enemy and scoreboard.

After watching (learning outcomes)…

Separate a script into two, and arrange for them to find and and communicate with one another in a basic way.

(Unique Video Reference: 31_AA_CU2)

Introducing Encapsulation

In this video (objectives)…

  1. Use git stash to safely discard our changes.
  2. Use branch and reset to discard multiple commits.

After watching (learning outcomes)…

Restore a project that has been tracked under version control to a previous commit safely.

(Unique Video Reference: 32_AA_CU2)

Back-pedalling With Version Control

In this video (objectives)…

  1. Setup an input Button for "Fire"
  2. Expose an array of game objects to the Inspector.
  3. Automatically iterate over the array using foreach
  4. Give player ability to start and stop guns.

After watching (learning outcomes)…

Use a foreach loop to iterate over an entire collection automatically.

(Unique Video Reference: 33_AA_CU2)

Iterating With foreach

In this video (objectives)…

  1. Create a system for storing enemy hitpoints.
  2. Decrement enemy hitpoints when hit by player bullet.
  3. Kill enemy when hitpoints are below 1.

After watching (learning outcomes)…

Set up a simple health system that decrements when hit by player bullets.

(Unique Video Reference: 34_AA_CU2)

Enemy Health System

In this video (objectives)…

  1. Introduction to the concept of the level design beat chart.
  2. See how the ups and downs of a level can be mapped / charted.
  3. Consider the beats of your game in relation to the story you are wanting to tell.

After watching (learning outcomes)…

Set up a level design beat chart for your level.

(Unique Video Reference: 35_AA_CU2)

Level Design Beat Chart

In this video (objectives)…

  1. Discuss the most important considerations for our level.
  2. Create good spawn points for our enemies.
  3. Match our level design to our beat chart.

After watching (learning outcomes)…

Created a level which is ready for the final player flight path to be created.

(Unique Video Reference: 36_AA_CU2)

Level Design Iteration

In this video (objectives)…

  1. Set up a Playable Director on one of our enemy ships.
  2. Create a simple animation using timeline for our enemy.
  3. Tweak the position of the enemy so that we can shoot and destroy it.

After watching (learning outcomes)…

Use Unity Timeline to animate one enemy ship to fly in front of the player.

(Unique Video Reference: 37_AA_CU2)

Introduction To Unity Timeline

In this video (objectives)…

  1. Create a master timeline to drive all other timelines.
  2. Add player rig to master timline.
  3. Move the player rig through the scene to create the flight path.

After watching (learning outcomes)…

Use Unity Timeline to create the player flight path.

(Unique Video Reference: 38_AA_CU2)

Unity Timeline For Player Path

In this video (objectives)…

  1. Create a new timeline for an enemy wave.
  2. Add enemy wave to the master timeline through a control track.
  3. Duplicate enemy wave for re-use.

After watching (learning outcomes)…

Use Unity Timeline to create re-usable enemy waves consisting of multiple enemy animations.

(Unique Video Reference: 39_AA_CU2)

Unity Timeline Enemy Waves

In this video (objectives)…

  1. Set up timeline track groups.
  2. Brainstorm creative ways to use timeline for your project.
  3. Add something new with timeline - for us it will be a character image with audio during key moments in the level.

After watching (learning outcomes)…

Use Unity Timeline to create UI popup with audio dialogue.

(Unique Video Reference: 40_AA_CU2)

Adding Flavour With Timeline

In this video (objectives)…

  1. Refactor our gun enabling code.
  2. Find the particle system emission module.
  3. Stop bullet stream disappearing when we cease fire.

After watching (learning outcomes)…

Turn a particle system emission on and off in C#.

(Unique Video Reference: 41_AA_CU2)

Stop Particle Emission In C#

In this video (objectives)…

  1. Create an visual atmosphere in our level which matches our intention.
  2. Add particle effects as rocket boosters to ships.
  3. Add fog to our scene to soften the look.

After watching (learning outcomes)…

Use lighting, fog and particles to create a visual atmosphere in the level.

(Unique Video Reference: 42_AA_CU2)

Visual Polish
Check Your Understanding 4.4
10 questions

In this video (objectives)…

  1. Re-iterate some of the core things we have learned in this section of the course.

After watching (learning outcomes)…

Ready to take on the next section!

(Unique Video Reference: 43_AA_CU2)

Section 4 Wrap-Up
+ Realm Rush - Tower Defence
45 lectures 08:05:23

In this video (objectives)…

  1. How this project fits into the course.
  2. A peek at what we'll be building.
  3. Why not use Unity's built-in pathfinding.
  4. You'll learn C# co-routines, Queue, Dictionary.
  5. Order independent execution, editor scripts and more in Unity.

After watching (learning outcomes)…

Explain to a fellow student roughly what we're building, and why this is awesome stuff to know.

(Unique Video Reference: 1_RR_CU2)

Welcome To Section 5

In this video (objectives)…

  1. Understand our core mechanics
  2. Discuss the role of pathfinding
  3. Set the challenge of how we create interesting gameplay by using our pathfinding system

After watching (learning outcomes)…

Be clear on the game design for this section.

(Unique Video Reference: 1b_RR_CU2)

Realm Rush Game Design

In this video (objectives)…

  1. A quick overview of Unity's NavMesh.
  2. How our system compares.

After watching (learning outcomes)…

Explain why we are creating pathfinding from scratch.

(Unique Video Reference: 2_RR_CU2)

Limitations Of Unity Pathfinding

In this video (objectives)…

  1. Demonstrate z-fighting problem.
  2. Show quads as building blocks.
  3. Demonstrate back face culling.
  4. Create labelled block prefab.

After watching (learning outcomes)…

Build simple objects from cubes, and describe both back face culling, and z-fighting.

(Unique Video Reference: 3_RR_CU2)

Z-Fighting And Quads

In this video (objectives)…

  1. Why we want snapping in our world.
  2. How to use Unity's snap feature.
  3. The limitations and why we write our own.
  4. Introducing [ExecuteInEditMode] attribute.
  5. Introducing [Range()] attribute.

After watching (learning outcomes)…

Enforce snapping in the Unity editor using an "editor script".

(Unique Video Reference: 4_RR_CU2)

[ExecuteInEditMode] Attribute

In this video (objectives)…

  1. How to use Text Mesh in Unity
  2. Text Mesh vs UI Text
  3. Using the [SelectionBase] attribute
  4. Using 'GetComponentInChildren()'

After watching (learning outcomes)…

Use Text Mesh to label objects in the world for debug.

(Unique Video Reference: 5_RR_CU2)

Using Text Mesh For Labels

In this video (objectives)…

  1. The List<> syntax
  2. Lists vs arrays
  3. Creating a custom waypoint path.

After watching (learning outcomes)…

Use a simple list in C#.

(Unique Video Reference: 6_RR_CU2)

C-Sharp Lists For Custom Path

In this video (objectives)…

  1. How loops stall of block our code
  2. Use 'IEnumerator' as a return type
  3. Using 'StartCoroutine()'
  4. How to 'yield' execution
  5. Returning a yield instruction
  6. Using 'WaitForSeconds()'

After watching (learning outcomes)…

Use a basic co-routing to make a time-based sequence appear to run in parallel to the rest of your game code.

(Unique Video Reference: 7_RR_CU2)

Introducing Coroutines

In this video (objectives)…

  1. Look at Breadth First Search (BFS)
  2. Compared to Dijkstra's algorithm and A*
  3. Why A-Star isn't always the best best

After watching (learning outcomes)…

Discuss the basic differences between three pathfinding algorithms.

(Unique Video Reference: 8_RR_CU2)

Types Of Pathfinding

Ben explains what to expect in the next two videos.

(Unique Video Reference: 8b_RR_CU2)

The Path Ahead

In this video (objectives)…

  1. Used const for gridSize global data
  2. Discussed dependencies
  3. Refactored our code.

After watching (learning outcomes)…

Move information from one class to another, and use const where appropriate.

(Unique Video Reference: 9_RR_CU2)

Instance Variables And Constants

In this video (objectives)…

  1. Setup our first C# dictionary for our grid
  2. Syntax: Dictionary grid
  3. Use grid.Add() to add elements
  4. Use grid.ContainsKey(gridPos)) to detect duplicates.

After watching (learning outcomes)…

Recognise (but not necessarily use, basic C# dictionaries.)

(Unique Video Reference: 10_RR_CU2)

The Dictionary Data Structure
Check Your Understanding 5.1
10 questions
  1. Discuss how to find a child object from a script
  2. Use transform.Find() to find by name
  3. Color our blocks with waypoint.SetTopColor()

After watching (learning outcomes)…

Find other game objects by their name.

(Unique Video Reference: 11_RR_CU2)

Finding Game Objects By Name

In this video (objectives)…

  1. See how + can join strings, and add vectors.
  2. Use try {} catch {} to catch errors.

After watching (learning outcomes)…

Specify a list of allowable directions and "explore" in them.

(Unique Video Reference: 12_RR_CU2)

Explore Thy Neighbour

In this video (objectives)…

  1. Look at the Wikipedia article on BFS
  2. Demonstrate simpler pseudocode for BFS
  3. Walk through BFS step-by-step.

After watching (learning outcomes)…

Manually perform Breadth First Search, and find the shortest path.

(Unique Video Reference: 13_RR_CU2)

Breadth First Search Algorithm

In this video (objectives)…

  1. Define FIFO vs LIFO queues
  2. Using Queue queue syntax
  3. Using Queue.Enqueue()
  4. Using Queue.Dequeue()
  5. Detecting when end waypoint is found.

After watching (learning outcomes)…

Add and remove items from a C# queue.

(Unique Video Reference: 14_RR_CU2)

Introducing C# Queues

In this video (objectives)…

  1. Use our isRunning state
  2. Log out what we're queueing
  3. Check pathfinding across whole grid.

After watching (learning outcomes)…

Use systematic manual testing to help write software.

(Unique Video Reference: 15_RR_CU2)

Running Manual Tests

In this video (objectives)…

  1. Thanks to Eddie for spotting an improvement
  2. Using queue.Contains(neighbour) to prevent duplicates
  3. Improving our color architecture
  4. Justifying the use of public vs [SerializeField]
  5. Leave a breadcrumb.

After watching (learning outcomes)…

Explain why you would sometimes use public

(Unique Video Reference: 16_RR_CU2)

A Breadcrumb Trail

In this video (objectives)…

  1. Create our list
  2. Adjust our architecture
  3. Hand over to Rick

After watching (learning outcomes)…

Manipulate C# lists, and create getter methods.

(Unique Video Reference: 17_RR_CU2)

Reversing A List

In this video (objectives)…

  1. Import art assets
  2. Reconstruct our pathfinding block with the new look
  3. Update the rest of our scene with a new look

After watching (learning outcomes)…

Import, implement and tune art assets for your scene.

(Unique Video Reference: 18_RR_CU2)

Adding Production Assets

In this video (objectives)…

  1. Construct a tower with base and top parts.
  2. Use LookAt to move the top of the tower to look at a moving enemy.

After watching (learning outcomes)…

Use LookAt statement to control the rotation of a tower.

(Unique Video Reference: 19_RR_CU2)

Tower LookAt Enemy

In this video (objectives)…

  1. Where to find additional content for creating MagicaVoxel assets.
  2. What content we will cover in our MagicaVoxel community course.

After watching (learning outcomes)…

Aware of the MagicaVoxel Bonus Content.

(Unique Video Reference: 20_RR_CU2)

MagicaVoxel Bonus Content
Check Your Understanding 5.2
10 questions

In this video (objectives)…

  1. Understand our remaining feature set for Realm Rush.
  2. Overview of the process for shooting and damaging enemies.

After watching (learning outcomes)…

Ready to take on another big solo challenge.

(Unique Video Reference: 21_RR_CU2)

Another Solo Challenge

In this video (objectives)…

  1. Attach a bullet particle effect to the towers.
  2. Create EnemyDamage script that recognises bullet collision.
  3. Organise enemy's hierarchical structure to properly recognise collision.

After watching (learning outcomes)…

Create tower bullets which successfully collide with enemy.

(Unique Video Reference: 22_RR_CU2)

Make Tower Shoot

In this video (objectives)…

  1. Decrease enemy hitpoints when enemy is hit.
  2. Destroy enemy when hitpoints are below 1.

After watching (learning outcomes)…

Implement enemy hitpoint and kill enemies.

(Unique Video Reference: 23_RR_CU2)

Enemy HitPoints

In this video (objectives)…

  1. Create a condition where towers only shoot if enemy is within range.
  2. Implement Vector3.Distance to determine distance from towers to enemies.
  3. Turn on and off particle emission system if there is no valid enemy.

After watching (learning outcomes)…

Create a condition where towers only shoot if enemies are close enough.

(Unique Video Reference: 24_RR_CU2)

Check For Distance

In this video (objectives)…

  1. Instantiate an enemy Manually

  2. Resolve the root cause of the errors

  3. Modify 'Pathfinder.cs' to "cache" path

  4. Drone on about caching and naming again.

After watching (learning outcomes)…

Resolve issues with instantiating at runtime by practicing in Unity's Play mode.

(Unique Video Reference: 25_RR_CU2)

Preview 10:32

In this video (objectives)…

  1. Show how to search our GitHub pages
  2. Explain spawning architecture
  3. Setup a spawning coroutine.

After watching (learning outcomes)…

Create a simple co-routine from scratch on your own. Remember "Blooms Taxonomy"

(Unique Video Reference: 26_RR_CU2)

Revise Coroutines & Much More

In this video (objectives)…

  1. Revise instantiating
  2. Challenge you to add audio to the game now
  3. Modify Tower.cs to find closest enemy
  4. Challenge you to write Transform GetClosest(Transform b, Transform b)

After watching (learning outcomes)…

Find the closest of two transforms.

(Unique Video Reference: 27_RR_CU2)

Target Closest Enemy

In this video (objectives)…

  1. Introduce Unity's OnMouseOver() message
  2. Show you how to troubleshoot message issues
  3. Log out which block our mouse is over.

After watching (learning outcomes)…

Use Unity's built-in messages, and trboubleshoot them from docs when not working.

(Unique Video Reference: 28_RR_CU2)

Detecting Mouse In 3D

In this video (objectives)…

  1. Recap our design decisions for Waypoint.cs
  2. Add the ability to flag a block as "placeable"
  3. Use version control to find a bug we introduced
  4. Differentiate between valid and invalid tower clicks.

After watching (learning outcomes)…

How to filter click input based on data about what's being clicked-on.

(Unique Video Reference: 29_RR_CU2)

Conditional Instantiation
Check Your Understanding 5.3
10 questions

In this video (objectives)…

  1. Explain the basics of Bloom's Taxonomy again
  2. Challenge to complete the tower placement.

After watching (learning outcomes)…

Combine your knowledge of [SerializeField] and Instantiate() in one exercise.

(Unique Video Reference: 30_RR_CU2)

Bloom’s Taxonomy

In this video (objectives)…

  1. Fix a minor bug in our pathfinding algorithm
  2. Add cool jet booster particles to our enemy
  3. Add hit and death particle effects.

After watching (learning outcomes)…

Use particles effects two different ways, either referring to a prefab on the same game object, or a separate asset.

(Unique Video Reference: 31_RR_CU2)

Particles & Algorithm Improvements

In this video (objectives)…

  1. Note we've changed to Unity 2017.3.1
  2. Introduce a new mnemonic
  3. Overview ring or circular buffers
  4. Briefly discuss performance and memory fragmentation.

After watching (learning outcomes)…

Explain in simple terms what a ring buffer is.

(Unique Video Reference: 32_RR_CU2)

Circular Or Ring Buffers

In this video (objectives)…

  1. Create a Tower Factory class
  2. Move the tower prefab, and max towers there
  3. Introduce this in C#
  4. Wire-up our tower factory, at least in outline.

After watching (learning outcomes)…

Use the this keyword to pass instances around.

(Unique Video Reference: 33_RR_CU2)

Implementing A Ring Buffer

In this video (objectives)…

  1. Discuss using a C# queue for a ring buffer
  2. Practice pseudo coding
  3. Get the queue managing its self.

After watching (learning outcomes)…

Implement simple C# queues from scratch.

(Unique Video Reference: 34_RR_CU2)

Revising C# Queues

In this video (objectives)…

  1. Finish our ring buffer
  2. Discuss how to destroy particle systems
  3. Use Unity's Destory(object, delay) function

After watching (learning outcomes)…

Destroy instantiated particle effects when they have finished playing.

(Unique Video Reference: 35_RR_CU2)

How To Destroy Particles

In this video (objectives)…

  1. Speed up enemy movement
  2. Destroy enemies when they reach the end of their path
  3. Trigger enemy goal particles

After watching (learning outcomes)…

Explode enemies after they have completed their path.

(Unique Video Reference: 36_RR_CU2)

Complete Game Loop

In this video (objectives)…

  1. Increase the size of our level
  2. Create a mechanism to decrease player health when enemy reaches base

After watching (learning outcomes)…

Create a simple collision-based health system for the player's base.

(Unique Video Reference: 37_RR_CU2)

Health For Base

In this video (objectives)…

  1. Add text fields to canvas UI for player health and score
  2. Connect the player health code to the UI text
  3. Increase score whenever new enemy is spawned
  4. Connect score value to score text

After watching (learning outcomes)…

Create updating UI text elements for the gameplay values of score and health.

(Unique Video Reference: 38_RR_CU2)

Display Health & Score

In this video (objectives)…

  1. Import the Unity Post Processing Stack
  2. Set up profile asset
  3. Modify post processing aspects such as bloom, vignette and color grading

After watching (learning outcomes)…

Implement Unity Post Processing Stack to create a unique look for your game.

(Unique Video Reference: 39_RR_CU2)

Unity Post Processing Stack

In this video (objectives)…

  1. Asset our sound design needs
  2. Trigger SFX for spawning, base damage and enemy damage
  3. Add music to the game

After watching (learning outcomes)…

Implement sound effects for key moments in the game.

(Unique Video Reference: 40_RR_CU2)

Hook Up SFX

In this video (objectives)…

  1. Implement the PlayClipAtPoint() method to ensure our audio clip is played even if our GameObject is destroyed.
  2. Investigate Unity's audio setup to discovery why our audio clip is played at lower volume.
  3. Discuss 2D versus 3D spatial sounds in Unity.
  4. Implement audio track.

After watching (learning outcomes)…

Create sound effects that persist even if the parent GameObject is destroyed.

(Unique Video Reference: 41_RR_CU2)

PlayClipAtPoint() For SFX

In this video (objectives)…

  1. Looking at all the design levers available.
  2. Understanding your intention, and how you can execute on that.
  3. Finding the fun for a 2 minute game moment.
  4. Share!

After watching (learning outcomes)…

Understand what levers to pull in order to make your game moment compelling.

(Unique Video Reference: 42_RR_CU2)

Tune Your Game Moment
Check Your Understanding 5.4
13 questions

In this video (objectives)…

  1. Recap of the key new concepts we've covered in this section.
  2. What to expect in the next section of the course.

After watching (learning outcomes)…

You'll be fired up to continue your learning journey!

(Unique Video Reference: 43_RR_CU2)

Section 5 Wrap Up
+ Zombie Runner - First Person Shooter
52 lectures 07:21:27

In this video (objectives)…

1. Overview of this section.

2. Demo of the game prototype.

After watching (learning outcomes)…

Ready and raring to start this section.

(Unique Video Reference: 1_ZR_CU2)

Welcome To Zombie Runner

In this video (objectives)…

1. Discussion of the game overview screen and core features.

2. Reminder that we're using Unity 2019.1.

After watching (learning outcomes)…

Super clear on the game we are making and the feature priorities.

(Unique Video Reference: 2_ZR_CU2)

Zombie Runner Game Design

In this video (objectives)…

1. Download Unity Standard Assets.

2. Implement the First Person Controller with RigidBody.

After watching (learning outcomes)…

Get and add the First Person Controller to our scene.

(Unique Video Reference: 3_ZR_CU2)

Adding First Person Controller

In this video (objectives)…

1. Use Unity's simple prototyping geometry to make a simple level.

2. Make sure there are different obstacles to test the expected functionality in the game.

After watching (learning outcomes)…

Create a simple sandbox level for prototyping.

(Unique Video Reference: 4_ZR_CU2)

Make A Prototyping Sandbox

In this video (objectives)…

1. Add a placeholder enemy with NavMeshAgent component.

2. Bake our NavMesh.

3. Create EnemyAI.cs and add logic to move the enemy towards the player.

After watching (learning outcomes)…

Use the NavMeshAgent component to drive the enemy towards the player.

(Unique Video Reference: 5_ZR_CU2)

Using NavMeshAgent For AI

In this video (objectives)…

  1. Stop jitter by turning off head bob.

  2. Stop player getting stuck to the walls by using physics material

After watching (learning outcomes)…

Improve the feel of our first person controller.

(Unique Video Reference: 6_ZR_CU2)

Getting Stuck & Jittering

In this video (objectives)…

  1. Make the enemy and player more obvious in their positions.

  2. Create logic that tells the enemy to move to the target if the target is within the chase range.

After watching (learning outcomes)…

Move the enemy to the target if the target is within range.

(Unique Video Reference: 7_ZR_CU2)

Enemy AI - Chase Range
Quiz - Zombie Runner #1
5 questions

In this video (objectives)…

  1. Use the Unity docs to figure out how to draw a gizmo which shows the chase range of our enemies.

After watching (learning outcomes)…

Use gizmos to visualise chase range.

(Unique Video Reference: 8_ZR_CU2)

Using OnDrawGizmosSelected()

In this video (objectives)…

  1. Structure our EnemyAI class so we have logic for the enemy being provoked.

  2. Use the nav mesh stopping distance as part of our conditions for attacking or not.

After watching (learning outcomes)…

Add to our enemy AI, causing it to attack if provoked.

(Unique Video Reference: 9_ZR_CU2)

Enemy AI - Attack If Provoked

In this video (objectives)…

  1. Import a weapon and attach it to the player.

  2. Add a reticle the the UI canvas.

After watching (learning outcomes)…

Give the player a weapon asset to love and cherish till the end of his or her days.

(Unique Video Reference: 10_ZR_CU2)

Give That Player A Gun

In this video (objectives)…

  1. Overview of how Raycasting works.

  2. Add a ray that is cast when the player clicks their shoots (clicks their mouse button).

  3. Print to the console the thing that we hit.

After watching (learning outcomes)…

Implement raycasting so we can shoot an invisible laser beam.

(Unique Video Reference: 11_ZR_CU2)

Introduction To Raycasting

In this video (objectives)…

  1. Create a public method that reduces enemy's health.

  2. Call that method from our weapon and pass in the weapon's specific damage amount.

After watching (learning outcomes)…

Lay some smack down on an enemy (well, decrease its hit points).

(Unique Video Reference: 12_ZR_CU2)

Enemy Health & Damage

In this video (objectives)…

  1. Create simple code to play our muzzle flash.

  2. Create a particle system that looks somewhat like a muzzle flash.

After watching (learning outcomes)…

Create a muzzle flash particle effect and play it when the player shoots.

(Unique Video Reference:  13_ZR_CU2)

Implement A Muzzle Flash

In this video (objectives)…

  1. Twiddle with one of the standard assets particle effects to get something we like.

  2. Instantiate the hit impact at the point the raycast hits.

After watching (learning outcomes)…

Instantiate a hit effect when we shoot something.

(Unique Video Reference: 14_ZR_CU2)

Creating Shooting Hit Effect

In this video (objectives)...

1. Discuss animation states.

2. Set up a simple flow from Idle to Move to Attack.

After watching (learning outcomes)...

Understand the basics of how Animator Controllers work.

(Unique Video Reference: 15_ZR_CU2)

Introduction To Animator Controller

In this video (objectives)...

1. Create a new animation that we add to idle state.

2. Understand that we can animate properties such as the transform of an object.

After watching (learning outcomes)...

Understand how to add simple animations to our animator controller states.

(Unique Video Reference: 16_ZR_CU2)

Creating A Simple Animation

In this video (objectives)...

1. Set up a trigger and a bool parameter.

2. Cycle through our states by trigging our transition conditions.

After watching (learning outcomes)...

Understand how to trigger different states based upon parameter conditions being met.

(Unique Video Reference: 17_ZR_CU2)

Animator Transition Conditions
Quiz - Zombie Runner #2
8 questions

In this video (objectives)...

1. Add code to trigger move state.

2. Implement attack state bool to set to true or false depending upon enemy AI logic.

After watching (learning outcomes)...

Understand how to use code to trigger animation state changes.

(Unique Video Reference: 18_ZR_CU2)

Trigger Animation In Code

In this video (objectives)...

1. Create EnemyAttack.cs and create a public method that can be called as an animation event.

2. Create simple animation for attack and add an animation event which calls our attack code.

After watching (learning outcomes)...

Use animation events to create precise attack moments.

(Unique Video Reference: 19_ZR_CU2)

Use Animation Events

In this video (objectives)...

1. Nifty challenge where you get to chose your difficulty level.

2. Have the enemy damage the player.

After watching (learning outcomes)...

Complete our loop where the enemy can hit and damage the player.

(Unique Video Reference: 20_ZR_CU2)

Create Player Health Class

In this video (objectives)...

1. Discuss briefly how Vectors work.

2. Rotate the enemy to face the player by using Quaternion.Slerp().

After watching (learning outcomes)...

Be clear on how to rotate an object so that it is facing another moving object.

(Unique Video Reference: 21_ZR_CU2)

Rotate To Face Target

In this video (objectives)...

1. Create a Game Over canvas with buttons to reload game and quit.

2. Create a class which contains the methods with the functionality for our buttons.

After watching (learning outcomes)...

Create a simple game over menu to ensure we can restart the game when the player dies.

(Unique Video Reference: 22_ZR_CU2)

Game Over User Interface

In this video (objectives)...

1. Disable and enable our game over menu screen.

2. Give the cursor back to the player.

3. Stop the game so that we aren't seeing weird cursor fighting issues.

After watching (learning outcomes)...

Elegantly handle displaying and using the Game Over menu when the player dies.

(Unique Video Reference: 23_ZR_CU2)

Create A Death Handler

In this video (objectives)...

1. Our goal is to have the enemy provoked when shot.

2. We look at a couple of ways to do this, one of which being BroadcastMessage().

After watching (learning outcomes)...

Use BroadcastMessage() to call any methods of a particular name on our Game Object.

(Unique Video Reference: 24_ZR_CU2)

Using BroadcastMessage

In this video (objectives)...

1. Tidy up our sandbox and make a bit of level flow.

2. Tune our Player and enemies so that the game feels the way we want.

After watching (learning outcomes)...

Make the game feel like a game with the limited feature set we have at the moment.

(Unique Video Reference: 25_ZR_CU2)

Early Gameplay Loop

In this video (objectives)...

1. Examine Rick's prototype to look at how the weapon switching, ammo system and ammo pickups relate to one another.

After watching (learning outcomes)...

Be clear on what we are about to undertake with our weapon system.

(Unique Video Reference: 26_ZR_CU2)

Weapon System Overview

In this video (objectives)...

1. Figure out what would give us a zoomed in effect.

2. Create a connection to our camera and variables for zoomed in and out FOV.

3. Create logic that toggles between zoomed in and zoomed out.

After watching (learning outcomes)...

Clear on how to use a camera's field of view to zoom in and out.

(Unique Video Reference: 27_ZR_CU2)

Weapon Zoom - Field Of View
Quiz - Zombie Runner #3
8 questions

In this video (objectives)...

1. Figure out where to find mouse sensitivity and how to access it.

2. Create 2 settings for mouse sensitivity - one for zoomed in and one for zoomed out.

After watching (learning outcomes)...

Update mouse sensitivity based upon our level of zoom.

(Unique Video Reference: 28_ZR_CU2)

Weapon Zoom - Mouse Sensitivity

In this video (objectives)...

1. Create Ammo.cs and add 2 public methods to allow our weapon to communicate with our ammo.

2. Create logic so we can only shoot if we have more than 0 ammo and to decrease ammo each time we shoot.

After watching (learning outcomes)...

Add basic ammo functionality where we decrease our ammo when shooting and can only shoot if we have enough ammo.

(Unique Video Reference: 29_ZR_CU2)

Basic Ammo Functionality

In this video (objectives)...

1. Dig deep into our nested prefabbing of our player and weapons.

2. Add another 2 weapons and hook them up so they can shoot.

After watching (learning outcomes)...

Understand how to create additional weapons with the correct prefabbing and settings.

(Unique Video Reference: 30_ZR_CU2)

Multiple Weapon Types

In this video (objectives)...

1. Create a delay between shots for our weapon.

2. Tune the damage, range, scope and shot delay for our three weapons.

After watching (learning outcomes)...

Understand how to create a shooting delay and how to differentiate our 3 weapons.

(Unique Video Reference: 31_ZR_CU2)

Weapon Differentiation

In this video (objectives)...

1. Create a foreach loop which loops through our weapons and sets them active or inactive.

2. Create the framework for the player to be able to select their weapon.

After watching (learning outcomes)...

Create the framework for setting weapons active or inactive.

(Unique Video Reference: 32_ZR_CU2)

Set Active Weapon

In this video (objectives)...

1. Create a way for the player to change weapons by pushing the keyboard numbers.

2. Create a way for players to change weapons by using the scroll wheel.

After watching (learning outcomes)...

Give the player multiple ways to change weapons.

(Unique Video Reference: 33_ZR_CU2)

Player Input To Select Weapon

In this video (objectives)...

1. Tidy up a couple of bugs.

2. Create AmmoType public enum.

3. Create AmmoSlot private class.

After watching (learning outcomes)...

Have experimented with a public enum and private class.

(Unique Video Reference: 34_ZR_CU2)

Public Enum & Private Class

In this video (objectives)...

1. Assign our weapon to be a particular ammo type.

2. Hook everything up so our weapons decrease ammo from a specific ammo slot.

After watching (learning outcomes)...

Have specific weapons use specific types of ammo.

(Unique Video Reference: 35_ZR_CU2)

Different Weapon Different Ammo

In this video (objectives)...

1. Identify why our weapon is staying zoomed.

2. Challenge to fix the issue.

After watching (learning outcomes)...

Practice finding and fixing bugs.

(Unique Video Reference: 36_ZR_CU2)

Quick Bug Fix Challenge

In this video (objectives)...

1. Create a game object which is triggered when the player runs through it and destroyed, printing a witty message to the console in the process.

After watching (learning outcomes)...

Create a simple pickup framework that can only be triggered by the player.

(Unique Video Reference: 37_ZR_CU2)

Ammo Pickup - Part 1

In this video (objectives)...

1. Set the value and type of the pickup.

2. Create a public method to increase ammo amount.

3. Create prefab variants for each pickup type.

After watching (learning outcomes)...

Increase specific types of ammo when we collect that an ammo pickup of that type.

(Unique Video Reference: 38_ZR_CU2)

Ammo Pickup - Part 2
Quiz - Zombie Runner #4
7 questions

In this video (objectives)...

1. Import enemy character asset.

2. Hook up new animations to our animator.

3. Add code to trigger enemy death and stop weird death-related behaviours.

After watching (learning outcomes)...

Make your game 5 times more awesome by having an enemy who actually looks like an enemy.

(Unique Video Reference: 39_ZR_CU2)

Let's Add A Zombie

In this video (objectives)...

1. Figure out why our zombie is not hurting us.

2. Implement a fix to this problem.

After watching (learning outcomes)...

Practice hunting down an issue and implementing a solution.

(Unique Video Reference: 40_ZR_CU2)

Quick Zombie Attack Challenge

In this video (objectives)...

1. Create a new scene that will be a more organised level.

2. Sketch out a level design and import that into the scene to use as a reference diagram.

After watching (learning outcomes)...

Create a level design diagram to use as a reference for the level creation.

(Unique Video Reference: 41_ZR_CU2)

Flex Your Level Design Muscles

In this video (objectives)...

1. Add terrain and sculpt it, being sure to add elevation changes.

2. Add trees.

3. Add grass texture and mesh.

After watching (learning outcomes)...

Make our forest look interesting by adding terrain and trees.

(Unique Video Reference: 42_ZR_CU2)

Add Terrain & Trees

In this video (objectives)...

1. Instal ProBuilder.

2. Use ProBuilder to make shotgun shells.

3. Use ProBuilder to make bullets.

After watching (learning outcomes)...

Get comfortable with ProBuilder by making props.

(Unique Video Reference: 43_ZR_CU2)

ProBuilder For Making Props

In this video (objectives)...

1. Install ProGrids.

2. Create the shell for our first room.

3. Create a separate game object that is the roof.

After watching (learning outcomes)...

Comfortable using ProBuilder to make rooms.

(Unique Video Reference: 44_ZR_CU2)

ProBuilder To Make Rooms

In this video (objectives)...

1. Use ProBuilder's Poly Shape Tool to trace around our entire level sketch.

2. Flip the normals of our level so we can see the walls on the inside.

3. Add elevation and link everything up.

After watching (learning outcomes)...

Comfortable using ProBuilder to make levels.

(Unique Video Reference: 45_ZR_CU2)

ProBuilder To Make Levels

In this video (objectives)...

1. Import some textures.

2. Use ProBuilder's Material Editor to add textures.

3. Use ProBuilder's UV Editor to tweak the look of the textures.

After watching (learning outcomes)...

Comfortable using ProBuilder to add textures and materials.

(Unique Video Reference: 46_ZR_CU2)

Adding Textures With ProBuilder

In this video (objectives)...

1. Create a light with an emissive material.

2. Place lights in our scene.

After watching (learning outcomes)...

Able to place emissive lights in your scene.

(Unique Video Reference: 47_ZR_CU2)

We Need Some Lights

In this video (objectives)...

1. Create a flashlight that is attached to the player.

2. Decay the flashlight angle and intensity over time.

After watching (learning outcomes)...

Create a decaying flashlight.

(Unique Video Reference: 48_ZR_CU2)

Create A FlashLight

In this video (objectives)...

1. Create 2 public methods on our flashlight which increase angle and intensity.

2. Create a battery pickup which calls the 2 public methods.

After watching (learning outcomes)...

Create a battery pickup which restores the functionality of our flashlight.

(Unique Video Reference: 49_ZR_CU2)

Create A Battery Pickup
Quiz - Zombie Runner #5
9 questions

In this video (objectives)...

1. Tidy up, add enemies, rebake navmesh.

2. Add code and UI to display the player's ammo for each weapon cycled through.

After watching (learning outcomes)...

Display the ammo for the currently wielded weapon.

(Unique Video Reference: 50_ZR_CU2)

Display Current Ammo UI

In this video (objectives)...

1. Add some cool effect for when the player takes damage.

2. Trigger the UI effect by turning on and off the canvas.

After watching (learning outcomes)...

Provide the player visual feedback for when they receive damage.

(Unique Video Reference: 51_ZR_CU2)

Damage Received UI

In this video (objectives)...

1. Download and add props to your game, being sure to use them to make a story.

2. A challenge for you to make a 5 minute experience that is wow.

After watching (learning outcomes)...

Add props and polish your game to make a 5 minute wow.

(Unique Video Reference: 52_ZR_CU2)

Props & Polish
+ Bonus Section
1 lecture 00:29

Congratulations on getting this far :) While you wait for new 3D content..

  • If you'd like more Unity practice then check out the Complete Unity C# Developer 2D course
  • Want to build on your knowledge with more intermediate content, then head over to our Unity RPG course.
  • Or, if you're looking to learn a new C family language then our Unreal Engine Developer course in C++ could be for you.
  • We're also Kickstarting a new course 'Discovering Godot - Learn To Code By Making Games'. Godot is a fun, intuitive engine and we'll be covering both 2D and 3D, GDScript and even converting the projects to C#

    Look forward to seeing you there soon.
Preview 00:29
  • Free disc space (5GB on PC, 10GB on Mac) to install Unity, Visual Studio, and our projects.
  • PC or Mac capable of running Unity 2017 (free Personal version).
  • Regular internet access for Q&A and community.
  • That's it... you're good to go!

This is the long-awaited sequel to the Complete Unity Developer - one of the most popular e-learning courses on the internet! Completely re-worked from scratch with brand-new projects and our latest teaching techniques. You will benefit from the fact we have already taught over 350,000 students programming and game development, many shipping commercial games as a result.

Unity is an incredible 3D package used for making video games, architectural and medical imaging and more. The challenge is that it's big and complicated to use, especially for complete beginners to coding and game development. We make learning to code easy and fun by leading you step-by-step through the process of creating exciting games.

The projects in the course use a mix of Unity 2017, 2018 and 2019. All sections are 100% compatible with the newer Unity 2019 software updates.

This course has full professional-produced English closed-captions.

If you're reading this you probably already have everything you need to get started. Unity is a free download. With regular access to an internet connection you'll be able to engage in our thriving community. Even if you have no experience with coding, or with 3D packages, we will guide you through everything from first principles. Starting slow, then building on what you learn, you'll soon have a very solid working knowledge of Unity.

Don't take our word for it, please see the amazing reviews students have taken the time to write. We are proud to be transforming lives, and equipping 1000s of people with valuable new skills. We would love you to become one of them now.

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 heads", powerful diagrams, quality screencasts and more.

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.

Prefer to focus on 2D? Check-out our Complete Unity Developer 2D course. Want something a little more advanced? Check-out our epic Unity RPG course. Want to get certified, get a job, or learn environment art - we've got you covered. The green leaf logo is your sign of quality.

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.

What this course DOESN'T cover...

Here are some things we will not be covering in detail...

  • Art asset creation (assets provided but not made on-screen).

  • Advanced performance optimization.

  • Editor plugins or modifications.

  • Physics engine modification.

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!

Note: access to this course comes with an optional, free community site where you can share games and connect with 1000s of other students.

Dive in now, you won't be disappointed!

Who this course is for:
  • Anyone who wants to learn to code the fun way - by making games.
  • Existing coders (especially C#) who want to re-skill to game development.
  • People who want to learn to make their video games, learning code as they go.