Управление автомобилем

Физика в Unity

Управление автомобилем

Сообщение Ren 29 июн 2009, 10:54

Решил создать нормальное управление автомобилем. И мне пригодится, и вам думаю будет полезно. За основу взял урок по созданию гонок. Начал его переделывать, изменять... И первое, что не могу понять, это глюк с передними колесами. Мышку по вызову GetAxis юнити у меня не слушается и я прикрутил нажатие пока что только D. Происходит поворот по одной из осей. Беда вот в чем. Какую бы ось не выбрал, колеса поворачиваются странным образом и машина либо ваще проваливается, либо утыкается передним бампером в землю.

код:

Код: Выделить всё
var f_l_wheel : Transform;
var f_r_wheel : Transform;
var b_l_wheel : Transform;
var b_r_wheel : Transform;
var speed = 150;
var maxSteerAngle = 10;
private var hasBackWheelContact = false;

rigidbody.centerOfMass = Vector3 (0, 0, 0);
rigidbody.inertiaTensorRotation = Quaternion.identity;
rigidbody.inertiaTensor = Vector3 (1, 1, 2) * rigidbody.mass;

function FixedUpdate () {

   var motorForce;
   
   if (Input.GetKey ("w")) motorForce = speed * 0.1;
   
   if (hasBackWheelContact) {
   rigidbody.AddRelativeForce (0, motorForce, 0);
   }

}

function Update () {

   var rotation;

   if (Input.GetKeyDown ("d")) rotation = maxSteerAngle * 0.1;

   f_l_wheel.localEulerAngles = Vector3 (0, rotation, 0);
   f_r_wheel.localEulerAngles = Vector3 (0, rotation, 0);

   hasBackWheelContact = false;

}

function OnCollisionStay (collision : Collision)
{
   for (var p : ContactPoint in collision.contacts)
   {
      if (p.thisCollider.transform == b_l_wheel)
         hasBackWheelContact = true;
      if (p.thisCollider.transform == b_r_wheel)
         hasBackWheelContact = true;
   }
   
}


демка ftp://ftp.unity3d.ru/Upload/vehicle/vehicle.html

сорцы [ftp]ftp://ftp.unity3d.ru/Upload/vehicle[/ftp]

з.ы. не бейте, я всего лишь учусь
Ren
UNец
 
Сообщения: 12
Зарегистрирован: 18 июн 2009, 17:57

Re: Управление автомобилем

Сообщение Neodrop 29 июн 2009, 11:31

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

Re: Управление автомобилем

Сообщение Ren 29 июн 2009, 12:21

перекинул кусок кода, теперь Апдейта нету, все в фикседапдейт. Выглядит так:

Код: Выделить всё
function FixedUpdate () {

   var motorForce;
   
   if (Input.GetKey ("w")) motorForce = speed * 0.1;
   
   if (hasBackWheelContact) {
   rigidbody.AddRelativeForce (0, motorForce, 0);
   }

   var rotation;

   if (Input.GetKeyDown ("d")) rotation = maxSteerAngle * 0.1;

   f_l_wheel.localEulerAngles = Vector3 (0, rotation, 0);
   f_r_wheel.localEulerAngles = Vector3 (0, rotation, 0);

   hasBackWheelContact = false;
   
}


Глюк остался. причем точно такой же.

Нашел здесь на форуме скрипты по управлению авто. Сейчас возьму за основу один из них и буду подправлять.
Ren
UNец
 
Сообщения: 12
Зарегистрирован: 18 июн 2009, 17:57

Re: Управление автомобилем

Сообщение wild_r 29 июн 2009, 20:54

Я словил нечто подобное у себя с физическими объектами, когда поворот одного физического объекта, когда он оказывался в плотную к другому приводил к проваливанию первого сквозь второй. В моем случае это был капсуль и кривой мешь. Возможно следует попробовать увеличить расстояние между ними. ИМХО.
wild_r
UNITрон
 
Сообщения: 220
Зарегистрирован: 16 апр 2009, 20:46
Откуда: Россия, Санкт - Петербург
  • ICQ

Re: Управление автомобилем

Сообщение Ren 29 июн 2009, 22:48

Итак товащи, все кто смотрит эту темку, а также забигает в эту viewtopic.php?f=5&t=550

Как известно есть глюк, верней это скорее "продуманность" Юнити брать из файлов модели "все че не попадя". Короче, при импорте может возникать такая беда. Вроде модель в окне в порядке, однако в настройках видно, что при импорте для правильности отображения модель была повернута. Например, возьмем колесо...

1.jpg


Видно, что при импорте были заданы углы поворота, да еще и модель масштабировалась. Это очень не хорошо!!! Скрипты, на скок я заметил, работают с дефолтными значениями этих полей, т.е. rotation - 0 0 0, а scale - 1 1 1.

Заглянем в макс, выделим колесо, перейдем на режим поворота и видим откуда берется этот бред...

