Ускорение обьекта.

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

Ускорение обьекта.

Сообщение teoron 31 мар 2009, 10:56

Unity3D изучаю третий день, так, что просьба сильно не пинать! :-B Задумал сделать игрульку, по типу всем известной Marble Blast. Сразу же возник вопрос - как реализовать ускорение и замедление шарика?
Код: Выделить всё
var speed = 20.00;
var force = 1.00;

function FixedUpdate ()
{
   var oldAngle = Camera.main.transform.localEulerAngles.x;
   Camera.main.transform.localEulerAngles.x = 0;
   var spin = Camera.main.transform.TransformDirection(Vector3(Input.GetAxis("Vertical") * speed, 0, -Input.GetAxis("Horizontal") * speed));
   Camera.main.transform.localEulerAngles.x = oldAngle;
   rigidbody.AddTorque((spin - rigidbody.angularVelocity) * force);
}

Как сделать так, что бы при нажатии клавиши вперед, шарик постепенно разгонялся с 0 до 300(max speed), а не катился всегда с определенной скоростью в 20?
teoron
UNец
 
Сообщения: 2
Зарегистрирован: 31 мар 2009, 10:22

Re: Ускорение обьекта.

Сообщение ffinder 31 мар 2009, 14:17

смотри хелп по Lerp
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Ускорение обьекта.

Сообщение Neodrop 31 мар 2009, 18:32

speed * Time.DeltaTime это во первых. Для того, чтобы избежать рывков при разном FPS.

Во-вторых, можно засечь начальное время движения и, в течении заданного отрезка времени добавлять к переменной скорости некоторое число, пока не пройдёт, заданное на ускорение, время и не будет достигнута предельная скорость.
Другой вариант настоить Input в соответствии со своими вкусами. Класс Input выдаёт не сразу единицу при нажатии клавиши, а постепенно число наращивает, так что твой код и переписывать не придётся.

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

Re: Ускорение обьекта.

Сообщение teoron 31 мар 2009, 23:20

Че то у меня не выходит(пробовал Mathf.Lerp и Mathf.Clamp). Подскажите, что не так делаю? Если не трудно, кодом подсобите :D
Код: Выделить всё
var minimum = 1.0;
var maximum = 20.0;

function FixedUpdate ()
{
if ((Input.GetKey ("w")) || (Input.GetKey ("up")))
   {
   speed = Mathf.Lerp(minimum, maximum, Time.time);
   rigidbody.AddTorque(0,0,speed);
   }
if ((Input.GetKey ("s")) || (Input.GetKey ("down")))
   {
   speed = Mathf.Clamp(Time.time, minimum, maximum);
   rigidbody.AddTorque(0,0,-speed);
   }
}
teoron
UNец
 
Сообщения: 2
Зарегистрирован: 31 мар 2009, 10:22

Re: Ускорение обьекта.

Сообщение Neodrop 01 апр 2009, 01:13

Ты используешь не то "время". Тебе нужно Time.deltaTime.

Вот тут погляди пример в справке. Там движение без физики, но перестроить пример на физику уже не составит труда.

http://unity3d.com/support/documentatio ... tAxis.html

Вообще, справка в [unity 3D] Юнити, очень помогает. Выделяешь слово и жмёшь F1. Часто это решит все твои проблемы. :ymparty:
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт


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

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

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