Я хочу иметь синглтон, который будет хранить, обновлять и показывать счет игрока на всех уровнях (сценах), но что-то работает не так.
Это мой скрипт-одиночка GameStatus.cs:
using UnityEngine;
using TMPro;
public class GameStatus : MonoBehaviour
{
public static GameStatus instance;
[SerializeField] int pointsPerBlock = 50;
[SerializeField] TextMeshProUGUI scoreText;
[SerializeField] public static int currentScore = 0;
private void Awake()
{
if (instance != null)
{
Destroy(gameObject);
}
else
{
instance = this;
DontDestroyOnLoad(gameObject);
}
}
public void AddToScore()
{
currentScore += pointsPerBlock;
scoreText.text = currentScore.ToString();
}
}
У меня также есть еще один скрипт для объектов, который игрок должен уничтожить, который называется Block.cs. Вот оно:
using UnityEngine;
public class Block : MonoBehaviour
{
Level level;
GameStatus gameStatus;
private void Start()
{
level = FindObjectOfType<Level>();
gameStatus = FindObjectOfType<GameStatus>();
level.CountBreakableBlocks();
}
private void OnCollisionEnter2D(Collision2D collision)
{
DestroyBlock();
}
private void DestroyBlock()
{
level.BlockDestroyed();
gameStatus.AddToScore();
Destroy(gameObject);
}
}
И на уровне 1 все работает нормально, но когда игра переходит на следующий уровень, это происходит:
Счет игрока перестает обновляться.
Если я использую Debug.Log (currentScore); в GameStatus.cs, я вижу, что эта переменная не меняется, когда игрок разбивает блоки, но если использовать Debug.Log (gameStatus.currentScore); в Block.cs, тогда я вижу, что эта переменная обновляется.
Debug.Log (FindObjectsOfType) () .Length); показывает, что существует один объект GameStatus на первом уровне и два объекта на следующих уровнях, хотя я не вижу второй объект GameStatus в иерархии.
Итак, мой вопрос - что не так и как это исправить?