Wizard of Oz

University
2023
Wizard of Oz view 1

01. The Overview

A 2D, top-down, level-based Action RPG. Players control a archer and knight characters, navigating through distinct levels and engaging in combat with AI-controlled enemies. The core gameplay revolves around movement, dashing, and combat.

02. The Challenge

The primary technical challenges in this project were:

  • Designing and implementing a flexible and scalable combat system using Scriptable Objects. This allows for easy creation and modification of attack and damage types without changing the core logic.
  • Building a robust Behavior Tree system from scratch to create complex and intelligent enemy AI.
  • Engineering a decoupled, event-driven architecture to ensure that different game systems can communicate without direct dependencies, making the project more modular and maintainable.

03. The Approach

The project is built on a highly modular and component-based architecture, following software engineering best practices. Key architectural patterns include:

  • Leveraging Unity's component system to create reusable and self-contained functionalities.
  • Using a central 'Blackboard' pattern for decoupled state management, allowing different systems to share data without direct dependencies.
  • An event-driven system for communication between different game components, which enhances modularity.
  • A data-driven approach using Scriptable Objects (e.g., AttackType, DamageType) for the combat system, enabling designers to modify gameplay by changing data instead of code.
  • A custom Behavior Tree implementation for sophisticated and complex enemy logic.

04. Key Features

  • Core player actions include movement, dashing, and attacking
  • Melee and ranged, projectile-based combat system
  • A data-driven combat system with various attack and damage types that can be easily extended
  • AI-powered enemies with complex behaviors managed by a custom Behavior Tree
  • A level-based progression system
View Source Code

Technologies Used

UnityC#