Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Button component and click events
📖 Scenario: You are creating a simple Unity scene where a button changes the color of a cube when clicked. This is a common task in game menus or interactive applications.
🎯 Goal: Build a Unity script that connects a UI button to a cube in the scene. When the button is clicked, the cube's color changes to red.
📋 What You'll Learn
Create a public GameObject variable called cube to reference the cube in the scene.
Create a public method called ChangeColor that changes the cube's color to red.
Attach the ChangeColor method to the button's OnClick event in the Unity Editor.
Print a message "Button clicked!" to the console when the button is clicked.
💡 Why This Matters
🌍 Real World
Changing object properties with button clicks is common in game menus, settings, and interactive applications.
💼 Career
Understanding UI events and scripting interactions is essential for Unity developers working on game interfaces and user experiences.
Progress0 / 4 steps
1
Create a public GameObject variable
Create a public GameObject variable called cube inside a new C# script called ButtonClickHandler.
Unity
Hint
Use public GameObject cube; inside the class to create the variable.
2
Create the ChangeColor method
Add a public method called ChangeColor inside the ButtonClickHandler class that changes the cube color to red using cube.GetComponent<Renderer>().material.color = Color.red;.
Unity
Hint
Define public void ChangeColor() and inside it set the cube's material color to Color.red.
3
Add a debug message inside ChangeColor
Inside the ChangeColor method, add a line to print "Button clicked!" to the console using Debug.Log.
Unity
Hint
Use Debug.Log("Button clicked!"); inside the method.
4
Test the button click event
Attach the ButtonClickHandler script to an empty GameObject in the scene. Assign the cube GameObject to the cube variable in the Inspector. Then, in the UI Button's OnClick event, add the GameObject with ButtonClickHandler and select the ChangeColor method. Run the scene and click the button to see the cube change color and the console message.
Unity
Hint
Make sure the button's OnClick event calls the ChangeColor method and watch the console when you click the button.
Practice
(1/5)
1. What does the onClick property of a Unity Button component do?
easy
A. It lets you specify what happens when the button is clicked.
B. It changes the button's color automatically.
C. It disables the button permanently.
D. It moves the button to a new position.
Solution
Step 1: Identify the purpose of the onClick property and match options
The onClick property holds actions that execute when the button is clicked. Only "It lets you specify what happens when the button is clicked." correctly describes this; other options refer to disabling, color changes, or movement.
Final Answer:
It lets you specify what happens when the button is clicked. -> Option A
Quick Check:
Button onClick triggers actions on click [OK]
Hint: Remember: onClick runs code when button is pressed [OK]
Common Mistakes:
Thinking onClick changes button appearance
Confusing onClick with button position or state
Assuming onClick disables the button
2. Which of the following is the correct way to add a click event listener to a Button in Unity using C#?
easy
A. button.onClick.AddListener = Debug.Log("Clicked!");
B. button.onClick.AddListener(() => Debug.Log("Clicked!"));
C. button.onClick.Add(() => Debug.Log("Clicked!"));
D. button.Click.AddListener(() => Debug.Log("Clicked!"));
Solution
Step 1: Verify syntax for Button onClick.AddListener and check options
The correct syntax uses onClick.AddListener with a lambda: button.onClick.AddListener(() => Debug.Log("Clicked!")). B uses invalid assignment (=), C calls wrong method Add(), D uses nonexistent Click.
Final Answer:
button.onClick.AddListener(() => Debug.Log("Clicked!")); -> Option B
Quick Check:
Use onClick.AddListener with lambda [OK]
Hint: Use AddListener with a lambda or method reference [OK]
Common Mistakes:
Using assignment (=) instead of AddListener method
Misspelling onClick or AddListener
Using wrong event names like Click or Add
3. Consider this C# code attached to a Unity Button:
What will happen when the button is clicked during play?
medium
A. The message "Button Pressed" will be printed to the Console.
B. Nothing will happen because the listener is not assigned.
C. The game will crash with an error.
D. The button will become invisible.
Solution
Step 1: Trace code execution and predict button click outcome
The code adds a listener in Start() that executes Debug.Log("Button Pressed") on click, printing to Console. No errors, crashes, or visual changes occur.
Final Answer:
The message "Button Pressed" will be printed to the Console. -> Option A
Quick Check:
Click triggers Debug.Log message [OK]
Hint: Click runs listeners added with AddListener [OK]
Common Mistakes:
Assuming no effect without explicit call
Expecting visual changes without code
Confusing runtime errors with correct code
4. What is wrong with this code snippet for adding a click event to a Button?
A. The listener must be added in Update(), not Start().
B. The Debug.Log statement is missing parentheses.
C. The Button variable must be private, not public.
D. You cannot assign a lambda directly to onClick; use AddListener instead.
Solution
Step 1: Detect the invalid assignment to onClick UnityEvent
Direct lambda assignment to myButton.onClick fails because it is a UnityEvent requiring AddListener(). Other options misidentify unrelated issues like timing, syntax, or access modifiers.
Final Answer:
You cannot assign a lambda directly to onClick; use AddListener instead. -> Option D
Quick Check:
Use AddListener, not direct assignment [OK]
Hint: Add listeners with AddListener, never assign onClick directly [OK]
Common Mistakes:
Assigning lambda directly to onClick
Confusing event assignment with method call
Adding listeners in wrong Unity method
5. You want to create a Unity Button that, when clicked, disables itself so it cannot be clicked again. Which code snippet correctly achieves this behavior?
hard
A. myButton.onClick.AddListener(() => myButton.gameObject.enabled = false);
B. myButton.onClick = () => myButton.enabled = false;
C. myButton.onClick.AddListener(() => myButton.interactable = false);
D. myButton.onClick.AddListener(() => myButton.SetActive(false));
Solution
Step 1: Identify correct method to disable Button interaction and validate options
Set interactable = false using onClick.AddListener prevents further clicks. B uses invalid direct assignment. C references nonexistent gameObject.enabled (compile error). D calls nonexistent SetActive on Button (compile error).
Final Answer:
myButton.onClick.AddListener(() => myButton.interactable = false); -> Option C
Quick Check:
Disable button by setting interactable false [OK]
Hint: Set button.interactable = false inside AddListener to disable [OK]