почему не работает WaitForSeconds?

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

почему не работает WaitForSeconds?

Сообщение Huruffus 25 мар 2013, 17:35

Делаю плавное подсвечивание кнопок GUI.
Для этого использую несколько текстур (секвенцию) и WaitForSeconds, чтобы включалась не последняя текстура сразу, а плавно все по очереди.
Но вот беда WaitForSeconds не работает! И не только сейчас, да и в других скриптах, где требовалась плавность (там пришлось делать анимацией).

Скажите пожалуйста в чём дело?

Самые главные части скрипта это методы: VerifPosCurInTotMainMenu() и wait(). Остальные приведены для понимания скрипта.

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

public class MainMenu : MonoBehaviour
{
        public GUIStyle mmGUIStyle;
        Rect butPosExit;
        Texture texExit;

        public bool dtmm, dswm;
       
        public Texture[] testExitFocuse, testExit_unFocuse;
       
        public int i;
       
        void Start ()
        {
                dtmm=true;
                dswm=false;
                i=0;
        }
       
       
        void Update ()
        {
                //Кнопки TotalMainMenu
                //Exit позиция
                butPosExit = new Rect(Screen.width/1.2339F,Screen.height/1.1042F,Screen.width/9.6969F,Screen.height/10.5882F);
        }
       

       
        void OnGUI()
        {      
                if (dtmm)
                {
                        DrawTotalMainMenu();
                }
                if (dswm)
                {
                        DrawSelectWorldMenu(); 
                }
               
        }
       
        void VerifPosCurInTotMainMenu()
        {
                //проверка Exit
                if (butPosExit.Contains(Event.current.mousePosition))  //если мышь попадает в область кнопки, то текстура изменяется
                {
                        texExit=testExitFocuse[i];
                        if (i>=testExitFocuse.Length-1)
                                i=testExitFocuse.Length-2;
                        i=i+1;
                        Debug.Log(i);
                        wait(5);
                }
                else
                {
                        texExit=testExitFocuse[i];
                        if (i<=0)
                                i=1;
                        i=i-1;
                        Debug.Log(i);
                        wait(12);
                }
        }
       
        //Главное меню
        void DrawTotalMainMenu()
        {
                VerifPosCurInTotMainMenu();
                //Exit
                if (GUI.Button(butPosExit, texExit, mmGUIStyle))
                {
                        Application.Quit();    
                }
                //play
                if(GUI.Button(butPosPlay,texPlay,mmGUIStyle))
                {
                        dswm=!dswm;
                        dtmm=!dtmm;
                }
        }
       
        //Выбираем мир
        void DrawSelectWorldMenu()
        {
                VerifPosCurInSelWorldMenu();
                //Back
                if(GUI.Button(butPosBack, texBack, mmGUIStyle))
                {
                        dtmm=!dtmm;
                        dswm=!dswm;
                }
        }
       
        IEnumerator wait(float t)
        {
                yield return new WaitForSeconds(t);    
        }
}
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт

Re: почему не работает WaitForSeconds?

Сообщение BornFoRdeatH 25 мар 2013, 17:41

Потому что он предназачен для коронтин
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: почему не работает WaitForSeconds?

Сообщение Huruffus 25 мар 2013, 18:00

поправил вот так: StartCoroutine(wait(12)); //12 для того, чтобы было точно видно
всё равно не ждёт. Точно так же сразу с первой на последнюю текстуру перескакивает. Не могли бы вы объяснить как использовать WaitForSeconds?
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт

Re: почему не работает WaitForSeconds?

Сообщение BornFoRdeatH 25 мар 2013, 18:29

Синтаксис:
Используется csharp
void Start(){
//запускаем коронтину
 StartCoroutine(wait(12));
}

IEnumerator wait(float t)
{
// Ждем нужное количество времени
yield return new WaitForSeconds(t);    
// Здесь выполняется код который вам нужен после задержки
}

 
Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: почему не работает WaitForSeconds?

Сообщение seaman 25 мар 2013, 18:32

seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: почему не работает WaitForSeconds?

Сообщение Huruffus 25 мар 2013, 19:01

спасибо :)
_ttp://rebirthgame.tumblr.com/
@jonarhipov
vk.com/jonarhipov
_jonarhipov@gmail.com
Huruffus
UNITрон
 
Сообщения: 174
Зарегистрирован: 02 июл 2012, 20:53
  • Сайт


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

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

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