LifeEXE | Unreal Engine | CG
2K subscribers
480 photos
622 videos
558 links
Download Telegram
Media is too big
VIEW IN TELEGRAM
👨‍💻 Всем вечерний привет! 👨‍💻

В новый Unreal Engine 5.7 завезли ИИ ассистента — плагин AIAssistant, который находится по адресу: Engine\Plugins\Experimental\AIAssistant

Плагин элементарный: он просто открывает веб-морду Epic Developer Assistant в отдельном окне редактора движка, и, кстати, работает без логина:
🔗 https://dev.epicgames.com/community/assistant/embedded

😐 Но код конечно интересный — пробежался по исходникам.
Всё выглядит так, что разработчики, создавая плагин для интеллекта искусственного решили пренебречь интеллектом естественным.


Лапидарно — несколько моментов, которые прямо бросаются в глаза 👀

🚨 Структура — всё в кучу, как в гостях у Облонских: и бизнес-логика, и Slate UI, и конфиги, и тесты.

💡 Один из способов организации кода плагина можно посмотреть в моём open-source UnrealOpenAIPlugin — простейшее разделение исходников на 3 модуля:

🔤Core классы — ядро
🔤Пользовательский интерфейс — Slate/UMG
🔤Тесты

🔴 Использование TSet в простейшем случае для 14 символов? Возможно, конечно автор изучал структуры данных на данном коде — кто знает:
FString FAIAssistantConfig::GetMainUrlAsRegexString() const
{
static const TSet<FString::ElementType> CharactersToEscape{
'.', '*', '+', '?', '(', ')', '[', ']', '{', '}', '^', '$', '|', '\\',
};
FString Escaped;
Escaped.Reserve((MainUrl.Len() * 2) + 2 /* Allow for regex anchors */);
Escaped += FString::ElementType('^');
for (const FString::ElementType Character : MainUrl)
{
if (CharactersToEscape.Contains(Character))
{
Escaped += FString::ElementType('\\');
}
Escaped += Character;
}
Escaped += FString::ElementType('$');
Escaped.Shrink();
return Escaped;
}


💡 TSet тут избыточен — создаётся хеш-таблица с бакетами и метаданными для всего нескольких статических символов. Хватит switch/if или простейшей строки-набора:
static const FString CharsToEsc = TEXT(".+*?()[]{}^$|\\");


💡 Кому интересно, попробуйте переписать код выше самостоятельно. Правда к радости разработчика, компилятор часть лишнего тут и так соптимизирует.

🔴 FString::ElementType в данном случае только усложняет читаемость — можно смело использовать TCHAR.

🟢 Напоминаю, что тип FString имеет методы Append и AppendChar, которые аккуратно избавят от громоздких конструкций вида += FString::ElementType
⬇️
Escaped += FString::ElementType('^');

⬇️
Escaped.AppendChar('^');


💡 Сама функция GetMainUrlAsRegexString привязана к классу. Очевидно, её можно освободить или оформить как часть библиотеки утилит, передавая MainUrl параметром. Это разблокирует (помимо славы выдающегося архитектора ПО):

🔤Переиспользование
🔤Простоту тестирования — изолированные unit-тесты
🔤Композицию — можно комбинировать функции
🔤Single Responsibility Principe (SRP) — принцип единственной ответственности: функция делает ровно свою работу, а не «висит» на конфиг-классе, к которому относится лишь косвенно

🔴 Тесты написаны в старых нотациях IMPLEMENT_SIMPLE_AUTOMATION_TEST, хотя Automation Spec уже давно доступен. Ничего критичного, но зачем тянуть старое в новом плагине.

💡В курсе по тестированию на канале мы рассматриванием оба подхода.

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | X | LifeEXE School | Itch | Wiki | Курс по UE

#code #cpp #plugin #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #ai #ai_assistant #tests #code_review
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3712🦄742😁21👍1
Media is too big
VIEW IN TELEGRAM
🆕 Всем привет, всем привет! 🆕

Новое видео в эту пятницу на канале — код-ревью плагина AI Assistant, о котором недавно был пост.

В ноябре возвращаемся к разработке игрового движка 🤘 Материалы в постпродакшне. Об этом рассказываю в начале код-ревью 😎


