This game is a mobile merging game where you drop toys in a box to clean them up. Merging two of the same toys makes one toy that is one size bigger.
Every merge gives you points depending on how big you merge. Every 200 points, the packing alien drops packing peanuts in your box to fill it up quicker.
When your box is full the game is over. To clean out packing peanuts, you have to merge 2 of the biggest toys,
this clears the packing peanuts and removes both of these big toys.
For this project, I made the GameManager, which is the biggest thing I made since it does everything with the random items you get, the game loop, and it handles the score/high score.
I made all the UI elements and the menu's. And I helped with the items and the merging, but this was mostly done by our other developer.
All my teammates are linked on the itch page.
Made with - Unity, C#, Photoshop
Released - 9 May 2025
4 day project, 4 person team
public class GameManager : MonoBehaviour
{
public GameSettings Settings;
[SerializeField] GameObject nextDropDisplay;
[SerializeField] GameObject[] dropPrefabs;
[SerializeField] Player player;
public GameObject GameOverMenu;
[SerializeField] TextMeshProUGUI scoreText;
GameObject nextDrop;
int nextDropIndex = -1;
private void Start()
{
// Stop lose sound and set up scene
if (AudioManager.Instance.IsPlaying("Lose"))
{
AudioManager.Instance.Stop("Lose");
}
AudioManager.Instance.Play("GameMusic");
Settings.Score = 0;
GameOverMenu.SetActive(false);
ChooseRandomDrop();
}
private void Update()
{
// Display the score on screen
scoreText.text = "Score:\n" + Settings.Score.ToString();
}
private void ChooseRandomDrop()
{
// The first drop is always 0 (the starter item)
if (nextDropIndex == -1)
{
nextDropIndex = 0;
}
else
{
// Get a random drop after the first one
int _randomIndex = Random.Range(1, dropPrefabs.Length);
if (_randomIndex == nextDropIndex)
{
_randomIndex = 0;
}
nextDropIndex = _randomIndex;
}
// Display the drop coming up on the screen
nextDrop = dropPrefabs[nextDropIndex];
if (nextDropDisplay != null)
{
nextDropDisplay.GetComponent().sprite = nextDrop.GetComponent().sprite;
nextDropDisplay.SetActive(true);
}
}
public GameObject GetNextDrop()
{
return nextDrop;
}
public void UpdateNextDrop()
{
ChooseRandomDrop();
}
// I handle my buttons via the GameManager because it was a short gamejam
// I did not want to make a whole separate UI manager
public void HomeButton()
{
AudioManager.Instance.Play("Click");
if (Settings.Score > Settings.HighScore)
{
Settings.HighScore = Settings.Score;
}
Settings.Score = 0;
if (AudioManager.Instance.IsPlaying("GameMusic"))
{
AudioManager.Instance.Stop("GameMusic");
}
if (AudioManager.Instance.IsPlaying("Lose"))
{
AudioManager.Instance.Stop("Lose");
}
SceneManager.LoadScene("Start");
}
public void Restart()
{
AudioManager.Instance.Play("Click");
SceneManager.LoadScene("Main");
}
public void GameOver()
{
if (AudioManager.Instance.IsPlaying("GameMusic"))
{
AudioManager.Instance.Stop("GameMusic");
}
GameOverMenu.SetActive(true);
if (Settings.Score > Settings.HighScore)
{
Settings.HighScore = Settings.Score;
}
}