Иммитация движения танка

Общие вопросы о Unity3D

Иммитация движения танка

Сообщение WhiteDevil 14 мар 2011, 21:36

Всем привет. Мне нужна помощь в решении векторной задачи. Хочу сыммитировать правильное перемещение танка. Тема вопроса - радиус вращения танка относительно мира, в зависимости от скоростей каждой из гусениц. Игрок управляет двумя рычагами, каждый из них - управление скоростью танка: от -1 до +1 (это число впоследствии умножается на максимальную скорость танка). На данный момент свел проблему в задачу, вот рисунок:

Изображение

На рисунке предполагается, что левая гусеница пущена на максимальную скорость, а левая - на половину. То есть какбэ, если left = a (где а = 1), то right = 0.5а. Есть ширина танка - какая-то l (метра 2 он наверное, абрамс м1 :) ) Если провести прямую через эти 2 вектора до момента пересечения с правым вектором танка, то, как я понимаю, будет получена точка вращения для функции transform.RotateAround. Вот нужна помощь в решении вопроса :)

Если есть идеи попроще этой, буду еще благодарнее :)

Песе: очень кстати интересно как делают танки в батлфилдах, и других класных игрулях с танками :) Там прямо-таки и видно, как при начале движения танк красиво толкает форс и многое другое...
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Иммитация движения танка

Сообщение WhiteDevil 14 мар 2011, 23:36

Мой друг и коллэга, далекий от [unity 3D] , предложил следующее решение:
При повороте направо:
радиус от точки до правой гусеницы = (left_vector/right_vector * tank_width) / (1 - left_vector/right_vector)

Если налево, то коэфициент векторов обратный.

На схемках все выходит во всех случаях кроме частных, так что большое спасибо ему :) Но решение такое невекторное, может кто-то еще предложит что-то
Аватара пользователя
WhiteDevil
UNIверсал
 
Сообщения: 455
Зарегистрирован: 19 дек 2010, 15:55

Re: Иммитация движения танка

Сообщение Ert Donuell 15 мар 2011, 08:27

Был вариант:
Синтаксис:
Используется csharp
float motor = 0.0f;
float steer = 0.0f;
if (queryUserInput && grounded)
{
        motor = Input.GetAxis("Vertical");
        steer = Input.GetAxis("Horizontal") * motor * 0.008f;
}

//get inputs
float leftTrack = motor + steer;
float rightTrack = motor - steer;

//apply engine forces
rigidbody.AddForceAtPosition(transform.forward * rightTrack * power, transform.position + transform.up * wheelCollidersPos.y + transform.right * wheelCollidersPos.x, ForceMode.Impulse);
rigidbody.AddForceAtPosition(transform.forward * leftTrack * power, transform.position + transform.up * wheelCollidersPos.y - transform.right * wheelCollidersPos.x, ForceMode.Impulse);
Добавить dmitrii.baranov.yumasoft в Skype
Аватара пользователя
Ert Donuell
Старожил
 
Сообщения: 781
Зарегистрирован: 05 июл 2010, 09:50
Откуда: Санкт-Петербург
  • ICQ


Вернуться в Общие вопросы

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

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