Страница 5 из 7

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 21 авг 2012, 17:57
Dante449
R рестарт

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 21 авг 2012, 21:03
seaman
В "Почемучку" с такими вопросами.

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 23 авг 2012, 06:05
mlkv1n
Хороший урок. Спасибо.(3A4OT)
Не могли бы вы объяснить вот эту часть кода:
Синтаксис:
Используется csharp
w.wheelTransform.localRotation = Quaternion.Euler(w.rotation, w.col.steerAngle, 90.0f)
 

А именно: почему для вращения колеса вы используете локальную ось X? Ведь по логике, после поворота колеса по оси Y вращение по локальной X должно давать неправильный результат т.к. объект повёрнут (по Y) и локальные оси расположены не параллельно его собственным. Получается колесо должно вращаться как-бы "восьмёркой" поскольку руль (Y) мы повернули, а ось по которой колесо вращается (X) смотрит строго в бок от кузова. Так почему этот код работает корректно? Что я не понял?

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 23 авг 2012, 13:47
IDoNotExist
Хм..., смотри ка и правда, а я как то внимания не обращал :-? . Кватернионы такие кватернионы. Точно не знаю почему так, но работает. Но в дальнейшем я подобным методом не советовал бы пользоваться я сам им не пользуюсь, а делаю по нормальному, один ГО для поворота вокруг локальной оси Y, и дочерний к нему - для вращения колеса вокруг локальной оси Х.

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 23 авг 2012, 18:49
mlkv1n
Учитывая то, как этот метод работает, при всём желании бы не смог. А с отдельными объектами под каждую ось - это интересно. Не могли бы поподробней рассказать как реализовываете?

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 24 авг 2012, 05:13
IDoNotExist
Один ГО ставите в том месте где должен быть центр колеса, к ниму прикрепляете дочернее ГО - саму модель колеса, ставите ей локальные координаты 0,0,0. Дальше передаете модель колеса в скрипт. Саму модель вращаете её вокруг оси Х. Её парента вращаете вокруг оси Y.

Синтаксис:
Используется csharp
w.wheelTransform.localRotation = Quaternion.Euler(w.rotation, 0f, 90.0f);
w.wheelTransform.parent.localRotation = Quaternion.Euler(0f, w.col.steerAngle, 0.0f);
 

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 24 авг 2012, 17:21
mlkv1n
Знатный костыль ;) Спасибо.

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 15 окт 2012, 00:56
Syberex
Пытаюсь ограничить максимальную скорость, по условию когда скорость ригидбоди становится больше максимальной, на коллайдеры подаю тормозной момент равный крутящему моменту. В итоге макс. скорость ограничена, но не по заданному значению, она получается более высокой ... например при макс. скорости 8, в итоге получаем 12 ... Вообщем такое решение не очень удовлетворяет, а другого пока не сообразил. Может будут предложения какие? :-?

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 15 окт 2012, 04:31
IDoNotExist
Вместо того чтобы подавать тормозной момент, подавайте нулевой крутящий момент.

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 16 окт 2012, 07:29
Syberex
Попробовал вчера, результат лучше, хоть и не идеальный :) видимо надо комбинировать ...

IDoNotExist, а вот еще такой вопросик - почему в уроке для поворота танка во время движения, внешняя гусеница ускоряется, а не тормозит внутренняя? Вообще как правильно?

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 16 окт 2012, 09:27
IDoNotExist
Очень сильно зависит от того поворачивает он стоя или на ходу. Вообще я пробовал по всякому, тормозит внутренняя, сильно снижается скорость танка на ходу. Давал на внешнюю увеличенный положительный крутящий момент, а на внутреннюю - отрицательный, на ходу поворачивает крайне медленно, тем не менее при повороте на месте поворачивает прекрасно. В итоге сделал вообще добавлением rigidbody.AddTorque(), поворот получился намного более управляемым, но и баги вылезли естественно, например нужно знать какие колеса стоят на земле и контроллировать силу поворота в зависимости от этого. Есть у меня еще пара идей, но на практике не пробовал, например добавлять силу с помощью rigidbody.AddForceAtPosition(), точки приложения силы - позиции WheelCollider'ов.

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 17 окт 2012, 20:57
Syberex
IDoNotExist писал(а):Очень сильно зависит от того поворачивает он стоя или на ходу. Вообще я пробовал по всякому, тормозит внутренняя, сильно снижается скорость танка на ходу. Давал на внешнюю увеличенный положительный крутящий момент, а на внутреннюю - отрицательный, на ходу поворачивает крайне медленно, тем не менее при повороте на месте поворачивает прекрасно. В итоге сделал вообще добавлением rigidbody.AddTorque(), поворот получился намного более управляемым, но и баги вылезли естественно, например нужно знать какие колеса стоят на земле и контроллировать силу поворота в зависимости от этого. Есть у меня еще пара идей, но на практике не пробовал, например добавлять силу с помощью rigidbody.AddForceAtPosition(), точки приложения силы - позиции WheelCollider'ов.

Спасибо за разъяснения! :)
У меня пока тоже получается "кусок мыла на льду", 3 недели или больше впустую ...
Может вообще из этих колес делать гусеницы плохая идея?

Или может чего не так с трением?
--------
Нашел интересную статью ОСНОВЫ ДВИЖЕНИЯ ТАНКА

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 03 янв 2013, 16:07
BANNERTM
странно, он у меня когда разворачивается , он не стоит на месте а его несет куда то в сторону, как на льду - в чем проблема. Да и повороты в движении какое-то странные

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 07 янв 2013, 15:23
IDoNotExist
Чтобы танк стоял на месте во время разворота, нужно установить центр масс точно в центре относительно всех его колес.

Re: Unity3d Tank Tutorial

СообщениеДобавлено: 18 янв 2013, 21:04
stalogd
Скиньте пожалуйста исходник из 2го урока в лс