Contributions Summary
-
Sound Effects System (One Shots and Looped)
-
Music System (Single and Multi-Layer Options)
-
Sound Design (Teleporting to Bolt & Activating the Residue Ability)
-
In-game Music Triggers
Project Details
Telemancer: September's Story is a physics-based puzzle platformer with a heavy focus on narrative. It draws inspiration primarily from Portal and Trine. It was developed in Unity by a team of around 40 students in the University of Texas at Dallas's 2021 Game Lab course during the fall semester. The player progresses through a series of three levels using the powers of teleportation, with the goal of locating long-lost scrolls that help unlock more of their powers.
During this project, I was part of the programming department and worked on the complete implementation of the audio systems, which included the music system and sound effects system. My job had me primarily meeting with sound designers and the music composer to discuss and implement required functionality for the music system and sound system. This also included creating test scenes in Unity in order to test out music clips as well as in-editor buttons that removed the need to play the game in order to test sounds. All things needing to be edited for a single music or sound clip were consolidated into a single scriptable object that had exposed fields featuring ranged float sliders to allow variation in things such as volume and pitch. This scriptable object-focused system was chosen as it helped consolidate objects needing to be created and edited by the sound team. Sound designers only needed to right click Project View in the Unity Editor and were able to create new scriptable objects for MusicEvent, SFX Looped or SFX OneShot. I also worked with other programmers in my department in order to properly hook up sound effects to core mechanics.
​
Specific details on the music system starts with its design, which consists of a MusicPlayer class that handles basic functionality of playing and stopping music with the ability to fade volumes in and out for both as well as finding the layer count of the scriptable object and creating a list of AudioSources based on the amount. A MusicManager class creates an active and inactive MusicPlayer to allow for transitions between separate tracks with crossfades built in, with most of its methods handling setting volume, increasing/decreasing/setting the current music layer index, as well as playing and stopping music players with specified fade times. A MusicEvent class that inherits from Unity's ScriptableObject class contains the exposed fields shown on the scriptable objects that sound designers create and edit, alongside some public methods that allow the ScriptableObject to be dragged into fields and have the functionality called. Put together, the music system allows sound designers to specify a single (plays one track at a time) or additive layer type (plays multiple tracks at once) and allows for fade in or out times to be specified.
​
The core functionality of the sound effects system mirrored that of the music system in terms of having an SFX Manager class, an abstract SFXEvent class with two derived child classes of SFXLooped and SFXOneShot, and a SoundPool script that did some tasks comparable to that of the MusicPlayer with added functionality for object pooling of audio sources. Two separate pools were made, one for looped audio sources and one for one-shot audio sources, with the functionality being that a predetermined number would be created through lazy instantiation as soon as a command to call a sound was run in-game. Sounds would play on whichever AudioSources weren't being used, and new ones would be created only if there were no more available AudioSources. SFXLooped and OneShot scriptable objects allowed for multiple audio clips to be specified with one of the clips being chosen randomly from the bunch if more than one clip was added. The scriptable objects also contain exposed fields for a selectable mixer, audio priority, volume and pitch with ranged volume sliders, stereo pan, spatial blend as well as a minimum and maximum attenuation for 3D audio. Both types of SFX scriptable objects contain the ability to preview the sound in-editor while SFXLooped has the ability to enable finite looping and specify a number of cycles that the looped sound should run before stopping.
Key Mechanics Photo Gallery
Up-to-date image showing the exposed fields of the music scriptable object that are available to the sound designers.
Up-to-date image showing the exposed fields of the SFX Looped scriptable object that are available to the sound designers. SFX OneShot lacks the option for finite looping and only has a preview button instead of a stop preview button.
Sound effect and music scriptable objects can be slotted into exposed fields and have their contents called through a script. This puts more work on the programmer, but tremendously eases the workload of the sound designers.
Up-to-date image showing the exposed fields of the music scriptable object that are available to the sound designers.