Двери и все что с ними связано.

Рано или поздно каждый человек который делает какой-либо транспорт сталкивается с вопросом как же ему сделать двери? Сегодня я расскажу как можно сделать простейшие двери, которые будут открываться\закрываться при посадке\высадке персонажа. Итак приступим:

  1. Первое что нужно сделать — это создать сами двери. Предположим что ваша модель уже имеет двери отдельной моделью (как у меня):

Чтобы игра в дальнейшем понимала что именно этот набор полигонов наша дверь — выделяем её и создаем селекшен с названием двери (у меня это DoorL_1DoorL_2DoorR_1DoorL_2, так как у меня 4 двери).

2. Идем в ЛОД Memory. Тут вам необходимо указать оси, вокруг которых будет вращаться ваша дверь при открывании (если у вас дверь-слайдер то тогда указывается ось перемещения). Создаем 2 точки (клавиша Insert) друг над другом, выделяем их и делаем селекшен с названием вашей оси ( у меня это DoorL_1_axisDoorL_2_axisDoorR_1_axisDoorL_2_axis), таким образом делаем оси для всех ваших дверей:

Примечание: у меня оси задних и передних дверей находятся в одном месте, так как по задумке — передние двери должны открываться назад, а задние — вперед.

3. С моделью все. Открываем model.cfg. Идем в скелет вашего авто ( у меня это MM_mercedes_g4_w31, если вы не знаете где у вас скелет — то в машинах он как правило наследуется от класса CAR: ).  В классе скелета находим строчку skeletonBones[] =… и в скобках, которые принадлежат этой строке дописываем ваши кости:

Обратите внимание, что в конце последней строчки ЗАПЯТАЯ НЕ СТАВИТЬСЯ.

 

Если на ваших дверях присутствуют стёкла, то чтобы они корректно работали нужно будет прописать кости немножко иначе, например:

 

Важно!!! Если делаете двери со стеклом, то в O2 (OB) селекшен двери НЕ должен включать в себя НИ ЕДИНОГО полигона вашего стекла. Т.Е ваша дверь и стекло на ней сввязываются только привязкой в скелете и никак иначе!!!

Так же чтобы стёкла бились как положено в model.cfg ищем класс Car и в списке костей удаляем строки привязки стекла к damagehide. Пример таких строк:

и т.д

 

4.  Все в том же model.cfg идем ниже и ищем  class Animations: Animations. В конце этого класса вставляем следующее:

 

То же самое проделываем для всех дверей.

Теперь можно пойди в бульдозер и проверить работоспособность ваших анимаций. (если кто не знал — переключение анимаций в бульдозере клавиша Enter):

5. Если все работает как надо — идем в config.cpp. Ищем в основном классе вашего автомобиля строчку  class AnimationSources : AnimationSources {}; если таковой нет — создаем. В данном классе вставляем:

 

То же самое проделываем для всех дверей.

6. Теперь вам нужно заставить двери открываться и закрываться именно при посадке, и высадке пассажиров. Для этого в любом месте основного класса вашей машины добавляем строчки:

 

*В кавычках указываеться название класса, который мы добавляли в пункте 5.

6. Вы так-же можете привязать конкретные пассажирские места к индивидуальным точкам посадки. Для этого:

a) Создаем в ЛОДе Memory дополнительные точки посадки пассажиров (pos cargo 1, pos cargo 2 и т.д) и точки направления пассажиров при посадке (pos cargo 1 dir, pos cargo 2 dir и т.д).

b) В Config.cpp в основном классе вашего авто добавляем строчки (в кавычках указывается название точки):

 

 

Ну вроде все. Идем в игру и проверяем. В игре мы должны увидеть:

  • при посадке на водительское или пассажирское место — сперва открывается дверь, затем персонаж садиться в технику, дверь закрывается.
  • если вы делали индивидуальные точки, то при выборе действия посадки условно у задней левой двери, персонаж сядет на заднее левое сиденье ( во всяком случае у меня так, это зависит от того какие точки и к каким прокси вы привязали в пункте 6)

P.S Если найдете где-либо в статье ошибку или не точность — отписывайтесь в комментариях — буду исправлять))