Book description
Get up to speed with a series of performance-enhancing coding techniques and methods that will help you improve the performance of your Unity applications
Key Features
- Optimize graphically intensive games using the latest features of Unity such as Electronic Clearance Service (ECS) and the Burst compiler
- Explore techniques for solving performance issues with your VR projects
- Learn best practices for project organization to save time through an improved workflow
Book Description
Unity engine comes with a great set of features to help you build high-performance games. This Unity book is your guide to optimizing various aspects of your game development, from game characters and scripts, right through to animations.
You'll explore techniques for writing better game scripts and learn how to optimize a game using Unity technologies such as ECS and the Burst compiler. The book will also help you manage third-party tooling used with the Unity ecosystem. You'll also focus on the problems in the performance of large games and virtual reality (VR) projects in Unity, gaining insights into detecting performance issues and performing root cause analysis. As you progress, you'll discover best practices for your Unity C# script code and get to grips with usage patterns. Later, you'll be able to optimize audio resources and texture files, along with effectively storing and using resource files. You'll then delve into the Rendering Pipeline and learn how to identify performance problems in the pipeline. In addition to this, you'll learn how to optimize the memory and processing unit of Unity. Finally, you'll cover tips and tricks used by Unity professionals to improve the project workflow.
By the end of this book, you'll have developed the skills you need to build interactive games using Unity and its components.
What you will learn
- Apply the Unity Profiler to find bottlenecks in your app, and discover how to resolve them
- Discover performance problems that are critical for VR projects and learn how to tackle them
- Enhance shaders in an accessible way, optimizing them with subtle yet effective performance tweaks
- Use the physics engine to keep scenes as dynamic as possible
- Organize, filter, and compress art assets to maximize performance while maintaining high quality
- Use the Mono framework and C# to implement low-level enhancements that maximize memory usage and prevent garbage collection
Who this book is for
The book is intended for intermediate Unity game developers who wants to maximize the performance of their game. The book assumes familiarity with C# programming.
Table of contents
- Title Page
- Copyright and Credits
- Dedication
- About Packt
- Contributors
- Preface
- Section 1: Base Scripting Optimization
- Evaluating Performance Problems
-
Scripting Strategies
- Obtaining components using the fastest method
- Removing empty callback definitions
- Caching component references
- Sharing calculation output
- Update, coroutines, and InvokeRepeating
- Faster GameObject null reference checks
- Avoid retrieving string properties from GameObjects
- Using appropriate data structures
- Avoiding re-parenting transforms at runtime
- Considering caching transform changes
- Avoiding Find() and SendMessage() at runtime
- Disabling unused scripts and objects
- Using distance-squared over distance
- Minimizing deserialization behavior
- Loading scenes additively and asynchronously
- Creating a custom Update() layer
- Summary
- Section 2: Graphical Optimizations
- The Benefits of Batching
-
Optimizing Your Art Assets
-
Audio
- Importing audio files
- Loading audio files
- Encoding formats and quality levels
-
Audio performance enhancements
- Minimizing active audio source count
- Enabling Force to Mono for 3D sounds
- Resampling to lower frequencies
- Considering all compression formats
- Being cautious of streaming
- Applying filter effects through mixer groups to reduce duplication
- Using remote content streaming responsibly
- Consider using audio module files for background music
- Texture files
- Mesh and animation files
- Asset bundles and resources
- Summary
-
Audio
-
Faster Physics
- Understanding the physics engine
-
Physics performance optimizations
- Scene setup
- Using static colliders appropriately
- Using trigger volumes responsibly
- Optimizing the Collision Matrix
- Preferring discrete collision detection
- Modifying the fixed update frequency
- Adjusting the Maximum Allowed Timestep
- Minimizing raycasting and bounding-volume checks
- Avoiding complex Mesh Colliders
- Avoiding complex physics components
- Letting physics objects sleep
- Modifying the solver iteration count
- Optimizing ragdolls
- Knowing when to use physics
- Summary
-
Dynamic Graphics
- Exploring the Rendering Pipeline
- Detecting performance issues
-
Rendering performance enhancements
- Enabling/disabling GPU skinning
- Reducing geometric complexity
- Reducing tessellation
- Employing GPU instancing
- Using mesh-based LOD
- Making use of Occlusion Culling
- Optimizing Particle Systems
-
Optimizing Unity UI
- Using more Canvases
- Separating objects between static and dynamic Canvases
- Disabling Raycast Target for non-interactive elements
- Hiding UI elements by disabling the parent Canvas component
- Avoiding Animator components
- Explicitly defining the event camera for World Space Canvases
- Don't use alpha to hide UI elements
- Optimizing ScrollRects
- Using empty UIText elements for full-screen interaction
- Checking the Unity UI source code
- Checking the documentation
-
Shader optimization
- Consider using shaders intended for mobile platforms
- Using small data types
- Avoiding changing precision while swizzling
- Using GPU-optimized helper functions
- Disabling unnecessary features
- Removing unnecessary input data
- Exposing only necessary variables
- Reducing mathematical complexity
- Reducing texture sampling
- Avoiding conditional statements
- Reducing data dependencies
- Surface Shaders
- Use shader-based LOD
- Using less texture data
- Testing different GPU texture compression formats
- Minimizing texture swapping
- VRAM limits
- Lighting optimization
- Optimizing rendering performance for mobile devices
- Summary
- Section 3: Advance Optimizations
- Optimizations for Virtual and Augmented Reality
-
Masterful Memory Management
- The Mono platform
- Code compilation
- Profiling memory
-
Memory management performance enhancements
- Garbage collection tactics
- Manual JIT compilation
- Value types and reference types
- String concatenation
- Boxing
- The importance of data layout
- Arrays from the Unity API
- Using InstanceIDs for dictionary keys
- foreach loops
- Coroutines
- Closures
- The .NET library functions
- Temporary work buffers
- Object pooling
- Prefab pooling
- IL2CPP optimizations
- WebGL optimizations
- Summary
- The Data-Oriented Technology Stack
- Tactical Tips and Tricks
- Other Books You May Enjoy
Product information
- Title: Unity Game Optimization - Third Edition
- Author(s):
- Release date: November 2019
- Publisher(s): Packt Publishing
- ISBN: 9781838556518
You might also like
book
Unity Game Development Cookbook
Discover how to use the Unity game engine to its full potential for both 3D and …
video
Unity C# Scripting — Complete C# for Unity Game Development
Unity is free, easy to learn, has excellent documentation, and is the game engine used to …
book
Building an FPS Game with Unity
Create a high-quality first person shooter game using the Unity game engine and the popular UFPS …
book
Mastering Unity 2D Game Development - Second Edition
Master everything you need to build a 2D game using Unity 5 by developing a complete …