Пятница, 26 Апреля 2024, 06:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Система передвижения : Rigidbody VS CharacterController (Что лучше выбрать и в каком случае?)
Система передвижения : Rigidbody VS CharacterController
robertonoДата: Суббота, 16 Ноября 2013, 23:00 | Сообщение # 1
Чокнутый Кот
Сейчас нет на сайте
Всем привет. У меня стоит выбор между двумя системами передвижения. Их существует два : физическая и математическая.
Физическая - rigidbody, AddForct
Математическая - всем известный CharacterController

Оба работают неплохо. Но у каждого есть свои плюсы и свои минусы.
Я хочу что бы вы мне помогли найти ещё другие плюсы и минусы и помогли мне определится с выбором

Плюсы RigidbodyController:
Взаимодействие с другими rigidbody
Передвижение кажется более плавным

Плюсы CharacterController:
Ничего городить не нужно, большинство кода уже готово
Быстро работает (математика)

Минусы CharacterController:
Нету взаимодействия с rigidbody
Не очень плавное передвижение

Конечно выбор зависит ещё и от того для чего будет использоваться та или иная система передвижения.
Что будет у меня в игре:

Здания, которые можно будет разрушать, большие небоскребы будут падать посредством rigidbody (прошу не писать что rigidbody в юнити очень медленный, это мои проблемы и тем более я уже решил все проблемы с оптимизацией) .
Нужно будет что бы падающие обломки могли убить персонажа.
Нужно нормальная синхронизация позиции персонажа с сервером.
В качестве серверной платформы будет использоваться Photon.
В качестве персонажа - человек.

Как это сделано в других играх ? Как это сделано в Battlefield 3,4 ? Что используют чаще ? Почему и зачем?
Мне хочется узнать побольше, т.к. выбор нужно сделать раз и навсегда..

Добавлено (16.11.2013, 23:00)
---------------------------------------------
Заранее спасибо за подробные внятные и понятные ответы up

nwsxДата: Суббота, 16 Ноября 2013, 23:13 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
ещё есть механим + рут моушн.

Westboro
Dungeon Journey на Google Play
robertonoДата: Суббота, 16 Ноября 2013, 23:27 | Сообщение # 3
Чокнутый Кот
Сейчас нет на сайте
nwsx, а это как работает? Как в реальной жизни, посредством именно ног ? biggrin
nwsxДата: Суббота, 16 Ноября 2013, 23:34 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
ага. передвижение зависит от анимации
http://video.unity3d.com/video/7362044/


Westboro
Dungeon Journey на Google Play


Сообщение отредактировал nwsx - Суббота, 16 Ноября 2013, 23:35
robertonoДата: Воскресенье, 17 Ноября 2013, 00:56 | Сообщение # 5
Чокнутый Кот
Сейчас нет на сайте
nwsx, в любом случае меня интересует только физический и математический. А это мне не подходит.
romgermanДата: Воскресенье, 17 Ноября 2013, 01:33 | Сообщение # 6
старожил
Сейчас нет на сайте
Легче взять CharacterController и просто использовать его для доступа к функциям. С RigidBody будет много проблем, а CC уже полностью готов к работе.
robertonoДата: Воскресенье, 17 Ноября 2013, 02:25 | Сообщение # 7
Чокнутый Кот
Сейчас нет на сайте
Цитата romgerman ()
С RigidBody будет много проблем

Можете о них рассказать? Так, для убеждения что использовать rigidbody плохо)
KamiRoninДата: Воскресенье, 17 Ноября 2013, 11:13 | Сообщение # 8
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Можете о них рассказать? Так, для убеждения что использовать rigidbody плохо)

а можешь привести пример игры где сделано перемещение персонажа в виде addForce + rigidbody?
в сцире-конструкте есть прием когда - "человеку" придают стиль перемещения - ПУЛЯ. т.е. ты щелкаешь в некоторой точке и он туды скользит с определенной скоростью, пока не достигнет. достиг остановился - пока снова не щелкнешь в поле.
у тебя ТАКОЕ перемещение перса планируется?! сложно представить, чтобы этот тип можно было кроме как вид сверху (а значит 2D) использовать! smile

