Bird
Raised Fist0
Unityframework~20 mins

Variables and serialization in Unity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Unity Serialization 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# code snippet?
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 TestSerialization : MonoBehaviour
{
    [SerializeField]
    private int score = 10;

    void Start()
    {
        score += 5;
        Debug.Log(score);
    }
}
A5
B15
C10
D0
Attempts:
2 left
💡 Hint
Remember that [SerializeField] allows private variables to be set and used in the inspector and code.
❓ Predict Output
intermediate
2:00remaining
What happens when serializing a non-serializable field in Unity?
Given this Unity C# class, what will happen when you try to serialize it in the inspector?
Unity
using UnityEngine;

public class PlayerData : MonoBehaviour
{
    [SerializeField]
    private System.Net.Sockets.Socket playerSocket;
}
AThe inspector ignores the playerSocket field; no error occurs.
BThe inspector shows the playerSocket field and allows editing.
CUnity throws a serialization error at compile time.
DThe game crashes at runtime.
Attempts:
2 left
💡 Hint
Unity can only serialize certain types like primitives, UnityEngine.Object, and serializable structs/classes.
🔧 Debug
advanced
2:00remaining
Why does this serialized field not retain its value after stopping play mode?
Examine the code below. The 'health' value changes during play but resets after stopping play mode. Why?
Unity
using UnityEngine;

public class PlayerStats : MonoBehaviour
{
    [SerializeField]
    private int health = 100;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            health -= 10;
            Debug.Log(health);
        }
    }
}
ABecause 'health' is private and not marked as [Serializable].
BBecause the Update method resets health every frame.
CBecause the script is missing a constructor to initialize health.
DBecause changes made during play mode are not saved to the serialized field.
Attempts:
2 left
💡 Hint
Think about how Unity handles serialized fields and play mode changes.
📝 Syntax
advanced
2:00remaining
Which option correctly declares a serializable custom class in Unity?
You want to serialize a custom class inside a MonoBehaviour. Which declaration is correct?
A[SerializeField] public class Weapon { public string name; public int damage; }
Bpublic class Weapon { [SerializeField] public string name; public int damage; }
C[System.Serializable] public class Weapon { public string name; public int damage; }
Dpublic struct Weapon { string name; int damage; }
Attempts:
2 left
💡 Hint
Custom classes must be marked with [System.Serializable] to be serialized by Unity.
🧠 Conceptual
expert
2:00remaining
What is the main reason Unity uses serialization for variables in scripts?
Why does Unity serialize variables marked with [SerializeField] or public fields in scripts?
ATo save and load variable values in the editor and during scene serialization.
BTo improve runtime performance by caching variables.
CTo prevent variables from being changed by other scripts.
DTo automatically convert variables to JSON for networking.
Attempts:
2 left
💡 Hint
Think about what happens when you save a scene or prefab in Unity.

Practice

(1/5)
1. What is the main purpose of serialization in Unity?
easy
A. To convert data into a format that can be saved or sent
B. To create new game objects during runtime
C. To increase the speed of the game
D. To change the color of game objects

Solution

  1. Step 1: Recall the definition of serialization

    Serialization means converting data into a format that can be saved or sent.
  2. Step 2: Match Unity's use of serialization

    Unity uses serialization to save game data or send it over networks.
  3. Final Answer:

    To convert data into a format that can be saved or sent -> Option A
  4. Quick Check:

    Serialization = convert data for saving/sending [OK]
Hint: Serialization means saving or sending data format [OK]
Common Mistakes:
  • Confusing serialization with creating objects
  • Thinking serialization changes game speed
  • Mixing serialization with visual changes
2. Which of the following is the correct way to declare a public integer variable in a Unity C# script?
easy
A. int score public;
B. int public score;
C. public int score;
D. public integer score;

Solution

  1. Step 1: Recall C# variable declaration syntax

    In C#, access modifier comes first, then type, then variable name.
  2. Step 2: Check each option

    public int score; ('public int score;') follows correct order. Options A, B, C have wrong order or wrong type keyword.
  3. Final Answer:

    public int score; -> Option C
  4. Quick Check:

    Access modifier + type + name = correct declaration [OK]
Hint: Access modifier before type before name in C# [OK]
Common Mistakes:
  • Putting 'public' after variable name
  • Using 'integer' instead of 'int'
  • Incorrect order of keywords
3. What will be the output of this Unity C# code?
using UnityEngine;

public class PlayerData {
    public string playerName = "Alex";
    public int level = 5;
}

public class Test : MonoBehaviour {
    void Start() {
        PlayerData data = new PlayerData();
        string json = JsonUtility.ToJson(data);
        Debug.Log(json);
    }
}
medium
A. Error: JsonUtility.ToJson requires MonoBehaviour
B. {"playerName":Alex,"level":5}
C. {"playerName":"Alex",level:5}
D. {"playerName":"Alex","level":5}

Solution

  1. Step 1: Understand JsonUtility.ToJson output format

    JsonUtility converts object fields to JSON string with keys and values in quotes where needed.
  2. Step 2: Check the JSON string format

    Strings have quotes, numbers do not. {"playerName":"Alex","level":5} matches correct JSON format with quotes around "Alex" and keys.
  3. Final Answer:

    {"playerName":"Alex","level":5} -> Option D
  4. Quick Check:

    JsonUtility outputs valid JSON string [OK]
Hint: JsonUtility outputs JSON with quotes around strings [OK]
Common Mistakes:
  • Missing quotes around string values
  • Using invalid JSON syntax
  • Thinking JsonUtility needs MonoBehaviour object
4. Identify the error in this Unity C# code snippet:
using UnityEngine;

public class Player {
    public int score;
}

public class Game : MonoBehaviour {
    void Start() {
        Player player = new Player();
        string json = JsonUtility.ToJson(player);
        Debug.Log(json);
    }
}
medium
A. No error; code will output {"score":0}
B. Player class must inherit from MonoBehaviour to serialize
C. JsonUtility.ToJson requires static method call
D. score variable must be private to serialize

Solution

  1. Step 1: Check if Player class can be serialized

    JsonUtility can serialize plain classes with public fields, no need to inherit MonoBehaviour.
  2. Step 2: Check output of JsonUtility.ToJson

    Player's score defaults to 0, so JSON string will be {"score":0}.
  3. Final Answer:

    No error; code will output {"score":0} -> Option A
  4. Quick Check:

    Plain class with public fields serializes fine [OK]
Hint: Public fields in plain classes serialize without MonoBehaviour [OK]
Common Mistakes:
  • Thinking class must inherit MonoBehaviour to serialize
  • Assuming private fields serialize by default
  • Believing JsonUtility requires static context
5. You want to save player settings including volume (float), username (string), and isFullScreen (bool) using Unity's JsonUtility. Which class definition correctly supports serialization of these variables?
hard
A. public class Settings { private float volume; private string username; private bool isFullScreen; }
B. public class Settings { [SerializeField] private float volume; [SerializeField] private string username; [SerializeField] private bool isFullScreen; }
C. public class Settings { protected float volume; protected string username; protected bool isFullScreen; }
D. public class Settings { public float volume { get; set; } public string username { get; set; } public bool isFullScreen { get; set; } }

Solution

  1. Step 1: Understand JsonUtility serialization rules

    JsonUtility serializes public fields or private fields marked with [SerializeField] attribute.
  2. Step 2: Evaluate each class definition

    public class Settings { protected float volume; protected string username; protected bool isFullScreen; } uses protected fields, which do not serialize. public class Settings { private float volume; private string username; private bool isFullScreen; } uses private fields without [SerializeField], so no serialization. public class Settings { [SerializeField] private float volume; [SerializeField] private string username; [SerializeField] private bool isFullScreen; } uses private fields with [SerializeField], which works. public class Settings { public float volume { get; set; } public string username { get; set; } public bool isFullScreen { get; set; } } uses properties, which JsonUtility does not serialize.
  3. Step 3: Choose best practice

    Using private fields with [SerializeField] is recommended for encapsulation and serialization.
  4. Final Answer:

    public class Settings { [SerializeField] private float volume; [SerializeField] private string username; [SerializeField] private bool isFullScreen; } -> Option B
  5. Quick Check:

    Private fields + [SerializeField] serialize correctly [OK]
Hint: Use [SerializeField] for private variables to serialize [OK]
Common Mistakes:
  • Assuming private fields serialize without attribute
  • Using properties instead of fields for serialization
  • Ignoring encapsulation best practices
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