Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 5
Предисловие:
В Unity - если объект имеет коллайдер и выполняет какое то действие(движение), это действие(движение) должно быть выполнено через RigidBody, если же коллайдер отсутствует то выполняем действие(движение) через Transform.

В Unreal все объекты изначально имеют коллайдер и могут быть RigidBody.

Вопрос:
Изначально вопрос стоял так, а как устроен этот механизм в Unreal, как манипулировать(двигать\вращать) Actor, немного разобравшись стало ясно что все крутится вокруг UPawnMovemtComponent и SceneComponent. Но вот UPawnMovemtComponent::AddMovementInput никуда не ведет, так как то все зациклено и бессмысленно. Пускай вопрос стоит так, я не хочу использовать готовые шаблоны (по какимто причинам), мне нужен базовый механизм для управление объектами, то что в истоках стоит, тот самый UPawnMovemtComponent и(или) SceneComponent. То что, на основе чего я сам создам свой MovementComponent
Аватара пользователя
Пользователь
Сообщения: 474
У каждого актора есть его руткомпонента (она же является сцен компонентой), мувмент компонента(актор компонента), та что MovementComponent - не является сценкомпонентой, разница лишь в том что сцен компонента имеет трансформ - соответственно ей можно манипулировать, то есть перемещать,вращать и тд. Создаешь свою актор компоненту (можешь назвать ее MyMovementComponent) и через нее манипулирую уже рутом актора.
Аватара пользователя
Пользователь
Сообщения: 10
Цитата:
В Unity - если объект имеет коллайдер и выполняет какое то действие(движение), это действие(движение) должно быть выполнено через RigidBody, если же коллайдер отсутствует то выполняем действие(движение) через Transform.

Наличие RigidBody не означает, что объект двигается при помощи физики, этот компонент можно поставить в режим Kinematic, и тогда физика действовать не будет, но коллайдер не перестанет действовать на окружающие физические объекты. Это совершенно разные системы передвижения: через Transform и RigidBody, хотя RigidBody система управляет эктором через тот же Transform - это своего рода надстройка. По сути Ragdoll в Юнити основан на пеерключении RigidBody из режима Kinematik и обратно. В Kinematik работает анимация, если отключить, то рэгдол.

В Анриале совершенно аналогичная Юнити система (в том числе и Ragdoll). Точно также коллайдет не означает автоматический переход в режим движения под управлением физики. Компоненты работают аналогично Юнити. Юнити работает ТОЛЬКО на компонентах, которые называются скриптами. Анриал же использует компонеты крайне редко, но такая возможность есть. В частности, как сказано выше.

Так что ты, очевидно, не очень хорошо знаком с Юнити (мягко говоря), и совершенно не знаком с Анриалом ) Что-же, бывает ...
Впрочем, остается вариант, согласно которому ты просто не смог выразить мысль, а на самом деле ты гуру Юнити )
Аватара пользователя
Пользователь
Сообщения: 5
Спасибо за ответы!

Так как все свелось к SceneComponent, и все взаимодействие идет через него.

Немного уточняющих вопросов:
- USceneComponent::MoveComponent() - я правильно понимаю, что этот компонент двигает объект как с Физическими ствойствами(галочка Simulate Phisics), так и без, и все так и должно быть?
- USceneComponent::MoveComponent() - принамет объект FHitResult, он случай не пускает каждый раз при движение каст? Как мне кажется, так не должно быть.
- UCharacterMovementComponent - в документации написано что он не изпользует физику, уже на память изучил его, пытаясь разобраться как он работает. Так в чем же отличее его от USceneComponent, где-то, самое то что, позволяет работать обходя физику?

Вопросов конечно вагон и маленькая тележка...

