Bird
Raised Fist0
Unityframework~5 mins

WaitForSeconds and WaitForEndOfFrame in Unity

Choose your learning style10 modes available
Introduction

These help you pause actions in your game for a short time or until the frame finishes. This makes your game feel smooth and timed right.

You want to wait a few seconds before showing a message or changing a scene.
You need to delay an action without freezing the whole game.
You want to run code right after the current frame finishes drawing.
You want to create smooth animations or timed effects.
You want to wait between repeated actions in a game loop.
Syntax
Unity
yield return new WaitForSeconds(seconds);
yield return new WaitForEndOfFrame();

Both are used inside a coroutine, which is a special function that can pause and resume.

WaitForSeconds pauses for a set time; WaitForEndOfFrame waits until the frame is fully drawn.

Examples
This waits 2 seconds before printing the second message.
Unity
IEnumerator ExampleWaitSeconds() {
    Debug.Log("Start waiting...");
    yield return new WaitForSeconds(2f);
    Debug.Log("2 seconds passed!");
}
This runs code right after the current frame finishes drawing.
Unity
IEnumerator ExampleWaitEndOfFrame() {
    Debug.Log("Before frame ends");
    yield return new WaitForEndOfFrame();
    Debug.Log("After frame ends");
}
Sample Program

This script waits 3 seconds, prints a message, then waits until the frame ends and prints another message.

Unity
using UnityEngine;
using System.Collections;

public class WaitExample : MonoBehaviour {
    void Start() {
        StartCoroutine(WaitAndPrint());
    }

    IEnumerator WaitAndPrint() {
        Debug.Log("Waiting for 3 seconds...");
        yield return new WaitForSeconds(3f);
        Debug.Log("3 seconds passed!");

        Debug.Log("Waiting for end of frame...");
        yield return new WaitForEndOfFrame();
        Debug.Log("Frame ended!");
    }
}
OutputSuccess
Important Notes

Coroutines must be started with StartCoroutine to work.

WaitForSeconds uses game time, so it pauses even if the frame rate changes.

WaitForEndOfFrame is useful for things like taking screenshots or updating UI after rendering.

Summary

Use WaitForSeconds to pause for a set time inside coroutines.

Use WaitForEndOfFrame to run code after the current frame finishes drawing.

Both help make timed and smooth actions in your Unity game.

Practice

(1/5)
1. What does WaitForSeconds do in a Unity coroutine?
easy
A. Pauses the coroutine for a specified amount of time.
B. Waits until the end of the current frame before continuing.
C. Stops the coroutine permanently.
D. Immediately resumes the coroutine without delay.

Solution

  1. Step 1: Understand the purpose of WaitForSeconds

    WaitForSeconds pauses the coroutine for a set number of seconds before continuing.
  2. Step 2: Compare with other options

    WaitForEndOfFrame waits for the frame to finish, not a time delay. The others are incorrect behaviors.
  3. Final Answer:

    Pauses the coroutine for a specified amount of time. -> Option A
  4. Quick Check:

    WaitForSeconds = pause time [OK]
Hint: WaitForSeconds pauses by seconds, not frames or immediate resume [OK]
Common Mistakes:
  • Confusing WaitForSeconds with WaitForEndOfFrame
  • Thinking it stops coroutine permanently
  • Assuming it resumes immediately
2. Which of the following is the correct syntax to wait for the end of the current frame in a coroutine?
easy
A. yield return new WaitForSeconds(1f);
B. yield return new WaitForEndOfFrame();
C. yield return WaitForEndOfFrame();
D. yield WaitForEndOfFrame();

Solution

  1. Step 1: Recall correct syntax for WaitForEndOfFrame

    It requires creating a new instance: new WaitForEndOfFrame().
  2. Step 2: Check other options for syntax errors

    yield return new WaitForSeconds(1f); waits seconds, not end of frame. yield return WaitForEndOfFrame(); misses 'new'. yield WaitForEndOfFrame(); misses 'return' and 'new'.
  3. Final Answer:

    yield return new WaitForEndOfFrame(); -> Option B
  4. Quick Check:

    Correct syntax = yield return new WaitForEndOfFrame() [OK]
