Bird
Raised Fist0
Unityframework~8 mins

Awake vs Start execution order in Unity - Performance Comparison

Choose your learning style10 modes available
Performance: Awake vs Start execution order
MEDIUM IMPACT
This concept affects the initialization timing of game objects, impacting frame load time and responsiveness during scene startup.
Initializing game objects in the correct order to avoid frame delays
Unity
void Awake() {
    // Lightweight setup
    InitializeBasicStuff();
}

void Start() {
    // Setup that depends on other objects
    InitializeHeavyStuff();
}
Splitting lightweight setup to Awake allows early preparation, while Start handles dependent heavy setup after all Awake calls, smoothing frame load.
📈 Performance GainReduces blocking on first frame, spreads initialization cost, improving frame rate stability on scene load
Initializing game objects in the correct order to avoid frame delays
Unity
void Start() {
    // Heavy setup that depends on other objects
    InitializeHeavyStuff();
}

void Awake() {
    // Empty or minimal
}
Heavy initialization in Start delays the first frame rendering because Start runs after Awake and can block the main thread.
📉 Performance CostBlocks rendering for 10-30ms depending on setup complexity, causing frame drops on scene load
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Heavy initialization in StartN/ABlocks main threadDelays first frame paint[X] Bad
Lightweight Awake + deferred StartN/AMinimal blockingSmooth first frame paint[OK] Good
Rendering Pipeline
Awake runs during object instantiation before the first frame, allowing early setup without blocking rendering. Start runs just before the first frame update, after all Awake calls, allowing dependent initialization. Heavy work in Start can delay rendering.
→Script Initialization
→Main Thread Execution
→Frame Rendering
⚠️ BottleneckMain Thread Execution during Start if heavy work is done
Optimization Tips
1Awake runs first and should be used for lightweight setup.
2Start runs after Awake and is suitable for initialization that depends on other objects.
3Avoid heavy work in Start to prevent blocking the main thread and delaying frame rendering.
Performance Quiz - 3 Questions
Test your performance knowledge
Which Unity method runs first during game object initialization?
AAwake
BStart
CUpdate
DOnEnable
DevTools: Unity Profiler
How to check: Open Unity Profiler, record during scene load, check CPU usage timeline for Awake and Start methods, observe frame time spikes.
What to look for: Look for long execution times in Start causing frame time spikes; shorter Awake times and spread out Start calls indicate better performance.

Practice

(1/5)
1. In Unity, which method is called first when a scene loads: Awake or Start?
easy
A. Awake is called before Start.
B. Start is called before Awake.
C. Both are called at the same time.
D. Neither is called automatically.

Solution

  1. Step 1: Understand Unity's initialization order

    Unity calls Awake first to initialize objects early.
  2. Step 2: Recognize Start timing

    Start runs after Awake, before gameplay begins.
  3. Final Answer:

    Awake is called before Start. -> Option A
  4. Quick Check:

    Awake runs first = D [OK]
Hint: Remember: Awake sets up early, Start sets up later [OK]
Common Mistakes:
  • Thinking Start runs before Awake
  • Believing both run simultaneously
  • Assuming methods need manual calls
2. Which of the following is the correct syntax to define the Awake method in a Unity C# script?
easy
A. public void awake() { }
B. private Awake() { }
C. void Awake() { }
D. Awake() => { }

Solution

  1. Step 1: Recall Unity method syntax

    Unity calls Awake automatically if defined as void Awake().
  2. Step 2: Check access modifiers

    Awake is usually private by default, so void Awake() is correct and common.
  3. Final Answer:

    void Awake() { } -> Option C
  4. Quick Check:

    Use void Awake() syntax [OK]
Hint: Awake method is usually defined as void Awake() [OK]
Common Mistakes:
  • Adding public or private explicitly (not required)
  • Using arrow syntax which is invalid here
  • Omitting return type
3. Consider this Unity script attached to a GameObject:
void Awake() { Debug.Log("Awake called"); }
void Start() { Debug.Log("Start called"); }

What will be the order of messages in the Console when the scene starts?
medium
A. Only "Awake called" appears
B. "Start called" then "Awake called"
C. Only "Start called" appears
D. "Awake called" then "Start called"

Solution

  1. Step 1: Identify method call order

    Unity calls Awake first, so "Awake called" logs first.
  2. Step 2: Confirm Start runs after Awake

    Then Start runs, logging "Start called" second.
  3. Final Answer:

    "Awake called" then "Start called" -> Option D
  4. Quick Check:

    Awake logs first, Start logs second [OK]
Hint: Awake logs before Start logs in console [OK]
Common Mistakes:
  • Assuming Start logs before Awake
  • Thinking only one method logs
  • Confusing method call timing
4. You wrote this script but Start never runs:
void Awake() { Debug.Log("Awake"); }
void start() { Debug.Log("Start"); }

What is the problem?
medium
A. Awake prevents Start from running.
B. start method name is lowercase, should be Start.
C. The script is missing public keyword on Start.
D. Unity does not call Start automatically.

Solution

  1. Step 1: Check method names for case sensitivity

    Unity requires exact method names; Start must be capitalized.
  2. Step 2: Understand Unity's method calling rules

    Lowercase start is ignored, so Start never runs.
  3. Final Answer:

    start method name is lowercase, should be Start. -> Option B
  4. Quick Check:

    Method names are case-sensitive [OK]
Hint: Check method names are exactly capitalized [OK]
Common Mistakes:
  • Assuming Awake blocks Start
  • Thinking public keyword is required
  • Believing Unity calls lowercase methods
5. You have two scripts on different GameObjects:
Script A:
void Awake() { Debug.Log("A Awake"); }
void Start() { Debug.Log("A Start"); }

Script B:
void Awake() { Debug.Log("B Awake"); }
void Start() { Debug.Log("B Start"); }

What is the correct order of messages in the Console when the scene starts?
hard
A. "A Awake", "B Awake", "A Start", "B Start"
B. "A Awake", "A Start", "B Awake", "B Start"
C. "A Start", "B Start", "A Awake", "B Awake"
D. "B Awake", "A Awake", "B Start", "A Start"

Solution

  1. Step 1: Understand Awake runs on all objects first

    Unity calls all Awake methods before any Start methods.
  2. Step 2: Recognize Start runs after all Awake calls

    After all Awake calls, Unity calls all Start methods.
  3. Final Answer:

    "A Awake", "B Awake", "A Start", "B Start" -> Option A
  4. Quick Check:

    All Awake first, then all Start [OK]
Hint: All Awake run before any Start runs [OK]
Common Mistakes:
  • Thinking Awake and Start alternate per object
  • Assuming Start runs before Awake
  • Believing order between objects is random
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard