Страница 1 из 1

Как правильно расписать логику добавления монет?

СообщениеДобавлено: 18 мар 2020, 15:24
murzilka6002
Задача: Есть много enemy которые имеют coins. Есть мои warrior которые сражаются с enemy. После того как warrior уничтожил enemy игрок получает количество coins которое было у enemy.
Вопрос: Как правильно прописать оттачу coins игроку?

Посоветуйте, как вы бы сделали?

Думал или использовать делегаты, но не знаю нужны ли они, ведь врагов будет много, они будут уничтожаться..

Думал о таком варианте:
Синтаксис:
Используется csharp
public class GameManager : MonoBehaviour
{
        public static GameManager Instance;

        public int Coins { get; private set; }

        private void Start()
        {
                if (Instance == null)
                        Instance = this;
                else
                        DontDestroyOnLoad(gameObject);

                DontDestroyOnLoad(gameObject);
        }

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

public class Enemy : MonoBehaviour
{
        private int coins;

        private void Die()
        {
                GameManager.Instance.AddCoins(coins);
                Destroy(this.gameObject);
        }
}

Re: Как правильно расписать логику добавления монет?

СообщениеДобавлено: 18 мар 2020, 15:44
1max1
Твой вариант, кстати, очень даже неплохой, почему нет?

Re: Как правильно расписать логику добавления монет?

СообщениеДобавлено: 18 мар 2020, 20:53
murzilka6002
1max1 писал(а):Твой вариант, кстати, очень даже неплохой, почему нет?

Ну думал как-то вообще избавиться от зависимостей. А здесь все же отсыл на GameManager.Instance
Может есть другие получше практики :)

Re: Как правильно расписать логику добавления монет?

СообщениеДобавлено: 18 мар 2020, 21:37
samana
Можно создать у Enemy статическое событие смерти и при смерти вызывать его. А там уже кому это важно, пусть подписываются, например тот же GameManager.

Синтаксис:
Используется csharp
public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public int Coins { get; private set; }

    private void Start()
    {
        if (Instance == null)
            Instance = this;
        else
            DontDestroyOnLoad(gameObject);

        DontDestroyOnLoad(gameObject);

        Enemy.DieEvent += Enemy_DieEventHandler;
    }

    private void Enemy_DieEventHandler(int coin)
    {
        AddCoins(coin)
    }

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

public class Enemy : MonoBehaviour
{
    public static event Action<int> DieEvent;
    private int coins;

    private void Die()
    {
        if (DieEvent != null) DieEvent(coins);
        Destroy(this.gameObject);
    }
}

Re: Как правильно расписать логику добавления монет?

СообщениеДобавлено: 18 мар 2020, 22:52
1max1
Зависимости есть везде, где-то их немного, а где-то очень много, в этом случае, обращение к 1 полю в 1 методе не так уж и сложно для понимания кода.