Плавно изменить число за точное время
|
|
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 сделал общую переменную. Вообщем всё работает. И вы в очередной раз заслуживаете плюс Добавлено (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 - игра над которой работаю
|
|
| |