🔽 Ролик уже доступен на Boosty и Patreon 🔽

Увидимся в конце рабочей недели на канале!

💡Плейлист code review

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#code #cpp #plugin #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #lifeexe_youtube #ai #ai_assistant #code_review
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3184👍1🦄11
💥 Всем привет, всем привет! 💥

Видео с код-ревью AI Assistant плагина сегодня вечером на канале ⬇️

🔗 https://youtu.be/Cfj8774H1sU

🔤Посмотрим как работает плагин
🔤Проведём несколько рефакторингов
🔤Расскажу про ближайшие планы

Подключайтесь вечером в чат премьеры
— буду рад всех видеть 🤘

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#code #cpp #plugin #unrealengine #ue5 #gamedev #lifeexe #lifeexecode #lifeexe_youtube #ai #ai_assistant #code_review
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍7🦄511
This media is not supported in your browser
VIEW IN TELEGRAM
🤘 Всем привет, всем привет! 🤘

Серия по разработке игрового движка возвращается в эту субботу 🚀


🔽 Ранняя премьера уже доступна на Boosty и Patreon 🔽

Начинаем работу над самим движком 🤘

🟢 Настраиваем основной CMAKE проект движка
🟢 Генерируем версию движка
🟢 Создаем Windows и Linux пайплайны сборки
🟢 Подключаем precompiled header files — PCH
🟢 Генерируем фильтры-директории в Visual Studio

Увидимся в конце недели на канале!

💡 Плейлист серии GAME ENGINE
💡 Вики проекта

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#gameengine #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥55751👍1🦄1
🤘 Всем привет, всем привет! 🤘

Новое видео по движку на канале ⬇️

🔗 https://youtu.be/ohEXEPYESSE

Репозиторий on air ▶️

🔗 https://github.com/life-exe/LifeExeEngine

Начинаем работу над самим движком (НАКОНЕЦ-ТО) 🤖

🟢 Настраиваем основной CMAKE проект движка
🟢 Генерируем версию движка
🟢 Создаем Windows и Linux пайплайны сборки
🟢 Подключаем precompiled header files — PCH
🟢 Генерируем фильтры-директории в Visual Studio

💡 Плейлист серии GAME ENGINE
💡 Вики проекта

Хэш-ID видео сгенерировался легендарный 😆

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#gameengine #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥289🐳622🦄11
LifeEXE | Unreal Engine | CG
📱 Всем привет, всем привет! 📱 Вышла Visual Studio 2026 Insiders — так теперь называется preview сборка. Скачать бесплатную Community версию можно по ссылке ⬇️ 🔗 Visual Studio 2026 Insiders Внутри: 🔤Обновленный интерфейс 🔤Улучшения редактора 🔤Подсветка…
📱 Всем привет, всем привет! 📱

Вышел официальный релиз Visual Studio 2026 ⬇️

🔗 https://visualstudio.microsoft.com/downloads

Много интересного для C++ разработчиков (для нас 😆) ➡️

🔤Обновлённый интерфейс + добавлено 11 новых тем
🔤Новый набор инструментов сборки: Microsoft C++ Build Tools v14.50 — улучшена поддержка стандартов C++23
🔤Предварительная поддержка AddressSanitizer для ARM64
🔤Новые хоткеи: например, Ctrl+W закрывает вкладку
🔤Подсветка атрибутов C++
🔤Возможность генерировать препроцессированный вывод файла прямо из Solution Explorer
🔤Новый проект по умолчанию для MSBuild теперь C++20
🔤Улучшен Copilot Chat
🔤Рендеринг Mermaid chart

Активно развивают поддержку Unreal Engine проектов ➡️

🔤Аргументы командной строки можно предавать и для UE проектов через верхний toolbar
🔤Performance улучшен. Имеются результаты benchmark для Unreal Engine City Sample

Все подробности в блоге Visual Studio ⬇️

🔗 What’s New for C++ Developers in Visual Studio 2026 version 18.0

На моем канале имеется научно-популярные видео в тему⬇️

🔗 ТОП-50 горячих клавиш Visual Studio для навигации, редактирования кода и дебагинга
🔗 OpenAI демо «Vision + Text To Speech» в CitySample от Unreal Engine

🔤🔤🔤🔤🔤

