Skip to main content

Syllabus

The contents of these labs are made to teach and stress some learning points and for mere “practice”, e.g: getting used to Unity layout, terminologies, etc.

By no means we claim that they are the best practice, in fact some of the ways may be convoluted and they won’t be done exactly this way by experienced coders but we can’t teach the “best practices” right away because it relies on many prior knowledge.

Be respectful

Experienced programmers: keep in mind that you too were once a beginner. You made mistakes, you grow from it. You didn't get to be where you are right now instantly.

If you realise that some parts are troublesome or ineffective, then good for you. It means that you’re experienced, and from now on you can embark on the journey to customize it to a more fitting way: simpler, better, more efficient, whatever it is.

You can tell our teaching team your personal opinion, and constructive criticism is always welcome after class. We however expect a certain kind of mutual respect during the lab hours.

We do not give a trivial hand-holding step-by-step tutorial here. We do condense some steps. Remember that this is still part of your graded lab assignment, so you need to imply some parts based on standard programming knowledge as a CS student.

Week 1: Unity for Newborns

We start from standard introductory knowledge about using Unity:


TopicDetails
Installationdotnet, configuring editor, enabling intellisense
Unity Basics (files)Layout arrangements, windows, managing project files
Unity Basics (scene)Adding and editing a scene, add GameObject & elements, create prefabs, use Camera, binding keys for input
Unity Basics (scripts)C# scripting basics, setting script execution order
Unity EnginePhysics Engine: Rigidbody2D, Collider2D
UI ElementsCanvas, Text, Button (Legacy), TextMeshPro
Unity LifecycleIntroduction, common callback functions: Update(), Start(), OnTriggerEnter(), among many others.
Unity EventsonClick() Button

Week 2: Unity for Babies

This week, we expand our horizon a little bit and instill more fun in our lab by adding enhanced feedback:


TopicDetails
AnimationCreate animator and animation clips, transition between animations, setup animation parameters, timing animations and state machine
Unity Basics (camera)Camera Movement
Unity EventsTrigger events from animation
Sound EffectsAdd sound effects
Unity Basics (files)Create and manage Prefabs

Week 3: Unity for Toddlers

We have a lot of state management to do at this stage. It's time to learn more advanced Input Management, Audio Management, and Design Patterns.


TopicDetails
UnityThe Input System
The Input System InputKeyboard, Mouse
The Input SystemInputActions, Actions, ActionMaps, Action Binding, Action Properties
The Input System WorkflowActionAsset, PlayerInput Component
UnityAudioMixer
Design PatternThe Observer Pattern
C#Delegates, Actions, and UnityEvent
Unity ScriptingAnimationEvent<T>Tool

Week 4: Unity for Children

This week we learn how to make a multi-scene game and make important instances and values persist between scenes and gameplay.


TopicDetails
UnitySwitching Scenes
C#Enums, switch statements, interface and inheritance, static variables, properties and method overloading
C# AdvancedCoroutines, async-await
Design PatternSingletons
Design PatternDelegates, Actions, and Unity Events
Unity ScriptingScriptable Objects

Week 5: Unity for Teens

This week we are doing a complete overhaul of game architecture and utilises the Scriptable Object Game Architecture (SOGA) instead that allows for better modularity and decoupling (minimise dependencies between subcomponents). However it requires quite a big initial investment to set up.


TopicDetails
ArchitectureScriptableObject-based event and data architecture for modularity and reuse; singletons only where global caches or configuration are appropriate.
SO Event SystemGameEvent ScriptableObjects with GameEventListener components implement a publish–subscribe pattern; call Raise to broadcast events decoupled from the sender.
Persistent DataUse ScriptableObject variables (e.g., integers, booleans, object references) so values persist across scenes and objects without singleton managers.
MigrationReplace direct managerInstance.Event.AddListener(...) calls with: (1) creating SO events, (2) attaching listeners to objects, (3) wiring callbacks and Raise methods in the Inspector.
FSM PurposeImplement a pluggable finite state machine using ScriptableObjects to separate state definitions from code, making logic reusable and easy to extend.
FSM Core TypesState (SO with actions, transitions), Action (SO behavior unit), EventAction (triggered action), Decision (SO conditional), Transition (links states).
State ControllerMonoBehaviour that runs the FSM at runtime, tracks current/next states, executes actions, and evaluates transitions.
ActionsScriptableObjects encapsulating behaviors (e.g., setup, clear, activate ability). Can be reused across states or objects.
DecisionsScriptableObjects encapsulating conditions (e.g., input detected, timer expired). Drive state transitions without hardcoding logic into controllers.
StatesFSMs require a set of states plus a “remain” or “no transition” placeholder; states are modular and swappable.
Input & EventsExternal input or in-game events connect to trigger event actions or state transitions, keeping input handling decoupled from gameplay logic.
Design PatternsApply ScriptableObject architecture for modular systems; use singletons selectively for global services.