Суббота, 30 Ноября 2024, 02:39

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Плавно изменить число за точное время
robertonoДата: Пятница, 19 Июля 2013, 13:02 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
Всем привет. Помогите со скриптом.
Язык си шарп.
Есть переменная
focalPoint типа float.
Сейчас её значение равно 1.38f
Нужно за 1 секунду плавно изменить значение на 100.0f
Как сделать ?
pixeyeДата: Пятница, 19 Июля 2013, 13:26 | Сообщение # 2
Red Winter Software
Сейчас нет на сайте
Цитата (robertono)
Нужно за 1 секунду плавно изменить значение на 100.0f
Как сделать ?


Код
IEnumerator smoothVal (float from, float to, float timer)
  {  
   
   float t = 0.0f;
                 
                 float val = from;

   while (t < 1.0f) {
    t += Time.deltaTime * (1.0f / timer);
     
                         val =  Mathf.Lerp (from, to, t);  

    yield return 0;
   }
    
    
  }


Обращаться как StartCoroutine(smoothVal(1.38f,100.0f,1.0f));


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

robertonoДата: Пятница, 19 Июля 2013, 14:03 | Сообщение # 3
Чокнутый Кот
Сейчас нет на сайте
pixeye, что то не очень понял.
А как я могу перевести coroutine в float переменную ?
pixeyeДата: Пятница, 19 Июля 2013, 14:15 | Сообщение # 4
Red Winter Software
Сейчас нет на сайте
Цитата (robertono)
pixeye, что то не очень понял.
А как я могу перевести coroutine в float переменную ?


Ты не готов к такого рода манипуляциям. Я не вижу никакой преграды для того чтобы сделать задуманное. Самое элементарное это объявление глобальной переменной float и манипуляции ею через тот метод.


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

romgermanДата: Пятница, 19 Июля 2013, 17:00 | Сообщение # 5
старожил
Сейчас нет на сайте
deltaTime и всё такое. Делай таймер.
robertonoДата: Пятница, 19 Июля 2013, 20:20 | Сообщение # 6
Чокнутый Кот
Сейчас нет на сайте
pixeye, улучшил код, добавил переменную ,сделал таких 4 штуки Ienumerator сделал общую переменную. Вообщем всё работает. И вы в очередной раз заслуживаете плюс smile

Добавлено (19.07.2013, 20:20)
---------------------------------------------
Модератор , закрывайте тему.

White9Дата: Пятница, 19 Июля 2013, 20:49 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
pixeye, вопрос, наверное, глупый, но всё же )
Для чего в unity используется "IEnumerator"? Бегло просмотрел справку по C#, но пока так и не понял )
robertonoДата: Пятница, 19 Июля 2013, 21:07 | Сообщение # 8
Чокнутый Кот
Сейчас нет на сайте
White9, считает что то ))

Сообщение отредактировал robertono - Пятница, 19 Июля 2013, 21:22
pixeyeДата: Пятница, 19 Июля 2013, 21:11 | Сообщение # 9
Red Winter Software
Сейчас нет на сайте
Цитата (robertono)
Число сможет уменьшатся а не увеличиваться? Или нужно чтото изменить в коде?


Оно работает во всех направлениях:)

Ты просто указываешь произвольные начальные цифры и произвольные конечные. Так же ты можешь указать любое время ( тоесть можно за секунду, а можно и за 10 секунд )


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

pixeyeДата: Пятница, 19 Июля 2013, 21:18 | Сообщение # 10
Red Winter Software
Сейчас нет на сайте
Цитата (White9)
Для чего в unity используется "IEnumerator"?


Если просто, то позволяет создавать методы с временными задержками по исполнению алгоритма и прерывающимися/возобновляемыми циклами.

Например я пишу уже наверно игры три практически не используя методов Update


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

White9Дата: Пятница, 19 Июля 2013, 21:47 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
pixeye, то есть отличия от других функций в том, что внутри этой мы можем задать паузу любой продолжительности в любом месте функции - я правильно понял? )
Тогда получается так...
Например, в функции Update мы вызываем наш IEnumerator. Предположим, в нём имеется 5-ти секундная пауза выполнения. Это значит, что update, вызвавшая IEnumerator, тоже прекратит свою работу на тоже самое время? )
pixeyeДата: Пятница, 19 Июля 2013, 22:00 | Сообщение # 12
Red Winter Software
Сейчас нет на сайте
Цитата (White9)
Это значит, что update, вызвавшая IEnumerator, тоже прекратит свою работу на тоже самое время? )


Нет, Update впринципе не может прекратить свою работу.

Однако можно сделать фейковый Update через сопрограмму:

Код
IEnumerator coUpdate(){  

while(true){

yield return 0;

}

}


И вызывать в методе Start()


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

White9Дата: Пятница, 19 Июля 2013, 22:03 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
pixeye, и таким образом мы получим аналог update, но можем вызывать его с такой частотой, с какой захотим? )
Спасибо, кажется, я начал понимать ))
pixeyeДата: Пятница, 19 Июля 2013, 22:14 | Сообщение # 14
Red Winter Software
Сейчас нет на сайте
Цитата (White9)
pixeye, и таким образом мы получим аналог update, но можем вызывать его с такой частотой, с какой захотим? )
Спасибо, кажется, я начал понимать ))


Да. и прерывать по необходимости. Так же полезен такой аналог когда нам необязательны вычисления каждый кадр. А можно например делать вычисление раз в секунду или 5.

Следует так же помнить, что сопрограммы выполняются после завершения всех методов Update. Это может показаться незначительным нюансом, но на деле может приводить к разным казусам если не понимать:)


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг