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.
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.
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.
- 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.
- About version control and why we care.
- How version control helps with game development.
- Setting up Git and SourceTree with Unity.
- What a
.gitignore
file is. - Unity's
Library
folder is a cache. - How to easily add a Unity
.gitignore
.
- Which axis is right, forward and up in Unity.
- Everything should be prefabbed.
- How to create a material.
- Setting our world origin.
- 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.
- How to access a rigid body in Unity 2017.
- Using
AddRelativeForce()
. - Adjusting mass to get our ship hovering!
- 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.
- 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!
- 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.
- 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.
- Multiply a vector by a float to change length.
SerializeField
vspublic
to expose to Inspector.- Creating design "levers".
- Tweaking our rocket movement.
- 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.
- 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.
- 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()
- How to fix scene getting dark on level load.
- Creating an
enum
for our player state. - Using Unity's
Invoke()
to delay load.
- 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!
- 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.
- What a particle effect is.
- How we designate which effect to play.
- Using
ParticleSystem.Play()
to trigger effect.
- Using
[DisallowMultipleComponent]
attribute. - Using
[Range(0,1)]
attribute. - A pattern for moving platforms.
- How to initialise a
Vector3
. - Using
Mathf.Sin()
for oscillation. - Getting your offsets right.
- Making thrust frame-rate independent.
- 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.
- 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?
- 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.
- 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.