Получить "методом" переменную, после 5 такт. Update (решено)

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

Получить "методом" переменную, после 5 такт. Update (решено)

Сообщение Monah_Monahich 11 янв 2013, 10:28

Есть класс. Класс отвечает за построение и проверку фигур. Хочу сделать функцию/Метод (мне удобней называть Функция) которая будет принимать строку и отправлять в результате тоже строку. Проблема в том, что фигура, которую нужно построить и проверить, строится и проверяется несколько тактов события Update. И как бы составить эту функцию, которая будет ждать несколько тактов а потом возвращать значение ?

Ключевые моменты кода даю.
Синтаксис:
Используется csharp
// Ограничитель выполнения в событии update.
bool startBuild = false;
       
public void CheckIDFigure (string ID){
       
        // Построение фигуры.

        // Продолжение вычисления в Update.
        startBuild = true;
}

// Переменная для пропуска тактов в событии Update
int skipTimer = 10; // 10 с головой хватает.


void Update () {

        // Если дана команда проверки фигуры.
        if (startBuild == true) {
                // отсчитывать такты.
                if (skipTimer != 0) {
                        skipTimer --;
                }
        }
       
        // Продолжение расчета фигуры.
        if (skipTimer == 0) {

                // Тут рассчитывается "правильность" фигуры, и формируется ответ.

                // Остановить вычисления.
                startBuild = false;
                // Обновить таймер пропуска тактов.
                skipTimer = 10;
        }
}


Как в такой ситуации, вернуть в функцию, результат расчетов, после 10 тактов ?
Последний раз редактировалось Monah_Monahich 27 янв 2013, 11:49, всего редактировалось 1 раз.
Monah_Monahich
UNIт
 
Сообщения: 52
Зарегистрирован: 10 окт 2012, 10:15
Откуда: Украина Киев

Re: Получить "методом" переменную, после 5 тактов Update

Сообщение Paul Siberdt 11 янв 2013, 10:48

Запускайте коротинку в момент инициализации фигуры.

Синтаксис:
Используется csharp
   
public IEnumerator DelayAndBuild( float _waitTime ){
        yield return new WaitForSeconds(_waitTime);
        Debug.Log("Processing");
}

private float waitTime = 0.1f;
 void BlahBlahBlah(){
        Debug.Log("Start");
        StartCoroutine(DelayAndBuild(waitTime));
        Debug.Log("Finish");
}
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Получить "методом" переменную, после 5 тактов Update

Сообщение Monah_Monahich 11 янв 2013, 11:37

Давайте по другому. Набросал пару скриптов для решения этой задачи. Будем работать с ними и заставлять их работать как надо.

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

public class AfterPause : MonoBehaviour {
       
        string result = "result_defaut";
        bool start = false;

        public string BackResult (string ID) {
                Debug.Log ("BackResult Give ID: " + ID);
                start = true;

                // Вот тут, хочу получить результаты вычислений, что бы их вернуть.
                return result;
        }
       
       
        int tickTimer = 10;

        void Update () {
               
                if (start == true){
                        if (tickTimer != 0){
                                tickTimer--;
                        }
                }
       
                if (tickTimer == 0){
                        Debug.Log ("Calc Result");
                        result = "result_Calc";
                       
                        start = false;
                        tickTimer = 10;
                }
               
        }
}
 


Вызывающий его
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class Commander : MonoBehaviour {

        // Use this for initialization
        void Start () {
                string giveResult = GameObject.Find ("GameObject").GetComponent<AfterPause>().BackResult("Command_ID");
                Debug.Log ("giveResult: " + giveResult);
        }

}
 


где и как поставить задержку на вычисления ?
Monah_Monahich
UNIт
 
Сообщения: 52
Зарегистрирован: 10 окт 2012, 10:15
Откуда: Украина Киев

Re: Получить "методом" переменную, после 5 тактов Update

Сообщение Nicloay 11 янв 2013, 12:47

Зачем задержка елс и тут дело в событиях,
Закончилась генерация генерить события (я предпочитаю делегаты)
Ну и любой клас который должен реагировать просто слушает эти события.
гугли на тему события делегаты юнити3д
If you wish to make an apple pie from scratch, you must first invent the universe.(Carl Sagan, Cosmos)
| My Asset Store | coloring book | github | _wiki.unity3d.com | twitter | linkedin |
Аватара пользователя
Nicloay
Адепт
 
Сообщения: 1288
Зарегистрирован: 31 май 2012, 09:27
Откуда: Альпс
  • Сайт

Re: Получить "методом" переменную, после 5 тактов Update

Сообщение Neodrop 12 янв 2013, 03:12

Кстати, крайне не рекомендую работать со строками на мобилках. Слишком много мусора в GC
Если и есть строки, то лучше их кешировать в const переменных.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Получить "методом" переменную, после 5 тактов Update

Сообщение Monah_Monahich 19 янв 2013, 19:46

Nicloay писал(а):Зачем задержка елс и тут дело в событиях,
Закончилась генерация генерить события (я предпочитаю делегаты)
Ну и любой клас который должен реагировать просто слушает эти события.
гугли на тему события делегаты юнити3д


Нагуглил. Емли кому нужно.
Unity Coding Tips Part 1: Events and Delegates
http://www.youtube.com/watch?v=N2zdwKIsXJs

Да. Все правильно. Для одноразовых элементов в самый раз. А у меня процесс. Передано значение, получен результат. И опять с начала. Если делать с событиями, то надо будет отлавливать отработанное событие.
Как все сложно...

Задача будет решаться, событиями с делегатами. Ссылка на видео есть, там все доступно показано. Свой код приводить не буду.
Спасибо за внимание. еще увидимся.
Monah_Monahich
UNIт
 
Сообщения: 52
Зарегистрирован: 10 окт 2012, 10:15
Откуда: Украина Киев


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

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

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