Как реализовать шаблон SingleTon для сбора монет?
В скрипте PlayerInventory реализовать (шаблон) Singleton.Cделать начисление монеток путем обращения к Instance этого класса. Сбор монет реализовать в скрипте Player. Ниже мой код:
public int CoinsCount;
private void Awake()
{
Debug.Log(Player.Instance.CoinsCount);
}
public static Player Instance {get;set;}
}
А это скрипт Player:
public class Coin
{
int CoinsCount;
public void OnTriggerEnter2D(Collider2D col)
{
if(col.gameObject.CompareTag("Coin"))
{
CoinsCount++;
Destroy(col.gameObject);
}
}
}
Можете подсказать пожалуйста как реализовать это верно.Заранее спасибо.
Исправленная версия работает вот так 
Код исправленной версии есть в комментарии к первому ответу на мой вопрос.
Ответы (1 шт):
Нашёл решение, проверил у себя и всё работает. Значит , я заметил что у вас singleton PlayerInventory прикреплен к персонажу. Так быть НЕ должно. Singleton должен всегда висеть на пустом одиночном объекте (от этого и перевод singleton - одиночка). Нажимаете Create Empty и вешаете на него скрипт PlayerInventory, а скрипт Player так пусть и остается на герое.
public class PlayerInventory : MonoBehaviour
{
public int coinsCount{get;private set;} = 0;
public static PlayerInventory Instance{get;private set;} = null;
void Awake()
{
if(Instance == null)
{
Instance = this;
DontDestroyOnLoad(Instance);
}
else Destroy(gameObject);
}
public void AddCoins(int count)
{
coinsCount += count;
}
public void AddCoins()
{
coinsCount++;
}
}
public class Player : MonoBehaviour
{
public void OnTriggerEnter2D(Collider2D col)
{
if(col.gameObject.CompareTag("Coin"))
{
PlayerInventory.Instance.AddCoins();
Debug.Log("Количество монет = " + PlayerInventory.Instance.coinsCount);
Destroy(col.gameObject);
}
}
}