Ballpit Chase

Ballpit Chase Project Description

This game was a group project (the team is linked on the itch page) with four weeks’ time. We made a local multiplayer tag game.

I was in a group with one other developer and three artists.

You can play this game with a controller and a keyboard. You need a separate device for every player and you can play with a minimum of 2 and maximum of 4 players.
You play in a ball pit playhouse and you have different intractable parts of the map to get away from the tagger.

What I made

I made everything of the map, the camera, the menu's, the UI, the settings, and I did all the audio.

We had one group leader, and this role rotated trough the group for the duration of these four weeks.
I was group leader one of these weeks, so I had to take care of the planning and the standups for that week next to all the features I was building.

The players and connection where done by the other dev in our team but I did assist with some of this and we worked together on putting all the lose objects into the final game scene.

I am really happy with the AudioManager I used in this project. I already had the base of this script in an old project but I upgraded/polished it in this project, you can see this script at the bottom of the page.

Project Info

Made with - Unity, C#, Blender
Released - 4 December 2024
4 week project, 5 person team

Click here for itch.io

Ballpit Chase Screenshot 1 Ballpit Chase Screenshot 2 Ballpit Chase Screenshot 3 Ballpit Chase Screenshot 4 Ballpit Chase Screenshot 5

Play Ballpit Chase

My Script Name Here


public class AudioManager : MonoBehaviour
{
    public static AudioManager m_Instance;

    public AudioMixerGroup m_MixerGroup;

    public Sound[] m_Sounds;

    public GameSettings m_Settings;

    void Awake()
    {
        // Make it a singleton so it does not destroy on loading a new scene
        // And so you can play sounds by calling the AudioManager.m_Instance
        if (m_Instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            m_Instance = this;
            DontDestroyOnLoad(gameObject);
        }

        // Add a AudioSource for every audioclip
        foreach (Sound s in m_Sounds)
        {
            s.m_Source = gameObject.AddComponent();
            s.m_Source.clip = s.m_Clip;
            s.m_Source.loop = s.m_Loop;

            s.m_Source.outputAudioMixerGroup = m_MixerGroup;
        }
    }

    // You can call this function to play a sound
    public void Play(string sound)
    {
        Sound s = Array.Find(m_Sounds, item => item.m_Name == sound);
        if (s == null)
        {
            Debug.LogWarning("Sound: " + sound + " not found!");
            return;
        }

        s.m_Source.volume = s.m_Volume * (1f + UnityEngine.Random.Range(-s.m_VolumeVariance / 2f, s.m_VolumeVariance / 2f));
        s.m_Source.pitch = s.m_Pitch * (1f + UnityEngine.Random.Range(-s.m_PitchVariance / 2f, s.m_PitchVariance / 2f));

        // Check if sound or music is turned off in the settings and play if these are not
        if (!s.m_Music)
        {
            if (m_Settings.m_Audio)
            {
                s.m_Source.Play();
            }
        }
        else
        {
            if (m_Settings.m_Music)
            {
                s.m_Source.Play();
            }
        }

    }

    // Stop a audio clip which is playing with this function
    public void Stop(string sound)
    {
        Sound s = Array.Find(m_Sounds, item => item.m_Name == sound);
        if (s == null)
        {
            Debug.LogWarning("Sound: " + sound + " not found!");
            return;
        }

        s.m_Source.Stop();
    }

    // Stop all sounds playing
    public void StopAllSounds()
    {
        foreach (Sound s in m_Sounds)
        {
            s.m_Source.Stop();
        }
    }

    // Check if a sounds is playing (can be used to check before playing or turning off a sound)
    public bool IsPlaying(string sound)
    {
        Sound s = Array.Find(m_Sounds, item => item.m_Name == sound);
        if (s == null)
        {
            Debug.LogWarning("Sound: " + sound + " not found!");
            return false;
        }

        return s.m_Source.isPlaying;
    }

}