Знатоки ДОЙНАЯ ЗАДЕРЖКА в скрипте как реализовать? - Форум Игроделов
Пт, 17 Май 2024, 06:02 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Знатоки ДОЙНАЯ ЗАДЕРЖКА в скрипте как реализовать? (пробовал разные способы Coroutine корректно работать не хоче)
Знатоки ДОЙНАЯ ЗАДЕРЖКА в скрипте как реализовать?
MakwebДата: Пт, 23 Май 2014, 11:47 | Сообщение # 1
Нет аватара
 
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Offline
Форумчане и знатоки столкнулся с такой проблемой: нужно реализовать две задержки (коротких поэтому способ c -=Time.deltaTimen не подходит) ситуация такая при выполнении условия в методе Update запускается анимация (через включение рендера объекта) когда анимация доходит до середины Destroy(gameObject) (не на котором анимация) после окончания анимации рендер объекта с анимацией опять отключается) это сама задача пробовал вот так
Код
  void Update()

     {
       if (Health <= 0)
       {
               GameObject.Find("Dust").GetComponent<SpriteRenderer>().enabled = true; //включаем анимацию (АНИМАТОР)
               StartCoroutine(AnimDelay(0.125f)); // запускаем сопрограмму с задержкой вывода флага timeFlag  
               StartCoroutine(AnimDelay(0.25f)); // запускаем сопрограмму с задержкой вывода флага timeFlag  
               if (timeFlag)
               {
                   DestroyAndInstantiate(rid); // вызываем метод - уничтожаем объект с необходимым тегом, создаем новый объект из префаба
                   timeFlag=false; // выключаем флаг
                   flagDbl=true; // выключаем флаг повтора для условия конца анимации
               }
               if ((timeFlag)&&(flagDbl))
               {
                    GameObject.Find("Dust").GetComponent<SpriteRenderer>().enabled = true; //выключаем анимацию  

               }
       }

       }

     static void DestroyAndInstantiate(int rid)
     {
         Destroy(GameObject.FindWithTag("KamenObj")); // уничтожение объекта по тегу
         GameObject instance = Instantiate(Resources.Load<GameObject>("prefab/prefabRock " + (rid).ToString())) as GameObject; //создание объекта из текущего префаба
     }

     IEnumerator AnimDelay(float second)
   {
       yield return new WaitForSeconds(second);
       delayFlag = true;
       Debug.Log(delayFlag +"delay1");
        
   }

не происходит второго события (окончания анимации) пробовал задать две крутины (с разными именами) срабатывает только та на которой время вызова WaitForSeconds(second); меньше, так как программистом не являюсь а только пока начинаю разбираться в C# меня преследует четкое ощущение неправильности написания кода либо понимания логики языка - знатоки подскажите как решить эту задачу?
 
СообщениеФорумчане и знатоки столкнулся с такой проблемой: нужно реализовать две задержки (коротких поэтому способ c -=Time.deltaTimen не подходит) ситуация такая при выполнении условия в методе Update запускается анимация (через включение рендера объекта) когда анимация доходит до середины Destroy(gameObject) (не на котором анимация) после окончания анимации рендер объекта с анимацией опять отключается) это сама задача пробовал вот так
Код
  void Update()

     {
       if (Health <= 0)
       {
               GameObject.Find("Dust").GetComponent<SpriteRenderer>().enabled = true; //включаем анимацию (АНИМАТОР)
               StartCoroutine(AnimDelay(0.125f)); // запускаем сопрограмму с задержкой вывода флага timeFlag  
               StartCoroutine(AnimDelay(0.25f)); // запускаем сопрограмму с задержкой вывода флага timeFlag  
               if (timeFlag)
               {
                   DestroyAndInstantiate(rid); // вызываем метод - уничтожаем объект с необходимым тегом, создаем новый объект из префаба
                   timeFlag=false; // выключаем флаг
                   flagDbl=true; // выключаем флаг повтора для условия конца анимации
               }
               if ((timeFlag)&&(flagDbl))
               {
                    GameObject.Find("Dust").GetComponent<SpriteRenderer>().enabled = true; //выключаем анимацию  

               }
       }

       }

     static void DestroyAndInstantiate(int rid)
     {
         Destroy(GameObject.FindWithTag("KamenObj")); // уничтожение объекта по тегу
         GameObject instance = Instantiate(Resources.Load<GameObject>("prefab/prefabRock " + (rid).ToString())) as GameObject; //создание объекта из текущего префаба
     }

     IEnumerator AnimDelay(float second)
   {
       yield return new WaitForSeconds(second);
       delayFlag = true;
       Debug.Log(delayFlag +"delay1");
        
   }

не происходит второго события (окончания анимации) пробовал задать две крутины (с разными именами) срабатывает только та на которой время вызова WaitForSeconds(second); меньше, так как программистом не являюсь а только пока начинаю разбираться в C# меня преследует четкое ощущение неправильности написания кода либо понимания логики языка - знатоки подскажите как решить эту задачу?

Автор - Makweb
Дата добавления - 23 Май 2014 в 11:47
seamanДата: Пт, 23 Май 2014, 14:04 | Сообщение # 2
Гуру
 
Сообщений: 1748
Награды: 10
Репутация: 660
Статус: Offline
Второе условие никогда не выполнится. Ты только что перед второй проверкой сделал timeFlag = false
 
СообщениеВторое условие никогда не выполнится. Ты только что перед второй проверкой сделал timeFlag = false

Автор - seaman
Дата добавления - 23 Май 2014 в 14:04
AltairДата: Пт, 23 Май 2014, 14:21 | Сообщение # 3
Unity 3D PRO Developer
 
Сообщений: 758
Награды: 6
Репутация: 195
Статус: Offline
Код
if (!timeFlag && flagDbl)
 
Сообщение
Код
if (!timeFlag && flagDbl)

Автор - Altair
Дата добавления - 23 Май 2014 в 14:21
Форум Игроделов » UNITY3D » СКРИПТИНГ » Знатоки ДОЙНАЯ ЗАДЕРЖКА в скрипте как реализовать? (пробовал разные способы Coroutine корректно работать не хоче)
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024