Unreal Engine 5 и VR с нуля. Часть 6. Разрабатываем Дартс. Осваиваем Post Process Volume. Разбираемся с Grab Component. Настраиваем анимацию.
Введение
Продолжаем разрабатывать игру Дартс по курсу "Oculus VR Production for Unreal Engine". В этой статье я расскажу, какие проблемы я встретил при прохождении курса, и как я решал эти проблемы. В данный момент, я прошел 24 урока из плейлиста.
Update 02.08.2024 - курс был перезалит на Rutube
1 Проблема. Исправляем яркий свет на уровне
После импорта ассетов и уровня, на карте был замечен слишком яркий свет.
Решение проблемы нашлось на форуме:
Далее я решил найти более подробную информацию о Post Process Volume. Документация:
Несколько видео на эту тему, которые мне помогли углубиться в свойства и функции Post Process Volume:
Ссылка на оригинальное видео - Unreal Engine 5 Beginner Tutorial - UE5 Starter Course!:
и еще одно видео:
2 Проблема. Разбираемся с системой захвата предметов (UE5). Дротик не крепился к socket руки. (Решено)
В Unreal Engine 5 используется grab component, который мы должны применять к предметам, с которыми хотим взаимодействовать.
В видеоуроке 22, нашего плейлиста, мы настраиваем взаимодействие с дротиком. Как я понял, в UE4 прописывали логику захвата к каждому bp_actor отдельно. Но в UE5 мы применяем ко всему grab component из VR шаблона.
Разобраться с применением grab component мне помогли следующее видео:
В конечном итоге, при такой схеме блюпринта, дротик стал нормально браться/бросаться как в видеоуроке:
Если вы как я, используете плавное передвижение из статьи 4. То переключите коллизию всех компонентов BP_Dart на VRInteractable (в том числе и для сферы коллизий).
Для того чтобы дротик крепился к socket руки, необходимо убрать галочку на значении Weld Simulated Bodies.
3 Проблема. Нет готовой анимации захвата дротика. Пересоздаем анимацию захвата дротика. (решено)
В уроке предоставляются руки и анимации для удержания дротика. Я решил не делать ретаргетинг анимации, а просто добавить к существующим анимациям добавить свои три анимации захвата дротика.
Сделал дубликат одной из анимации. Выправил кости руки как мне нравится и нажал "Key". Анимация сохранилась как новая. Так я сделал аналоги анимации из урока.
4 Проблема. Не менялась анимация на взятый дротик по булевому значению Holding Dart Anim. (Решено)
В Unreal Engine 4 нет grab component, и как я понял, логика захвата рукой любого Actor осуществляется в персонаже.
Мне нужно было понять, как определить момент захвата и как передать изменение анимации руки именно при захвате дротика, используя в базовый VR шаблон Unreal Engine 5. Конкретного решения проблемы в разных видео я не нашел. Люди в основном используют State Machines для работы с анимацией в различных ситуациях в игре, но тогда бы мне пришлось полностью переделать логику анимации в игре.
Я планирую в будущем изучить работу State Machines, но не для взаимодействия с одним дротиком.
Я добавил еще одно значение для моего BP_Dart в GrabType Enumeration:
Добавил логику в функцию "GetGrabComponentNearMotionController" в зависимости от значения type Grab Component присвоенному для моего Actor, а так же передал в переменную Holding Dart Anim Character (Храним в переменной событие с измененной анимацией, если персонаж держит правой руке actor с GrabType = Dart)
Теперь, мой VR Character меняет анимацию в зависимости от того в руках BP_Dart или нет:
Так же добавил изменение анимации в зависимости от местоположения дротика от камеры(головы) персонажа(симуляция размаха). Правда в уроке по Unreal Engine 4 это всё происходит в одном месте. Тут пришлось адаптировать под VR шаблон Unreal Engine 5:
Проблема 5. Ошибка "GrabComponent->SetSimulatingParent->Cast To PrimitiveComponent FAILED" при захвате дротика (Решено)
При захвате дротика я каждый раз получаю ошибку "GrabComponent->SetSimulatingParent->Cast To PrimitiveComponent FAILED".
Я нашел место где это происходит:
Вероятно, это из-за того, что в моём BP_Dart присутствует DefaultSceneRoot component(видимо он не является примитивным компонентом), но это не точно.
Попробую от него избавиться, допишу апдейт статьи если смогу пофиксить.
Update 23.07.2024
BP_Dart не является примитивным компонентом и не должен. А симуляция физики у него внутри логики.
Проблема 6. При переносе всех компонентов персонажа (VRPawnDarts) в родительского Персонажа (BPP_Pawn_Darts) и переназначении их в логике. При старте сцены создаются оба персонажа на сцене. (Решено)
В уроке 24 мы переносим все компоненты к родительского персонажа. Я все это сделал по аналогии, но при запуске сцены у меня создаются оба персонажа.
Есть пара идей как это пофиксить, допишу в эту статью если будет решение проблемы.
Update 23.07.2024
По моей ошибке, в Настройках класса GameMode_Darts в Default Pawn Class должен стоять Character, а у меня был указан BPP_Pawn_Darts. Поэтому он создавал экземпляр родительского персонажа на карте.
Заключение
Прохождение курса по созданию мини игры Darts затянулось по причине того, что это не просто копипаст кода, а еще и адаптация под другую версию движка + оказалось не так просто для новичка.
Это позволяет глубже изучить работу с Unreal Engine 5, а так же сподвигло на прохождение еще одного курса(параллельно), по изучению основ работы с Blueprint. (да, он для Unreal Engine 4, но основные функции одинаковые)
Курс по Blueprint [RUS]
Телеграм канал Unreal Engine VR