I’m trying to create a game where the player collects five objects. I’ve added a script that destroys each object when you click on it. Is there a way for me to trigger fireworks or a sound or something once all five objects have been collected?
Thanks a lot. I’ve only just started using Unity and don’t know much about it.
You have to create some sort of counter. You will want to have it on a seperate script. Could be like this: (Code in C# but js works similar)
Inventory.cs:
//inside monobehaviour
public int counter; //The amount of items we already collected
public int maxItems; //The number of all items in total
private bool won;
void Awake(){ //Awake will be called before Start.
//Initialice the variables
counter = 0;
maxItems = 0;
won = false;
}
void Update(){
if(won == false && counter = maxItems){ //Check if we collected all items
won = true; //this will prevent calling the win sequence multiple times.
Winsequence(); //Put your firework/sound/etc code in this function;
}
}
On your item script you have to get a reference to your inventory script:
PickUp.cs:
//inside of monobehaviour again
private Inventory _inventory; reference to the script from above
void Start(){
//Find the reference to the script from above
//The script must be placed on a gameObject with the exact name: InventoryGameObject
//You have to make sure, that there is only one instance of this gameObject in your scene and it must not be destroyed.
//You can search UnityAnswers for singleton if this becomes a problem
_inventory = GameObject.Find("InventoryGameObject").GetComponent<Inventory>();
_inventory.maxItems ++; //Every pick up will increase the maxItems integer by one. At frame 1 maxItems will equal the actual number of items in the scene;
}
void OnMouseDown(){
_inventory.counter ++; //increase the counter by one
Destroy(this.gameObject); //You probalby got this already
}