#vs #visual_studio #vs2026 #code #cpp #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥158🦄1👾1
This media is not supported in your browser
VIEW IN TELEGRAM
📕 Всем вечерний привет! 📕

Небольшой комьюнити туториал по настройке кастомной гравитации в 🎮nreal Engine⬇️

🔗 Custom Gravity in Unreal Engine

💡 А для настройки антигравитации можно установить новую IDE от GoogleAntigravity и бесплатно попробовать в ней недавно вышедшую Gemini 3. Подробнее ➡️

🔤Introducing Google Antigravity
🔤A new era of intelligence with Gemini 3

#cpp #gamedev #gravity #gemini #gemini3 #antigravity #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2676👍1🦄1
🤘 Всем привет, всем привет! 🤘

В пятницу новое видео на канале — начинаем разработку системы логирования для нашего движка ⬇️

🟢 Настраиваем пакетный менеджер conan
🟢 Подключаем библиотеку spdlog
🟢 Создаем класс лога и уровень логирования verbosity
🟢 Реализуем идиому pIpml: pointer to implementation
🟢 Используем синглтон Майерса
🟢 Добавляем NonCopyable класс
🟢 Рассматриваем std::format (C++20)

Ранняя премьера уже доступна на Boosty и Patreon


Увидимся в конце недели на канале!

💡 Плейлист серии GAME ENGINE
💡 Вики проекта

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#gameengine #logging #cpp #log #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
1125👍9🤩922❤‍🔥1🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
🤪 Всем привет, всем привет! 🤪

В пятницу будем применять идиому pImpl для логгера.
В преддверии этого написал небольшую статью, которая доступна для всех по ссылке ⬇️

🔗 Pointer to implementation (pImpl) или при чём тут Чеширский кот?

Кто не знает идиому, рекомендую ознакомиться до премьеры, кто в курсе — можно освежить знания 📕

Идиома применяется для ⬇️
🟢 Ускорения сборки проекта — Compilation Firewall
🟢 Скрытия деталей реализации из публичного API
🟢 Стабильности бинарного интерфейса — ABI

В статье разбираем цепочку ⬇️
🔤Почему forward declaration не решает проблему полностью ⤵️
🔤 Классическую реализацию через сырые указатели ⤵️
🔤 Современный подход с std::unique_ptr ⤵️
🔤 Важные нюансы (почему деструктор должен быть в единице трансляции — .cpp файле) ⤵️
🔤 Плюсы / минусы

Примеры кода присутствуют 👨‍💻

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#gameengine #logging #cpp #log #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥34👍5🦄422
🤘 Всем привет, всем привет! 🤘

Новое видео по движку на канале ⬇️

🔗 https://youtu.be/jxMXtvZspHU

🔤🔤🔤🔤🔤🔤

🟢 Настраиваем пакетный менеджер conan
🟢 Подключаем библиотеку spdlog
🟢 Создаем класс лога и уровень логирования
🟢 Реализуем идиому pIpml
🟢 Используем синглтон Майерса
🟢 Добавляем NonCopyable класс
🟢 Рассматриваем std::format

Видео юбилейное #️⃣ 1️⃣🔤🔤


💡 Плейлист серии GAME ENGINE
💡 Вики проекта
💡 Репозиторий движка

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#log #logging #gameengine #gameengine14 #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
5121🔥1592👍1🦄1
This media is not supported in your browser
VIEW IN TELEGRAM
🤘 Всем привет, всем привет! 🤘

Новое видео по игровому движку в эту пятницу! Продолжаем программировать систему логирования 🙃

Ранняя премьера уже доступна на Boosty и Patreon


🔤🔤🔤🔤🔤🔤

🟢 Создаем категорию логирования
🟢 Добавляем макрос DEFINE_LOG_CATEGORY_STATIC
🟢 Выводим лог в файл
🟢 Рассматриваем std::filesyatem и std::chrono

🔤🔤🔤🔤🔤

💡 Плейлист серии GAME ENGINE
💡 Вики проекта
💡 Репозиторий движка

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#log #logging #gameengine #gameengine15 #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
16👍18🔥1264🦄11
🤘 Всем вечерний привет! 🤘

Новое видео по движку на канале ⬇️

🔗 https://youtu.be/JxQdOn2dmcY