2.jpg


Выход есть... Выделяем наши 90, из-за которых автор данных строк убил кучу времени на изменение скриптов!!!, так... и получаем повернутое колесо, которым по умолчанию оперируют скрипты юнити. Не в домек им, что объект малясь не того... Теперь врубаем например Editable Poly, выделяем точки колеса и поворачиваем обратно.

3.jpg


Есть в максе кнопочка, не помню где... Она позволяет поворачивать точки, не меняя пропорций объекта. Без неё, в моем случае, колесо маленько сжалось по оси Z, поэтому я его еще маленько поскайлил и усе.
У вас нет доступа для просмотра вложений в этом сообщении.
Ren
UNец
 
Сообщения: 12
Зарегистрирован: 18 июн 2009, 17:57

Re: Управление автомобилем

Сообщение Ren 29 июн 2009, 22:51

И в конце концов...

4.jpg


на масштабность внимания не обращайте. Я импортировал через .3ds, поэтому авто пришлось уменьшить средствами Юнити, от того такие значения в полях Scale.
У вас нет доступа для просмотра вложений в этом сообщении.
Ren
UNец
 
Сообщения: 12
Зарегистрирован: 18 июн 2009, 17:57

Re: Управление автомобилем

Сообщение Neodrop 29 июн 2009, 23:00

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

Re: Управление автомобилем

Сообщение Ren 29 июн 2009, 23:12

читал я ваши уже сообщения и про пивоты, и че вы там еще писали... я в максе уже туеву хучу лет, и все эти средства не канают! юнити прекрасно видит что происходит с объектом, как бы не располагались оси и как бы вы перед экспортом не крутили объект. Так что обнулять надо значения все эти - вот и все. Единственный и верный выход. Уж больно привередлива юнити к этим мелочам.

p.s. сантиметры ... кхе, извините, но единицу меры выбирает каждый исходя из того, что он моделит.

p.p.s есть еще в максе глюк. раньше не замечал, ща в 2008, 2009 точно присутствует. когда начинаешь вертеть пивоты, модель начинает искажаться. В общем куча подводных камней.
Ren
UNец
 
Сообщения: 12
Зарегистрирован: 18 июн 2009, 17:57

Re: Управление автомобилем

Сообщение Neodrop 29 июн 2009, 23:46

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

Re: Управление автомобилем

Сообщение wild_r 30 июн 2009, 00:00

На последней картинке с scale не все гут. Или это в максе колесо не круглое?

Так как там проваливание при повороте?
wild_r
UNITрон
 
Сообщения: 220
Зарегистрирован: 16 апр 2009, 20:46
Откуда: Россия, Санкт - Петербург
  • ICQ

Re: Управление автомобилем

Сообщение Ren 30 июн 2009, 08:57

Я знаю и понимаю, что модель должна быть 1х1х1. Это удобней и это правильней! Тут я быстренько накидал, и естественно модель у меня импортировалась немного криво. Написал ведь - не обращайте внимания на поля Scale.
Ren
UNец
 
Сообщения: 12
Зарегистрирован: 18 июн 2009, 17:57

Re: Управление автомобилем

Сообщение Neodrop 30 июн 2009, 09:28

Именно для корректного импорта и нужны корректные настройки в Максе/Майе или иной программе моделирования.
Вот для Макса (ничего сложного, или мешающего работе) :

Unity Scale Calibration

As with most things, there are several approaches to setting the scale within Max to export cleanly to Unity.

* One approach is to configure Max to work with the default Unity settings. To do this, from the Max menu choose "Customize -> Units Setup..." In the dialog box that appears, press the "System Unit Setup" button and in the next dialog box, set the "System Unit Scale" to be "1 Unit = 1.0 Centimeters". Press "Ok" and in the first dialog box under "Display Unit Scale" select the "Metric" radio button and "Meters" from the drop down box directly underneath. Press "Ok" to close this dialog box and you should be ready to model and export cleanly to Unity!
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Управление автомобилем

Сообщение Lipton 02 июл 2009, 21:12

Поделитесь пожалуйста хорошим скриптом по управлению автомобилем, никак не могу найти.
Lipton
UNец
 
Сообщения: 14
Зарегистрирован: 02 июл 2009, 20:45

Re: Управление автомобилем

Сообщение Neodrop 03 июл 2009, 01:17

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

Re: Управление автомобилем

Сообщение Lipton 03 июл 2009, 10:40

Neodrop писал(а):"хороший" это очень субъективно.
Мне вполне понравилась реализация из Networking Example. (качать на офф.сайте)

Я смотрел этот пример, хороший в моем понимании это аркадное, более-менее правдоподобное движение автомобиля. Во всех примерах автомобиль как-бы скользит по поверхности, а на неровных участках вобще сползает. Не замечали?
Lipton
UNец
 
Сообщения: 14
Зарегистрирован: 02 июл 2009, 20:45

След.

Вернуться в PhysX

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 6