InstancedStruct в Unreal Engine
14:47
Asset Bundles в Unreal Engine
10:06
Пікірлер
@alisanyaxd
@alisanyaxd Күн бұрын
Звук очень тихий что-то
@nickname20151
@nickname20151 6 күн бұрын
Блин, какой же крутой контент. Я человек который из бэкенда изучаю анрил, и меня корёжит чутка от блюпринтов, и все гайды часто про блюпринты, а у вас много про C++ и связку, очень нравится контент. Лично сам из-за силы привычки плююсь от блюпринтов и хочется многие даже простые вещи писать на плюсах для своего удобства, по этому ваш канал как находка, тут про паттерны в рамках анрила, и про C++ много годноты. Надеюсь получишь заслуженную популярность, темы очень интересные и подача бодрая)
@sergeypetrov7657
@sergeypetrov7657 8 күн бұрын
Чел спасибо тебе громадное) я в коммерческой разработке уже 5 лет, смотрю твои видео и восполняю пробелы! Ты молодца, так держать)
@uegamedev
@uegamedev 9 күн бұрын
Сейчас придут школьники с вопросами, а как в блУпринтах сделать :D Спасибо, интересно, полезно.
@семпай-н9р
@семпай-н9р 10 күн бұрын
Не поверишь , реально помогло , спасибо !!! жду фитбек , может мидлом возьмут ))
@natatem0080
@natatem0080 9 күн бұрын
Привет) Будем надеяться, что возьмут)
@семпай-н9р
@семпай-н9р 10 күн бұрын
думаю поможет 😁
@семпай-н9р
@семпай-н9р 10 күн бұрын
через 17 мин у меня собес на мидла . Смотрю твой видос )
@DeadRabbitCanDance
@DeadRabbitCanDance 10 күн бұрын
какой же ужас и кочмар. В блюпринтах это можно сделать?
@natatem0080
@natatem0080 10 күн бұрын
Привет Нет, но можно сделать свой BP метод, который будет вызывать код в С++
@DeadRabbitCanDance
@DeadRabbitCanDance 9 күн бұрын
@@natatem0080 Ясно. А механизм загрузки уровня при прохождении - это нужно самому писать? Или как обычно - уже есть готовый компонент, в который кидаешь все зависимости или как-то там делишь части - это типа с тэгом 1, а это с тэгом 2... и эта убер хрень сама в параллель занимается подгрузкой уровня ?
@natatem0080
@natatem0080 9 күн бұрын
@@DeadRabbitCanDance у анрила есть World Partition для уровней
@DeadRabbitCanDance
@DeadRabbitCanDance 9 күн бұрын
@@natatem0080 Ты планируешь его освещать?
@семпай-н9р
@семпай-н9р 11 күн бұрын
Моё Уважение, мало кто решается снимать не банальные вещи , тем более на с++м
@семпай-н9р
@семпай-н9р 11 күн бұрын
@BGD-Belarus-Game-Dev
@BGD-Belarus-Game-Dev 13 күн бұрын
У меня в Rider отображаются созданные классы, при условии, что проект запущен в эдиторе Может у тебя выключена функция LiveCompiling или что-то вроде того
@PsijicV
@PsijicV 14 күн бұрын
Что, если все Id ставить по умолчанию "PrimaryAssetLabel" или "AssetItems"? Разделение по PrimaryAssetId нужно для исключения ненужных при релизе?
@natatem0080
@natatem0080 13 күн бұрын
Привет Для того чтобы контролировать, что именно ты хочешь подгрузить
@PsijicV
@PsijicV 13 күн бұрын
@@natatem0080 Ммм, хотелось бы подробнее ответ.
@DeadRabbitCanDance
@DeadRabbitCanDance 15 күн бұрын
Тяжело воспринимать. Очень много лишних не относящихся к сути слов, фраз, рассказов, о том о сем, ни о чем, потому что язык как помело говорит, а мозг работает отдельно и делает не то, о чем говорит язык, это нормально, ведь это мы читаем рэп, а не по сути того как что сделать, да и пофиг всем, потому что нормальный человек это смотреть и слушать не будет, а те кто будут - такие же не собирающиеся четко формулировать свои мысли, тяп ляп, хренак xyяк вроде так, но да, вдруг заработало, алилуйя. патерн-хуятерн-название-хyeвоe но мы его специально таким сделаем и потом снесем, потом сделаем не сделаем, нет сука не здесь, а и так сойдет! Но всей этой кашей речевой непонятно. Ну зачем например 10:01 UPROPERTY, что он делает? Может лучше вместо каши это сказать - времени займет меньше, а толку будет больше. А так всякой фигни наговорено уже 10 минут, а по сути ничего не сказано. Далее - я не понял, зачем делать два раза скрипт в двух разных объектах по отправлению сообщения. Это чё за дикий копипастинг? Тебя мама не учила, что дублировать код и тараторить - это нехорошо, это бяка. Код должен быть сделан в одном месте, а не в разных местах одно и то же. В каждом отдельном инстансе отличаться могут только данные. Про дата ориентед мама не говорила? Ах да, ты же репер, ты маму не слушал. Я понял. Ты на своей волне. Ну давай тараторь и пиши один код по сто раз - это круто, бро! На каждый поднятый обеъкт должен включаться виджет с анимацией создания и затухания. А для скорости - наверно нужно пулинг использовать. То что сделано в этом примере - это прямо из реализации CONCORDа скопипащено. - "Я мог бы все сделать правильно и нормально, но я решил просто рассказать вам как не надо делать, думайте сами, это программирование, детки!". *А вообще охринительно. Удачи тебе!* Буду набираться у тебя опыта.
@funnyhub696
@funnyhub696 16 күн бұрын
Круто делаешь, продолжай! Несколько дней назад начал изучать Unreal Engine и параллельно C++ . Пока тяжело воспринимаю , что ты тут делаешь, но надеюсь спустя несколько месяцев буду на таком уровне.
@babush6
@babush6 21 күн бұрын
А как создавать категории в Blueprint для PrimaryAsset написанного на С++, например что бы геймдизайнер мог создать на БП свой enum который указывал к какому типу оружия относится определенный item и при заполнение этого PrimaryAsset в редакторе он мог выбрать новый тип оружия ? Я вижу только решение это создавать PrimaryAsset на БП.
@k0c0u
@k0c0u 23 күн бұрын
Спасибо за видео! Можно вас попросить показать как загружать дата тейбл из гугл документов.
@natatem0080
@natatem0080 22 күн бұрын
Привет Это связь с бэком Просто настраиваешь, чтоб сервер тебе прислал json таблицы и всё
@natatem0080
@natatem0080 22 күн бұрын
Или речь о том, чтобы её просто скачать и загрузить в анрил?
@herrscheroflolly5255
@herrscheroflolly5255 25 күн бұрын
Хорошее видео получилось. Было бы еще замечательно, если бы вы показали полноценное создание меню игры с использованием C++, а то на эту тему очень мало уроков.
@Constant_sqrt441
@Constant_sqrt441 26 күн бұрын
кстати, сейчас пересматриваю твои ролики и у тебя там часто окна блупринтов открываются хер пойми как (то в новом окне, то с размером какие-то проблемы), можешь перейти в General -> Appearance -> Editor Preferences -> User Interface -> Asset Editor Open Location = Main Window
@Constant_sqrt441
@Constant_sqrt441 26 күн бұрын
Очень классные ролики, продолжай в том же духе)! Мне особенно нравятся туториалы по плюсам в анриле, может подскажешь какие-нибудь полезные источники по продвинутому изучение c++
@natatem0080
@natatem0080 26 күн бұрын
Привет Я учил С++ по видео с канала #SimpleCode
@mqrcoder
@mqrcoder 28 күн бұрын
Крутой урок. А вот как подключаться к сессии через стим инвайты?
@natatem0080
@natatem0080 27 күн бұрын
Привет Вроде, это сразу можно При создании сессии нужно просто разрешить подключаться друзьям
@oleksiivlasenko2549
@oleksiivlasenko2549 29 күн бұрын
Hey. I don't have a Cyrillic keyboard in my working laptop, but I'm watching this video on it, so I'll be asking questions in English. When calculating the delta transform, can you use just the translation component of the transform, and find the delta by subtracting translations instead of doing the transform multiplication? ie. DeltaTranslation = ToWorld.Translation - LastFrameWorldTransform.Translation. Technically it doesn't need to have Rotation and Scale to find the distance that the object travels between frames, it cares about the positional change only, innit? And I think subtracting 2 vectors is cheaper rather than doing transform multiplication + inverse.
@natatem0080
@natatem0080 29 күн бұрын
Hi! Yes, you can do it, if you only need the position change. But in future we will be able to rotate our character, so you need a full transform
@Anoswaldigort
@Anoswaldigort Ай бұрын
круто!
@aaaaaa-lz6br
@aaaaaa-lz6br Ай бұрын
Хороший гайд другалек. А как через line trace из персонажа передавать в homing projectile?
@natatem0080
@natatem0080 Ай бұрын
Привет Это уже вопрос к архитектуре кода
@aaaaaa-lz6br
@aaaaaa-lz6br Ай бұрын
@@natatem0080 но в теории это как-то можно сделать через blueprint interface?
@aleksandrkolomoiets1232
@aleksandrkolomoiets1232 Ай бұрын
Ждал сцену после титров)
@_4eep
@_4eep Ай бұрын
ReSharper C++ Поставь) Я просто раз в месяц удаляю, чищу реестр и ставлю заново. И весь головняк решен) С Rider все-же возни больше, да и студию все ровно нужно оставлять для сборки солюшина)
@valeriymalishevskyi1723
@valeriymalishevskyi1723 Ай бұрын
сборку солюшина Rider тоже делает
@_4eep
@_4eep Ай бұрын
@@valeriymalishevskyi1723 через пкм на .uproject?) как?)
@valeriymalishevskyi1723
@valeriymalishevskyi1723 Ай бұрын
@@_4eep У меня макбук на м1 и Rider лицензионьій и все работает все собирает без проблем
@olliverkatana4168
@olliverkatana4168 Ай бұрын
Спасибо за туториал, друже. Сам полгода назад завис на этой теме с этим же паучком, но так до ума и не довел (((. Жду с нетерпением следующего урока.
@faimenDev
@faimenDev Ай бұрын
Тайм коды нужны 35 минут сложно смотреть целиком
@valeriymalishevskyi1723
@valeriymalishevskyi1723 Ай бұрын
Я тебе писал про JetBrains Rider. В нем есть поддержка Unreal Engine. Я попробувал безплатную версию и после на VS уже не мог смотреть и купил себе любимому на новьій год за 200$ . попробуй хоть безплатную
@valeriymalishevskyi1723
@valeriymalishevskyi1723 Ай бұрын
👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍
@WowaBBS
@WowaBBS Ай бұрын
Спасибо. Зачем нужен ВПН? Какое напольное покрытие у тебя?
@lovingofbiscuit
@lovingofbiscuit Ай бұрын
Спасаю всех тех, кто будет работать с OSS. Если у вас не ищется сессия в 98% того, что это не ваша вина, вина лежит на тех, кто нагло использует 480 AppID в корыстных целях(пираты). Я потратил несколько дней на поиск не РЕШЕНИЯ, а причины. Как проверить, что ваши проблема не связана с пиратами? Все очень легко, вам надо запустить(не обязательно билдить игру) в режими "standalone game" с отображением логов. И теперь если при нажатии поиска сессий, вы в логах наблюдаете следующую надпись "STEAM: Found NUM lobbies, finalizing the search", где число NUM меньше 49,50 проблема с вашей стороны. Если коротко, то на одном AppID может работать 50 сессий. Инфа которой ПРОСТО НИГДЕ НЕТ! И да забыл написать, ВПН для всех этих тестов не требуется. Всем удачи)
@0x80-linux_user
@0x80-linux_user Ай бұрын
Отличный контент, продолжай
@ДанилКулик-п5ж
@ДанилКулик-п5ж 2 ай бұрын
Будет урок по инвайтам друзей на сессию?
@natatem0080
@natatem0080 2 ай бұрын
Привет Да, конечно
@dominuspiritus
@dominuspiritus 2 ай бұрын
"Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние?" - если два потока используют твой "константный" метод, который ничего не должен менять внутри объекта, то всё ломается. хотя хрен с ней многопоточкой, у тебя ExecuteCommand в персонаже не const, но у самой команды execute таки const. смысл? "Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать?" - ок, если надо в runtime менять количество элементов в контейнере, то подойдёт TArray с TInlineAllocator. "Да даже с обычным TArray, но чтоб без гемора?" - а в чём собственно гемор? ты уже сделал enum в котором на этапе компиляции жёстко ограничиваешь количество команд с непрерывными значениями от 0. добавь в него SIZE последним для удобства тогда и будет легко его использовать как шаблонный параметр для TInlineAllocator. я бы понял, если бы у тебя была фабрика/билдер, которые могли бы из lambda выражений формировать новые команды или даже целое дерево вызовов команд, которые зависят не от конкретных классов, а как-то находу лепятся. но у тебя просто пара enum - класс команды. или ты хочешь в TMap хранить больше одного экземпляра одной и той же команды?)) "Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта" - я так понимаю это про SP на 11:50. я про 15:10. там элементарно делается хранение фасада локально в классе перса. "Причем тут вообще Input Action‘ы ?" - мне не понравилось, что в персонаже хранится такое многообразие данных разрозненно, хотя можно легко сгруппировать их в структуру и настраивать так же через blueprints. "Что ты имеешь ввиду под «влиянием на состояние команды»?" - это был очень толстый намёк, что не надо в команде хранить никакое состояние. такие вещи в реальных проектах отстреливают ногу в самый неожиданный и неудобный момент. искать такие ошибки крайне трудно. это что-то на уровне удалять таймер из лямбды, которая по нему вызвалась. я вообще не понимаю, зачем передавать в команду персонажа и потом хранить по weak_ptr, если ты вызываешь команду из того же перса и можешь передать this. "«Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой" - так а почему ты самый сок не показал? где переключалка в рантайме? я именно к этому и докопался. написать в коде execute(MyEnum::MyCommand) каждый может. а вот сделать так, чтобы в рамках одного запуска у тебя по кнопке отрабатывали разные функции, а ещё сделать это красиво, это уметь надо) P.S. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@k0c0u
@k0c0u 2 ай бұрын
Game Instance есть ли на клиентах?
@natatem0080
@natatem0080 2 ай бұрын
@@k0c0u привет, да
@valeriymalishevskyi1723
@valeriymalishevskyi1723 2 ай бұрын
Хорошие уроки у тебя
@valeriymalishevskyi1723
@valeriymalishevskyi1723 2 ай бұрын
Удали WS установи Rider и Copilot и будет тебе счастье!!!!
@dominuspiritus
@dominuspiritus 2 ай бұрын
Итого мы использовали mutable там, где можно было снять константность использовали map там, где можно было обойтись обычным static array (tarray с inline allocator) использовали shared pointer'ы там, где хватило бы локальных объектов продолжили вписывать input action'ы в класс персонажа, вместо вынесения этих сущностей в отдельную структуру добавили состояние в команду и не показали как на него влиять не сделали переключение команд, что является главным поведением в этом паттерне
@natatem0080
@natatem0080 2 ай бұрын
Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние? Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать? Да даже с обычным TArray, но чтоб без гемора? Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта Причем тут вообще Input Action‘ы ? Что ты имеешь ввиду под «влиянием на состояние команды»? «Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой
@dominuspiritus
@dominuspiritus 2 ай бұрын
​@@natatem0080 "Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние?" - если два потока используют твой "константный" метод, который ничего не должен менять внутри объекта, то всё ломается. да и в конце концов у тебя команда телепортирует персонажа. почему она константная? наверное есть разница между семантикой и синтаксисом языка?) "Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать?" - ок, если надо в runtime менять количество элементов в контейнере, то подойдёт TArray с TInlineAllocator. "Да даже с обычным TArray, но чтоб без гемора?" - а в чём собственно гемор? ты уже сделал enum в котором на этапе компиляции жёстко ограничиваешь количество команд и элементы идут по возрастанию от 0. можно вписать последним элемент SIZE и использовать для передачи в шаблонный аргумент TInlineAllocator. я бы понял, если бы у тебя была фабрика/билдер, которые могли бы из lambda выражений формировать новые команды в runtime. но у тебя просто enum. или ты хочешь в TMap пихать больше одного экземпляра одной и той же команды?)) "Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта" - я так понимаю это про SP на 11:50. я про 15:10. там элементарно делается хранение фасада локально в классе перса. "Причем тут вообще Input Action‘ы ?" - мне не понравилось, что в персонаже хранится такое многообразие данных разрозненно, хотя можно легко сгруппировать их в структуру и настраивать так же через blueprints. "Что ты имеешь ввиду под «влиянием на состояние команды»?" - это был очень толстый намёк, что не надо так костыльно пихать никакие переменные в команду. в не учебном проекте такое отстреливает ногу в самый неожиданный момент и часто трудно находится ошибка. у тебя там хранится персонаж чтобы что? ты когда вызываешь команду можешь его передавать как аргумент функции. это к моменту про локальный фасад в персонаже. "«Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой" - ну так чего ж ты самый сок не показал? я тебе об этом и говорю. очень круто, что ты на этапе компиляции можешь написать execute(MyEnum::Command1), но ведь смысл паттерна команда в возможности выбирать вызываемый метод в runtime. и у тебя в видео этого нет.
@dominuspiritus
@dominuspiritus 2 ай бұрын
​@@natatem0080 ​ "Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние?" - если два потока используют твой "константный" метод, который ничего не должен менять внутри объекта, то всё ломается. хотя хрен с ней многопоточкой, у тебя ExecuteCommand в персонаже не const, но у самой команды execute таки const. смысл? "Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать?" - ок, если надо в runtime менять количество элементов в контейнере, то подойдёт TArray с TInlineAllocator. "Да даже с обычным TArray, но чтоб без гемора?" - а в чём собственно гемор? ты уже сделал enum в котором на этапе компиляции жёстко ограничиваешь количество команд с непрерывными значениями от 0. добавь в него SIZE последним для удобства тогда и будет легко его использовать как шаблонный параметр для TInlineAllocator. я бы понял, если бы у тебя была фабрика/билдер, которые могли бы из lambda выражений формировать новые команды или даже целое дерево вызовов команд, которые зависят не от конкретных классов, а как-то находу лепятся. но у тебя просто пара enum - класс команды. или ты хочешь в TMap хранить больше одного экземпляра одной и той же команды?)) "Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта" - я так понимаю это про SP на 11:50. я про 15:10. там элементарно делается хранение фасада локально в классе перса. "Причем тут вообще Input Action‘ы ?" - мне не понравилось, что в персонаже хранится такое многообразие данных разрозненно, хотя можно легко сгруппировать их в структуру и настраивать так же через blueprints. "Что ты имеешь ввиду под «влиянием на состояние команды»?" - это был очень толстый намёк, что не надо в команде хранить никакое состояние. такие вещи в реальных проектах отстреливают ногу в самый неожиданный и неудобный момент. искать такие ошибки крайне трудно. это что-то на уровне удалять таймер из лямбды, которая по нему вызвалась. я вообще не понимаю, зачем передавать в команду персонажа и потом хранить по weak_ptr, если ты вызываешь команду из того же перса и можешь передать this. "«Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой" - так а почему ты самый сок не показал? где переключалка в рантайме? я именно к этому и докопался. написать в коде execute(MyEnum::MyCommand) каждый может. а вот сделать так, чтобы в рамках одного запуска у тебя по кнопке отрабатывали разные функции, а ещё сделать это красиво, это уметь надо) P.S. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@dominuspiritus
@dominuspiritus 2 ай бұрын
​@@natatem0080 "Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние?" - если два потока используют твой "константный" метод, который ничего не должен менять внутри объекта, то всё ломается. хотя хрен с ней многопоточкой, у тебя ExecuteCommand в персонаже не const, но у самой команды execute таки const. смысл? "Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать?" - ок, если надо в runtime менять количество элементов в контейнере, то подойдёт TArray с TInlineAllocator. "Да даже с обычным TArray, но чтоб без гемора?" - а в чём собственно гемор? ты уже сделал enum в котором на этапе компиляции жёстко ограничиваешь количество команд с непрерывными значениями от 0. добавь в него SIZE последним для удобства тогда и будет легко его использовать как шаблонный параметр для TInlineAllocator. я бы понял, если бы у тебя была фабрика/билдер, которые могли бы из lambda выражений формировать новые команды или даже целое дерево вызовов команд, которые зависят не от конкретных классов, а как-то находу лепятся. но у тебя просто пара enum - класс команды. или ты хочешь в TMap хранить больше одного экземпляра одной и той же команды?)) "Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта" - я так понимаю это про SP на 11:50. я про 15:10. там элементарно делается хранение фасада локально в классе перса. "Причем тут вообще Input Action‘ы ?" - мне не понравилось, что в персонаже хранится такое многообразие данных разрозненно, хотя можно легко сгруппировать их в структуру и настраивать так же через blueprints. "Что ты имеешь ввиду под «влиянием на состояние команды»?" - это был очень толстый намёк, что не надо в команде хранить никакое состояние. такие вещи в реальных проектах отстреливают ногу в самый неожиданный и неудобный момент. искать такие ошибки крайне трудно. это что-то на уровне удалять таймер из лямбды, которая по нему вызвалась. я вообще не понимаю, зачем передавать в команду персонажа и потом хранить по weak_ptr, если ты вызываешь команду из того же перса и можешь передать this. "«Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой" - так а почему ты самый сок не показал? где переключалка в рантайме? я именно к этому и докопался. написать в коде execute(MyEnum::MyCommand) каждый может. а вот сделать так, чтобы в рамках одного запуска у тебя по кнопке отрабатывали разные функции, а ещё сделать это красиво, это уметь надо) P.S. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@dominuspiritus
@dominuspiritus 2 ай бұрын
​@@natatem0080"Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние?" - если два потока используют твой "константный" метод, который ничего не должен менять внутри объекта, то всё ломается. хотя хрен с ней многопоточкой, у тебя ExecuteCommand в персонаже не const, но у самой команды execute таки const. смысл? "Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать?" - ок, если надо в runtime менять количество элементов в контейнере, то подойдёт TArray с TInlineAllocator. "Да даже с обычным TArray, но чтоб без гемора?" - а в чём собственно гемор? ты уже сделал enum в котором на этапе компиляции жёстко ограничиваешь количество команд с непрерывными значениями от 0. добавь в него SIZE последним для удобства тогда и будет легко его использовать как шаблонный параметр для TInlineAllocator. я бы понял, если бы у тебя была фабрика/билдер, которые могли бы из lambda выражений формировать новые команды или даже целое дерево вызовов команд, которые зависят не от конкретных классов, а как-то находу лепятся. но у тебя просто пара enum - класс команды. или ты хочешь в TMap хранить больше одного экземпляра одной и той же команды?)) "Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта" - я так понимаю это про SP на 11:50. я про 15:10. там элементарно делается хранение фасада локально в классе перса. "Причем тут вообще Input Action‘ы ?" - мне не понравилось, что в персонаже хранится такое многообразие данных разрозненно, хотя можно легко сгруппировать их в структуру и настраивать так же через blueprints. "Что ты имеешь ввиду под «влиянием на состояние команды»?" - это был очень толстый намёк, что не надо в команде хранить никакое состояние. такие вещи в реальных проектах отстреливают ногу в самый неожиданный и неудобный момент. искать такие ошибки крайне трудно. это что-то на уровне удалять таймер из лямбды, которая по нему вызвалась. я вообще не понимаю, зачем передавать в команду персонажа и потом хранить по weak_ptr, если ты вызываешь команду из того же перса и можешь передать this. "«Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой" - так а почему ты самый сок не показал? где переключалка в рантайме? я именно к этому и докопался. написать в коде execute(MyEnum::MyCommand) каждый может. а вот сделать так, чтобы в рамках одного запуска у тебя по кнопке отрабатывали разные функции, а ещё сделать это красиво, это уметь надо) P.S. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@konstantinewhite614
@konstantinewhite614 2 ай бұрын
Ни хуя не понятно, но очень интересно 😄
@lovingofbiscuit
@lovingofbiscuit 2 ай бұрын
После перехода с BP на CPP, BP начали вызывать какое-то отвращение, что-ли. Понимаю их использование в анимациях и в чём-то таком мелком и простеньком, но писать системы и использовать их, уж извините... слишком много возникает проблем с оптимизации в самом едиторе, до непонятных просадок уже в самой игре. Да, проще ноды сконектить и всякое всякое, имхо
@microbprod
@microbprod 2 ай бұрын
Ох, ну у тебя и бомбануло (0% осуждения, 100% понимания). Если что-то покупать на маркетплейсе анрыла, то только ассеты с текстурами, звуками и моделями. Всё, что связано с кодом, в 95-98% случаев реально полное говнище. Если текстурки, звуки или модельки как-то можно без особых проблем поправить, то вот такое говнокодище править вообще не стоит, ибо гораздо проще самому логику написать.
@nickname20151
@nickname20151 2 ай бұрын
Очень крутая рубрика, а можешь про ассеты которые советуешь?
@Котвбезумнойшляпе
@Котвбезумнойшляпе 2 ай бұрын
Ооо да, давно такого не видел))
@natatem0080
@natatem0080 2 ай бұрын
Меня аж всё видео дёргает от этого ассета
@ебанат_натрия_228
@ебанат_натрия_228 2 ай бұрын
Извинись.
@valeriymalishevskyi1723
@valeriymalishevskyi1723 2 ай бұрын
👋👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍👍👍
@valeriymalishevskyi1723
@valeriymalishevskyi1723 2 ай бұрын
👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍👍👍
@valeriymalishevskyi1723
@valeriymalishevskyi1723 2 ай бұрын
👋👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍👍
@ебанат_натрия_228
@ебанат_натрия_228 2 ай бұрын
Не нужно вводить людей в заблуждение! Асинхронность != многопоточность. FStreamableManager не загружает ассеты в многопотоке. Чтобы в этом убедиться, достаточно зайти в реализацию StreamableManager'а и увидеть, что у многих Async методов есть проверка check(IsInGameThread()); , которая не позволяет делать загрузку вне игрового потока. Ради эксперимента запустите отдельный поток и вызовите в нём асинхронную загрузку, у вас тут же произойдёт ошибка.
@multiupgame
@multiupgame 2 ай бұрын
Топ, просто топ туториал 💪💪💪
@Motivation4Everyday
@Motivation4Everyday 2 ай бұрын
Нраица!