Как выполнить метод в Update 1 раз?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Как выполнить метод в Update 1 раз?

Сообщение MorfixProton 17 мар 2019, 17:07

Здравствуйте форумчане-юнитиведы)))

Такой вопрос: у меня игра - защита замка, вот есть у меня скрипт, который отвечает за спавн мобов в зависимости от игрового уровня.

Я реализовал так:
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MobsSpawnController : MonoBehaviour
{
    public Global _global;
    public UIController _UIController;

    //Мобы
    public GameObject _zombie;

    public float _spawnTimer;

    void Start()
    {
        var _objectGlobal = GameObject.Find("Global");
        _global = _objectGlobal.GetComponent<Global>();
        var _objectUIController = GameObject.Find("UIController");
        _UIController = _objectUIController.GetComponent<UIController>();
    }


    void Update()
    {
        if (_global._fightMode)//Если режим боя активен
        {
            if (_UIController._textNumberOfNightShowTime <= 0)//Если название уровня исчезло
            {
                _spawnTimer += Time.deltaTime;\\Запускаем таймер
            }
        } else
        {
            _spawnTimer = 0;//Если не режим боя, то таймер обнуляем
        }


//Прописываем сценарии спавна мобов
        switch (_global._gameLevel)
        {
            case 1:
                if (_spawnTimer > 5)
                {
                    Instantiate(_zombie, this.transform.position, this.transform.rotation);//На 5той секунде спавним зомбяку)
                }
if (_spawnTimer > 10)
                {
                    Instantiate(_zombie, this.transform.position, this.transform.rotation);//На 10той секунде тоже спавним зомбяку)
                }
                break;
        }
    }
}


Но вот незадача, мне надо, чтобы Instantiate сработал 1 раз. И использовать булевые флаги уже не вариант так как мобов будет оооочень много.
Вот и вопрос как вызывать Instantiate только 1 раз???
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Как выполнить метод в Update 1 раз?

Сообщение Woolf 17 мар 2019, 17:30

И использовать булевые флаги уже не вариант так как мобов будет оооочень много

Не понимаю логику предложения. Ну раз будет очень много мобов, сделайте очень много флагов.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Как выполнить метод в Update 1 раз?

Сообщение MorfixProton 17 мар 2019, 17:35

Сделал много флагов:

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MobsSpawnController : MonoBehaviour
{
    public Global _global;
    public UIController _UIController;

    public bool[] _zombieSpawnAccess = new bool[1000];
    public bool _resetBoolsSpawnAccess = false;

    public GameObject[] _allSpawnedMobs = new GameObject[1000];

    //Мобы
    public GameObject _zombie;

    public float _spawnTimer;

    void Start()
    {
        var _objectGlobal = GameObject.Find("Global");
        _global = _objectGlobal.GetComponent<Global>();
        var _objectUIController = GameObject.Find("UIController");
        _UIController = _objectUIController.GetComponent<UIController>();

        for (int i = 0; i < 1000; i++)
        {
            _zombieSpawnAccess[i] = false;
        }
    }


    void Update()
    {
        if (_global._fightMode)//Если режим боя включился
        {
            _resetBoolsSpawnAccess = false;
            if (_UIController._textNumberOfNightShowTime <= 0)
            {
                _spawnTimer += Time.deltaTime;
            }
        } else//Если режим боя отключился
        {
            if (!_resetBoolsSpawnAccess)
            {
                _resetBoolsSpawnAccess = true;

                //Разрешаем мобам спавниться
                for (int i = 0; i < 1000; i++)
                {
                    _zombieSpawnAccess[i] = false;
                }

                //Удаляем всех мобов
                for (int i = 0; i < 1000; i++)
                {
                    Destroy(_allSpawnedMobs[i]);
                }
                _spawnTimer = 0;
            }
        }

        //Устанавливаем количество мобов
        switch (_global._gameLevel)
        {
            case 1://Уровень 1

                if (_spawnTimer > 1 && !_zombieSpawnAccess[0])
                {
                    _zombieSpawnAccess[0] = true;
                    _allSpawnedMobs[0] = Instantiate(_zombie, this.transform.position, this.transform.rotation);
                }

                if (_spawnTimer > 10 && !_zombieSpawnAccess[1])
                {
                    _zombieSpawnAccess[1] = true;
                    _allSpawnedMobs[1] = Instantiate(_zombie, this.transform.position, this.transform.rotation);
                }

                if (_spawnTimer > 20 && !_zombieSpawnAccess[2])
                {
                    _zombieSpawnAccess[2] = true;
                    _allSpawnedMobs[2] = Instantiate(_zombie, this.transform.position, this.transform.rotation);
                }

                if (_spawnTimer > 30 && !_zombieSpawnAccess[3])
                {
                    _zombieSpawnAccess[3] = true;
                    _allSpawnedMobs[3] = Instantiate(_zombie, this.transform.position, this.transform.rotation);
                }

                if (_spawnTimer > 40 && !_zombieSpawnAccess[4])
                {
                    _zombieSpawnAccess[4] = true;
                    _allSpawnedMobs[4] = Instantiate(_zombie, this.transform.position, this.transform.rotation);
                }

                break;
        }
    }
}


Но не сильно жрать оперативу будет? Мобильная же игрушка.
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Как выполнить метод в Update 1 раз?

Сообщение MorfixProton 17 мар 2019, 17:36

Можно ли мой код сделать более приятным, а то так на каждого моба придется 3 индекса менять... [curved_hands]
MorfixProton
UNITрон
 
Сообщения: 197
Зарегистрирован: 18 окт 2015, 11:37

Re: Как выполнить метод в Update 1 раз?

Сообщение Woolf 17 мар 2019, 18:56

Посмотрел код, а зачем вам именно Update ? Карутина была бы более в тему.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Как выполнить метод в Update 1 раз?

Сообщение Friend123 17 мар 2019, 20:00

Однозначно корутиной, зачем лишний раз в Update что-то пихать
Аватара пользователя
Friend123
Старожил
 
Сообщения: 701
Зарегистрирован: 26 фев 2012, 22:12
Откуда: Тверь
  • ICQ


Вернуться в Почемучка

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 19