APS_WorldSettings
Родительский класс: AWorldSettings
Описание: Родительский класс является актором (первая буква говорит, что это актор и он хранится на уровне). Родительский класс находится на каждом уровне. Его нельзя настроить через viewport, а доступ к нему происходит от окна "World Settings"
Как понятно из названия, он хранит лишь настройки для каждого уровня (а.к.а. World), а настраивается через окно в самом движке. Конкретно мой класс добавляет пару постоянных опций, по типу "Включен ли Солвер Ган? Фонарик? Загрузчик уровней?", а также через него настраивается состояние Discord Rich Presence (это та штука в дискорде, показывающая во что играет твой кент сейчас)
Так как я работаю не один, то для команды добавлено предупреждение, что отключение загрузчика уровня может повлечь за собой серьезные баги при переходе между уровнями.
А вот нечего было отключать, работает не трогай ;]
(P.S. Отключение загрузчика полезно для быстрого теста определенного уровня, без необходимости ждать пока он прогрузится)
Функции:
- Хранения параметров для данного уровня (и для последующего доступа к ним извне)
- Обновление состояния Discord Rich Presence.
- Настройка фоновой музыки на уровне (плейлист из нескольких аудиофайлов, запущенных поочерёдно)
Особенности: После создания класса и успешной компиляции, в настройках проекта (Project Settings) есть графа "World Settings Class", если все сделано правильно - то кроме стандартного класса World Settings, можно выбрать собственный/кастомный класс. Затем перезапустите движок и бинго!
Про что рассказать в следующий раз?
Родительский класс: AWorldSettings
Описание: Родительский класс является актором (первая буква говорит, что это актор и он хранится на уровне). Родительский класс находится на каждом уровне. Его нельзя настроить через viewport, а доступ к нему происходит от окна "World Settings"
Как понятно из названия, он хранит лишь настройки для каждого уровня (а.к.а. World), а настраивается через окно в самом движке. Конкретно мой класс добавляет пару постоянных опций, по типу "Включен ли Солвер Ган? Фонарик? Загрузчик уровней?", а также через него настраивается состояние Discord Rich Presence (это та штука в дискорде, показывающая во что играет твой кент сейчас)
Так как я работаю не один, то для команды добавлено предупреждение, что отключение загрузчика уровня может повлечь за собой серьезные баги при переходе между уровнями.
(P.S. Отключение загрузчика полезно для быстрого теста определенного уровня, без необходимости ждать пока он прогрузится)
Функции:
- Хранения параметров для данного уровня (и для последующего доступа к ним извне)
- Обновление состояния Discord Rich Presence.
- Настройка фоновой музыки на уровне (плейлист из нескольких аудиофайлов, запущенных поочерёдно)
Особенности: После создания класса и успешной компиляции, в настройках проекта (Project Settings) есть графа "World Settings Class", если все сделано правильно - то кроме стандартного класса World Settings, можно выбрать собственный/кастомный класс. Затем перезапустите движок и бинго!
Про что рассказать в следующий раз?
❤🔥4🔥1💋1
Лайфхак №0
Упрощенный способ вызов анимаций через код
Так вот, т.к.я ленивая жэпа это долго, то есть такой интересный способ:
- Будем использовать USkeletalMeshComponent, в котором уже есть необходимые инструменты для запуска анимаций (Закреп 1)
- Выставляем анимацию и запускаем (Закреп 2)
И результат на закрепе 3
Всем спасибо, хорошего дня!
Но это старый вариант - анимация будет вечно перезапускаться и странно себя вести если не доиграет (А я напомню - мы тут без сверхъестественного Animation Blueprint), так что введем небольшой хотфикс (Закреп 4):
- Перед заменой анимации на новую, с текущей анимации сохраняем позицию (на каком кадре)
- Заменяем анимацию на новую, выставляем ей скорость-направление
- И после (перед запуском) выставляем сохраненную позицию на новой анимации (Т.К. При выставлении новой анимации, позиция сбрасывается в 0, то есть в начало анимации)
- А затем можно и запустить проигрывание анимации
Как видно - новый вариант гораздо приятнее на глаз (Закреп 5), и реализуется без всяких Animation Blueprint и State Machines (Вот бы я знал это год назад, еще в Демо, эх...)
Упрощенный способ вызов анимаций через код
Знаете то осознание, когда нужно написать код для какой-нибудь кнопки, выдвижному ящику, дверной ручке или окну, а голову лезят идеи использовать Animation Blueprint, State Machines и десятки костылей?
Так вот, т.к.
- Будем использовать USkeletalMeshComponent, в котором уже есть необходимые инструменты для запуска анимаций (Закреп 1)
- Выставляем анимацию и запускаем (Закреп 2)
И результат на закрепе 3
Но это старый вариант - анимация будет вечно перезапускаться и странно себя вести если не доиграет (А я напомню - мы тут без сверхъестественного Animation Blueprint), так что введем небольшой хотфикс (Закреп 4):
- Перед заменой анимации на новую, с текущей анимации сохраняем позицию (на каком кадре)
- Заменяем анимацию на новую, выставляем ей скорость-направление
- И после (перед запуском) выставляем сохраненную позицию на новой анимации (Т.К. При выставлении новой анимации, позиция сбрасывается в 0, то есть в начало анимации)
- А затем можно и запустить проигрывание анимации
Как видно - новый вариант гораздо приятнее на глаз (Закреп 5), и реализуется без всяких Animation Blueprint и State Machines (Вот бы я знал это год назад, еще в Демо, эх...)
Я так заюзал почти во всех элементах игры, где нужен вызов простых анимаций (Панели, двери, кнопки и т.д.)
Но а так как я тот еще редкий вид активно-прокрастинирующих, то анимации на Солвер Гане тоже работаю через код - если новый формат постов приживется, то как-нибудь расскажу про это =]
🔥4
Абсолютно неожиданна ночная поездка на велосипеде
А потом спрашивают, почему я такой сонный :D
А потом спрашивают, почему я такой сонный :D
❤🔥8😁2😴1🆒1
Лайфхак №1
Выставление материалов прямо в редакторе
Фича проста до безумия (Закреп 1) - объявляем OnContruction (Закреп 2), в котором задаем материал, НО - если материала нет, то задаем какую-нибудь пустышку (WorldGrid или свою)
В целом все, но от себя добавлю: Так как опыт в С++ у меня уже был, то со временем стиль написания условий if-else стал более упрощенно-профессиональным (Финальный вариант в закрепе 3), поэтому не удивляйтесь таким фокусам :]
Такие условия называются if-with-initializer, а завезли нам эту подкормку в С++17 (2017). Поэтому чтобы сделать код немного читабельнее, подгрузку обьекта выношу прямо в условие if и там-же его сравниваю (смог ли я подгрузить объект?) и если да - то работаю с подгруженным объектом внутри.
Выставление материалов прямо в редакторе
Это не прям что-то сверхъестественное, но такая фича очень будет удобной для дизайнеров, а также решает одну особенность Unreal Engine - если на сцене изменить какой-нибудь компонент внутри блюпринта, то этот блюпринт перестает как-либо обновляться (не смотря на изменения основного в Content Browser)
Фича проста до безумия (Закреп 1) - объявляем OnContruction (Закреп 2), в котором задаем материал, НО - если материала нет, то задаем какую-нибудь пустышку (WorldGrid или свою)
В целом все, но от себя добавлю: Так как опыт в С++ у меня уже был, то со временем стиль написания условий if-else стал более упрощенно-профессиональным (Финальный вариант в закрепе 3), поэтому не удивляйтесь таким фокусам :]
Такие условия называются if-with-initializer, а завезли нам эту подкормку в С++17 (2017). Поэтому чтобы сделать код немного читабельнее, подгрузку обьекта выношу прямо в условие if и там-же его сравниваю (смог ли я подгрузить объект?) и если да - то работаю с подгруженным объектом внутри.
❤3🥰1💯1
Нашел небольшую интересную статью, советую почитать:
https://unrealengine.monster/take-your-time-wait-for-the-transition-to-ue-5-6/
https://unrealengine.monster/take-your-time-wait-for-the-transition-to-ue-5-6/
Unreal Monster
Не спеши: подожди с переходом на UE 5.6
Если ты увидел свежий релиз Unreal Engine 5.6 и сразу подумал: "Всё, пора обновляться!", — остановись.Я тоже так думал. Но давай поговорим честно: переход на новую версию движка не всегда даёт больше пользы, чем головной боли.
❤3🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Когда у тебя нет проблем со здоровьем, у тебя есть 1000 проблем
Но когда у тебя есть проблемы со здоровьем, у тебя есть только 1 проблема
Примерно такие слова стоило мне раньше послушать, а не переводить свой режим сна в такую кашу, что я ложился в 4-5 часа утра, просыпался в 12-13 часов дня. Что хочу сказать... цените здоровье, и свой режим сна. И не доводите его до такого... А то сидеть с заложенным носом с температурой 37.5 как то не очень, знаете ли))
(П,С, Это я под температурой решил заняться кодом хахвхвхвав)
👍2😭1
Portal: Solver Alpha? Portal: Solver Alpha!
Да-да, пару дней не было постов из-за подготовки к анонсу, перенастройка Анрила, построение карт, дак еще болезнь прихватила меня (не нарушайте свой биоритм...) - По ходу дела расскажу, как была пройдена эта неделя хотфиксов, доработок и костылей.
А сейчас держите секрет создания таких прикольных проводов через код (блюпринты точнее-). Самое главное тут - галочка "Expose To Cinematics", которая добавляет настройку переменной через Сиквенсер. А дальше просто делаем плавный подьем от 0.0 до 1.0 (Дело Аниматора)
А также вы могли заметить странный перебор в тике, хоть конечно хотелось делать перебор от 0 до нужного индекса в массиве, но в блюпринтах нельзя напрямую получить объект из массива... (только какую-то копию объекта! Эпики вы что там нюхаете?!Я тоже хочу), поэтому пришлось делать перебор всего массива >:(
Ах да, не заметили эту замечательную "анимацию" проводов? Тогда глянем анонс еще раз! (тык) :)
Да-да, пару дней не было постов из-за подготовки к анонсу, перенастройка Анрила, построение карт, дак еще болезнь прихватила меня (не нарушайте свой биоритм...) - По ходу дела расскажу, как была пройдена эта неделя хотфиксов, доработок и костылей.
А сейчас держите секрет создания таких прикольных проводов через код (блюпринты точнее-). Самое главное тут - галочка "Expose To Cinematics", которая добавляет настройку переменной через Сиквенсер. А дальше просто делаем плавный подьем от 0.0 до 1.0 (Дело Аниматора)
А также вы могли заметить странный перебор в тике, хоть конечно хотелось делать перебор от 0 до нужного индекса в массиве, но в блюпринтах нельзя напрямую получить объект из массива... (только какую-то копию объекта! Эпики вы что там нюхаете?!
Ах да, не заметили эту замечательную "анимацию" проводов? Тогда глянем анонс еще раз! (тык) :)
❤3👍1🔥1