ускоренное движение с замедленнием

Программирование на Юнити.

ускоренное движение с замедленнием

Сообщение jeyson 07 май 2009, 10:17

нужно выдвинуть gui с плавным замедленнием. пишу:
Код: Выделить всё
private var yVelocity = 0.0;
...
//изменяю х координату GUI.Box();
MenuX = Mathf.SmoothDamp(-105.0, 0.0, yVelocity, 5.0, 20.0);

и нифига не выходит, по дебагу MenuX доходит до -104.6. как вообще работает та функция? или есть альтернативы?
Последний раз редактировалось jeyson 07 май 2009, 13:21, всего редактировалось 1 раз.
Аватара пользователя
jeyson
UNIт
 
Сообщения: 113
Зарегистрирован: 15 апр 2009, 22:22
Откуда: Ижевск
  • ICQ

Re: ускоренное движение с замедленнием

Сообщение gnoblin 07 май 2009, 11:45

А function OnGui() можно еще?
мало кода, не понял что конкретно ты там делаешь.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: ускоренное движение с замедленнием

Сообщение jeyson 07 май 2009, 13:30

исправил что до -104 доходит. вот простой пример:
Код: Выделить всё
var MenuX = -105;
var mright = true;
private var yVelocity = 0.0;

function FixedUpdate() {
   if (mright) { moveMenuRight(); }
}

function OnGUI() { //например просто кнопку вывести плавно из-за экрана.
   GUI.Button(Rect(MenuX, Screen.height/2-50, 100, 100), "button");
}

function moveMenuRight () {
   if (MenuX < 0) {
      MenuX = Mathf.SmoothDamp(-105.0, 0.0, yVelocity, 5.0, 20.0);
      Debug.Log(MenuX);
      //Debug.Log(yVelocity);
      return;
   }
   mright = false;
}


и вот при таком раскладе MenuX доходит только до -104, хотя ясно сказал я Mathf.SmoothDamp(откуда, куда, yVelocity(скорость, которая изменяется данной функцией), за какое время должен пройти данный интервал, максимальная скорость, Time.deltaTime);

если изменять как попало значения Mathf.SmoothDamp() то удается либо моментально переместить, либо с дерганием, либо не красиво. а охото получить вот такой идеальный массив передвижения (MenuX + mass[i]) mass = [22,22,12,10,10,9,8,5,3,2,1,0,1]
Аватара пользователя
jeyson
UNIт
 
Сообщения: 113
Зарегистрирован: 15 апр 2009, 22:22
Откуда: Ижевск
  • ICQ

Re: ускоренное движение с замедленнием

Сообщение Const_47 07 май 2009, 17:11

Это первое как "Альтернатива" что пришло в голову
Код: Выделить всё
var MenuX = - 105;

function FixedUpdate() {

Smooth();
}

function OnGUI() {
   
   GUI.Button(Rect(MenuX, Screen.height/2-50, 100, 100), "button");
}

function Smooth()
{
   MenuX = Mathf.Lerp(MenuX,0,Time.time);
}


Я пока тоже не понял, как работает Mathf.SmoothDamp(). Вечером потестю.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: ускоренное движение с замедленнием

Сообщение jeyson 08 май 2009, 09:28

нее Mathf.Lerp не подходит, тк это между минимум и максимум. нашел идеал

вот так красиво выезжает меню слева замедляясь:
Код: Выделить всё
var MenuX = -105.0;
...
MenuX = Mathf.SmoothStep(MenuX, 1, 0.25);

а вот так красиво уезжает обратно ускоряясь:
Код: Выделить всё
private var xVelocity = 0.0;
...
MenuX += Mathf.SmoothDamp(0, -105, xVelocity, 1.0)*10;

вообщем хрен поймешь но работает как надо :)

Mathf.SmoothStep - замедляет, Mathf.SmoothDamp - выдает значения увеличивая, из-за чего вычитаем из MenuX.

но это все криво, как можно сделать понятнее?
Последний раз редактировалось jeyson 08 май 2009, 10:24, всего редактировалось 1 раз.
Аватара пользователя
jeyson
UNIт
 
Сообщения: 113
Зарегистрирован: 15 апр 2009, 22:22
Откуда: Ижевск
  • ICQ

Re: ускоренное движение с замедленнием

Сообщение Neodrop 08 май 2009, 09:56

На WIKI ихнем есть класс MathF (кажется) там много полезных функций.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: ускоренное движение с замедленнием