🔤🔤🔤🔤🔤🔤

🟢 Создаем категорию логирования
🟢 Добавляем макрос DEFINE_LOG_CATEGORY_STATIC
🟢 Выводим лог в файл
🟢 Рассматриваем std::filesyatem и std::chrono

🔤🔤🔤🔤🔤

💡 Плейлист серии GAME ENGINE
💡 Вики проекта
💡 Репозиторий движка

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#log #logging #gameengine #gameengine15 #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥296❤‍🔥6🦄32
🤘 Всем привет, всем привет! 🤘

📱 Новое видео по разработке игрового движка уже доступно на Boosty и Patreon


Лекция очень насыщенная — финально полируем систему логирования 🙃

🔤🔤🔤🔤🔤🔤

📌 Гвоздь программы — C++20 Concepts

Разбираемся с концептами на практике ⬇️
std::constructible_from
std::convertible_to
std::same_as


Другие темы выпуска ⬇️

🟢 std::source_location (C++20) — автоматический вывод имени функции и номера строки
🟢 Пишем свой макрос LE_LOG по аналогии с Unreal Engine
🟢 Разбираем идиому макросов do{}while(0)
🟢 Применяем if constexpr (C++17) для compile-time проверок
🟢 Фиксим debugbreak под Linux
🟢 Включаем /Zc:preprocessor (стандартный препроцессор в MSVC)
🟢 Работаем с Variadic Macros: эллипсис ..., __VA_ARGS__ и __VA_OPT__

🔤🔤🔤🔤🔤

💡 Плейлист серии GAME ENGINE
💡 Вики проекта
💡 Репозиторий движка

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#concepts #log #logging #gameengine #gameengine16 #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
7🔥3096🦄111
📱 Всем вечерний привет! 📱

В 🎮nreal Engine имеется полезный спецификатор для работы со статическими массивами — ArraySizeEnum ⬇️

UENUM(BlueprintType)
enum class ECharacterClass : uint8
{
Warrior UMETA(DisplayName = "Warrior"),
Priest UMETA(DisplayName = "Priest"),
Ranger UMETA(DisplayName = "Ranger"),
Druid UMETA(DisplayName = "Druid"),

Count UMETA(Hidden)
};

// UI цвета для каждого класса
UPROPERTY(EditAnywhere, meta = (ArraySizeEnum = "ECharacterClass"))
FColor UIColors[(uint8)ECharacterClass::Count];

// Базовое здоровье для каждого класса
UPROPERTY(EditAnywhere, meta = (ArraySizeEnum = "ECharacterClass"))
float BaseHealth[(uint8)ECharacterClass::Count];


💡 Чем он полезен ⬇️

🟢 В редакторе массив показывает названия элементов enum
🟢 Размер массива автоматически синхронизируется с enum
🟢 Типобезопасный и понятный доступ к элементам

‼️ Нюансы использования ⬇️

⚠️ Рекомендуется добавлять в enum элемент Count/MAX/Total с пометкой UMETA(Hidden) — так удобнее определять размер массива и этот элемент не будет виден в редакторе
⚠️ Нельзя использовать BlueprintReadWrite/BlueprintReadOnly
⚠️ Для Blueprint доступа создавайте getter функции
⚠️ В примере я применяю C-style cast для компактности кода, но лучше использовать современный подход со static_cast

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#tips_and_tricks #unrealengine #ue5 #code #cpp #gamedev #lifeexe #lifeexecode
Please open Telegram to view this post
VIEW IN TELEGRAM
55🔥3110🦄5🐳22👍1
▶️ Всем привет, всем привет! ▶️

Непостоянная рубрика: Воскресный C++ 🦊

Типизация и применение std::string_literals в современном C++

📕 Полноценная статья доступна для подписчиков Boosty и Patreon


using namespace std::string_literals; — это директива в C++, которая позволяет использовать суффикс s для создания объектов std::string напрямую из строковых литералов.

Эта возможность появилась в стандарте C++14.

В «классическом» C++ строковый литерал "Hello" имеет тип const char* — C-style массив символов, а не std::string➡️

#include <string>

int main()
{
auto str1 = "Hello"; // Тип: const char*

using namespace std::string_literals;
auto str2 = "Hello"s; // Тип: std::string
return EXIT_SUCCESS;
}


