Манипуляции со временем

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

Манипуляции со временем

Сообщение WebWolf 13 мар 2011, 01:37

Привет всем. Подскажите пожалуйста как хотя бы теоретически, можно сделать манипуляции со временем? Т.е для начала:
Как замедлить все объекты которые тебя окружают кроме себя самого.
К примеру кидаешь кубик врубаешь замедление, догоняешь его ловишь и отправляешь обратно.. наверно только когда человек с ним манипулирует надо ему так же присвоить стандартное время человека.
Ну и самое интересное перемотка времени, как вперед так и назад.
Ваши идеи?
Time Scale действует на все игровое время, а надо только на окружение или конкретные объекты. :-?
Как затормозить просто время можно тем же Time Scale и помножить скоро игрока.. получится почти так наверно.. но вот что делать с перемоткой вперед и назад...
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Манипуляции со временем

Сообщение Paul Siberdt 13 мар 2011, 02:26

для управления скоростью пообъектно, придется в скрипте нужного объекта пользовать не глобальное время, а завести свою переменную и уже с ней ковыряться, синхронизуя со временем, замедляя и ускоряя.

Перемотка же назад - задача сложная и я никогда про это дело не думал. :p
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Манипуляции со временем

Сообщение Ert Donuell 13 мар 2011, 02:31

Для перемотки назад и манипуляцией скоростью отключайте гравитацию и используйте скорости, импульсы и силы, умноженные на коэффициент, где
2 - вдвое ускоренное время
1 - нормальное течение времени
0.5 - вдвое замедленное время
0 - пауза
-1 - обратно текущее время

Короче, это даст изменение длин и направлений векторов.
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ

Re: Манипуляции со временем

Сообщение waruiyume 13 мар 2011, 03:01

"Как замедлить все объекты которые тебя окружают кроме себя самого."
Для физики я думаю достаточно разделить velocity и angularVelocity на "силу замедления", насчет добавляемых сил уже писали выше.
Скорости того что двигается в update обычно умножаются на deltaTime, а значит можно и (deltaTime/"сила замедления")
"что делать с перемоткой вперед и назад"
А почему нельзя хранить состояния(скорости,вращения,позиции,события...) объекта в массиве, а затем перематывать в нужное место возвращая в сохраненное состояние ?
Последний раз редактировалось waruiyume 13 мар 2011, 06:50, всего редактировалось 1 раз.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Манипуляции со временем

Сообщение WebWolf 13 мар 2011, 03:17

waruiyume писал(а):"Как замедлить все объекты которые тебя окружают кроме себя самого."
Для физики я думаю достаточно разделить velocity и angularVelocity на "силу замедления", насчет добавляемых сил уже писали выше.
Скорости того что двигается через update обычно умножаются на deltaTime, а значит можно и (deltaTime/"сила замедления")
"что делать с перемоткой вперед и назад"
А почему нельзя хранить состояния(скорости,вращения,позиции,события...) объекта в массиве, а затем перематывать в нужное место возвращая в сохраненное состояние ?

На счет массива наверно сожрет дофига ресурсов.
Может если кому интересно попробует что нить такое замутить? Давайте хотя бы выберем оптимальный вариант решения.. попробую за скриптить если никто не поможет. :-B

Кстати вспомнил.. можно на примере игры TimeShift.. там время вообще на паузу ставится :) это конечно думаю не сложно глобально отрубить физику у всего.. а что если это взрыв или тот же мазл флеш как в этой игре?
Все равно надо как то замедлять и мотать время назад...
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Манипуляции со временем

Сообщение zoon 13 мар 2011, 04:03

В Unity всторено Time Scale:
http://unity3d.com/support/documentatio ... Scale.html
Осталось решить как поступать с игроком - просто отматывать назад не выйдет (в момент t1 в игрока попала пуля - отмотали назад - где пуля?). Поэтому, наверное самое разумное замедлять все не связанное с игроком через Time Scale, а все скорости игрока пропорционально увеличивать.
Джаггер
Evo
Аватара пользователя
zoon
UNIт
 
Сообщения: 58
Зарегистрирован: 24 май 2010, 08:27

Re: Манипуляции со временем

Сообщение WebWolf 13 мар 2011, 04:09

zoon писал(а):В Unity всторено Time Scale:
http://unity3d.com/support/documentatio ... Scale.html
Осталось решить как поступать с игроком - просто отматывать назад не выйдет (в момент t1 в игрока попала пуля - отмотали назад - где пуля?). Поэтому, наверное самое разумное замедлять все не связанное с игроком через Time Scale, а все скорости игрока пропорционально увеличивать.

Я так сделал но назад время не отматаешь... замедление на t включать...
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://wolfgames3d.com/Time/WebPlayer.unity3d&w=800&h=600&t=true&preview=1' height='"+(600+30)+"' width='800' frameborder='0' scrolling='no'></iframe>"); </script>
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Манипуляции со временем

Сообщение waruiyume 13 мар 2011, 06:28

WebWolf писал(а):"...На счет массива наверно сожрет дофига ресурсов.

Жрет много если час записывать :D

Пробел-перемотка,tab-сброс
HTML код для вашего блога :
Код: Выделить всё
<script language='javascript' type="text/javascript"> document.write("<iframe marginheight='0' src='http://unity3d.ru/distribution/player.php?url=http://dl.dropbox.com/u/23279033/time_manipulation.unity3d&w=640&h=480&t=true&preview=1' height='"+(480+30)+"' width='640' frameborder='0' scrolling='no'></iframe>"); </script>


