Modding-club

Modding-club

Приветствую Вас Гость • Регистрация • Вход
Вторник, 7.5.2024
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Graf  
Форум » Geck » Туториалы и статьи » Движение объекта с коллизией (Подробная информация)
Движение объекта с коллизией
GrafДата: Среда, 10.10.2012, 23:26 | Сообщение # 1
Rizys Mod
Группа: Администраторы
Сообщений: 717
Награды: 5
Репутация: 18
Статус: Offline
Многие писали что это не возможно, но оказались не правы. K.A.I.N. написал от нашего имени для всех, кто захочет то же поучаствовать в этом интересном деле.

Итак, поразмыслив я решил немного оформить тему и написать больше информации о движении объектов с коллизией.
========================================================================================
Итак, вопрос в том как двигать объект с коллизией? Ответ простой, нужен скрипт и коллизия с возможностью взаимодействия с игровой физикой (возможностью движения).
========================================================================================

Итак вот тестовый скрипт:

Quote
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. Теперь ПКМ на ShapeBlock Details смотрите скрин) -> Block -> Paste Branch (Ctrl+V).


Далее удаляем не нужный блок bhkPackedNiTriStripsShare:

ПКМ на bhkPackedNiTriStripsShare -> Block -> Remove Branch (Ctrl+Del).

Теперь сохраним модель File -> Save As… Пишем имя, и указываем путь сохранения файла.
Все коллизия для модели готова теперь можете смотреть модель в игре.

Дополнение:
KAIN и Wulf сказали мне:
Quote
Для тех у кого нет 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....ip.html
В нём две плиты и скрипт движения (движение безконечное) по X в одном случае, и по Z в другом.

Так же мы сделали тест плагин с рабочим лифтом. Лифт возле Гоморры, кому интересно вот ссылка. Переместиться к Гоморре можно набрав в консоли coc TheStripWorldNew.

Ранее спрашивали о движении по диагонали, да возможно. Нужно двигать объект по двум координатам, например Z и Y. Вот скрипт:

Quote
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 <= 10)
Set State to 2
endif
End


Объяснение к скрипту:
Если гг активировал объект, objectRef начинает движение по диагонали, если нашему объекту "ObjectRef" осталось до маркера "Marker01Ref" меньше или равно 10 единиц дистанции, тогда движение "ObjectRef" прекращается.

Надеюсь мы вам помогли делать ваши моды ещё лучше, эффектней и оригинальнее.
С вами были KAIN48 и GRAF.
Удачи, и пока!


«К чёрту обстоятельства. Я создаю возможности».
«Правда не имеет пути. Правда жива, следовательно, изменчива»
«Цель не обязательно должна достигаться. Порой это просто направление двигаться дальше»
 
GrafДата: Четверг, 11.10.2012, 00:07 | Сообщение # 2
Rizys Mod
Группа: Администраторы
Сообщений: 717
Награды: 5
Репутация: 18
Статус: Offline
История

Оставил что бы помнить, с чего начинали smile


«К чёрту обстоятельства. Я создаю возможности».
«Правда не имеет пути. Правда жива, следовательно, изменчива»
«Цель не обязательно должна достигаться. Порой это просто направление двигаться дальше»
 
Форум » Geck » Туториалы и статьи » Движение объекта с коллизией (Подробная информация)
  • Страница 1 из 1
  • 1
Поиск: