Вот кое-что, с чего можно начать.
Есть несколько способов сделать это. Я предложу один, в котором каждая сцена в единстве может иметь и поддерживать свой собственный счет звезд.
Создайте новый MonoBehaviour, который может содержать ваш Счет. Я назову это LevelData.
public class LevelData : MonoBehaviour {
public string LevelName;
public int HighScoreStarsCollected;
public int StarsCollected;
void Awake() {
HighScoreStarsCollected = PlayerPrefs.GetInt(LevelName + ".starscollected", 0);
}
public void SaveData() {
PlayerPrefs.SetInt(LevelName + ".starscollected", HighScoresCollected);
}
public bool UpdateHighScore() {
if(StarsCollected > HighScoreStarsCollected) {
HighScoreStarsCollected = StarsCollected;
SaveData();
return true;
}
return false;
}
}
Затем в свой класс Stars добавьте переменную publi c для ссылки на LevelData.
public class Stars : MonoBehaviour {
[SerializeField] private Animator animator;
public GameObject DeathEffect;
public LevelData Data;
void didColideWithStar()
{
animator.SetBool("boom", true);
Data.StarsCollected++; // increment the star count
}
public void OnTriggerEnter2D()
{
didColideWithStar();
Die();
}
public void Die()
{
Instantiate(DeathEffect, transform.position, Quaternion.identity);
Destroy(gameObject);
}
}
Теперь у вас есть класс, который содержит общее количество собранных звезд, и вы можете сослаться на это для своего счета.
Скорее всего, вы захотите расширить его, чтобы иметь функцию (функции) сброса / сохранения / загрузки, позволяющую воспроизводить и сохранять данные между играми пробеги.