Синтаксис:
Используется javascript
private var rig:Rigidbody;
rig=rigidbody;
private var tr:Transform;
tr=transform;

private var pos:Vector3[];
pos=new Vector3[1000];

private var rot:Quaternion[];
rot=new Quaternion[1000];

private var vel:Vector3[];
vel=new Vector3[1000];

private var ang_vel:Vector3[];
ang_vel=new Vector3[1000];

var T:int=0;
var T1:int=0;
var T1_timer:int=0;


private var trig:float;

function Rec()
{
        pos[T]=tr.position;
        rot[T]=tr.rotation;
        vel[T]=rig.velocity;
        ang_vel[T]=rig.angularVelocity;

        if(T<999)
        {
                T++;
        }
        else
        {
                T=0;
        }
}

function Rew()
{
        if (T1_timer>1)
        {
                if(T1>0)
                {
                T1--;
                T1_timer--;
                T=T1;
                tr.position=pos[T1];
                tr.rotation=rot[T1];
                rig.velocity=vel[T1];
                rig.angularVelocity=ang_vel[T1];
                }
                else
                {
                T1=999;
                }
        }
}


function Update()
{
        trig=Input.GetAxis ("Jump");
}

function FixedUpdate()
{
        if(trig==0)
        {
                Rec();
                T1=T;
                if(T1_timer<999)
                {
                T1_timer++;
                }
        }
        else
        {
                Rew();
        }
}
 

WebWolf писал(а):"
...там время вообще на паузу ставится :) это конечно думаю не сложно глобально отрубить физику у всего"

Зачем вырубать физику флаг isKinematic еще никто не отменял.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Манипуляции со временем

Сообщение WhiteDevil 13 мар 2011, 11:42

waruiyume
Классное демо :) Маленькое, но вдохновляет
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Манипуляции со временем

Сообщение WebWolf 13 мар 2011, 12:19

waruiyume писал(а):
WebWolf писал(а):"...На счет массива наверно сожрет дофига ресурсов.

Жрет много если час записывать :D

Пробел-перемотка,tab-сброс


Синтаксис:
Используется javascript
private var rig:Rigidbody;
rig=rigidbody;
private var tr:Transform;
tr=transform;

private var pos:Vector3[];
pos=new Vector3[1000];

private var rot:Quaternion[];
rot=new Quaternion[1000];

private var vel:Vector3[];
vel=new Vector3[1000];

private var ang_vel:Vector3[];
ang_vel=new Vector3[1000];

var T:int=0;
var T1:int=0;
var T1_timer:int=0;


private var trig:float;

function Rec()
{
        pos[T]=tr.position;
        rot[T]=tr.rotation;
        vel[T]=rig.velocity;
        ang_vel[T]=rig.angularVelocity;

        if(T<999)
        {
                T++;
        }
        else
        {
                T=0;
        }
}

function Rew()
{
        if (T1_timer>1)
        {
                if(T1>0)
                {
                T1--;
                T1_timer--;
                T=T1;
                tr.position=pos[T1];
                tr.rotation=rot[T1];
                rig.velocity=vel[T1];
                rig.angularVelocity=ang_vel[T1];
                }
                else
                {
                T1=999;
                }
        }
}


function Update()
{
        trig=Input.GetAxis ("Jump");
}

function FixedUpdate()
{
        if(trig==0)
        {
                Rec();
                T1=T;
                if(T1_timer<999)
                {
                T1_timer++;
                }
        }
        else
        {
                Rew();
        }
}
 

WebWolf писал(а):"
...там время вообще на паузу ставится :) это конечно думаю не сложно глобально отрубить физику у всего"

Зачем вырубать физику флаг isKinematic еще никто не отменял.

Все конечно здорорво.. но вот как контролировать не просто какой то массив кубиков а анимации, партиклы и все окружение а так придется почти всю локацию в массив загонять.. чет слишком жестко.. думаешь в TimeShift было так?
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Манипуляции со временем

Сообщение WebWolf 13 мар 2011, 23:57

Я обновил демку теперь можно останавливать время на R.
Я нахожу все объекты с ригид боди и отрубаю их
Синтаксис:
Используется javascript
point.rigidbody.isKinematic = !point.rigidbody.isKinematic;

что бы после включения они не оставались стоять на месте пробуждаем их
Синтаксис:
Используется javascript
point.rigidbody.WakeUp();

Но вот не задача.. Сила с которой они летели теряется...
Я так понимаю надо сохранить текущую силу для всех объектов и после включения времени снова её прибавить..
Но вот как это сделать? чет не пойму какая функция хранит текущее значение?
WTF? _WolfGames3D.com / Все в Tanks Heroes Вконтакте!
Аватара пользователя
WebWolf
Старожил
 
Сообщения: 532
Зарегистрирован: 19 дек 2009, 15:49
Откуда: Russian Federation
  • Сайт
  • ICQ

Re: Манипуляции со временем

Сообщение Zaicheg 14 мар 2011, 11:23

WebWolf писал(а):Но вот как это сделать? чет не пойму какая функция хранит текущее значение?

Объекты летят не с силой, а со скоростью. Сохраняйте и присваивайте Rigidbody.velocity.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец


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

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

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