Bird
Raised Fist0
Unityframework~20 mins

WaitForSeconds and WaitForEndOfFrame in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Unity Coroutine Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of WaitForSeconds in Coroutine

What will be the output of this Unity C# coroutine code snippet?

Unity
IEnumerator ExampleCoroutine() {
    Debug.Log("Start");
    yield return new WaitForSeconds(1f);
    Debug.Log("After 1 second");
}
AStart immediately, then after 1 second print 'After 1 second'
BPrint both messages immediately without delay
CPrint only 'Start' and never print 'After 1 second'
DPrint 'After 1 second' first, then 'Start'
Attempts:
2 left
💡 Hint

Think about how WaitForSeconds pauses the coroutine.

❓ Predict Output
intermediate
2:00remaining
When does WaitForEndOfFrame execute?

Consider this coroutine snippet. When will the message 'End of frame reached' be printed?

Unity
IEnumerator FrameCoroutine() {
    Debug.Log("Before waiting");
    yield return new WaitForEndOfFrame();
    Debug.Log("End of frame reached");
}
AAfter 1 second delay
BImmediately without waiting
CBefore rendering starts for the frame
DAfter all rendering for the current frame is done
Attempts:
2 left
💡 Hint

Think about the frame lifecycle in Unity and when WaitForEndOfFrame resumes.

🔧 Debug
advanced
2:00remaining
Why does this coroutine never print the second message?

Look at this coroutine code. Why does it never print 'Second message'?

Unity
IEnumerator TestCoroutine() {
    Debug.Log("First message");
    yield return new WaitForSeconds(-1f);
    Debug.Log("Second message");
}
AIt causes a compile error and never runs
BWaitForSeconds with negative time causes the coroutine to stop and never resume
CNegative time is treated as zero, so both messages print immediately
DThe coroutine throws an exception and stops
Attempts:
2 left
💡 Hint

Check how WaitForSeconds handles negative values.

🧠 Conceptual
advanced
2:00remaining
Difference between WaitForSeconds and WaitForEndOfFrame

Which statement correctly describes the difference between WaitForSeconds and WaitForEndOfFrame in Unity coroutines?

A<code>WaitForSeconds</code> pauses for a set time; <code>WaitForEndOfFrame</code> waits until the current frame finishes rendering
BBoth wait for a fixed time but differ in precision
C<code>WaitForSeconds</code> waits until the frame ends; <code>WaitForEndOfFrame</code> pauses for a set time
DBoth wait until the next frame starts
Attempts:
2 left
💡 Hint

Think about timing: fixed seconds vs frame lifecycle.

❓ Predict Output
expert
2:00remaining
Number of times a message prints in this coroutine

Given this coroutine, how many times will 'Frame ended' print after starting it once?

Unity
IEnumerator LoopCoroutine() {
    while (true) {
        yield return new WaitForEndOfFrame();
        Debug.Log("Frame ended");
    }
}
AIt prints only once and then stops
BIt prints once per frame indefinitely until stopped
CIt never prints because of an infinite loop error
DIt prints twice per frame
Attempts:
2 left
💡 Hint

Consider what an infinite loop with WaitForEndOfFrame means in a coroutine.

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