Bird
Raised Fist0
Unityframework~20 mins

Component communication in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Component Communication Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Unity C# script?

Consider the following Unity C# script attached to a GameObject. What will be printed in the console when the game starts?

Unity
using UnityEngine;

public class Communicator : MonoBehaviour
{
    void Start()
    {
        var other = GetComponent<OtherComponent>();
        if (other != null)
        {
            Debug.Log(other.GetMessage());
        }
        else
        {
            Debug.Log("No OtherComponent found");
        }
    }
}

public class OtherComponent : MonoBehaviour
{
    public string GetMessage()
    {
        return "Hello from OtherComponent!";
    }
}
ANo OtherComponent found
BCompilation error due to missing namespace
CNullReferenceException at runtime
DHello from OtherComponent!
Attempts:
2 left
💡 Hint

Think about whether both components are on the same GameObject.

❓ Predict Output
intermediate
2:00remaining
What does this code print when sending a message between components?

Given two components on the same GameObject, what will be printed when SendMessage is called?

Unity
using UnityEngine;

public class Sender : MonoBehaviour
{
    void Start()
    {
        SendMessage("ReceiveMessage", "Hi there!");
    }
}

public class Receiver : MonoBehaviour
{
    void ReceiveMessage(string msg)
    {
        Debug.Log("Received: " + msg);
    }
}
AReceived: Hi there!
BNo method ReceiveMessage found error
CNullReferenceException at runtime
DCompilation error due to wrong method signature
Attempts:
2 left
💡 Hint

SendMessage calls methods by name on the same GameObject's components.

🔧 Debug
advanced
2:00remaining
Why does this code cause a NullReferenceException?

Examine the code below. Why does it throw a NullReferenceException at runtime?

Unity
using UnityEngine;

public class Finder : MonoBehaviour
{
    void Start()
    {
        var other = GameObject.Find("OtherObject").GetComponent<OtherComponent>();
        Debug.Log(other.GetData());
    }
}

public class OtherComponent : MonoBehaviour
{
    public string GetData() => "Data";
}
AGetComponent<OtherComponent>() returns null because OtherComponent is missing
BGameObject.Find("OtherObject") returns null because no GameObject named "OtherObject" exists
CGetData() method is private and inaccessible
DCompilation error due to missing semicolon
Attempts:
2 left
💡 Hint

Check if the GameObject with the given name exists in the scene.

📝 Syntax
advanced
2:00remaining
Which option correctly gets a component from a child GameObject?

Choose the correct code to get a component of type ChildComponent from a child GameObject.

Avar childComp = GetComponentInChildren<ChildComponent>();
Bvar childComp = GetComponent<ChildComponent>();
Cvar childComp = transform.Find("Child").GetComponent<ChildComponent>();
Dvar childComp = GameObject.Find("Child").GetComponentInChildren<ChildComponent>();
Attempts:
2 left
💡 Hint

Use transform.Find to locate a child by name, then get its component.

🚀 Application
expert
3:00remaining
How to safely communicate between components on different GameObjects?

You want to send a message from one component to another component on a different GameObject in the scene. Which approach is best to avoid runtime errors and ensure the message is received?

AUse <code>GameObject.Find</code> to get the other GameObject, then <code>GetComponent</code> to get the component, checking for null before calling methods.
BUse <code>SendMessage</code> with the target GameObject name as a string, assuming the method exists.
CUse <code>GetComponentInChildren</code> on the current GameObject to find the other component.
DDirectly create a new instance of the other component class and call its methods.
Attempts:
2 left
💡 Hint

Think about how to find a GameObject safely and check for component presence.

Practice

(1/5)
1. What is the primary method used in Unity to access another component attached to the same GameObject?
easy
A. GetComponent<Type>()
B. FindObjectOfType<Type>()
C. SendMessage()
D. Instantiate()

Solution

  1. Step 1: Understand component access methods

    Unity provides several ways to access components, but GetComponent<Type>() is used to get a component on the same GameObject.
  2. Step 2: Identify the correct method for same GameObject

    FindObjectOfType<Type>() searches the whole scene, SendMessage() calls methods by name, and Instantiate() creates new objects, so they are not for direct component access.
  3. Final Answer:

    GetComponent<Type>() -> Option A
  4. Quick Check:

    GetComponent<Type>() = Access same GameObject component [OK]
Hint: Use GetComponent<Type>() to get components on the same object [OK]
Common Mistakes:
  • Confusing GetComponent with FindObjectOfType
  • Using Instantiate instead of GetComponent
  • Trying to access components without a reference
