Course contentsShow
← Unity Game Development
Lesson 73 of 8282. Scripting and LifecycleFree lesson

Initialization Logic with Awake and Start

You will distinguish between object instantiation and component activation to correctly initialize references and game state variables before the first frame update.

Initialization Logic with Awake and Start

In this lesson, you’ll learn how to properly prepare your game objects for gameplay by distinguishing between the Awake and Start methods in the Unity lifecycle.

When you create a script, Unity provides these two specialized methods to handle the "setup" phase of your objects. While both run once, they serve very different purposes based on the lifecycle of your game.

The Awake Method: Establishing Foundations

Awake is called as soon as the script instance is loaded—even if the component or the game object is currently disabled. Because it runs before anything else happens, it is the perfect place to set up internal references. If your script depends on another component on the same object, Awake ensures those connections exist before any other game logic kicks in.

The Start Method: Initializing State

Start is called only if the script component is enabled, and it occurs right before the very first frame of the game. This makes it ideal for game state variables or logic that relies on other objects being fully initialized. Since Awake has already finished across all scripts, you can safely assume that your external references are ready for use inside Start.

A Practical Illustration

Think of Awake as "building the car" and Start as "turning the key to start the engine." You need the car built before you can start it!

public class PlayerSetup : MonoBehaviour
{
    private Rigidbody rb;
    public int health;

    void Awake()
    {
        // Use Awake to link internal components
        rb = GetComponent<Rigidbody>();
    }

    void Start()
    {
        // Use Start to initialize values that rely on a stable game world
        health = 100;
        Debug.Log("Player is ready with 100 health.");
    }
}

By separating your logic this way, you prevent common bugs where one script tries to talk to another object before that object has finished setting itself up. Always use Awake for establishing connections between components and Start for finalizing the initial game state.

Key Takeaway: Use Awake to configure internal component references and Start to initialize game-state values that depend on the existence of other ready-to-go objects.