Hint: Always use 'yield return new' with WaitForEndOfFrame [OK]
Common Mistakes:
  • Omitting 'new' keyword
  • Forgetting 'yield return'
  • Using WaitForEndOfFrame like a method without 'new'
3. What will be the output order of the following Unity coroutine code?
IEnumerator Example() {
    Debug.Log("Start");
    yield return new WaitForEndOfFrame();
    Debug.Log("End of Frame");
    yield return new WaitForSeconds(1f);
    Debug.Log("After 1 second");
}
medium
A. "End of Frame" -> "Start" -> "After 1 second"
B. "Start" -> "After 1 second" -> "End of Frame"
C. "Start" -> "End of Frame" -> "After 1 second"
D. "After 1 second" -> "Start" -> "End of Frame"

Solution

  1. Step 1: Trace the coroutine execution order

    First, "Start" logs immediately. Then it waits until the end of the frame, logs "End of Frame". Then waits 1 second, logs "After 1 second".
  2. Step 2: Confirm output sequence

    The logs appear in order: Start, End of Frame, After 1 second.
  3. Final Answer:

    "Start" -> "End of Frame" -> "After 1 second" -> Option C
  4. Quick Check:

    WaitForEndOfFrame runs before WaitForSeconds delay [OK]
Hint: WaitForEndOfFrame logs before WaitForSeconds delay [OK]
Common Mistakes:
  • Assuming WaitForSeconds runs before WaitForEndOfFrame
  • Mixing log order
  • Ignoring yield return pauses
4. Identify the error in this coroutine code snippet:
IEnumerator WaitExample() {
    Debug.Log("Before wait");
    yield WaitForSeconds(2f);
    Debug.Log("After wait");
}
medium
A. Missing 'new' keyword before WaitForSeconds.
B. Coroutine cannot use yield statements.
C. WaitForSeconds cannot be used in coroutines.
D. Debug.Log statements are not allowed in coroutines.

Solution

  1. Step 1: Check syntax for WaitForSeconds usage

    WaitForSeconds must be instantiated with 'new', so it should be 'yield return new WaitForSeconds(2f);'.
  2. Step 2: Verify other statements

    Coroutines can use yield statements and Debug.Log is allowed anywhere.
  3. Final Answer:

    Missing 'new' keyword before WaitForSeconds. -> Option A
  4. Quick Check:

    Always use 'yield return new WaitForSeconds()' [OK]
Hint: Remember 'yield return new' for WaitForSeconds [OK]
Common Mistakes:
  • Omitting 'new' keyword
  • Using 'yield' without 'return'
  • Thinking Debug.Log is invalid in coroutines
5. You want to update a UI element exactly after the current frame finishes rendering, then wait 0.5 seconds before updating it again. Which coroutine sequence correctly achieves this?
hard
A. yield return new WaitForSeconds(0.5f); UpdateUI(); yield return new WaitForEndOfFrame(); UpdateUI();
B. UpdateUI(); yield return new WaitForSeconds(0.5f); yield return new WaitForEndOfFrame(); UpdateUI();
C. yield return new WaitForEndOfFrame(); yield return new WaitForSeconds(0.5f); UpdateUI(); UpdateUI();
D. yield return new WaitForEndOfFrame(); UpdateUI(); yield return new WaitForSeconds(0.5f); UpdateUI();

Solution

  1. Step 1: Understand the timing requirements

    The UI should update right after the frame ends, so first wait for WaitForEndOfFrame, then update UI.
  2. Step 2: Wait 0.5 seconds before next update

    After the first update, wait 0.5 seconds using WaitForSeconds, then update UI again.
  3. Step 3: Match the correct sequence

    yield return new WaitForEndOfFrame(); UpdateUI(); yield return new WaitForSeconds(0.5f); UpdateUI(); matches this order: WaitForEndOfFrame -> UpdateUI -> WaitForSeconds(0.5) -> UpdateUI.
  4. Final Answer:

    yield return new WaitForEndOfFrame(); UpdateUI(); yield return new WaitForSeconds(0.5f); UpdateUI(); -> Option D
  5. Quick Check:

    EndOfFrame first, then WaitForSeconds delay [OK]
Hint: Update after frame ends, then wait seconds before next update [OK]
Common Mistakes:
  • Updating UI before WaitForEndOfFrame
  • Mixing order of waits and updates
  • Calling UpdateUI twice without wait
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