motkot
@motkot
Программирование C#.

Как сделать из такой системы что-то нормальное?

Создал GridRepository:

public class StatisticRepository
{
    public int Coins;
}


И GridInteractor:

public class StatisticInteractor
{
    StatisticRepository _repository = new StatisticRepository();
    public int Coins => _repository.Coins;

    public delegate void OnCoinsValue();
    public event OnCoinsValue OnCoinsValueChanged;

    public void AddCoins(int value)
    {
        _repository.Coins += value;

        OnCoinsValueChanged?.Invoke();
    }

    public void SpentCoins(int value)
    {
        _repository.Coins -= value;

        OnCoinsValueChanged?.Invoke();
    }
}


Потом создал монетку:

using UnityEngine;

public class Coin : MonoBehaviour
{
    [SerializeField] private int _value;
    [SerializeField] private ParticleSystem _effect;

    private StatisticInteractor _statisticInteractor = new StatisticInteractor();

    private void OnTriggerEnter(Collider other)
    {
        if(other.GetComponent<PlayerMovement>())
        {
            _statisticInteractor.AddCoins(_value);
            Instantiate(_effect, transform.position, Quaternion.identity);

            Destroy(gameObject);
        }
    }
}


И проблема в том что у каждой монеты свое количество монет. Как сделать чтобы прибавлялся к "общему" экземпляру?

Потом в CoinsRender ничего не отображается.

using UnityEngine;
using TMPro;

public class CoinsRender : MonoBehaviour
{
    [SerializeField] private TMP_Text _coinsText;

    StatisticInteractor _statisticInteractor = new StatisticInteractor();

    private void OnEnable()
    {
        _statisticInteractor.OnCoinsValueChanged += RenderText;
    }

    private void OnDisable()
    {
        _statisticInteractor.OnCoinsValueChanged -= RenderText;
    }

    public void RenderText()
    {
        _coinsText.text = "Монетки: " + _statisticInteractor.Coins;
    }
}
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Создавать StatisticInteractor единожды, а не при каждом случае. Например как статический объект. Загуглите Singleton под Unity
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы