Задержка выполнения строки

Общие вопросы о Unity3D

Задержка выполнения строки

Сообщение feodor21 01 авг 2013, 11:05

Всем привет!
пытаюсь поворачивать обьект на правую кнопку. написал 2 функции: Tap (поворот на +90' по y от существующего поворота) и Untap(такой же поворот в обратку, то есть -90' по y). Должно получиться так: кликаешь по объекту - он поворочивается, кликаешь ещё раз уже по повёрнутому - и он разворачивается обратно, как был. Начальное положение поворота у объекта всегда разное и я ввёл булевую переменную TapFactor, которая должна проверять производился ли уже поворот для объекта.
Изначально его значение - false.

Вот код:
Синтаксис:
Используется csharp
void OnMouseOver()
        {
                if(Input.GetMouseButtonDown(1)){
        if(TapFactor == false){ Tap ();}
        if(TapFactor == true){ Untap ();}
                }
        }

void Tap(){
        Debug.Log("TAP");
        Quaternion tap = Quaternion.Euler(0,transform.rotation.y - 90f,0);
        transform.rotation = Quaternion.Slerp(transform.rotation,tap,Time.time * TapTime);
        TapFactor = true;
        }

void Untap(){
        Debug.Log ("UNTAP");
        Quaternion untap = Quaternion.Euler(0,transform.rotation.y + 90f,0);
        transform.rotation = Quaternion.Slerp(transform.rotation,untap,Time.time * TapTime);
        TapFactor = false;
        }



А вот проблема:
Всё происходит очень быстро, когда я кликаю правой кнопкой - работает функция OnMouseOver, которая тут же запускает функцию Tap (т.к. значение TapFactor - false), в которой TapFactor мгновенно меняется на true, а посему функция OnMouseDown уже запускает ф-ю Untap. Такие дела.

Я подумал, что может задержка строки TapFactor = true/false; поможет исправить положение, если она будет выполнятся после поворота, но yield силён только в корутинах, в которых не силён я.
Как можно отсрочить выполнение конкретной строки в функции? Спасибо ^:)^
feodor21
UNец
 
Сообщения: 3
Зарегистрирован: 18 мар 2013, 05:50

Re: Задержка выполнения строки

Сообщение Golandez 01 авг 2013, 11:13

Введите enum, отвечающий за положение обьета, введите bool, отвечающий за состояние обьекта(находится в режиме разворота или нет).
Будет что то типа
Синтаксис:
Используется csharp
if(rotataState==State.Start)
{
 if(!isRotate)
  {
     Tap();
  }
}
 
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Задержка выполнения строки

Сообщение Alexey191295 01 авг 2013, 11:34

Помоему можно просто вот так:
Синтаксис:
Используется csharp
if(Input.GetMouseButtonDown(1)){
  if(TapFactor == false){ Tap ();}
  else if(TapFactor == true){ Untap ();}
}
 
Windows Phone: Rubik's Cube Planet Wars
Alexey191295
UNITрон
 
Сообщения: 182
Зарегистрирован: 13 ноя 2011, 13:04
Skype: Alexey191295

Re: Задержка выполнения строки

Сообщение feodor21 01 авг 2013, 11:44

Alexey191295 , Да, всё именно так! Элементарно и просто! Вопрос решён, всем спасибо :ymapplause: :ymparty:
feodor21
UNец
 
Сообщения: 3
Зарегистрирован: 18 мар 2013, 05:50

Re: Задержка выполнения строки

Сообщение seaman 01 авг 2013, 20:36

Не пишите так:
if(TapFactor == false) и if(TapFactor == true)
Ну не пишут так! Пишут вот так:
if(!TapFactor) и if(TapFactor)
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Задержка выполнения строки

Сообщение Alexey191295 02 авг 2013, 07:28

seaman писал(а):Не пишите так:
if(TapFactor == false) и if(TapFactor == true)
Ну не пишут так! Пишут вот так:
if(!TapFactor) и if(TapFactor)

Ну проще человеку так для понимания, пусть пишет, компилятор всё равно переделает это.
Windows Phone: Rubik's Cube Planet Wars
Alexey191295
UNITрон
 
Сообщения: 182
Зарегистрирован: 13 ноя 2011, 13:04
Skype: Alexey191295

Re: Задержка выполнения строки

Сообщение feodor21 03 авг 2013, 15:04

seaman, спасибо, намотал на ус!
feodor21
UNец
 
Сообщения: 3
Зарегистрирован: 18 мар 2013, 05:50


Вернуться в Общие вопросы

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

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