ВведениеПродолжаем разрабатывать игру Дартс по курсу "Oculus VR Production for Unreal Engine". В этой статье я расскажу, какие проблемы я встретил при прохождении курса, и как я решал эти проблемы. В данный момент, я прошел 24 урока из плейлиста.Update 02.08.2024 - курс был перезалит на Rutuberutube.ruVR разработка Oculus на Unreal Engine – смотреть онлайн все 53 видео от VR разработка Oculus на Unreal Engine в хорошем качестве на RUTUBE1 Проблема. Исправляем яркий свет на уровнеПосле импорта ассетов и уровня, на карте был замечен слишком яркий свет.Решение проблемы нашлось на форуме:forums.unrealengine.comHow can I fix my Scene Lighting from being too bright?Далее я решил найти более подробную информацию о Post Process Volume. Документация:dev.epicgames.comdev.epicgames.comНесколько видео на эту тему, которые мне помогли углубиться в свойства и функции 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.2024BP_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 VRt.meUnreal Engine VR
Умение решать такие задачи поможет лучше разобраться в движке и повысить качество работы