forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Player Movement (http://forum.boolean.name/showthread.php?t=20051)

Colossus 24.10.2015 09:49

Player Movement
 
Доброго времени суток, уважаемые Булчане!

Начал один небольшой проект. Он немного похож вот на это. ( по геймплею ) http://www.youtube.com/watch?v=5P24yC9dGuY только полностью в 3D с небольшой перспективой. Так вот, вопрос состоит в том, как правильно сделать преодоление препятствий, и броски, а так же контратакующие движения. Если учитывать, что каждый персонаж привязан к физической капсуле.

Gector 24.10.2015 12:11

Ответ: Player Movement
 
Цитата:

Сообщение от Colossus (Сообщение 300778)
Доброго времени суток, уважаемые Булчане!

Начал один небольшой проект. Он немного похож вот на это. ( по геймплею ) http://www.youtube.com/watch?v=5P24yC9dGuY только полностью в 3D с небольшой перспективой. Так вот, вопрос состоит в том, как правильно сделать преодоление препятствий, и броски, а так же контратакующие движения. Если учитывать, что каждый персонаж привязан к физической капсуле.

Только проигрывать анимацию в нужном месте. А дальше тупо получать координаты на последнем кадре и ставить модельку на них. Капсулы на это время отключать нафиг.

Colossus 24.10.2015 14:04

Ответ: Player Movement
 
Я стесняюсь спросить, а как получить последний кадр анимации? ))
Командой AnimTime() или AnimLeight?)

Arton 24.10.2015 16:32

Ответ: Player Movement
 
Цитата:

Сообщение от Colossus (Сообщение 300783)
Я стесняюсь спросить, а как получить последний кадр анимации? ))
Командой AnimTime() или AnimLeight?)

AnimTime() — текущий кадр анимации.
AnimLength() — общее количество кадров, соответственно покажет конечный кадр.

По теме, можно попробовать односторонние коллизии.
Зависит как будет анимация, если она из этой капсулы выходит то коллизии не будет. То есть коллизии только для того, что бы в друг друга и в стены не входили персонажи. Наблюдение за видео-играми показало что такое сплошь и рядом.

Colossus 24.10.2015 21:19

Ответ: Player Movement
 
А что если физическое тело на время анимации превращать в кинетическое?
Кстати, Arton, да и другие булчане... Подскажите, какими способами можно создать взаимодействие персонажей(скажем , броски, или что то типа того) ?

Arton 24.10.2015 23:38

Ответ: Player Movement
 
Цитата:

Сообщение от Colossus (Сообщение 300799)
А что если физическое тело на время анимации превращать в кинетическое?

Не понял? Если чистый блиц, то коллизия не будет повторять контуры анимированного персонажа (подразумевается костная анимация).
Я бы рекомендовал движок BlitzBullet.

Цитата:

Сообщение от Colossus (Сообщение 300799)
Кстати, Arton, да и другие булчане... Подскажите, какими способами можно создать взаимодействие персонажей(скажем , броски, или что то типа того) ?

Типа нанесения ударов, хватания за грудки с последующем швырянием?
Понятие не имею, теория о меня:
Нужны точки в активных местах персонажа (модельки), оружие, предметах.
Например точка в кулаке, идёт анимация удара, проверка где находится кулак (его точка), внутри врага, наносим урон и так далее.

Что бы один персонаж взял и швырнул другого, можно пойти другим путём. Заранее сделать эту анимацию. То есть игрок подводит своего персонажа на расстояние взаимодействия с врагом, оба персонажа могут скрыться на время и проигрывается анимация как гг хватает и кидает врага, анимация скрывается, вновь персонаж игрока, враг превращается в регдолл (или анимация полёта с перемещением модели).
Такой способ очень часто применяется, но проблема сделать автоматическую доводку персонажей до нужного расстояния, иначе часто можно наблюдать: нажал удар за спиной, твой персонаж «телепортнулся» на врага и убивает его, при этом оба стоят не там где надо.

С оружием совмещение написанного выше:
У персонажа есть готовая анимация сражения кулаками, с ножом, мечом, палкой и т. д.
Но в самой анимации на месте где должно быть оружие, отдельная кость (или точка (или точка с костью, зависит от того что нужно)), которой собственно персонаж и машет, а дальше на эту «болванку» можно закреплять разные модели оружие. получаестя анимация на определённый тип оружия. Оружие имеет активные точки, или имеет коллизию и идёт проверка, задевает «палка» врага, или нет.

Короче суть такова: анимация делается для определённого типа предметов, если персонаж взял кирпич, то ту же анимацию можно применить и для схожего по внешним и физическим характеристикам предмета, например камень.
А сам предмет закрепляется в точке, можно сделать «кирпич» дочернем объектом, но лучше всего «держать» его в координатах точки (руки), 3 координаты и 3 угла.

P. S. Надеюсь понятно написал :mda:

Colossus 25.10.2015 00:32

Ответ: Player Movement
 
Уважаемый Arton, большое спасибо за развернутый и оперативный ответ.
В принципе, я тоже изначально так думал, как ты и описал, но не был до конца уверен в правильности хода моих мыслей, теперь убедился, что вариант не плохой. Но, подумать конечно придётся ) Я использую связку Xors3d+PhysX, думаю можно что то реализовать из того, что тобой описано. Еще раз спасибо.

Colossus 25.10.2015 09:33

Ответ: Player Movement
 
И вот какая идея появилась) чтобы не было телепортации в момент анимации взаимодействия игрока и противника, и игроку и противнику надо спереди и сзади на уровне стоп припарентить по триггеру, в тех местах, где должен стоять противник в момент броска например)

IgorOK 25.10.2015 11:58

Ответ: Player Movement
 
Цитата:

Сообщение от Colossus (Сообщение 300820)
И вот какая идея появилась) чтобы не было телепортации в момент анимации взаимодействия игрока и противника, и игроку и противнику надо спереди и сзади на уровне стоп припарентить по триггеру, в тех местах, где должен стоять противник в момент броска например)

Можно сделать условие чтобы захват или бросок был на определённом расстоянии/высоте. Однако от рывков анимации это не избавляет. Нужно сделать transition между текущим состоянием и захватом. Не всегда будет естесственно выглядеть, но это лучше чем рывки.

Colossus 25.10.2015 12:14

Ответ: Player Movement
 
Вполне реальное предложение)

И еще. Что если в разных местах уровня, сделать триггеры, при контакте с которыми, игрок выполняет определенное действие ( например карабкается, повисает, и все такое ) ?

jfkkk 26.10.2015 11:15

Ответ: Player Movement
 
Цитата:

Сообщение от Arton (Сообщение 300809)
С оружием совмещение написанного выше:
У персонажа есть готовая анимация сражения кулаками, с ножом, мечом, палкой и т. д.Но в самой анимации на месте где должно быть оружие, отдельная кость (или точка (или точка с костью, зависит от того что нужно)), которой собственно персонаж и машет, а дальше на эту «болванку» можно закреплять разные модели оружие. получаестя анимация на определённый тип оружия.

Тут есть один нюанс: если применить анимацию полностью к модели, которая воспринимается движком как сцена с дочерними объектами, то морфинг анимаций между различными секвенциями для костей и мешей, прикреплённых к костям при помощи модификатора Skin, будет происходит с разными скоростями. Вследствие чего оружие, приаттаченное к кости будет двигаться быстрее, чем меш персонажа. Поэтому придётся либо прикреплять оружие при помощи Skin, либо искать в движке функцией xFindChild меш персонажа и анимировать его одновременно с анимацией целой модели.

Также серьёзной проблемой станет имитация инверсной кинематики в движке. Так как модель привязана к пивоту или капсуле, то при проигрывании анимации атак и прочего(которые в большинстве случаев изготавливаются при помощи инверсной кинематики) модель будет отбегать от пивота или капсулы на изрядное расстояние. Если для прямолинейного движения (типа бега) это не является существенной проблемой, так как можно в анимации убрать все передвижения модели по осям X и Z и передвигать родителя модели, то в случаях анимаций, в которых на разных фазах модель передвигается с разной скоростью по разным осям это решение не подойдёт, потому как моделька персонажа будет просто неестественно сучит ногами по земле, в то время как в действительности ступни персонажа должны являться источником этой инверсной кинематики и плотно стоять на земле не проскальзывая.
В этом прожекте я передвигал пивот по осям X и Z, к которому привязана модель на те значения, которые брал из 3ds Maxa, в зависимости от проигрываемого кадра, а в движок импортировал анимации без перемещения модели по осям X и Z. Тогда это решение показалось оптимальным.

Arton 26.10.2015 16:04

Ответ: Player Movement
 
Цитата:

Сообщение от Colossus (Сообщение 300825)
Что если в разных местах уровня, сделать триггеры, при контакте с которыми, игрок выполняет определенное действие ( например карабкается, повисает, и все такое ) ?

Знаешь, ТАК и делают.
На уровни раскидывают триггеры для ботов, где перелезть, где лифт и т. д.
Это часть их «интеллекта».
По другому и смысла нет делать т. к. тогда надо действительно делать ИИ. И само игровое пространство очень-очень интерактивным.


Часовой пояс GMT +4, время: 08:54.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot