Машина не хочет ехать в подъем

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

Машина не хочет ехать в подъем

Сообщение triska 02 май 2020, 08:17

Есть код:

Синтаксис:
Используется csharp
private void Drive() {
    currentSpeed = 2 * Mathf.PI * wheelFL.radius * wheelFL.rpm * 60 / 1000;
    if (currentSpeed < maxSpeed) {
        wheelFL.motorTorque = maxMotorTorque;
        wheelFR.motorTorque = maxMotorTorque;
    } else {
        wheelFL.motorTorque = 0;
        wheelFR.motorTorque = 0;
    }
}


Вызывается он в FixedUpdate методе.
Все работает, машина едет, но как только доезжает до подъема, малость заезжает и потом вниз съезжает и так, туда-сюда, не понимаю, в чем проблема и как ее решить?
triska
UNIт
 
Сообщения: 64
Зарегистрирован: 08 фев 2020, 09:42

Re: Машина не хочет ехать в подъем

Сообщение waruiyume 02 май 2020, 13:53

Я с колёсами особо не возился, но думаю, что у вас колёса пробуксовывают. Попробуйте не высчитывать скорость из вращения колёс, а взять её с ригидбоди.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Машина не хочет ехать в подъем

Сообщение triska 02 май 2020, 18:11

waruiyume писал(а):Я с колёсами особо не возился, но думаю, что у вас колёса пробуксовывают. Попробуйте не высчитывать скорость из вращения колёс, а взять её с ригидбоди.

Не не пробуксовывают (просто останавливаются и потом назад начинают крутиться, по WheelCollider видно даже), а толку от скорости ригидбоди?
Как должна выглядеть запись?
Можете показать?
maxMotorTorque = 80.
Это и есть скорость.
А вы хотите magnitude поставить?
не понимаю.
Пример можно?
triska
UNIт
 
Сообщения: 64
Зарегистрирован: 08 фев 2020, 09:42

Re: Машина не хочет ехать в подъем

Сообщение Mr Incognito 03 май 2020, 00:56

triska писал(а):Есть код:

Синтаксис:
Используется csharp
private void Drive() {
    currentSpeed = 2 * Mathf.PI * wheelFL.radius * wheelFL.rpm * 60 / 1000;
    if (currentSpeed < maxSpeed) {
        wheelFL.motorTorque = maxMotorTorque;
        wheelFR.motorTorque = maxMotorTorque;
    } else {
        wheelFL.motorTorque = 0;
        wheelFR.motorTorque = 0;
    }
}


Вызывается он в FixedUpdate методе.
Все работает, машина едет, но как только доезжает до подъема, малость заезжает и потом вниз съезжает и так, туда-сюда, не понимаю, в чем проблема и как ее решить?

Может, проблема в том, что достигается максимальная скорость и значения становятся равны 0?
Mr Incognito
UNец
 
Сообщения: 17
Зарегистрирован: 02 май 2020, 01:15

Re: Машина не хочет ехать в подъем

Сообщение triska 03 май 2020, 01:29

Mr Incognito писал(а):Может, проблема в том, что достигается максимальная скорость и значения становятся равны 0?

Может я что-то не понимаю, но wheelFL.motorTorque установлено значение 80, когда я вывожу в консоль, оно всегда 80, даже когда срабатывает обратный ход, когда на подъем заезжает, всегда 80.
Может это от чего-то другого зависит и как узнать настоящую скорость и как узнать тогда что подъем и нужно поддерживать скорость, вообщем не понимаю, в чем беда.
triska
UNIт
 
Сообщения: 64
Зарегистрирован: 08 фев 2020, 09:42

Re: Машина не хочет ехать в подъем

Сообщение mastersmit 03 май 2020, 11:37

motorTorque у колеса это не скорость. Это крутящий момент, который прилагается в данный момент на колесо.
Скорость, как уже выше было сказано, брать из Rigidbody машины - Rigidbody.velocity.magnitude * 3.6f это для км/ч при условии, что размеры машины соответствуют действительным.
Аватара пользователя
mastersmit
Старожил
 
Сообщения: 558
Зарегистрирован: 12 май 2014, 14:05
Откуда: Приморский край

Re: Машина не хочет ехать в подъем

Сообщение triska 03 май 2020, 18:12

mastersmit писал(а):motorTorque у колеса это не скорость. Это крутящий момент, который прилагается в данный момент на колесо.
Скорость, как уже выше было сказано, брать из Rigidbody машины - Rigidbody.velocity.magnitude * 3.6f это для км/ч при условии, что размеры машины соответствуют действительным.

А можешь тогда правильно продемонстрировать, куда тогда эту скорость прописывать если не в motorTorque?
Или ты имеешь ввиду, нужно сделать так:
Синтаксис:
Используется csharp
motorTorque  = Rigidbody.velocity.magnitude * 3.6f ;

Или это нужно куда-то в другое место писать?
Прошу подробно объяснить, а то с этими машинами и т.д., возникают сложности.
Было бы хорошо, если бы минимальный пример, чтобы был, буду весьма благодарен.
Мне кстати не нужно там какие-то реальные значения, мне просто нужно добиться, чтобы всегда была постоянная скорость и все, без каких либо остановок, чтобы сама тупо ездила и все.
triska
UNIт
 
Сообщения: 64
Зарегистрирован: 08 фев 2020, 09:42

Re: Машина не хочет ехать в подъем

Сообщение mastersmit 04 май 2020, 01:22

Зачем ты скорость пихаешь в крутящий момент? Если у тебя нет понятия коробки передач, а я так понял нету, судя по первому сообщению, то в motorTorque суй то, что и сувал.
А вот currentSpeed это Rigidbody.velocity.magnitude * xf, где х - это желаемый множитель текущей скорости (для визуального оповещения игроку). Если у тебя в игре размеры, такие же, как и в реальности, т.е. 1 реальный метр = 1 юниту, то умножай на 3.6. Это и будет текущая скорость твоего авто..

Ещё, какая масса ригидбоди и какая масса колёс? Фрикции на колёсах нормально настроены?

И получается, что по равнине, что с горки, что в горку скорость должна быть одинакова? Ну с горки можно дополнительно ограничивать velocity у ригидбоди, а в горку увеличивать крутящий момент (думаю определить в какую сторону наклон сможешь)..
Аватара пользователя
mastersmit
Старожил
 
Сообщения: 558
Зарегистрирован: 12 май 2014, 14:05
Откуда: Приморский край

Re: Машина не хочет ехать в подъем

Сообщение triska 04 май 2020, 04:20

mastersmit писал(а):Ещё, какая масса ригидбоди и какая масса колёс? Фрикции на колёсах нормально настроены?

3500 - кг. колеса по 20 кг.
mastersmit писал(а):И получается, что по равнине, что с горки, что в горку скорость должна быть одинакова? Ну с горки можно дополнительно ограничивать velocity у ригидбоди, а в горку увеличивать крутящий момент (думаю определить в какую сторону наклон сможешь)..

Совершенно верно. Скорость должна быть везде одинаковая. Что с горки. что в горку.
Ты можешь просто написать правильный скрипт и все, чтобы не ломать не мне не себе голову?
Наклоны не требуются тоже.
Это не симулятор гонок или там какая-то езда на машине, это просто движение по траектории.
И такие требования там не нужны вовсе.
triska
UNIт
 
Сообщения: 64
Зарегистрирован: 08 фев 2020, 09:42


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

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

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