- 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" );
}
}
}