В первой части я настрадался с встроенными колёсиками и решил делать аркадную модель самому.
С Wheel collider я еще немного повозился, вот до этого этапа:
Как делают АРКАДНЫЕ гоночки? - Я не знал, мужики. И вы может тоже не знаете, но я сейчас расскажу.
Идея на какую мне сразу хватало мозгов две недели назад:
Критика этой идеи сейчас:
Путём гуглежа я набрёл на такой вот клипец.
Клипец очень классный, рекомендую, но если кому не охота смотреть - автор предлагает модель "парящей" машины, hover-car, будто у тебя на машине есть 4 "реактивных двигателя" какие в землю шмалят, как ракета, и держат твою машину в воздухе.
Каждый кадр, я из 4х точек внизу машины "стрелял" бы Raycast в направлении "строго вниз".
Raycast - это такой направленный "лучик", который если во что-то "упрётся" - возвращает тебе обьект в который упёрся и расстояние между вами.
Если дистанция до земли - равна или меньше "длины пружины нашей подвески" - применять силу, которая толкает тело ВВЕРХ.
Чем ближе мы к земле (сильней "сжата пружина") - тем сильней толкаем. На месте моих невидимых лучей силы разумеется можно нарисовать колёса и всё будет ништяк.
написал тупо, непонятно, надо было видео смотреть, я ж рекомендовал, ну что же вы
Идея не то чтоб новаторская, много кто так делает, вот например ещё более "прикладной" пример
Я решил - БУДУ ПИСАТЬ! Чтоб "заработало" ушло 2+ дня, вместо 16 переменных у меня было всего 3:
3 - не 16, можно подобрать, ага? вот 2 дня и подбирал :(
для того чтоб толкать машину вперёд, да и вверх тоже, я юзал RigidBody.AddForce(Vector3 v, ForceMode m)
, и я сам себе усложнил задачу, используя ForceMode.VelocityChange
В юнити есть 4 режима применения силы: Force
, Impulse
, Acceleration
, VelocityChange
. Разница как я её понимаю теперь:
Force
(дефолтовая) - это та самая сила в ньютонахImpulse
- мы-то знаем что импульс - момент силы. А в юнити - разница в том как "часто" момент будет приложен к телу. Импульс - мгновенный, Сила - продолжительная. Сила - это условных "ньютонов в секунду", например. А импульс - тех же ньютонов "в 1 кадр". Короче говоря, один и тот же вектор, с форс мод - Force - толкнёт тело "сильнее" чем с форс-мод импульс.
Если хочется "уравнять" силу СИЛЫ и ИМПУЛЬСА - вектор переданный в импульс надо умножить на дельту времени в мс между кадрами (Time.deltaTime)
а ещё есть
VelocityChange
- force mode Force, который игнорирует массу тела, которе толкаемAcceleration
- то же что и импульс, только тоже массу игнорит. Я везде выбрал VelocityChange
, чтоб исключить массу машины из уравнения, и думать только о длине пружины и силе её "разгиба".
Как и в случае с Wheel collider, после того как я разобрался с ОТНОСИТЕЛЬНЫМИ направлениями всех моих рейкастов и векторов сил (чтоб они действительно в землю лупили) - всё по-прежнему упиралось в значения 2х волшебных чисел. И подобрать их было непросто вообще.
Помогло поменять ForceMode
на всём на Force, умножить все мои "толкальные" силы на массу (для "газования" вперёд, прыжка и жесткости подвески) и подобрать такие значения длины пружины, и силы пружины, чтоб "компессия" пружинок была приблизительно 0.5 и ниже.
Массу я поставил 1, и эксперементальным путём не смог определить сколько ж силы нужно чтоб держать это в воздухе но не прыгать на месте как сумасшедший.
С массой 100 - либо лежу на земле и не двигаюсь - либо меня "прыгает" в небо на месте по всему уровню со старта
Поставил 1500 (будь это килограммы - было бы похоже на реальность ) и УРА: с силой 180-200 (ньютонов?) на одну пружину/реактивный двигатель, и длиной пружины 0,08(метров?) - завелось.
Думаю понятно почему без массы в полторы тонны я эти 0,08 я бы хрен подобрал.
Видео "УСПЕХА" прилагается:
Значения в %% - это насколько "РАЗОГНУТА" каждая из пружин моей невидимой подвески.
Подбор волшебных чисел затянуло изучений документации для Raycast, въезжание в векторы и операции с ними, в то как дебажить юнити итд.
Еще помогло эти "лучики" с "дна рёбер" моей спичечной коробки, перенести немножко "внутрь", по всем осям.
Опять, я немножко ушёл в перерывы на моделирование препятствий, треков, систем чтоб делать ТРЮКИ итд..
но раз заметка - о аркадных машинках, то я хотел бы рассмотреть ещё один вариант, о каком я сам тоже думал еще в игре про скейт:
Здесь BoundingBox для детекции столкновений/для твёрдого тела - шар.
Моделька - не шар, а каркас невидимый - шар! Вот и всё блин :)
Наверняка сделать чтоб "работало" будет не так просто как кажется сейчас (парящая машина тоже простой казалась изначально), но сама идея - годная!
Неутешные выводы :(
Сделать аркадную машинку - было интересненько и всё равно не очень и простенько. Ездит - лучше, но всё ещё не идеально.
Я ещё больше закопался в юнити, в векторы и весь этот движ. Я уже 2 раза заставил 2 разных машины поехать, осталось посмотреть как их возят другие люди в сурцах своих, выбрать какую-то одну систему за основу, и наконец-то сделать свою игру про водилу-трюкача, который делает ПОЛНЫЙ ПРОСКЕЙТЕР на машинке.
Часть третья, где просто читаю исходники других людей - следующая.
Если дочитали и не проблевались - обнял. Знаю что тяжело чёт написано.