2. Which of the following is the correct syntax to get a Rigidbody component in a Unity C# script?
easy
A. Rigidbody rb = GetComponent(Rigidbody);
B. Rigidbody rb = GetComponent<Rigidbody>();
C. Rigidbody rb = GetComponent<Rigidbody>
D. Rigidbody rb = GetComponent<Rigidbody>();;

Solution

  1. Step 1: Recall correct generic method syntax

    The correct syntax uses angle brackets with the type and parentheses: GetComponent<Type>().
  2. Step 2: Identify syntax errors in options

    Rigidbody rb = GetComponent(Rigidbody); misses angle brackets, Rigidbody rb = GetComponent<Rigidbody> misses parentheses, Rigidbody rb = GetComponent<Rigidbody>();; has double semicolon causing a syntax error.
  3. Final Answer:

    Rigidbody rb = GetComponent<Rigidbody>(); -> Option B
  4. Quick Check:

    Correct generic syntax = Rigidbody rb = GetComponent<Rigidbody>(); [OK]
Hint: Remember GetComponent<Type>() always uses angle brackets and parentheses [OK]
Common Mistakes:
  • Omitting angle brackets <>
  • Forgetting parentheses () after GetComponent
  • Adding unnecessary semicolons inside method calls
3. Given the code below, what will be printed to the console?
public class Player : MonoBehaviour {
    private Rigidbody rb;
    void Start() {
        rb = GetComponent<Rigidbody>();
        if(rb != null) {
            Debug.Log("Rigidbody found");
        } else {
            Debug.Log("No Rigidbody");
        }
    }
}
medium
A. No Rigidbody
B. Nothing is printed
C. NullReferenceException error
D. Rigidbody found

Solution

  1. Step 1: Understand GetComponent behavior

    If the GameObject has a Rigidbody component, GetComponent<Rigidbody>() returns it; otherwise, it returns null.
  2. Step 2: Analyze the if condition and output

    The code checks if rb is not null and prints "Rigidbody found" if true, else "No Rigidbody".
  3. Final Answer:

    Rigidbody found -> Option D
  4. Quick Check:

    GetComponent returns component or null; here it finds Rigidbody [OK]
Hint: GetComponent returns null if component missing; check before use [OK]
Common Mistakes:
  • Assuming GetComponent throws error if component missing
  • Not checking for null before using component
  • Confusing Debug.Log output with errors
4. What is wrong with the following code snippet?
public class Enemy : MonoBehaviour {
    void Start() {
        Player player = GetComponent<Player>();
        player.TakeDamage(10);
    }
}
medium
A. Player class cannot be accessed from Enemy class
B. GetComponent<Player>() is not a valid method
C. GetComponent<Player>() may return null causing a runtime error
D. TakeDamage method cannot be called inside Start()

Solution

  1. Step 1: Check GetComponent usage and null safety

    GetComponent<Player>() looks for Player on the same GameObject. If Player is not attached, it returns null.
  2. Step 2: Identify possible runtime error

    Calling player.TakeDamage(10) without checking if player is null will cause a NullReferenceException at runtime.
  3. Final Answer:

    GetComponent<Player>() may return null causing a runtime error -> Option C
  4. Quick Check:

    Always check GetComponent result for null before use [OK]
Hint: Always check if GetComponent returns null before calling methods [OK]
Common Mistakes:
  • Not checking for null before method call
  • Assuming GetComponent always finds the component
  • Thinking method calls are restricted in Start()
5. You want a script on a GameObject to call a method on a component attached to a different GameObject in the scene. Which approach is best practice?
hard
A. Use GetComponent<Type>() on the other GameObject's reference
B. Use GetComponent<Type>() on the current GameObject
C. Use FindObjectOfType<Type>() every frame in Update()
D. Create a new instance of the component with new Type()

Solution

  1. Step 1: Understand component communication between GameObjects

    To access a component on another GameObject, you first get a reference to that GameObject, then call GetComponent<Type>() on it.
  2. Step 2: Evaluate other options for efficiency and correctness

    Using GetComponent<Type>() on current GameObject won't find other GameObject's components. Calling FindObjectOfType<Type>() every frame is inefficient. Creating components with new is invalid in Unity.
  3. Final Answer:

    Use GetComponent<Type>() on the other GameObject's reference -> Option A
  4. Quick Check:

    GetComponent on target GameObject = Best practice [OK]
Hint: GetComponent on referenced GameObject, not current one [OK]
Common Mistakes:
  • Calling GetComponent on wrong GameObject
  • Using FindObjectOfType too often causing lag
  • Trying to instantiate components with new keyword
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