т.ч. тут нет вопроса, ИМХО. smile
для перемещения персонажа ничего кроме чарактер контроллер не используется (украшения в виде анимации это мелочи).
и где у него не очень плавные движения? это же настраивается все!
тем более что в сети навалом примеров когда делают свой FPC - в котором стоит регидбоди а не чарактер контролер (осн. капсула). а скрипты берутся на 70 со стандартного FPC!! и все.
но я так делал - выигрышей не много наскреблось! smile оказалось - если выкинуть (!!) лишнее и хорошенько вникнуть, то FPC очень качественно можно сделать!


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Воскресенье, 17 Ноября 2013, 12:53
robertonoДата: Воскресенье, 17 Ноября 2013, 13:01 | Сообщение # 9
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, просто у CC уже огромный готовый код и мне кажется что будет трудно его переделывать. Просто мне нужно будет добавлять потом ещё другие позиции : сидеть, лежать. И что именно нужно делать в CC что бы этого достичь - я не знаю. Я всегда когда пишу скрипты я не беру ничей код, и делаю свой , может не правильный но работающий и мне понятный как работает.
Nasa13Дата: Воскресенье, 17 Ноября 2013, 13:36 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Я только начал изучать юнити, но до этого была хорошая подготовка (с другим движком), где можно реализовать подобное через СС и через Физ тело!

Как это делается?

Говорю, с учетом прошлого двига, и небольшой работы с этим двигом)

Если мы возьмем физ. тело - это хорошо! Но! Буду использоваться несколько объектов, а именно Force(Движение) Force(Прыжок)! Как я посмотрел, в юнити в СС сразу тебе и прыжок и движение в разные стороны!
Т.е.
Я знаю, код немного разнится, но смысл тот же....
Мы производим трансформ Силы

/// Движение вперед
if (iKeyDown(iKeyCode("DIK_W")))
{
меняем привязку форса к объекту по другой оси, тем самым перенаправляем силу (в Юнити это просто указываем форс в нужную сторону)
}

/// Движение назад
if (iKeyDown(iKeyCode("DIK_S")))
{
меняем привязку форса к объекту , тем самым перенаправляем силу(на другую ось) (в Юнити это просто указываем форс в нужную сторону)
}

if (iKeyDown(iKeyCode("DIK_SPACE")))
{
меняем привязку форса к объекту, тем самым перенаправляем силу(на другую ось) (в Юнити это просто указываем форс в нужную сторону)
float Force= 33; /// Изменяем для прыжка
}

Но это еще не все! Еще надо сделать проверку на то, что мы стоим на земле, чтобы в полете мы не могли двигаться влево или вправо!Для этого нам надо пустить сканер, на проверку физ тела под нами...+ в нагрузку(либо проверку коллизий). В СС это сразу реализовано...

Цитата robertono ()
ещё другие позиции : сидеть, лежать.


Если позиции нужны - лежать , сидеть (если игра от первого лица)

Мы делаем следующее , а именно ,меняем положение камеры относительно нашей оболочки!

В прошлом движке, я это делал сменой позиции (Привязанной, т.е. я еще скриптом привязывал по ориентации и по локации камеру, и выводил стандартные положения, затем их менял), здесь(в юнити) можно это сделать анимацией камеры ,сдвигом по оси Y(ЗАЦИКЛИТЬ)(может и сменой положения, я не пробовал) ! Я только-только освоил "покачивания камеры" и могу заявить ,это будет работать на 100%...

Смысл делать форсы физ тела, если все те же эффекты ты можешь добиться и с простым СС,всего лишь проверкой , например, расстояния от объекта.

Цитата robertono ()
Нужно будет что бы падающие обломки могли убить персонажа.


Проверил расстояние куска до СС(плюс учет скорости физ объекта) и вот тебе убийство , либо тригер зоной(вот тут я не знаю, можно ли привязать тригер зону к объекту)...Либо другими способами (Сканером + учет скорости)

Я не заморачиваюсь с физ телом, хоть мне и не нравится резкость СС,если честно,но я лучше посижу там над кодом ,и настройками( тонкой настройкой) ,чем буду нагружать лишний раз свой проект... Это мое мнение, я не знаю , прав ли я на все 100% , но надеюсь поможет. Сейчас уже никто не делает форсами. Даже учитывая прошлый двиг, я отказался от физ тела, уж больно оно напряжное ( лестница так вообще).

Начиная с ббс2 в батле все хуже и хуже физика, и сама игра, на мой взгляд...(Реально что круто, это анимация при убийстве "с ножа")


все люди одинаково полезны,говорил людоед туристам.

Мешает грудь? Спячь под "СПОЙЛЕР.*)

моя мини демка ,хоррор http://3drad-alec.ucoz.com/forum/6-39-1


