Beyond the Marion is a 3D, adventure game developed in Unity. Myself and about twenty other students formed an LLC called Placebo Entertainment and worked on this project over the course of a summer. Our goal was to gain more experience outside the school environment and treat it as a trial run for our capstone project. I was an individual contributor for the project, acting as a Systems and UI Engineer.
An example of an event listener in the Unity Inspector.
Early on in our project, the engineering team faced the challenge of figuring out how to get our scripts to communicate with one another. To help solve this problem, I developed an event system for the game that allows two objects to communicate while remaining decoupled. This worked by having a set of events in the form of ScriptableObjects. Scripts can trigger these events, which then causes any event listeners that are observing the triggered event to invoke various functions. These event listeners, like the one on the left, also had the benefit of being designer-friendly allowing them to add these listeners to existing objects.
One of my main tasks for this project was developing a system for NPC dialogue that would form the foundation for the various characters the player would interact with over the course of the game. NPCs needed to both have branching dialogue trees in addition to changing what dialogue they presented to the player based on the current game state.
To accomplish this, a created a set of structs that were used to build these dialogue trees. A DialogueNode struct formed the nodes of the tree, containing NPC responses and a list of PlayerResponse struct instances. The PlayerResponse struct served as the "branches" of the tree, containing both the player's text response but also various fields that could be used to customize what happens when the player selects that option. These structs could be serialized in the Unity Inspector allowing for the creation of dialogue trees that could be freely edited.
Struct code from the BaseNpc script.
Animated tabs used for both the main menu and pause menu.
During the later half of the project, I took over work on the user interfaces. This was a learning experience for me, as I did not have prior experience with Unity's UI Toolkit. In this role, I collaborated closely with our UI designer to implement their in-game menu concepts. As part of that, I set-up callbacks to create a button hover state involving sliding tabs which would be used for both the main menu and pause menu. This visual effect underwent several iterations as I implemented feedback from reviews.