"Ляля"
- Да я в курсе Kinematic, упустил при описании, да и суть не в Unity была, а всего лишь суть передал.
- Что касается схожести я уже уловил, просто обилие готовых компонентов и то как они взаимодействую, меня немного растеряло.
- Что касается знакомства Unity, как вам сказать, ну может где то с полгода с ним поработал, я бы не назвал себя Гуру в Unity.
Мне только понять основы, то как устроена иерархия и взаимодействие в Unreal, без них, далее не понять ничего.
Аватара пользователя
Пользователь
Сообщения: 474
UCharacterMovementComponent - это грубо говоря "манипулятор" он занимается только тем что воздействует на рут(который является USceneComponent). UCharacterMovementComponent - не является компонентой сцены(это лишь ActorComponent), то есть не имеет трансформа, соответственно нет у него физики и возможности его перемещать в "мире"
USceneComponent - это тоже актор компонета , но она иметт как минимум трансформ , соответственно можно на него воздействовать и перемещать в "мире"
USceneComponent::MoveComponent() - это просто метод , который "двигает" компоненту в "мире" с возможностью учета и проверки столкновений.
Ты можешь создать свою UCharacterMovementComponent или любой другой Акторкомпоненту которая будет заниматься собственно воздействием на тот или иной USceneComponent актора, что бы перемещать всего актора в "мире" нужно влиять на Root актора, можно взять методом GetRootComponent() или как то так( любые созданные USceneComponent для актора будут менять свою положение - главное не забыть их приатачить к руту актора, так же можно сделать любой USceneComponent актора рутом)
Менять положение и тд USceneComponent можно простой сменой его локации, ротации или всего трансформа сразу - методов достаточно много , выбирай по душе
Аватара пользователя
Пользователь
Сообщения: 5
Zhernovoy Sergey - спасибо за пояснение, хотелось бы получить ответы на вышеописанные вопросы,чтобы, выбрать по душе ).
Аватара пользователя
Пользователь
Сообщения: 474
Если ты не хочешь юзать стандартные "методы" передвижения которые есть в чарактере(что не совсем понятно - зачем ? ), то просто двигай своего чарактера так как хочешь, можно сделать даже простыми сетворлд локейшн. Посмотри примеры где реализован летающий космический корабль, так как раз реализован другой способ передвижения. Не знаю как сейчас, но до недавнего времени реализация движения через UCharacterMovementComponent была ущербной, потому что время от времени возникали ситуации когда динамические объекты могли "вышвырнуть" чарактера за пределы карты. В идеале было бы неплохо сделать движение игрока через PhysX и их чарактера.
Аватара пользователя
Пользователь
Сообщения: 5
Да я смотрел как реализованы другие способы передвижения, но ответа в чем же отличее не нашел, разве что в документации шлось о неиспользовании физики ним, вот и вопрос, где и как!? Единственный момент, я обязан докопаться до истины и понимать как все работает. Так проще контролировать процесс. Ну и да, UCharacterMovementComponent меня не устраивает, как минимум по той причине что, я не знаю как он работает. Меня на самом деле удовлетворить общий процесс с немногими уточнениями, то какие я выще описал.

Если я правильно понял, то когда я получаю результат FHitResult и этот объект симулирует физику, я через результат коллизии и воздействуя на него в ручную через код.
Аватара пользователя
Пользователь
Сообщения: 474
UCharacterMovementComponent - достаточно знать что он делает - собственно занимается передвижением чарактера - как он устроен и если хочешь знать все подробности,то смотри исходники.
FHitResult - это уже результат проверок коллизий, будь то перекрытие или столкновение коллизий , по сути это тот же результат что возвращает Physx при трассировке , единственно что в FHitResult нет еще UV координат места столкновений.
Если "твое" движение персонажа не отличается от движения стандартного персонажа как и в других играх, то не стоит изобретать велосипед и просто юзать то что есть. Что бы понять всю суть, поюзай Blueprint, на первом этапе понимания достаточно будет блупринта, дальше уже можно и в коде эксперементировать.
Ну и опять же, можешь посмотреть исходники, хотя там мало комментов...
Аватара пользователя
Пользователь
Сообщения: 5
Да вот который день\неделю сижу, весь в исходниках. В целом вопрос можно считать решенным. Спасибо за потраченное время!


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница