Блин, какой же крутой контент. Я человек который из бэкенда изучаю анрил, и меня корёжит чутка от блюпринтов, и все гайды часто про блюпринты, а у вас много про C++ и связку, очень нравится контент. Лично сам из-за силы привычки плююсь от блюпринтов и хочется многие даже простые вещи писать на плюсах для своего удобства, по этому ваш канал как находка, тут про паттерны в рамках анрила, и про C++ много годноты. Надеюсь получишь заслуженную популярность, темы очень интересные и подача бодрая)
@sergeypetrov76578 күн бұрын
Чел спасибо тебе громадное) я в коммерческой разработке уже 5 лет, смотрю твои видео и восполняю пробелы! Ты молодца, так держать)
@uegamedev9 күн бұрын
Сейчас придут школьники с вопросами, а как в блУпринтах сделать :D Спасибо, интересно, полезно.
@семпай-н9р10 күн бұрын
Не поверишь , реально помогло , спасибо !!! жду фитбек , может мидлом возьмут ))
@natatem00809 күн бұрын
Привет) Будем надеяться, что возьмут)
@семпай-н9р10 күн бұрын
думаю поможет 😁
@семпай-н9р10 күн бұрын
через 17 мин у меня собес на мидла . Смотрю твой видос )
@DeadRabbitCanDance10 күн бұрын
какой же ужас и кочмар. В блюпринтах это можно сделать?
@natatem008010 күн бұрын
Привет Нет, но можно сделать свой BP метод, который будет вызывать код в С++
@DeadRabbitCanDance9 күн бұрын
@@natatem0080 Ясно. А механизм загрузки уровня при прохождении - это нужно самому писать? Или как обычно - уже есть готовый компонент, в который кидаешь все зависимости или как-то там делишь части - это типа с тэгом 1, а это с тэгом 2... и эта убер хрень сама в параллель занимается подгрузкой уровня ?
@natatem00809 күн бұрын
@@DeadRabbitCanDance у анрила есть World Partition для уровней
@DeadRabbitCanDance9 күн бұрын
@@natatem0080 Ты планируешь его освещать?
@семпай-н9р11 күн бұрын
Моё Уважение, мало кто решается снимать не банальные вещи , тем более на с++м
@семпай-н9р11 күн бұрын
❤
@BGD-Belarus-Game-Dev13 күн бұрын
У меня в Rider отображаются созданные классы, при условии, что проект запущен в эдиторе Может у тебя выключена функция LiveCompiling или что-то вроде того
@PsijicV14 күн бұрын
Что, если все Id ставить по умолчанию "PrimaryAssetLabel" или "AssetItems"? Разделение по PrimaryAssetId нужно для исключения ненужных при релизе?
@natatem008013 күн бұрын
Привет Для того чтобы контролировать, что именно ты хочешь подгрузить
@PsijicV13 күн бұрын
@@natatem0080 Ммм, хотелось бы подробнее ответ.
@DeadRabbitCanDance15 күн бұрын
Тяжело воспринимать. Очень много лишних не относящихся к сути слов, фраз, рассказов, о том о сем, ни о чем, потому что язык как помело говорит, а мозг работает отдельно и делает не то, о чем говорит язык, это нормально, ведь это мы читаем рэп, а не по сути того как что сделать, да и пофиг всем, потому что нормальный человек это смотреть и слушать не будет, а те кто будут - такие же не собирающиеся четко формулировать свои мысли, тяп ляп, хренак xyяк вроде так, но да, вдруг заработало, алилуйя. патерн-хуятерн-название-хyeвоe но мы его специально таким сделаем и потом снесем, потом сделаем не сделаем, нет сука не здесь, а и так сойдет! Но всей этой кашей речевой непонятно. Ну зачем например 10:01 UPROPERTY, что он делает? Может лучше вместо каши это сказать - времени займет меньше, а толку будет больше. А так всякой фигни наговорено уже 10 минут, а по сути ничего не сказано. Далее - я не понял, зачем делать два раза скрипт в двух разных объектах по отправлению сообщения. Это чё за дикий копипастинг? Тебя мама не учила, что дублировать код и тараторить - это нехорошо, это бяка. Код должен быть сделан в одном месте, а не в разных местах одно и то же. В каждом отдельном инстансе отличаться могут только данные. Про дата ориентед мама не говорила? Ах да, ты же репер, ты маму не слушал. Я понял. Ты на своей волне. Ну давай тараторь и пиши один код по сто раз - это круто, бро! На каждый поднятый обеъкт должен включаться виджет с анимацией создания и затухания. А для скорости - наверно нужно пулинг использовать. То что сделано в этом примере - это прямо из реализации CONCORDа скопипащено. - "Я мог бы все сделать правильно и нормально, но я решил просто рассказать вам как не надо делать, думайте сами, это программирование, детки!". *А вообще охринительно. Удачи тебе!* Буду набираться у тебя опыта.
@funnyhub69616 күн бұрын
Круто делаешь, продолжай! Несколько дней назад начал изучать Unreal Engine и параллельно C++ . Пока тяжело воспринимаю , что ты тут делаешь, но надеюсь спустя несколько месяцев буду на таком уровне.
@babush621 күн бұрын
А как создавать категории в Blueprint для PrimaryAsset написанного на С++, например что бы геймдизайнер мог создать на БП свой enum который указывал к какому типу оружия относится определенный item и при заполнение этого PrimaryAsset в редакторе он мог выбрать новый тип оружия ? Я вижу только решение это создавать PrimaryAsset на БП.
@k0c0u23 күн бұрын
Спасибо за видео! Можно вас попросить показать как загружать дата тейбл из гугл документов.
@natatem008022 күн бұрын
Привет Это связь с бэком Просто настраиваешь, чтоб сервер тебе прислал json таблицы и всё
@natatem008022 күн бұрын
Или речь о том, чтобы её просто скачать и загрузить в анрил?
@herrscheroflolly525525 күн бұрын
Хорошее видео получилось. Было бы еще замечательно, если бы вы показали полноценное создание меню игры с использованием C++, а то на эту тему очень мало уроков.
@Constant_sqrt44126 күн бұрын
кстати, сейчас пересматриваю твои ролики и у тебя там часто окна блупринтов открываются хер пойми как (то в новом окне, то с размером какие-то проблемы), можешь перейти в General -> Appearance -> Editor Preferences -> User Interface -> Asset Editor Open Location = Main Window
@Constant_sqrt44126 күн бұрын
Очень классные ролики, продолжай в том же духе)! Мне особенно нравятся туториалы по плюсам в анриле, может подскажешь какие-нибудь полезные источники по продвинутому изучение c++
@natatem008026 күн бұрын
Привет Я учил С++ по видео с канала #SimpleCode
@mqrcoder28 күн бұрын
Крутой урок. А вот как подключаться к сессии через стим инвайты?
@natatem008027 күн бұрын
Привет Вроде, это сразу можно При создании сессии нужно просто разрешить подключаться друзьям
@oleksiivlasenko254929 күн бұрын
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.
@natatem008029 күн бұрын
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Ай бұрын
круто!
@aaaaaa-lz6brАй бұрын
Хороший гайд другалек. А как через line trace из персонажа передавать в homing projectile?
@natatem0080Ай бұрын
Привет Это уже вопрос к архитектуре кода
@aaaaaa-lz6brАй бұрын
@@natatem0080 но в теории это как-то можно сделать через blueprint interface?
@aleksandrkolomoiets1232Ай бұрын
Ждал сцену после титров)
@_4eepАй бұрын
ReSharper C++ Поставь) Я просто раз в месяц удаляю, чищу реестр и ставлю заново. И весь головняк решен) С Rider все-же возни больше, да и студию все ровно нужно оставлять для сборки солюшина)
@valeriymalishevskyi1723Ай бұрын
сборку солюшина Rider тоже делает
@_4eepАй бұрын
@@valeriymalishevskyi1723 через пкм на .uproject?) как?)
@valeriymalishevskyi1723Ай бұрын
@@_4eep У меня макбук на м1 и Rider лицензионьій и все работает все собирает без проблем
@olliverkatana4168Ай бұрын
Спасибо за туториал, друже. Сам полгода назад завис на этой теме с этим же паучком, но так до ума и не довел (((. Жду с нетерпением следующего урока.
@faimenDevАй бұрын
Тайм коды нужны 35 минут сложно смотреть целиком
@valeriymalishevskyi1723Ай бұрын
Я тебе писал про JetBrains Rider. В нем есть поддержка Unreal Engine. Я попробувал безплатную версию и после на VS уже не мог смотреть и купил себе любимому на новьій год за 200$ . попробуй хоть безплатную
@valeriymalishevskyi1723Ай бұрын
👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍
@WowaBBSАй бұрын
Спасибо. Зачем нужен ВПН? Какое напольное покрытие у тебя?
@lovingofbiscuitАй бұрын
Спасаю всех тех, кто будет работать с OSS. Если у вас не ищется сессия в 98% того, что это не ваша вина, вина лежит на тех, кто нагло использует 480 AppID в корыстных целях(пираты). Я потратил несколько дней на поиск не РЕШЕНИЯ, а причины. Как проверить, что ваши проблема не связана с пиратами? Все очень легко, вам надо запустить(не обязательно билдить игру) в режими "standalone game" с отображением логов. И теперь если при нажатии поиска сессий, вы в логах наблюдаете следующую надпись "STEAM: Found NUM lobbies, finalizing the search", где число NUM меньше 49,50 проблема с вашей стороны. Если коротко, то на одном AppID может работать 50 сессий. Инфа которой ПРОСТО НИГДЕ НЕТ! И да забыл написать, ВПН для всех этих тестов не требуется. Всем удачи)
@0x80-linux_userАй бұрын
Отличный контент, продолжай
@ДанилКулик-п5ж2 ай бұрын
Будет урок по инвайтам друзей на сессию?
@natatem00802 ай бұрын
Привет Да, конечно
@dominuspiritus2 ай бұрын
"Снять константность в архитектуре вместо того, чтобы использовать 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. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@k0c0u2 ай бұрын
Game Instance есть ли на клиентах?
@natatem00802 ай бұрын
@@k0c0u привет, да
@valeriymalishevskyi17232 ай бұрын
Хорошие уроки у тебя
@valeriymalishevskyi17232 ай бұрын
Удали WS установи Rider и Copilot и будет тебе счастье!!!!
@dominuspiritus2 ай бұрын
Итого мы использовали mutable там, где можно было снять константность использовали map там, где можно было обойтись обычным static array (tarray с inline allocator) использовали shared pointer'ы там, где хватило бы локальных объектов продолжили вписывать input action'ы в класс персонажа, вместо вынесения этих сущностей в отдельную структуру добавили состояние в команду и не показали как на него влиять не сделали переключение команд, что является главным поведением в этом паттерне
@natatem00802 ай бұрын
Снять константность в архитектуре вместо того, чтобы использовать mutable для данных, которые просто кэшируют состояние? Как ты с помощью Static Array в рантайме будешь команды добавлять и убирать? Да даже с обычным TArray, но чтоб без гемора? Как ты создашь локальный объект на базовый класс? Там указатель нужен и создание этого объекта Причем тут вообще Input Action‘ы ? Что ты имеешь ввиду под «влиянием на состояние команды»? «Переключение команд - главное в этом паттерне»? Ты сейчас серьезно? Ты команды можешь вообще другими паттернами проектирования переключать. Или по нажатию кнопки. Или любой другой логикой
@dominuspiritus2 ай бұрын
@@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. и у тебя в видео этого нет.
@dominuspiritus2 ай бұрын
@@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. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@dominuspiritus2 ай бұрын
@@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. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@dominuspiritus2 ай бұрын
@@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. тебя никто не пытался унизить, тебе показали на проблемные места. изложенное мною не является каким-то запредельно большим усложнением кода.
@konstantinewhite6142 ай бұрын
Ни хуя не понятно, но очень интересно 😄
@lovingofbiscuit2 ай бұрын
После перехода с BP на CPP, BP начали вызывать какое-то отвращение, что-ли. Понимаю их использование в анимациях и в чём-то таком мелком и простеньком, но писать системы и использовать их, уж извините... слишком много возникает проблем с оптимизации в самом едиторе, до непонятных просадок уже в самой игре. Да, проще ноды сконектить и всякое всякое, имхо
@microbprod2 ай бұрын
Ох, ну у тебя и бомбануло (0% осуждения, 100% понимания). Если что-то покупать на маркетплейсе анрыла, то только ассеты с текстурами, звуками и моделями. Всё, что связано с кодом, в 95-98% случаев реально полное говнище. Если текстурки, звуки или модельки как-то можно без особых проблем поправить, то вот такое говнокодище править вообще не стоит, ибо гораздо проще самому логику написать.
@nickname201512 ай бұрын
Очень крутая рубрика, а можешь про ассеты которые советуешь?
@Котвбезумнойшляпе2 ай бұрын
Ооо да, давно такого не видел))
@natatem00802 ай бұрын
Меня аж всё видео дёргает от этого ассета
@ебанат_натрия_2282 ай бұрын
Извинись.
@valeriymalishevskyi17232 ай бұрын
👋👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍👍👍
@valeriymalishevskyi17232 ай бұрын
👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍👍👍
@valeriymalishevskyi17232 ай бұрын
👋👋👋👋👋👋👋👋👋👍👍👍👍👍👍👍👍
@ебанат_натрия_2282 ай бұрын
Не нужно вводить людей в заблуждение! Асинхронность != многопоточность. FStreamableManager не загружает ассеты в многопотоке. Чтобы в этом убедиться, достаточно зайти в реализацию StreamableManager'а и увидеть, что у многих Async методов есть проверка check(IsInGameThread()); , которая не позволяет делать загрузку вне игрового потока. Ради эксперимента запустите отдельный поток и вызовите в нём асинхронную загрузку, у вас тут же произойдёт ошибка.