Многие писали что это не возможно, но оказались не правы. K.A.I.N. написал от нашего имени для всех, кто захочет то же поучаствовать в этом интересном деле.
Итак, поразмыслив я решил немного оформить тему и написать больше информации о движении объектов с коллизией.
========================================================================================
Итак, вопрос в том как двигать объект с коллизией? Ответ простой, нужен скрипт и коллизия с возможностью взаимодействия с игровой физикой (возможностью движения).
========================================================================================
Итак вот тестовый скрипт:
ЦитатаFloat YAchsePosition ;делаем для установки траэктории
Float YAchse ;делаем для установки скорости по траэктории
Begin GameMode
Set YAchsePosition to GetPos Y ;устанавливаем траэкторию по Y
Set YAchse to YachsePosition -2 ;устанавливаем движение по трактории минус Y, со скорость две координаты в секунду
SetPos Y YAchse ;устанавливаем движение Y с установленой скоростью (-2)
End
Скрипт можно вешать на активатор, триггер, и т.д.
========================================================================================
И теперь главное о коллизии. Какая же коллизия движется а какая нет?
=======================================================================================
Вот такие настройки обычно делаю я, при движущемся объекте:
Ниже написано как создать коллизию, но если она есть у объекта, её не нужно заново делать и старую удалять. Просто поменяйте настройки.
=======================================================================================
У вас может возникнуть вопрос "А как создать коллизию?", у нас есть ответ "Как создать коллизию в nifskop.
=======================================================================================
Преобразование объекта в коллизию с помощью nifskop.
Так как мне написали, что моё видео пособие не как не туториал, я решил немного исправить это. Итак:
Collision – это “столкновение” способность объектов ударятся друг о друга.
Расшифровки слов, которые я буду использовать в этом гайде:
ПКМ – правая клавиша мыши
ЛКМ – левая клавиша мыши
Корпус – это-то из чего состоит коллизия.
Преобразование в коллизию:
Что бы из вашего блока NiTriStrips сделать коллизию, нужно для начала открыть две модели, свою и на примере возьмём telephone01, теперь копируем NiTriStrips своей модели, ПКМ на NiTriStrips -> Block -> Copy Branch:
Откроем вторую модель телефона и удалим модель:
Нажимаем на блок модели телефона NiTriStrips и нажимаем ПКМ -> Block -> Remove Branch (Ctrl+Del).
Теперь вставим в модель телефона свою модель:
ПКМ на BSFadeNode -> Block -> Paste Branch.
Теперь копируем NiTriStripsData своей модели, ПКМ на NiTriStripsData -> Block -> Copy:
Далее удалим старую коллизию:
ПКМ на bhkConvexVerticesShape –> Block -> Remove. После этого вы заметите, что появились белые линии по краям модели. Обратите внимание на белый контур, вокруг вашей модели это означает, что мы успешно удалили старую коллизию.
Чтобы создать новый блок данных коллизии выполните следующие действия:
ПКМ на BSFadeNode -> Block -> Insert:
Далее появится такое окно:
Выберите Havok -> bhkNiTriStripsShape чтобы создать новый блок коллизии.
Далее появится bhkNiTriStripsShape который мы будем использовать для столкновения мешей. Далее нужно сделать выбор материала коллизии, это важно, так как коллизия модели реагирует на повреждения от оружия и другие события, которые изменяют поверхность (например, пулевые отверстия выглядят по-разному в камне металле или стекле):
Далее в Num Strips Data поставим 1, и ниже в Strips Data жмём ПКМ -> Array -> Update:
После этого нажимаем на “+”, во вкладке Strips Data жмём в выпадающем блоке ПКМ -> Block -> Paste:
Теперь нам нужно вставить в данные, которые мы скопировали в нашей модели:
ПКМ на bhkNiTriStripsShape –> Havok -> Pack Strips. Это позволит реорганизовать новый объект Havok, и переименовать его.
И последние шаги, ПКМ на bhkPackedNiTriStripsShape -> Block -> Copy Branch (Ctrl+C):
Открываем bhkCollisionObject и ЛКМ на bhkRigidBody. Теперь ПКМ на Shape (В Block Details смотрите скрин) -> Block -> Paste Branch (Ctrl+V).
Далее удаляем не нужный блок bhkPackedNiTriStripsShare:
ПКМ на bhkPackedNiTriStripsShare -> Block -> Remove Branch (Ctrl+Del).
Теперь сохраним модель File -> Save As… Пишем имя, и указываем путь сохранения файла.
Все коллизия для модели готова теперь можете смотреть модель в игре.
Дополнение:
KAIN и Wulf сказали мне:
ЦитатаДля тех у кого нет 3D редактора, как выход из положения - такой способ создания коллизии вполне подойдёт. Но чайник это чайник - на нём полигонов немного, а если модель сложная, то прирост объёма к весу модели при таком способе - от коллизии 25-30 процентов, плюс, как правильно сказал Wulf "Не надо без нужды издеваться над Gamebryo иму итак плохо! Он может и упасть"
Для этого, можно делать “облегчённую” коллизию объекту. Жмём на блоке модели NiTriStrips:
ПКМ на NiTriStrips -> Havok -> Create Convex Shape и в выпадающем окне (Перевод: введите максимальные округления, использованные по величине, значения будут даваться менее точные, но более лучшей):
Далее появится выпадающее окно, в котором написано “создал корпус с * вершин, * нормалей”:
Теперь у нашей модели есть коллизия:
Надеюсь, суть передать смог. Спасибо Miaximus с форума Bethesda, за его способ преобразования модели в коллизию. Я лишь перевёл и дополнил то, что посчитал нужным.
Дополнение (о движении объекта с коллизией):
Если вы делали коллизию по этому способу (гайду), и собираетесь двигать объект с коллизией в роли лифта вместе с объектами или гг, тогда вам нужно поставить такие настройки коллизии:
С такими настройками, коллизия двигает даже гг (тестил такие настройки коллизии в роли лифта), все работает нормально. Но увы гг может провалиться через коллизию.
=======================================================================================
И расскажем о типах коллизий:
=======================================================================================
При типе коллизии OL_STATIC (красная)коллизия остаётся на месте, персонаж не взаимодействует с объектом, проходя или проваливаясь в него.
При типе коллизии OL_PROPS (синяя) коллизия движется с объектом, но персонаж медленно проваливается сквозь неё, если не будет двигаться, или подпрыгивать.
При типе коллизии OL_CLUTTER (синяя) коллизия движется вместе с объектом, персонаж движется вместе с коллизией, стоя на месте, или двигаясь в пределах объекта (при движении по Z), но тоже проваливается.
Или передвигаясь по объекту (при движении по Y,X)- стоять нельзя, объект уезжает из под ног.
При типе коллизии OL_TRANSPARENT (белая) коллизия движется вместе с объектом, персонаж движется вместе с коллизией вверх, но должен двигаться при движении по горизонтали. При этом если прыгать на плите, она начинает поворачиваться меняя своё положение, в зависимости от того в каком месте персонаж воздействует на плиту. (так скажем небольшой отклик).
OL_TREES (красная) – тут интересно! Персонаж толкает объект вместе с коллизией– сдвигая с места, не проваливаясь в него. (так скажем большой отклик).
Это основные типы взаимодействия. А это картинки!
=======================================================================================
Как использовать!
=======================================================================================
Хоть как.
Строите новые уровни с движущими объектами, по которым игрок должен передвигать к цели.
Стройте лифты и подъёмники, «летающие» станции и дирижабли, спускаемые капсулы и тп.
(Пример – поднимающаяся вверх кабина с иллюминаторами, в которые игрок видит удаляющуюся землю, свободно перемещаясь внутри.)
Не говоря уж про движение вверх или вниз, когда всё работает полностью. Игрок может стоять, двигаться, стрелять и тп.
Неписи то же могут стоять и стрелять, могут передвигаться в пределах объекта и падать вниз.
Понятно, что пакеты AI скорее всего будут работать не все. Sand Box скорее всего точно не будет – сетки navmesh нет.
В общем пробуйте - вот esp http://narod.ru/disk...lision.zip.html
В нём две плиты и скрипт движения (движение безконечное) по X в одном случае, и по Z в другом.
Так же мы сделали тест плагин с рабочим лифтом. Лифт возле Гоморры, кому интересно вот ссылка. Переместиться к Гоморре можно набрав в консоли coc TheStripWorldNew.
Ранее спрашивали о движении по диагонали, да возможно. Нужно двигать объект по двум координатам, например Z и Y. Вот скрипт:
ЦитатаShort State
Float YPos
Float YAchse
Float ZPos
Float ZAchse
Begin onactivate
if State == 0
; disableplayercontrols 1 1 0 1 0 1 ; если требуется
Set State to 1
endif
End
Begin GameMode
if (State == 1)
Set ZPos to objectRef.GetPos Z
Set ZAchse to ZPos +2
objectRef.SetPos Z ZAchse
endif
if (State == 1)
Set YPos to objectRef.GetPos Y
Set YAchse to YPos +2
objectRef.SetPos Y YAchse
endif
if (State == 1) && (Marker01Ref.getdistance, objectRef Set State to 2
endif
End
Объяснение к скрипту:
Если гг активировал объект, objectRef начинает движение по диагонали, если нашему объекту "ObjectRef" осталось до маркера "Marker01Ref" меньше или равно 10 единиц дистанции, тогда движение "ObjectRef" прекращается.
Надеюсь мы вам помогли делать ваши моды ещё лучше, эффектней и оригинальнее.
С вами были KAIN48 и GRAF.
Удачи, и пока!