Страница 1 из 3

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

СообщениеДобавлено: 29 июн 2009, 10:54
Ren
Решил создать нормальное управление автомобилем. И мне пригодится, и вам думаю будет полезно. За основу взял урок по созданию гонок. Начал его переделывать, изменять... И первое, что не могу понять, это глюк с передними колесами. Мышку по вызову 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]

з.ы. не бейте, я всего лишь учусь

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

СообщениеДобавлено: 29 июн 2009, 11:31
Neodrop
Перевести все действия с колёсами в FixedUpdate()
Update() вообще нельзя использовать с физическими объектами.

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

СообщениеДобавлено: 29 июн 2009, 12:21
Ren
перекинул кусок кода, теперь Апдейта нету, все в фикседапдейт. Выглядит так:

Код: Выделить всё
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;
   
}


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

Нашел здесь на форуме скрипты по управлению авто. Сейчас возьму за основу один из них и буду подправлять.

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

СообщениеДобавлено: 29 июн 2009, 20:54
wild_r
Я словил нечто подобное у себя с физическими объектами, когда поворот одного физического объекта, когда он оказывался в плотную к другому приводил к проваливанию первого сквозь второй. В моем случае это был капсуль и кривой мешь. Возможно следует попробовать увеличить расстояние между ними. ИМХО.

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

СообщениеДобавлено: 29 июн 2009, 22:48
Ren
Итак товащи, все кто смотрит эту темку, а также забигает в эту viewtopic.php?f=5&t=550

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

1.jpg


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

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

2.jpg


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

3.jpg


Есть в максе кнопочка, не помню где... Она позволяет поворачивать точки, не меняя пропорций объекта. Без неё, в моем случае, колесо маленько сжалось по оси Z, поэтому я его еще маленько поскайлил и усе.

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

СообщениеДобавлено: 29 июн 2009, 22:51
Ren
И в конце концов...

4.jpg


на масштабность внимания не обращайте. Я импортировал через .3ds, поэтому авто пришлось уменьшить средствами Юнити, от того такие значения в полях Scale.

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

СообщениеДобавлено: 29 июн 2009, 23:00
Neodrop
Если в Максе выставите System Units в сантиметры, то всё будет импортится в Юнити 1х1 без необходимости что то масштабировать.
А колесо, мне кажется проще было повернуть через панель модификаторов - Affect Pivot Only

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

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

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

p.p.s есть еще в максе глюк. раньше не замечал, ща в 2008, 2009 точно присутствует. когда начинаешь вертеть пивоты, модель начинает искажаться. В общем куча подводных камней.

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

СообщениеДобавлено: 29 июн 2009, 23:46
Neodrop
Ну что за бред?
Ну кто станет выбирать "по своему вкусу", если у вас все настройки в жопу летят при импорте?
Если настройки выставлены корректно, то метр в Максе всегда будет равен метру в [unity 3D] Юнити. Это кому то мешает? И при этом значения LocalScale (если вы не программист,то вам конечно всё равно, но я вам, как моделлеру, руки бы выдернул за такие настройки и вставил бы в другое, новое место - ведь и так потянет) LocalScale при корректных настройках будут равны 1х1х1 как и должно быть обязательно для нормальной работы с объектами программно.
Что за напыщенные заявления после импорта пары моделек? :-?

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

СообщениеДобавлено: 30 июн 2009, 00:00
wild_r
На последней картинке с scale не все гут. Или это в максе колесо не круглое?

Так как там проваливание при повороте?

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

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

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

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

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!

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

СообщениеДобавлено: 02 июл 2009, 21:12
Lipton
Поделитесь пожалуйста хорошим скриптом по управлению автомобилем, никак не могу найти.

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

СообщениеДобавлено: 03 июл 2009, 01:17
Neodrop
"хороший" это очень субъективно.
Мне вполне понравилась реализация из Networking Example. (качать на офф.сайте)

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

СообщениеДобавлено: 03 июл 2009, 10:40
Lipton
Neodrop писал(а):"хороший" это очень субъективно.
Мне вполне понравилась реализация из Networking Example. (качать на офф.сайте)

Я смотрел этот пример, хороший в моем понимании это аркадное, более-менее правдоподобное движение автомобиля. Во всех примерах автомобиль как-бы скользит по поверхности, а на неровных участках вобще сползает. Не замечали?