Full Game Showcase

Unity Editor | C# | Visual Studio

Synopsis:

The Acid Reaper is a Unity-based horror game developed as part of the CS596 3D Game Programming course. Over a span of four weeks, I collaborated with four other students to create this project, which demonstrates key competencies in C# scripting, coroutines, and scripted events, as well as state-machine AI mechanisms. The game also features 3D modeling, animation rigging for both gameplay and cutscenes, scalability with multi-script interaction, a custom HLSL shader, UI design and implementation, and additional media elements including video editing and voice acting.

Player Movement Mechanics

A unique aspect of our game was its movement system, initially inspired by parkour elements found in movement-focused first-person shooters like Titanfall and Mirror’s Edge. The design utilized a state machine that assessed various conditions, such as stamina levels, player grounding, sprinting status, and midair movement. This system was a refined version of an earlier script I had developed for a separate movement-oriented FPS project of my own.

Cutscene Implementation

Cutscenes were rigged and recorded using Unity’s Camera and Timeline system, with each scene assigned to different team members. Due to the tight project timeline, one team member proposed using Unity’s Video Player to display pre-recorded cutscenes directly on the player camera, thereby avoiding the need to cache scene data and handle complex transitions. To implement this, I developed the VideoManager script, which not only managed cutscene playback but also interacted with the player movement and enemy scripts to ensure the active game world remained controlled (e.g., freezing enemies and disabling player movement during cutscenes). The system was designed for scalability, allowing easy indexing and management of multiple cutscenes.

Objective/Task System

I developed the ObjectiveManager script as a scalable development tool with a focus on simplicity and readability. It features concise syntax and provides straightforward functions that interact seamlessly with the game’s core scripts to track tasks and progress the game. Depending on the requirements, it can call the VideoManager to play cutscenes, adjust enemy behavior, or spawn new objective areas, among other actions. The script was designed to be both versatile and user-friendly, making it easy to integrate and extend as needed.

Modeling/Assets

While the game includes many imported Unity assets, I dedicated additional time to modeling some of the assets using Unity's basic tools. These custom models primarily consist of the point-of-interest buildings and their interior contents, adding unique elements to the game environment.

Dialogue/UI

To simulate in-game dialogue, text boxes were designed and implemented using Unity's TMPro library. This was a collaborative effort, involving the integration of dialogue scripting and UI with the game's core scripts to ensure a consistent and seamless player experience throughout.

State-Machine / AI

The antagonist of our game, Jason, operates on an enemy behavior script built with Unity's NavMesh library. The script uses a state-machine architecture to manage the following behaviors:
Roaming: Jason is unaware of the player's location and patrols the map until the player enters his line of sight.
Chasing: Once the player is within Jason's sight range, he increases his speed and pursues the player’s position directly.
Attacking: When close enough, Jason initiates an animated attack; if his knife collides with the player, both are sent back to their last respawn points, and the player loses a life.
This system underwent numerous adjustments to balance the game's overall difficulty. Additionally, I implemented a God-Mode feature that interacts with the script, allowing us to showcase specific game features live without interference from Jason.