Book description
Discover the latest features of Unity 2021 and dive deeper into the nuances of professional game development with Unity
Key Features
- Discover the latest features of Unity 2021 including coverage of AR/VR development
- Follow practical recipes for better 2D and 2D character development with Unity GameKits
- Learn powerful techniques and expert best practices in building 3D objects, textures, and materials
Book Description
If you are a Unity developer looking to explore the newest features of Unity 2021 and recipes for advanced challenges, then this fourth edition of Unity Cookbook is here to help you.
With this cookbook, you’ll work through a wide variety of recipes that will help you use the essential features of the Unity game engine to their fullest potential. You familiarize yourself with shaders and Shader Graph before exploring animation features to enhance your skills in building games.
As you progress, you will gain insights into Unity's latest editor, which will help you in laying out scenes, tweaking existing apps, and building custom tools for augmented reality and virtual reality (AR/VR) experiences. The book will also guide you through many Unity C# gameplay scripting techniques, teaching you how to communicate with database-driven websites and process XML and JSON data files.
By the end of this Unity book, you will have gained a comprehensive understanding of Unity game development and built your development skills. The easy-to-follow recipes will earn a permanent place on your bookshelf for reference and help you build better games that stay true to your vision.
What you will learn
- Discover how to add core game features to your projects with C# scripting
- Create powerful and stylish UI with Unity’s UI system, including power bars, radars, and button-driven scene changes
- Work with essential audio features, including background music and sound effects
- Discover Cinemachine in Unity to intelligently control camera movements
- Add visual effects such as smoke and explosions by creating and customizing particle systems
- Understand how to build your own Shaders with the Shader Graph tool
Who this book is for
If you’re a Unity developer looking for better ways to resolve common recurring problems with recipes, then this book is for you. Programmers dipping their toes into multimedia features for the first time will also find this book useful. Before you get started with this Unity engine book, you’ll need a solid understanding of Unity’s functionality and experience with programming in C#.
Table of contents
- Title Page
- Copyright and Credits
- Dedication
- Foreword
- Contributors
- Preface
-
Displaying Data with Core UI Elements
- Technical requirements
- Displaying a "Hello World" UI text message
- Getting ready
- How to do it...
- How it works...
- There's more...
- Styling substrings with rich text
- Displaying a digital clock
- Getting ready
- How to do it...
- How it works...
- Displaying a digital countdown timer
- Getting ready
- How to do it...
- How it works...
- Creating a message that fades away
- Getting ready
- How to do it...
- How it works...
- Displaying a perspective 3D Text Mesh
- Getting ready
- How to do it...
- How it works...
- There's more...
- Making the text crawl as it does in the movie
- Where to learn more
- Creating sophisticated text with TextMeshPro
- Getting ready
- How to do it...
- How it works...
- There's more...
- Rich text substrings for colors, effects, and sprites
- Displaying an image
- Getting ready
- How to do it...
- How it works...
- There's more...
- Working with 2D sprites and UI Image components
- See also
- Creating UIs with the Fungus open source dialog system
- How to do it...
- How it works...
- Creating a Fungus character dialog with images
- How to do it...
- How it works...
- There's more...
- Further reading
-
Responding to User Events for Interactive UIs
- Technical requirements
- Creating UI Buttons to move between scenes
- How to do it...
- How it works...
- There's more...
- Animating button properties on mouseover
- How to do it...
- How it works...
- Organizing image panels and changing panel depths via buttons
- Getting ready
- How to do it...
- How it works...
- There's more...
- Moving up or down by just one position, using scripted methods
- Displaying the value of an interactive UI Slider
- How to do it...
- How it works...
- Displaying a countdown timer graphically with a UI Slider
- Getting ready
- How to do it...
- How it works...
- Setting custom mouse cursors for 2D and 3D GameObjects
- Getting ready
- How to do it...
- How it works...
- Setting custom mouse cursors for UI controls
- Getting ready
- How to do it...
- How it works...
- Interactive text entry with Input Field
- How to do it...
- How it works...
- There's more...
- Toggles and radio buttons via toggle groups
- Getting ready
- How to do it...
- How it works...
- There's more...
- Creating text and image icon UI Drop-down menus
- Getting ready
- How to do it...
- How it works...
- There's more...
- Adding images to a Dropdown control
- Displaying a radar to indicate the relative locations of objects
- Getting ready
- How to do it...
- How it works...
- The Start() method
- The Update() method
- The FindAndDisplayBlipsForTag(...) method
- The CalculateBlipPositionAndDrawBlip (...) method
- The NormalizedPosition(...) method
- The CalculateBlipPosition(...) method
- The DrawBlip() method
- There's more...
-
Inventory and Advanced UIs
- Technical requirements
- Creating a simple 2D mini-game – SpaceGirl
- Getting ready
- How to do it...
- How it works...
- Displaying single object pickups with carrying and not-carrying text
- Getting ready
- How to do it...
- How it works...
- The PlayerInventory script class
- The PlayerInventoryDisplay script class
- There's more...
- Collecting multiple items and display the total number carried
- Alternative – combining all the responsibilities into a single script
- Displaying single-object pickups with carrying and not-carrying icons
- Getting ready
- How to do it...
- How it works...
- Displaying multiple pickups of the same object with multiple status icons
- Getting ready
- How to do it...
- How it works...
- There's more...
- Revealing icons for multiple object pickups by changing the size of a tiled image
- Using panels to visually outline the inventory UI area and individual items
- Getting ready
- How to do it...
- How it works...
- Creating a C# inventory slot UI to display scripted components
- Getting ready
- How to do it...
- How it works...
- There's more...
- Modifying the game for a second inventory panel for keys
- Using UI Grid Layout Groups to automatically populate a panel
- Getting ready
- How to do it...
- How it works...
- There's more...
- Automatically inferring the number of inventory slots based on the number of GameObjects tagged Star
- Adding a horizontal scroll bar to the inventory slot display
- Automatically changing the grid cell size based on the number of slots in the inventory
- Displaying multiple pickups of different objects as a list of text via a dynamic list of scripted PickUp objects
- Getting ready
- How to do it...
- How it works...
- There's more...
- Ordering items in the inventory list alphabetically
- Using a Dictionary and Enums to display text totals for different objects
- Getting ready
- How to do it...
- How it works...
- Creating a runtime UI Toolkit interface
- Getting ready
- How to do it...
- How it works...
- Further reading
-
Playing and Manipulating Sounds
- Technical requirements
- Playing different one-off sound effects with a single AudioSource component
- Getting ready
- How to do it...
- How it works...
- There's more...
- Playing a sound at a static point in 3D world space
- Playing and controlling different sounds each with its own AudioSource component
- Getting ready
- How to do it...
- How it works...
- Creating just-in-time AudioSource components at runtime through C# scripting
- Getting ready
- How to do it...
- How it works...
- There's more...
- Adding the CreateAudioSource(...) method as an extension to the MonoBehavior class
- Delaying before playing a sound
- Getting ready
- How to do it...
- How it works...
- Preventing an audio clip from restarting if it is already playing
- Getting ready
- How to do it...
- How it works...
- Waiting for the audio to finish playing before auto-destructing an object
- Getting ready
- How to do it...
- How it works...
- See also
- Scheduling a sound to play at a certain time
- Getting ready
- How to do it...
- How it works...
- Audio visualization from sample spectral data
- Getting ready
- How to do it...
- How it works...
- There's more...
- Adding visualizations to a second AudioSource component
- Trying out different Fast Fourier Transform (FFT) window types
- Synchronizing simultaneous and sequential music to create a simple 140 bpm music-loop manager
- Getting ready
- How to do it...
- How it works...
- There's more...
- Adding visualizations to the four playing loops
- Further reading
-
Creating 3D Objects, Terrains, Textures, and Materials
- Technical requirements
- Creating 3D primitives and adding materials and textures
- Getting ready
- How to do it...
- How it works...
- There's more...
- Enhancing the scene – adding a spotlight and wood material
- Creating a new Material asset file in the Project window and then setting its Albedo to a texture
- Converting and importing 3D models into a project
- Getting ready
- How to do it...
- How it works...
- Highlighting GameObject materials on mouseover
- Getting ready
- How to do it...
- How it works...
- There's more...
- Collider needed for custom meshes
- Changing the material's color in response to mouse events
- Fading the transparency of a material
- How to do it...
- How it works...
- There's more...
- Destroying objects when fading is complete
- Using the GameObject's alpha as our starting alpha value
- Using a coroutine for our fading loop
- Creating geometry with ProBuilder
- How to do it...
- How it works...
- Creating a house with ProBuilder
- How to do it...
- How it works...
- Creating and texture-painting terrains
- How to do it...
- How it works...
- Height painting terrains
- Getting ready
- How to do it...
- How it works...
- Adding Terrain holes
- Getting ready
- How to do it...
- How it works...
- There's more...
- Further reading
-
2D Animation and Physics
- Technical requirements
- Flipping a sprite horizontally – the DIY approach
- Getting ready
- How to do it...
- How it works...
- There's more...
- Flipping a sprite horizontally – using Animator State Chart and transitions
- Getting ready
- How to do it...
- How it works...
- There's more...
- Instantaneous swapping
- Animating body parts for character movement events
- Getting ready
- How to do it...
- How it works...
- Creating a three-frame animation clip to make a platform continually animate
- Getting ready
- How to do it...
- How it works...
- There's more...
- Copying the animation relative to a new parent GameObject
- Making a platform start falling once stepped on using a Trigger to move the animation from one state to another
- Getting ready
- How to do it...
- How it works...
- Creating animation clips from sprite sheet sequences
- Getting ready
- How to do it...
- How it works...
- Creating a platform game with tiles and tilemaps
- Getting ready
- How to do it...
- How it works...
- There's more...
- Tile palettes for objects and walls
- Using sprite placeholders to create a simple physics scene
- Getting ready
- How to do it...
- How it works...
- There's more...
- Editing polygon Colliders for more realistic 2D physics
- Getting ready
- How to do it...
- How it works...
- Creating an explosionForce method for 2D physics objects
- Getting ready
- How to do it...
- How it works...
- There's more...
- Clipping via Sprite Masking
- Getting ready
- How to do it...
- How it works...
- There's more...
- Further reading
-
Characters, Game Kits, and Starter Assets
- Technical requirements
- Creating a game with the 3D Game Kit
- How to do it...
- How it works...
- There's more...
- Creating a game with the 2D Game Kit
- Getting ready
- How to do it...
- How it works...
- Importing third-party 3D models and animations from Mixamo
- Getting ready
- How to do it...
- How it works...
- There's more...
- Looping the animation
- Scripting events to control when animation clips are played
- Swapping the Standard Assets Ethan for a different character
- Getting ready
- How to do it...
- How it works...
- Importing a 3D model and adding an Animation Controller
- How to do it...
- How it works...
- Using scripts to control 3D animations
- Getting ready
- How to do it...
- How it works...
- There's more...
- Importing and using a UMA free character
- How to do it...
- How it works...
- There's more...
- Getting started with the 2021 Starter Assets package
- How to do it...
- How it works...
- Further reading
-
Web Server Communication and Online Version Control
- Technical requirements
- Setting up a leaderboard using PHP and a database
- Getting ready
- How to do it...
- How it works...
- There's more...
- SQLite, PHP, and database servers
- phpLiteAdmin
- See also
- Unity game communication with a web server leaderboard
- Getting ready
- How to do it...
- How it works...
- There's more...
- Extracting the full leaderboard data for display within Unity
- Using secret game codes to secure your leaderboard scripts
- See also
- Creating and cloning a GitHub repository
- Getting ready
- How to do it...
- How it works...
- There's more...
- Learn more about DVCS
- Learn more about Git at the command line
- Using Bitbucket and Sourcetree visual applications
- Learning about Mercurial rather than Git
- Adding a Unity project to a local Git repository, and pushing files up to GitHub
- Getting ready
- How to do it...
- How it works...
- Unity project version control using GitHub for Unity
- Getting ready
- How to do it...
- How it works...
- There's more...
- Further reading on GitHub for Unity
- Pulling down updates from other developers
- Unity Collaborate from Unity Technologies
- Further reading
-
Controlling and Choosing Positions
- Technical requirements
- Using a rectangle to constrain 2D Player object movement
- Getting ready
- How to do it...
- How it works...
- There's more...
- Drawing a gizmo yellow rectangle to visually show a bounding rectangle
- Player control of a 3D GameObject (and limiting movement within a rectangle)
- How to do it...
- How it works...
- There's more...
- Drawing a gizmo yellow rectangle to visually show a bounding rectangle
- Drawing thick gizmo lines
- Choosing destinations – finding a random spawn point
- Getting ready
- How to do it...
- How it works...
- See also
- Choosing destinations – finding the nearest spawn point
- Getting ready
- How to do it...
- How it works...
- There's more...
- Avoiding errors due to an empty array
- See also
- Choosing destinations – respawning to the most recently passed checkpoint
- Getting ready
- How to do it...
- How it works...
- Moving objects by clicking on them
- Getting ready
- How to do it...
- How it works...
- Firing projectiles in the direction of movement
- Getting ready
- How to do it...
- How it works...
-
Navigation Meshes and Agents
- Technical requirements
- NPC to travel to destination while avoiding obstacles
- Getting ready
- How to do it...
- How it works...
- NPC to seek or flee from a moving object
- Getting ready
- How to do it...
- How it works...
- There's more...
- Using a Debug Ray to show a source-to-destination line
- Constantly updating the NavMeshAgent's destination to flee from the player's current location
- Maintaining a constant distance from the target ("lurking" mode!)
- Point-and-click move to object
- Getting ready
- How to do it...
- How it works...
- There's more...
- Creating a mouseover yellow highlight
- Point-and-click move to tile
- Getting ready
- How to do it...
- How it works...
- There's more...
- Using a yellow debug ray to show the destination of the AI agent
- Point-and-click raycast with user-defined, higher-cost navigation areas
- Getting ready
- How to do it...
- How it works...
- There's more...
- More intelligent pathfinding by setting different costs for custom-defined navigation areas such as mud and water
- Improving the UX by updating a "gaze" cursor each frame
- NPC NavMeshAgent to follow waypoints in a sequence
- Getting ready
- How to do it...
- How it works...
- There's more...
- Working with arrays of waypoints
- Increased flexibility with the WayPoint class
- Controlling object group movement through flocking
- Getting ready
- How to do it...
- How it works...
- Creating a movable NavMesh Obstacle
- Getting ready
- How to do it...
- How it works...
- Further reading
-
Cameras and Rendering Pipelines
- Technical requirements
- Creating the basic scene for this chapter
- Getting ready
- How to do it...
- How it works...
- There's more...
- Working with a fixed Main Camera
- Getting ready
- How to do it...
- How it works...
- Changing how much of the screen a camera renders to
- Getting ready
- How to do it...
- How it works...
- There's more...
- Using Render Textures to send camera output to places other than the screen
- Getting ready
- How to do it...
- How it works...
- There's more...
- Inverting our mirror camera horizontally
- A simple snapshot of a scene at runtime
- Working with Unity's multipurpose camera rig
- How to do it...
- How it works...
- Using Cinemachine ClearShot to switch cameras to keep the player in shot
- Getting ready
- How to do it...
- How it works...
- There's more...
- Unity Cinemachine tutorials
- Will Goldstone's ClearShot tutorial
- Adam Myhill's Cinemachine blog posts
- Reading the installed Cinemachine documentation
- Cinemachine and Timeline
- Letting the player switch to a Cinemachine FreeLook camera
- Getting ready
- How to do it...
- How it works...
- Creating a project with the URP
- Getting ready
- How to do it...
- How it works...
- Adding a vignette effect
- Getting ready
- How to do it...
- How it works...
- There's more...
- Creating an HDRP project with an HDRI skybox
- Getting ready
- How to do it...
- How it works...
- Further reading
-
Shader Graphs and Video Players
- Technical requirements
- Playing videos by manually adding a VideoPlayer component to a GameObject
- Getting ready
- How to do it...
- How it works...
- There's more...
- Using scripting to control video playback on scene textures
- Getting ready
- How to do it...
- How it works...
- There's more...
- Downloading an online video (rather than a clip)
- Ensuring a movie is prepared before playing
- Getting ready
- How to do it...
- How it works...
- There's more...
- Ensuring that the movie has been prepared before playing it with coroutines
- Outputting video playback to a RenderTexture asset
- Getting ready
- How to do it...
- How it works...
- Using scripting to play a sequence of videos back to back
- Getting ready
- How to do it...
- How it works...
- Creating and using a simple Shader Graph
- How to do it...
- How it works...
- Creating a glow effect with Shader Graph
- Getting ready
- How to do it...
- How it works...
- Toggling a Shader Graph color glow effect through C# code
- Getting ready
- How to do it...
- How it works...
- There's more...
- Further reading
- Shader Graph online resources
- Video player online resources
-
Advanced Topics - Gizmos, Automated Testing, and More
- Technical requirements
- Using Gizmo to show the currently selected object in the Scene window
- How to do it...
- How it works...
- See also
- Creating an editor snap-to-grid drawn by a Gizmo
- How to do it...
- How it works...
- There's more...
- Saving and loading player data – using static properties
- Getting ready
- How to do it...
- How it works...
- There's more...
- Hiding the score before the first attempt is completed
- See also
- Saving and loading player data – using PlayerPrefs
- Getting ready
- How to do it...
- How it works...
- See also
- Loading game data from a text file map
- Getting ready
- How to do it...
- How it works...
- Saving data to a file while the game is running
- How to do it...
- How it works...
- See also
- Generating and running a default test script class
- How to do it...
- How it works...
- There's more...
- Creating a default test script from the Project window's Create menu
- Edit mode minimum skeleton unit test script
- A simple unit test
- How to do it...
- How it works...
- There's more...
- Shorter tests with values in the assertion
- Expected value followed by the actual value
- Parameterizing tests with a data provider
- How to do it...
- How it works...
- Unit testing a simple health script class
- How to do it...
- How it works...
- Health.cs
- TestHealth.cs
- Creating and executing a unit test in PlayMode
- How to do it...
- How it works...
- PlayMode testing a door animation
- Getting ready
- How to do it...
- How it works...
- There's more...
- PlayMode and unit testing a player health bar with events, logging, and exceptions
- Getting ready
- How to do it...
- How it works...
- PlayMode testing
- Unit tests
- See also
- Reporting Code Coverage testing
- Getting ready
- How to do it...
- How it works...
- Running simple Python scripts inside Unity
- How to do it...
- How it works...
- Further reading
-
Particle Systems and Other Visual Effects
- Technical requirements
- Exploring Unity's Particle Pack and reusing samples for your own games
- How to do it...
- How it works...
- Creating a simple particle system from scratch
- How to do it...
- How it works...
- Using Texture Sheets to simulate fire with a particle system
- Getting ready
- How to do it...
- How it works...
- Making particles collide with scene objects
- How to do it...
- How it works...
- There's more...
- Simulating an explosion
- Getting ready
- How to do it...
- How it works...
- Using Invoke to delay the execution of an explosion
- Getting ready
- How to do it...
- How it works...
- There's more...
- Further reading
-
Virtual and Augmented Reality (VR/AR)
- Technical requirements
- Setting up Unity for VR
- How to do it...
- How it works...
- Setting up an Oculus Quest/2 in Developer Mode
- Getting ready
- How to do it...
- How it works...
- Creating a VR project for the Oculus Quest/2
- Getting ready
- How to do it...
- How it works...
- There's more...
- Build failure due to Android version
- Build failure due to "namespace cannot be found" error
- Sideloading APK files to an Android device (such as the Quest headset)
- Creating a VR project using the Mock HMD device
- Getting ready
- How to do it...
- How it works...
- Working with the Mozilla demo WebXR project
- Getting ready
- How to do it...
- How it works...
- There's more...
- Using GitHub Pages to publish your WebXR project for free
- Learning more about the WebXR example project
- Fixing pink (shader/material) problems
- The community maintaining more up-to-date XR resources
- Fixing obsolete code errors
- Adding 360-degree videos to a VR project
- Getting ready
- How to do it...
- How it works...
- There's more...
- Playing 360-degree videos on the surface of a 3D object
- Exploring the Unity AR samples
- Getting ready
- How to do it...
- How it works...
- There's more...
- Targeting iOS device builds
- Allowing Android APK file downloads on your phone
- Setting up Unity for AR
- How to do it...
- How it works...
- There's more...
- Build failure due to Android version
- Build failure due to Vulkan API graphics settings
- Creating a simple AR Foundation project
- Getting ready
- How to do it...
- How it works...
- Detecting and highlighting planes with AR Foundation
- Getting ready
- How to do it...
- How it works...
- Creating an AR furniture previewer by detecting horizontal planes
- Getting ready
- How to do it...
- How it works...
- Creating a floating 3D model over an image target
- Getting ready
- How to do it...
- How it works...
- Further reading
Product information
- Title: Unity 2021 Cookbook - Fourth Edition
- Author(s):
- Release date: September 2021
- Publisher(s): Packt Publishing
- ISBN: 9781839217616
You might also like
book
Unity Development Cookbook, 2nd Edition
Learn everything you need to know to use the powerful Unity engine to its full potential …
book
Unity 2021 Shaders and Effects Cookbook - Fourth Edition
Overcome the challenges and complexities involved in creating your own shaders with high-level realism using practical …
book
Unity in Action, Third Edition
This hands-on beginners guide gets you building games fast, all with the awesome Unity engine! You’ll …
book
Unity in Action, Second Edition
Manning's bestselling and highly recommended Unity book has been fully revised! Unity in Action, Second Edition …