Сообщение Const_47 08 май 2009, 10:44

& Neodrop
Вы об этом, или есть что то чего я не вижу?
http://www.unifycommunity.com/wiki/inde ... tle=Mathfx


&jeyson
Ну если бы нижний аргумент в моей интерполяции не был динамичным, тогда бы это была тупо "линейка", а так
жалкое подобие замедления :))
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: ускоренное движение с замедленнием

Сообщение jeyson 08 май 2009, 12:02

посути Mathf.SmoothStep, Mathfx.Sinerp (.Coserp), и тп - то что надо, но нет им обратного, либо я туплю :( то же самое хотелось бы но с ускорением, а не замедлением.
Аватара пользователя
jeyson
UNIт
 
Сообщения: 113
Зарегистрирован: 15 апр 2009, 22:22
Откуда: Ижевск
  • ICQ

Re: ускоренное движение с замедленнием

Сообщение Const_47 08 май 2009, 20:20

То есть? Что бы менюха выехала-убралась?

Код: Выделить всё
var MenuX = 0;
var Timer =  0;
var OnOf = true;

function FixedUpdate() {
Timer= Mathf.Clamp(Timer,0.0,100.0);
Timer = (OnOf)?++Timer:--Timer;
MenuX = Sinerp(0.0,100.0,Timer*0.01);
}

function OnGUI() {
GUI.Button(Rect(MenuX , Screen.height/2-50, 100, 100), "button");
}

static function Sinerp(start : float, end : float, value : float) : float{
    return Mathf.Lerp(start, end, Mathf.Sin(value * Mathf.PI * 0.5));
}
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: ускоренное движение с замедленнием

Сообщение jeyson 10 май 2009, 14:25

прикольно :) а синтаксис в мемориз ;)
Аватара пользователя
jeyson
UNIт
 
Сообщения: 113
Зарегистрирован: 15 апр 2009, 22:22
Откуда: Ижевск
  • ICQ

Re: ускоренное движение с замедленнием

Сообщение jeyson 13 май 2009, 00:15

ну вот что получилось. может кому пригодится. всем спасибо!
Код: Выделить всё
var MenuX =  -100.0;
var startMenuX = MenuX;
var Timer =  0.0;
var OnOf = true;
var step = 5.0;
var smooth= 8.0; // чем выше, тем плавнее/быстрее остановка/ускорение
var menuWidth = 100.0; // чем больше, тем smooth лучше поменьше

function FixedUpdate() {
if (OnOf) { Timer+=step-smooth*Timer*0.005; } else { Timer-=step-smooth*Timer*0.005; }
Timer= Mathf.Clamp(Timer, 0.0, menuWidth);
MenuX = Sinerp(startMenuX, startMenuX+menuWidth, Timer/menuWidth);
}

function OnGUI() {
GUI.BeginGroup(Rect(MenuX , Screen.height/2-50, menuWidth, 100));
   GUI.Button(Rect(0 , 0, menuWidth, 50), "button1");
   GUI.Button(Rect(0 , 50, menuWidth, 50), "button2");
GUI.EndGroup();
}

static function Sinerp(start : float, end : float, value : float) : float{
    return Mathf.Lerp(start, end, Mathf.Sin(value * Mathf.PI * 0.5));
}
Аватара пользователя
jeyson
UNIт
 
Сообщения: 113
Зарегистрирован: 15 апр 2009, 22:22
Откуда: Ижевск
  • ICQ

Re: ускоренное движение с замедленнием

Сообщение Const_47 14 май 2009, 16:24

Может стоило бы в вашей формуле учесть Time.fixedDeltaTime ?
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: ускоренное движение с замедленнием

Сообщение gnoblin 14 май 2009, 23:37

Может стоило бы в вашей формуле учесть Time.fixedDeltaTime ?


Внутри FixedUpdate()? :-?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: ускоренное движение с замедленнием

Сообщение Const_47 15 май 2009, 16:53

Поправь меня, объясни если я что морознул...
Спасибо.
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

Re: ускоренное движение с замедленнием

Сообщение gnoblin 15 май 2009, 20:24

Так, по-ходу это я запутался).
Time.fixedDeltaTime - это константа, время через которое происходит апдейт физики (0.02 секунды, по-моему).
Time.deltaTime - это время за которое просчитался кадр.

В чем отличие в их использовании и в чем разница где их юзать - в FixedUpdate() или Update()? =p~
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

След.

Вернуться в Скрипты

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

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