- Home /
 
Completing game upon pickup count
There are 13 objects in my scene that the player is going to pick up and upon doing so, the game will complete. I don't know for sure what my script should look like to do so. My scene uses a score manager script and a pickup collecting script
public class ScoreManager : MonoBehaviour { public static int score; Text text; void Start() { text = GetComponent<Text>(); score = 0; } void Update() { if (score < 0) score = 0; text.text = "" + score; } public static void AddPoints (int pointsToAdd) { score += pointsToAdd; } public static void Reset() { score = 0; } }
 public class CollectPickup : MonoBehaviour
 {
     public int pointsToAdd;
 
     private void OnTriggerEnter2D(Collider2D collision)
     {
         ScoreManager.AddPoints(pointsToAdd);
 
         Destroy(collision.gameObject);
     }
 }
 
               I need the game to complete upon picking up every object, and I've never completed something with this aspect, so apologies for the newbie question.
Answer by Hellium · Nov 14, 2019 at 11:28 PM
Disclaimer: Code not tested
ScoreManager.cs
Attach it wherever you want, on an empty, directly on the gameObject with the score text, ...
 using UnityEngine;
 using UnityEngine.UI;
 
 public class ScoreManager : MonoBehaviour
 {
     // Drag & drop the gameObject with the Text component in the inspector
     [SerializeField]
     private Text Text;
     private int score;
 
     void Start()
     {
         Reset();
     }
 
     public void AddPoints( int pointsToAdd )
     {
         score += pointsToAdd;
         Text.text = score.ToString();
     }
 
     public void Reset()
     {
         score = 0;
     }
 }
 
               Collectible.cs
Attach it to each object to pickup. Meant to replace your current CollectPickup class
 using UnityEngine;
 
 public class Collectible : MonoBehaviour
 {
     [SerializeField]
     private int pointsToAdd;
 
     public System.Action<Collectible> Collected;
 
     public int PointsToAdd
     {
         get { return pointsToAdd; }
     }
 
     private void OnTriggerEnter2D( Collider2D collider )
     {
         Collected?.Invoke(this);
 
         Destroy( gameObject );
     }
 }
 
               CollectiblesManager.cs
Attach it to an empty in your scene
 using UnityEngine;
 using System.Collections.Generic;
 
 public class CollectiblesManager : MonoBehaviour
 {
     // Drag & drop all the collectibles in the inspector
     [SerializeField]
     private List<Collectible> collectibles;
 
     // Drag & drop the gameObject with the ScoreManager component in the inspector
     [SerializeField]
     private ScoreManager scoreManager;
 
     private void Start()
     {
         foreach ( var collectible in collectibles )
         {
             collectible.Collected += OnCollectibleCollected;
         }
     }
 
     private void OnCollectibleCollected(Collectible collectible)
     {
         scoreManager.AddPoints( collectible.PointsToAdd );
         collectibles.Remove( collectible );
 
         if( collectibles.Count == 0 )
         {
             Debug.Log( "Victory" );
         }
     }
 }
 
              Your answer