Advanced Programming course - Swiss Game Academy
Advanced Programming course - Swiss Game Academy

Advanced Programming course - Swiss Game Academy

Created on:
Team Size: 2
Time Frame: 5 days
Tool Used: Unity/Github/PowerShell

Context

During summer 2025, I gave a course about “advanced” programming practices in general and in the Unity 6 engine for the Swiss Game Academy (SGA) at the HEIA-FR University

Core Concepts Covered

This course was designed to go beyond basic scripting and teach students how to think like software architects. The Key topics included were the following:

  • S.O.L.I.D. Principles: Practical, in-engine examples of Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion.
  • Unity Attributes: Using attributes like [Header], [SerializeField], [Tooltip], and [Range] to create clean, designer-friendly inspectors.
  • Advanced C# Features: Delegates, Action events, the Observer Pattern, switch expressions with type pattern matching, and coroutines for asynchronous operations.
  • Architectural Patterns: Implementing Singletons, data-driven design with Scriptable Objects, and decoupled UI systems.
  • Robust Save/Load System: Building a flexible persistence system using interfaces (ISaveable), JSON serialization (Newtonsoft.Json), and Data Transfer Objects (DTOs).
  • Editor Tooling: Using Gizmos (OnDrawGizmosSelected) to provide clear visual feedback for designers and developers.

How ?

Code

To achieve my course in the best possible way, I decided to create a 3D project where students would have to complete, add, refactor, and delete code so that the project would include all the necessary features.

Art

The art was defined and created by Jo A.. Thanks to her I wasn’t obliged to rely on primitive shapes and materials and my project was brought to life in 3 days.

External assets

The only part that was not done either by me nor by the artist was a fire shader

obtained on the Unity Asset Store from PixelPulse

Project Structure & Course Flow

The project was divided into branches or folders, each representing a stage of the course. The learning path was designed to be completed sequentially from V1.0 to V5.0. Each version builds upon the last, with students filling in missing code to complete the exercises.

V1.0: The Designer’s Item

V2.0: The Interactive UI

V3.0: Interacting with the World

V4.0: Making it Persistent

V5.0: The Final Polish

To prevent students from losing too much time in the implementation and correction of the code, I included a Powershell script that would automatically close Unity change tags to the given version and reopen it at the desired chapter.
To do so, the students just had to enter

.\gototag.bat X.0

replacing the X by the chapter number.
The .ps1 code was wrapped in a .bat script for Window to bypass ExecutionPolicy restrictions

Since some students used MacOS computers, I also created a .sh Terminal script

Try it yourself !

If you want to try this course you can clone it from git using

git clone https://github.com/SStyles93/SGA_LAB_Advanced.git

and follow the instructions in the readme along with the slides (.pdf) or go to the repository of the course

© 2025 Samuel Styles