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

Программирование на Юнити.

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

Сообщение murzilka6002 18 мар 2020, 15:24

Задача: Есть много 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);
        }
}
murzilka6002
UNIт
 
Сообщения: 57
Зарегистрирован: 10 авг 2013, 11:48

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

Сообщение 1max1 18 мар 2020, 15:44

Твой вариант, кстати, очень даже неплохой, почему нет?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение murzilka6002 18 мар 2020, 20:53

1max1 писал(а):Твой вариант, кстати, очень даже неплохой, почему нет?

Ну думал как-то вообще избавиться от зависимостей. А здесь все же отсыл на GameManager.Instance
Может есть другие получше практики :)
murzilka6002
UNIт
 
Сообщения: 57
Зарегистрирован: 10 авг 2013, 11:48

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

Сообщение samana 18 мар 2020, 21:37

Можно создать у 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);
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

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

Сообщение 1max1 18 мар 2020, 22:52

Зависимости есть везде, где-то их немного, а где-то очень много, в этом случае, обращение к 1 полю в 1 методе не так уж и сложно для понимания кода.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2