This is the Complete Unity Developer - one of the most successful 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 360,336 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 Developer
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.
- 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
Useful links
- Fonts: dafont.com
- Sound: Freesound.org
- We're building for “mobile first” here.
- No use of keyboard, just tap & drag.
- Mobile device aspect ratios.
Useful Links
- Internet Archive - Handling resolutions and aspect ratio of common mobile devices for web, application and game development
- Unity Manual - Rect Transform
- Unity Manual - Canvas Scaler
- An alternative MusicManager.cs architecture
- Customise your Win and Loose scenes.
- Test it all looks and sounds good.
- 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.
- 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.
- Canvas Scaler “Screen Match Mode”.
- Use a “Raw Image” & grass texture.
- Define play space, and quiet zones.
- Setup our Level with prefabs.
A brief talking-head video where Ben Tristem introduces how to use PlayerPrefs in Unity.
- What is PlayerPrefs, and why is it useful?
- Limitations of PlayerPrefs
- Why we're providing our own wrapper class.
- Create PlayerPrefsManager.cs static wrapper.
Ben recaps where we are, and continues building the PlayerPrefsManager.
- Introducing UI sliders.
- Add volume and difficulty sliders.
- Create OptionsController.cs.
- Ensure sliders work.
- The sprite sheet (AKA sprite atlas).
- Comparison to bone-based animation.
- Importing & slicing sprite sheets.
- Making your first animation.
- The fundamentals of ratio math(s).
- What screen aspect ratios mean.
- How to convert between different aspects.
- 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.
- How animators, states & motion clips relate
- Adding multiple animation states & clips.
- Options for transitioning between them.
- Again, only animate one character for now.
- 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.
Useful Links
- 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.
- Animating Position, Rotation and Scale.
- Challenge: create your bone animation(s).
- Different ways of animating objects
- Different ways of moving transforms
- Options for combining these.
- Animating the cactus from scratch
- Re-capping the 5-step process.
- Finishing the defender animations
- How to make a sprite face the other way.
- Finish our attackers
- How to access our code on GitHub.
- Giving our projectiles rotation in the animator.
- Giving them translation from the animator*
- Seeing the combined motion.
* We will change translation to script later.
Useful Links
- 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.
Useful Links
- 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.
- Create an Attacker.cs component.
- Why this component model is useful.
- Tune our animation to avoid “moon walking”.
- 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.
- 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.
- The different approaches to abstraction.
- The benefits of a component model.
- Get StrikeCurrentTarget() working.
- Why a separate component makes sense.
- Create & attach Health.cs component.
- Test destruction, and initial play tuning.
- Three approaches to 2D projectile animation.
- Separate defenders from their projectiles.
- Animate projectile using script and animator.
- Fix-up defender animation states.
- 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.
- 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.
- Make projectiles damage Attacker with Health.
- Setup a play space, and start tuning.
- Tweak damage and health levels.
- We'll play tune again later.
- 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)
- The problem with the Projectiles placeholder.
- Useful blog article on best practices*
- A pattern for checking and creating.
Useful Links
- 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.
- Place enemy spawners.
- Decide how spawning is controlled.
- A word about the Flow Channel*
- Write script(s) to control spawning.
Useful Links
- 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.
- 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.
- 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.
- Remove lose test button.
- Create a lose collider.
- Setup lose triggering & transition.
- Improve lose screen.
- 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.
- Tidy Spawner.cs > isTimeToSpawn()
- Adjust colliders so attackers hit defenders.
- Fix the gravestone animation transitions.
- Creates prefabs of our work.
- 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.
- Downloading & installing Android Studio.
- How to solve common issues.
- Check Android Studio loads.
Useful Links
- 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.
- 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.
- 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.
- Upgrade to Unity 5.
- About Web GL builds.
- Build for Web GL and share.