Сообщение отредактировал Nasa13 - Воскресенье, 17 Ноября 2013, 13:43
RikettaДата: Воскресенье, 17 Ноября 2013, 14:11 | Сообщение # 11
Strategist
Сейчас нет на сайте
Самое очевидное решение - просто проверять коллизии обломков с игроком, как уже сказал Nasa13, получая их "убойные свойства" из ригидбоди, в виде силы и массы, используя на игроке просто CC.
Nasa13, я триггер зону делал просто прикрепляя куб к игроку без меш рендера с триггер свойством. :D Можно поступить и так, ага.


Fougerite - Rust Server OpenSource API
TerraDev - Terraria OpenSource Hack
romgermanДата: Воскресенье, 17 Ноября 2013, 14:13 | Сообщение # 12
старожил
Сейчас нет на сайте
Цитата robertono ()
И что именно нужно делать в CC что бы этого достичь - я не знаю.

Есть уроки по теме "Как создать свой контроллер на основе CharacterController". Конечно, лучше искать на английском.

Добавлено (17.11.2013, 14:13)
---------------------------------------------
Кстати, тут можно посмотреть сравнение CC и Rigidbody.

KamiRoninДата: Воскресенье, 17 Ноября 2013, 18:53 | Сообщение # 13
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Я всегда когда пишу скрипты я не беру ничей код, и делаю свой , может не правильный но работающий и мне понятный как работает.

хорошее качество! и почти самый лучший способ изучить что либо. чуть лучше - это разбор и повторение успешных исходников. но это на любителя! smile
Цитата robertono ()
Просто мне нужно будет добавлять потом ещё другие позиции : сидеть, лежать.

навскидку
http://www.youtube.com/watch?v=LJh-OhJS8eo
http://gcup.ru/forum/59-31688-1

стандартный СС реагирует по OnTrigger(по OnCollision cо встречанным регидбоди), у него правильная система работы с гравитацией, рывки в движении можно урегулировать.
делать на регидбоди - свои преимущества (зачетная ссылка от romgerman рассказывает), но там кодить нужно много или все равно использовать чужой код.

сила удара осколка и урон - это отдельная модель. попал осколок в регид или в сс - все равно будет просто событие OnTrigger(OnCollision) - и все. остальное ляжет на эту модель. выигрыша и проигрыша ни в одной из технологий не будет. так зачем ваять системы управления дважды? smile

Цитата robertono ()
Минусы CharacterController:
Нету взаимодействия с rigidbody

как это? smile имеешь в виду навесить на СС еще и регид поверх? или просто коллизии? если второе - то есть! и нормальное. с не кинематическим регидом любой коллайдер работает (да и с кинематическим тоже, только по другому)! а если первое - то нафига? у него своя система специально сделанная для массы и т.п.


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
robertonoДата: Понедельник, 18 Ноября 2013, 00:05 | Сообщение # 14
Чокнутый Кот
Сейчас нет на сайте
Т.е. мне тогда лучше выбрать Character Controller ?
Вот тут например кто то говорит что CC фигня
For Unity Users...

Кстати я уже давно написал свою систему передвижения на rigidbody, только само перемещение писал не я , а написанный для всех очень хороший
RigidbodyFPSWalker
что скажите про него?

Добавлено (17.11.2013, 23:55)
---------------------------------------------
Тогда вопрос что писал я ? Добавил перемещение в приседании , ползжение (?) (ползти чтоб можно было) . Сделал FPS Input Manager свой. С которого считываю что нажато, врубаю анимацию в меканиме и отправляю в RigidbodyFPSWalker что нужно сделать с персонажем и его скоростью.

Добавлено (17.11.2013, 23:56)
---------------------------------------------
И всё работает довольно неплохо.

Добавлено (18.11.2013, 00:05)
---------------------------------------------
Вот даже демка:
W A S D ходить, если ещё нажать левый Shift можно будет бежать
Left Ctrl - приседание
X - лежать, можно ползти.

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

Также , помимо RigidbodyFPSWalker, моего FPS Input Manager ещё написаны мною такие вещи как Camera Controller, Capsule Collider Controller
Camera Controller позволяет мне в два клика создать 2 точки для камеры, и легко добавить её плавное передвижение. Я это применил для плавного передвижения камеры когда садишься или ложишься. А Capsule Collider Controller мне позволяет легко менять размеры коллайдера персонажа. Это для того что бы когда лежишь можно было пролезть под 1 блоком высотой. К приседанию это пока не сделано. Всё это вы можете протестировать в демке.

Демка

