This is the Complete Unity C# Developer 3D, the long-awaited sequel to the Complete Unity C# Developer 2D - one of the most successful e-learning courses on the internet! Completely re-worked from scratch with brand-new projects, our latest teaching techniques,. You will benefit from the fact we have already taught over 350,000 students game development, many shipping commercial games as a result.
You're welcome to download, fork or do whatever else legal with all the files! The real value is in our huge, high-quality online tutorials that accompany this repo. You can check out the course here: Complete Unity C# Developer 3D
In order to start this section you should have either finished the previous section of this course, or be able to complete it's learning outcomes.
Project 3 - Project Boost
This is a game inspired by the 1986 classic Thrust. The goal is to battle gravity and avoid obstacles to skillfully pilot your ship from a launch pad to a landing pad. A simple concept with a huge array of gameplay opportunities.
This Project's Learning Outcomes
Basic Particle Effects. Local version control. Create C# scripts. Add Unity Components. Use coordinate systems, origins and anchor points. Create and maniplulate Unity prefabs. Do basic level design. (Ref: PB_CU2)
This is a Unity project. If you're familiar with source control, then "clone this repo". Otherwise download the contents, and navigate to Assets > Levels then open any .unity file.
This branch is the course branch, each commit corresponds to a lecture in the course. The current state is our latest progress.
Here are the video lectures that comprise this section. They are typically about 5-15 minutes long, and each commit contains the exact changes made to the project by the instructor in that video.
- This game is based on the old classic Thrust.
- We'll be using Unity's physics engine.
- Rick will be teaching design.
2 Project Boost Game Design
- This game is based on the old classic Thrust.
- We'll be using Unity's physics engine.
- Rick will be teaching 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.
4 Introducing Version Control
- About version control and why we care.
- How version control helps with game development.
- Setting up Git and SourceTree with Unity.
5 Add Unity .gitignore Easily
- What a .gitignore file is.
- Unity's Library folder is a cache.
- How to easily add a Unity .gitignore.
6 The Origin Of Our World
- Which axis is right, forward and up in Unity.
- Everything should be prefabbed.
- How to create a material.
- Setting our world origin.
7 Placeholder Art From Primitives
- Guidelines for setting up compound game objects.
- Using primitive shapes to create placeholder art.
- Creating our first rocket ship!
- How to read direct from keys.
- Testing key logic with the Console.
- Preparing to launch our ship.
9 Physics and Rigidbodies
- How to access a rigid body in Unity 2017.
- Using AddRelativeForce().
- Adjusting mass to get our ship hovering!
9b Coordinate System Handedness
- Some things in 2D and 3D have handedness.
- This is important when making computer games (and drugs).
- How to use your hands to predict rotations.
- Using a "Play Mode Tint".
- How to make things frame-rate independent.
- Using 'Time.deltaTime' to predict frame time.
- Getting our ship rotating in space.
10b Instructor Hangout 3.1
- Why Git rather than Unity Collab (Jason).
- Clarifying the handedness rule finger order.
- Struggling SourceTree on Mac? Forum (Frank).
- How to re-centre pivot point on rocket (Rory).
- Adding box collider to odd shaped rocket (Andy).
- Adding [Prefix] to Q&A question and comments.
- Mad How Disease, and that 1000y old text!
11 Adding A Touch Of Audio
- There's an Audio Listener on the Main Camera.
- An Audio Source component makes sounds.
- How to create and attach an Audio Clip.
- Making sounds when the rocket thrutsts.
12 Resolving Movement Bugs
- A minor code refactor.
- Update our ship prefab.
- Create new gameplay platforms.
- Use Rigid Body Constraints.
- Using rigidBody.freezeRotation = true
- Adding some Drag to our ship.
13 Using SerializeField vs public
- Multiply a vector by a float to change length.
- SerializeField vs public to expose to Inspector.
- Creating design "levers".
- Tweaking our rocket movement.
14 Tagging Game Objects As Friendly
- The pros and cons of using tags in Unity.
- How to use OnCollisionEnter().
- Differentiating between collisions.
- Tweak our camera to suit our design intention.
- Design a simple game moment to form the basis of our level.
- Add a backdrop.
16 Design Levers And Tuning
- What design levers do we currently have at our disposal?
- Some examples of extreme tuning.
- Improving the look of our current level.
- Creating a new scene to create a new level.
- Understanding what happens when a new prefab is created.
- Exploring when an instance gets changed if a prefab is updated.
- Adding a landing pad prefab.
19 Level Loading & Scene Management
- How to add scenes to the build order.
- About the build index vs the scene name.
- Why we need using UnityEngine.SceneManagement.
- Using SceneManager.LoadScene()
20 Invoke() As A Coroutine Warm-up
- How to fix scene getting dark on level load.
- Creating an enum for our player state.
- Using Unity's Invoke() to delay load.
20b Instructor Hangout 3.2
- Abrupt sound stopping issue (thanks Gregory).
- Care of differences in Debug mode (thanks Jeff).
- Side-effect in FreezeRotation + code reviews (Jeff).
- Well done Morgaine for 1st screen recording!
- Curtis & Robert re “too slick for neophytes”.
- Default values & [SerializeField] (Mitchell)
- Frame-rate & FixedUpdate (Straesso).
- Tip about solid background (Manuel).
- Loving the levels on forum (resources).
- Keep engaging even if it’s all clear!
21 Playing Multiple Audio Clips
- You don't need a default audio clip on a source.
- Use [SerializeField] AudioClip clipName to expose a clip.
- Use audioSource.PlayOneShot(clipName) to play.
- How to handle multiple audio clips.
22 Introducing Particle Effects
- What a particle effect is.
- How we designate which effect to play.
- Using ParticleSystem.Play() to trigger effect.
23 Moving Platform Pattern
- Using [DisallowMultipleComponent] attribute.
- Using [Range(0,1)] attribute.
- A pattern for moving platforms.
24 Mathf.Sin() For Movement Cycles
- How to initialise a Vector3.
- Using Mathf.Sin() for oscillation.
- Getting your offsets right.
- Making thrust frame-rate independent.
25 Protecting Against NaN
- Use Mathf.Epsilon for floats.
- Tidy code.
- Remember our Discord chat server.
- Create new folders within our Assets directory.
- Create new layout to help visualise all our assets.
- Manage our hierarchy by using empty Game Objects.
- Discover and address prefab linking issues.
- Understand all of the lights currently impacting your scene.
- Add point light and spotlight to your scene.
- Add light to your player object.
- Challenge - understand how nested prefabs work using our rocket ship.
- How Prefabs are copied as game objects when nested under a prefab.
- Solution is to instantiate which we will cover in the next section.
- Recap of all the design levers we now have at our disposal.
- Examples of a number of game moments and level layouts.
- Level flow options.
- Challenge to capture your game moment using screen capture software and share.
- What debug keys are.
- Why they are useful.
- Setup debug keys to ignore collisions, and immediately load next level.
- Using Debug.isDebugBuild to keep debug keys out of final player build.
30b Instructor Hangout 3.3
- When will we teach mobile inputs? (Ken)
- Important to be good at math? (Adam & Cam)
- One script versus many scripts?
- What to do next with the project?
31 Looping Through Levels
- Use SceneManager.GetActiveScene().buildIndex to get current Scene in Unity 2017
- SceneManager.sceneCountInBuildSettings to count scenes in build settings.
- Why we can't yet record total levels won.
32 Sharing With Teaser Video
- More details about build order.
- Sharing with a teaser video.
- Using OBS to record your teaser.
Note there were some off-screen changes by Rick before this video.
- This is an open-ended video where we apply bugfixes and improvements.
- Great work in this section!
- We covered a lot of great C#, Unity and Game Design territory this section.
- Let's push on to the next section of the course.