⁉️ ЗАЧЕМ ЭТО НУЖНО ⁉️

1️⃣ КОНКАТЕНАЦИЯ СТРОК

Без string_literals нельзя просто взять и сложить два const char*➡️

std::string result = "Hello" + ", world";

// ОШИБКА компиляции!
// компилятор выдаст что-то такое ->
// error: invalid operands to binary expression

💡 Почему? Потому что в C++ нельзя складывать два указателя (адреса памяти). Это не имеет математического смысла. Указатели можно вычитать в контексте одного массива, но не складывать.

А вот с суффиксом s это работает, так как вызывается перегруженный operator+ для класса string ➡️

#include <print>
#include <string>

int main()
{
using namespace std::string_literals;

auto result = "Hello"s + ", world"s;
std::println("{}", result);

return EXIT_SUCCESS;
}


2️⃣ ПЕРЕГРУЗКА ФУНКЦИЙ (Вот тут бывает больно!)

Что будет выведено в консоль? ➡️

#include <print>
#include <string>

void process(bool param)
{
std::println("bool");
}

void process(const std::string& str)
{
std::println("string");
}

int main()
{
using namespace std::string_literals;

process("hello"); // ?
process("hello"s); // ?

return EXIT_SUCCESS;
}


Ответ может удивить:
😂 process("hello") выведет bool
😉 process("hello"s) выведет string

Почему так? У компилятора есть два пути➡️

1️⃣От const char* к std::string через конструктор класса — это User-defined conversion.

2️⃣ От указателя к bool (любой не null указатель = true) — это Standard conversion.

🔗Пример в Compiler Explorer

В C++ стандартные преобразования имеют приоритет. Поэтому строка молча превращается в true, и вы попадаете не в ту функцию — суффикс s решает эту проблему.

💡 В продакшн коде таких семантически далёких перегрузок лучше избегать. Но на реальных сигнатурах с дефолтами и несколькими параметрами такое легко пропустить. Поэтому это еще один из способов отстрелить себе ногу в С++

📕 Больше информации, ньюансов и примеров со ссылками на Compiler Explorer в полноценной статье на Boosty и Patreon


🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | LifeEXE School | Itch | X | Wiki | Курс по UE

#cpp #tips_and_tricks #code #lifeexe #lifeexecode #lifeexeEDU
Please open Telegram to view this post
VIEW IN TELEGRAM
524🔥1552👍1
🤘 Всем привет, всем привет! 🤘

Новая лекция по разработке игрового движка в эту пятницу на канале — финально полируем систему логирования 🙃

📱 Для желающих видео уже доступно на Boosty и Patreon


🔤🔤🔤🔤🔤🔤

📌 Основная тема выпуска — концепты C++20 Concepts

Концепты — это именованные требования к типам, которые делают ограничения шаблонов читаемыми и служат современной альтернативой идиоме SFINAE.

Можно сказать, что это эволюция метапрограммирования: «сырые» type traits превращаются в выразительные интерфейсы.

Разбираемся со следующими концептами на практике ⬇️
std::constructible_from
std::convertible_to
std::same_as


Другие темы выпуска ⬇️

🟢 std::source_location (C++20) — автоматический вывод имени функции и номера строки
🟢 Пишем свой макрос LE_LOG по аналогии с Unreal Engine
🟢 Разбираем идиому макросов do{}while(0)
🟢 Применяем if constexpr (C++17) для compile-time проверок
🟢 Фиксим debugbreak под Linux
🟢 Включаем /Zc:preprocessor (стандартный препроцессор в MSVC)
🟢 Работаем с Variadic Macros: эллипсис ..., __VA_ARGS__ и __VA_OPT__

🔤🔤🔤🔤🔤

💡 Плейлист серии GAME ENGINE
💡 Вики проекта
💡 Репозиторий движка

🔤🔤🔤🔤🔤🔤🔤

🤝 Поддержать:
Patreon | Boosty | PayPal

Ресурсы:
GitHub | Itch | X | Wiki | LifeEXE School

#concepts #log #logging #gameengine #gameengine16 #cmake #cpp #github #gamedev #lifeexe #lifeexecode #lifeexeengine
Please open Telegram to view this post
VIEW IN TELEGRAM
5515🔥942