Так что не думайте что я без дела сижу и тыкаю по клавиатуре на форуме) Делаю максимально сколько могу. Просто прошу советов, ваших мнений smile
Спасибо.

KamiRoninДата: Понедельник, 18 Ноября 2013, 00:55 | Сообщение # 15
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
Вот даже демка:

у меня на компе он обзор все равно рывками. движение конечно чуть плавнее чем у стандартного, но чет меня не впечатлило!! может когда оближешь - нормально будет.
ползание/приседание - нормально.. немного резко ложится.. smile но это мелочи.
в общем.. тут на вкус и цвет!!
я увидел только одно преимущество для себя в регидбоди вместо СС -- коллизии немного понятнее в обработке. но и все. три причины, которые привел англоязычный чел тоже не 100%. маузлюк действительно бывает забавным.. но в них примеры разных приемов, которые просто нужно подогнать под свои нужды. физика для первого лица очень сложный вопрос по сути - надо ли чтобы в игре были ВСЕ физические реалии задействованы? в играх это не всегда нужно.. ну давайте каждый камень под коленкой правильно отрабатывать, каждую ветку считать как лицо от нее отскочит... :-/ на уровне отрисовки движения тела после убийства - все давно отлажено, выключается основные движки тела и включается regdoll... уж там нужна красота движения тела по всем физ законам типа.
все равно вся физика движения скелета пока живой -- обрабатывается на уровне костей и пререндерной анимации.. ну короче! smile

это уже просто выбор по вкусу: взять за основу чужой стандартный фпс или чужой нестандартный ргбд волкер. что-то выиграешь, что-то проиграешь. все равно будешь писать свое. и то и то можно сделать полностью решающим задачу.
удачи! smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
robertonoДата: Понедельник, 18 Ноября 2013, 01:24 | Сообщение # 16
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, а будет легко использовать rigidbody fps walker c photon? Может быть этот вопрос очень тупой и к фотону можно прицепить что угодно... Я просто почти ничего не знаю как это всё делается и сервера всякие эти... Когда сделаю нормальную часть игры, основную механику тогда буду искать второго программиста который мне будет помогать с фотоном.. один я уже такое не потяну smile
KamiRoninДата: Понедельник, 18 Ноября 2013, 12:50 | Сообщение # 17
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
к фотону можно прицепить что угодно...

почитай тут и тут, там не много.. хотя ты и сам наверное уже искал инфу! smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.
robertonoДата: Понедельник, 18 Ноября 2013, 14:12 | Сообщение # 18
Чокнутый Кот
Сейчас нет на сайте
KamiRonin, вау, спасибо большое за первую ссылку, много интересного smile

Добавлено (18.11.2013, 14:12)
---------------------------------------------
Прошу помощи в редактировании RigidbodyFPSWalker.
RigidbodyFPSWalker
При его использовании можно забраться на очень резкий склон. Как это исправить? Что бы нормально, когда идешь на резкую гору ты не мог на неё забраться.

KamiRoninДата: Понедельник, 18 Ноября 2013, 17:27 | Сообщение # 19
почти ветеран
Сейчас нет на сайте
Цитата robertono ()
При его использовании можно забраться на очень резкий склон. Как это исправить? Что бы нормально, когда идешь на резкую гору ты не мог на неё забраться.

ОППА!! вот и показал себя регидбоди! sad
у СС автоматом срабатывает: когда склон очень крутой ему места для трех точек пересечения с террайном не хватает* и он скользит вниз.
у регидбоди такого ограничителя нет - пока ты давишь вперед его держит точка упора и форс по вектору. smile
можно попробовать сделать диаметр капсулы меньше.. может тогда ему тоже не хватит. поиграться со сглаживанием круглых пересечений с поверхностью (Smooth Sphere Collisions). вот посмотри. или придется писать низкоуровневую проверку точек коллизии. :-/ (шило на мыло)
так что попробуй!! может регидбоди все таки допилишь в качестве основы для FPC... smile


Мыслю - значит программирую...
Конструктивная критика - умных ведет к совершенству...
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей.


Сообщение отредактировал KamiRonin - Понедельник, 18 Ноября 2013, 17:29
robertonoДата: Вторник, 19 Ноября 2013, 18:01 | Сообщение # 20
Чокнутый Кот
Сейчас нет на сайте
Так есть у кого нибудь идеи как сделать что бы RigidbodyFPSWalker не шел вперёд на резкие склоны?
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Система передвижения : Rigidbody VS CharacterController (Что лучше выбрать и в каком случае?)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг