На Unity сделано много замечательных игр - Valheim, Genshin Impact, Subnautica, Albion Online, Endless Space, Beat Saber, Boneworks, Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
FAQ
- Какие у Unity сильные стороны? - Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
- Какие у Unity слабые стороны? - Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
- На каких языках я могу писать скрипты для Unity? - На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.
- Для каких жанров подходит Unity? - Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.
- На каких платформах работают созданные с помощью Unity игры? - Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
- Часто вижу скриншоты с красивой природой на Unity. Как такое создать? - Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
- Что такое стартер киты? - Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.
- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки? - Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
- Бесплатен ли Unity? - Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
Обучение по книгам
Обучение языку C# книги на русском языке:
1. Head First. Изучаем C# 4е издание Авторы: Эндрю Стиллмен, Дженнифер Грин 2. Программирование на C# для начинающих 2е части Автор: Алексей Васильев 3. C# для чайников Автор книги – Джон Пол Мюллер 4. Unity и C#. Геймдев от идеи до реализации Автор: Джереми Гибсон Бонд 5. Язык программирования C# 7 и платформы .NET и .NET Core Авторы: Филипп Джепикс, Эндрю Троелсен
Для людей абсолютно не знакомых с движком есть 3и основные книги на русском языке:
1. Разработка игр на Unity 2018 за 24 часа Майка Гейга (Знакомство с движком, изучение редактора, создание 4х простых игр практически без кода, отличное пособие для полных новичков). 2. Изучаем C# через разработку игр на Unity. 5-е издание Харрисон Ферроне (Пошаговое освоение всех базовых знаний по программированию на языке С# в редакторе юнити, создание одной игры стрелялки от первого лица, написание искусственного интеллекта врага, книга переведена не совсем корректно и порой встречаются не просто опечатки, а серьёзные неточности перевода.) 3. Unity в действии. Мультиплатформенная разработка на C#. 3-е межд. издание Хокинг Джозеф (Правильное построение архитектуры кода для сложных проектов, углублённое изучение программированию на C#, создание 4х полноценных игр на движке, обязательно нужно скачать код проектов, так как в книге он местами уже устарел.)
>Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика. Уже можно любую hdrp завезли. Хоть как в анриле.
>На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#. В юнити всего один язык и это C#.
>Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов. Не актуальный старый кал. Либо юзаешь ассеты или пишешь шейдеры.
>1. Разработка игр на Unity 2018 за 24 часа Майка Гейга >2. Изучаем C# через разработку игр на Unity. 5-е издание Харрисон Ферроне >3. Unity в действии. Мультиплатформенная разработка на C#. 3-е межд. издание Хокинг Джозеф Старый ебучий кал. Добавить туда надо смотрите обучалки на ютубчике или шерстите оф документацию с примерами. Или сам курс от юников пройти уже на сайте.
>>843512 >обсуждение редактора юнити >не по теме ну как хочешь. иди позови котла, чтобы мой пост удалили лол сидите в своем дохлом треде с 1 постом в день дальше, нытики
>>843352 (OP) Вопрос, насколько хорошо в Unity 3d использовать PBR материалы (К примеру атлас с 4096x4096) для mobile? Или это слишком жирно и android/ios устройство такого не вывезут?
>>843540 >баги двача >>843555 >баги двача Ньюфаги, если вы нажали один раз кнопку "отправить", но ЧТО-ТО СЛОМАЛОСЬ и сообщение не исчезло из формы, не нажимайте эту кнопку повторно - подождите минуту-две и нажмите "обновить" внизу страницы. Иногда так получается, что сервер принимает сообщение и добавляет в тред, но клиент форму не очищает и страницу не обновляет. ПОВТОРНО НАЖИМАТЬ НЕ НУЖНО, ваши повторные нажатия кнопки и создают эти дубликаты сообщений. Особенно это касается капчующих с мобилок, у которых жирные колбаски вместо пальцев делают двойной тап, не осознавая этого.
У меня такое было пару раз несколько лет назад. Быстро понял, в чём проблема, и больше на это не попадался. Если вы не ньюфаги - не завидую вашим играм...
>>843632 Не хочу обижать, но я надеюсь, что графику ты всё же поменяешь. Максимально унылая картинка, ни о чём просто. Если я хочу поиграть в tower defense, я выберу себе игру с привлекательной графикой, потому что игромеханически все эти игры плюс-минус равны - "строй башни, улучшай башни, жди завершения уровня, повторяй всё это на следующем". Но даже если ты выдумал какой-то очень крутой новый геймплей (вряд ли), без привлекательной картинки его у тебя никто не увидит и искать не будет. Чем менее привлекательна игра внешне - тем больше сил и средств нужно вложить в маркетинг...
В общем такое дело. Сверху у меня помечены модификаторы атаки. В скрипте Enemy есть метод ApplyDamage, который в качестве параметров принимает модификаторы атаки и делает че надо. Получается, что если я меняю модификаторы атаки, мне нужно еще менять метод на пике, а так же метод ApplyDamage.
Насколько я понимаю эта хуйня из под коня и называется связанностью и мне как минимумм нужно модификаторы атаки инкапсулировать в отдельный класс и в ApplyDamage передавать его, вместо целого набора параметров???
>>843690 Хотел тебе помочь, но в этом треде вахтер пердит вонюче, сорри Я хочу перекатиться на другой движок, в котором проекты не открываются по 5 минут. Это большой блок для меня.
>>843690 Да и вообще наверное поведение башни стоит полностью отделить от статов? и типо можно тогда в башне заменять модели поведения или например делать их несколько. Добавить спавнер допустим, или автокас каст заклинаний через какой-то промежуток времени в довесок к автоаттаке!? чи да чи ни? А сама башня будет просто хранилищем и инициализатором компонентов.
Тэкс. Рубрика вопрос бывалым продолжается. Карочи вот такая у меня получилась ебалда. Сделал я абстрактный класс TowerTask с абстрактным методом Execute, который возвращает булевое значение. Смысл этой залупы в том, что если текущий стейт анимации - Idle, т.е башня бездействует, запускается прогон всех доступных для башни заданий - автоатака, автокаст, призыв защитника и т.д.. Т.к. башня не может выполнять все задания одновременно, она ждет первого true от экзекуции заданий и дропает дальнейшие. Дальше соответственно ждем конца анимации запущенного таска и пробуем опять. Внутри кода таска будет храниться вся информация касательно его исполнения, кулдауны и так далее. Пока до конца не оформлено, но схема будет такая в общих чертах.
В итоге получаем, что башне глубоко поебать на задания и возможность их исполнения, что вроде как заебись.
Так же вынес статы башни в отдельный класс. Если рожу глобальные апгрейды башен, то смогу в теории через декоратора крутить вертеть статами как хочу, опять же добавлять таски.
Даст кто-нибудь письку ебать за такой код или хуй пососу как всегда?
>>843841 >Update() >Смотрит какая играется анимация чтоб понять доступна ли башня для действий Ты совсем далбаеб? Может лучше анимация будет зависеть от того что делает объект, а не наоборот?
>>843903 Отличные курсы. Всяко полезнее чем выпуки безыгорных говнокодеров с двача с завышенным самомнением, которые в штаны дристанули, когда узнали, что кто-то 900к поднял за месяц
>>843868 Пацаны пацаны кажется новая идея проклевывается!!!!! Карочи Так с виду у всех тасков один и тот же набор методов с разным исполнением. Попахивает шаблонным методом, который будет запускать мелкие подзадачи инкапсулированные в отдельные классы, под чьей абстракцией будут сидеть конкретные варианты исполнения, типа как в стратегии. Тогда в теории, можно без преписывания кода для каждого нового таска полность, накодить различные варианты исполнения задач низкого уровня и комбинировать такси уже из них.
1) Кто то покупал через пайпал ассеты? По идее можно же закинуть на палку через обменник с бестчейнджа или с киви?
2) У меня иногда такое бывает: если загружаю модель с анимацией, то всё ок и другие анимации ЭТОЙ ЖЕ МОДЕЛИ на ней работают (выдёргиваю анимации путём Ctrl+D). А иногда бывает так, что я не могу запустить анимации, если применяю их на отдельно взятой модели, даже если она полностью заригана, аниме тайп generic, аватар генерил с этой модели и пробовал брать из другой, анимированной модели , на которой такой-же скелет и анимации работают (естественно там тот же скелет как и в анимации). Причем ни в игоре, ни в редакторе, когда в окно превью анимации драгндропаю эту модель, тоже ничего не проигрывается. Ситуация странная и даже объяснить толком сложно, надеюсь кто то с таким сталкивался и решил.
>>843988 Потому что виндовс не активирован ты скрыл справа полезную панельку в которой настраивается в том числе задержка при переходе с одного стейта на другой.
>>843973 И тут у меня закралась мысль. А чем башня, как сущность отличается врагов? Не двигается же просто и все. А враги по сути выполняют те же таски. И че епты, получается надо вводить общее понятие сущности, от которого уже распедаливать?!?!
>>843994 Меня смущает прокладка в виде entry между эни стейтом и твоими атаками, плюс не совсем понятно использование анистейта для всего, ты уверен что тебе нужна стейт машина?
>>843988 >>843994 >>843997 >>844005 Заебало. Одарю косариком того кто свяжется со мной в телеге и объяснит как работает этот аниматор ебаный , стейтмашины и что я сделал не так именно в этом случае.
Почему UI такое хардкорное Почему нельзя как в вебе, где используя html css Js (а ещё лучше какое-нибудь react или Vue) можно сделать фактически любой дизаен, с анимацией в том числе.
Почему я должен перетаскивать кучу кнопок и каждую из них индивидуально настраивать по стилям, вместо того чтобы хранить стили для каждой кнопки где нибудь в файле, и править только там, а не тыкать каждую кнопку,когда захочу что-то поменять
А ещё было бы круто, чтобы была реактивность и привязка к данным, как в Vue или react. Чтобы мне не приходилось через скрипты скрывать какую-то панель, что показать другую, чтобы это происходило само собой: <panel v-show="selectedPanel == panel.settings" > <slider v-model="userdata.volume" min="MIN_VOLUME" max="MAX_VOLUME" > </slider> Этот код шаблона сам отслеживает, если выбрана панель настроек, то ее и показываем. Не надо вручную ее скрывать и показывать через код, правило уже прописано в шаблоне. Так же там в слайдере автоматически берется значение из userdata и сразу же его перезаписывает напрямую, как только пользователь двигает слайдер
- Встроили ECS. Пишут, что уже можно в проде пользоваться. - NetCode for GameObjects. - UI Toolkit прокачали, теперь для написания инструментов для редактора лучше его использовать. - По графонию: Decal Layers, Forward+ для источников света, новые системы для воды облаков, Shader Graph Full Screen Master Node для эффектов и многое другое. - DirectX 12 вышел из экспериментального состояния.
>>844231 >Встроили ECS. Пишут, что уже можно в проде пользоваться. Я так и не понял что это и нахуя надо. Посоветуйте чё почитать, посмотреть чтобы дошло наконец.
>>844254 >Я так и не понял что это и нахуя надо. Для обычного игродела не нужно, если не собираешься моделировать поведение десятков тысяч объектов в риалтайме.
>>844261 >пруфитов типа читаемости или легкости Если где то прибыло, значит где то убыло. Производительность получается за счет отсутствия читаемости и легкости.
Так, анчоусы, выпил чаю с листьями малины и раскидал систему заданий для башен.
В общем схема работы выглядит так. Сама башня знает, что есть таски и может попытаться их запустить. Таск содержит в себе информацию о радиусе активации, кулдауне и объекте, который содержит в себе визуал таска - условно снаряд. Если в радиусе есть цель и кулдаун откатил, таск активирует этот объект и передает в него трансформ цели.
В этом объекте есть филды абстрактного типа - провайдер координат - его цель предоставить координаты из трансформа цели - либо реальные, либо если атака по земле - в момент начала атаки. соответственно через наследование можно варьировать.
И абстрактный тип отвечающий за движение - линейное, параболическое, инста перемещение в точку.
когда объект достигает нужных координат, происходит некое абстрактное дейтсвие.
Получается, что могу собирать задания, комбинирую различные модули. Причем я сначала думал сделать абстракцию заданий, а потом через наследование делать отдельно автоатака, каст, призыв и т.д. Но походу это вообще не нужно, и я просто автоатаку соберу как модульную конструкцию из нужных компонентов.
Ну че, как выглядит в плане концепции - нормально чи нI?
>>844315 Это просто затычка. их вообще так нельзя будет делать, потому что аниматор охуеет. Поэтому я буду там какую-то систему связей прикручивать через эвенты или просто делигады.
>>844441 А его наследников как найти? Вот я в своем проекте допустим пока еще знаю, что есть, потому что скриптов пара десятков. А допустим их больше и программист другой.
)) чувствую себя гестаповцем на допросе лол. А принцип поиска какой? Т.е. я как ебло пока придумал только один способ. Допустим делаю абстрактный класс Move, например. Все производные от этого класса я называю по принципу Move + особенность наследника, типа MoveLikeDrunk. И задался вопросом, а как надо?
В какой момент вы решаете что харе полировать механику и пора двигаться дальше? У меня ощущение что возможно имеет смысл сделать минимально рабочую версию и довести игру до релиза, а работу над ошибками уже в следующей версии проводить.
Блендшейпы не для всех выражений подходят, потому что челюсть отдельным мешем- но она заригана, и движение челюсти отдельно ещё больше искажают меш головы.
>>844621 Единственный способ скуфу почувствовать себя чэдом.
>>844622 Heavy Rain, Life is Strange, Last of Us, Walking Dead - это не ВН по-твоему? Даже если нет, то в анимешном стиле тоже есть новеллы с модельками.
>>844667 лично я пищу рогалик-идлер на экс! лицевые анимации не нужны
сука, мама роди меня обратно. ну что за херня со стандартными класами. есть DynamicBuffer<LinkedEntityGroup> который вроде бы как отвечает за связи. если убить родителя - должны убиться связанные объекты. ок настроил. настроил заодно отдельно иерархию в инспекторе(в экс все отдельно. это основной принцип. можешь разбить любую логику на отдельные шаги и сущности - РАЗБИВАЙ). убиваются все кроме первого в списке. он есть в списке. но не убивается. вот что за хуйня. хорошо что логика отдельных компонентов полностью самостоятельна и отвечает за одно конкретное действие. ну т.е. архетектура подразумевает что никак не связана и она таки да. выкинул нахер LinkedEntityGroup. захуярил свою parent-child связку. все работает все удаляется.... ready to production блядь
>>843876 Дибилыч? >>843883 База. Но не совсем. Открыто должно быть только то, что должно быть открыто, обычно то что в >>844015 > Почему нельзя как в вебе, где используя html css Js (а ещё лучше какое-нибудь react или Vue) можно сделать фактически любой дизаен, с анимацией в том числе. Можно. UI Toolkit.
Вопрос такой - а ведь существуют в открытом доступе готовые анимации? Типа вот сделал я модельку, скелет, а потом оп, закинул для нее готовую анимацию и персонаж танцует/идет/ковыряется в носу/etc Есть ведь такая штука, которая облегчает создание пет проектов для соло разрабов? я конечно сейчас пойду загуглю, но интересно ваше мнение на счет таких штук
Анчоусы, продолжаю переделку кода. В общем есть такая штука. Работает нормально заебись четка, но большой и все такое. Хочу переделать на мвп. Нужны советы бывалых, так как некоторые вещи не понимаю. На старте игры игровая доска запускает спавнеры противников, те опрашивают соответствующие волнам скриптабл обжекты, получают оттуда префаб противника, передают его в фабрику и та возвращает соответствующий инстанс, которому спавнер уже дает инициализирующие данные.
Допустим в соответствии с паттерном разбиваю код на 3 основных части. Модель - туда уходят только данные касающиеся непосредственно характеристик - хп, скорость, баунти, резисты хуисты и ттому подобное, переменные касающиеся навигации туда не уходят. Она не моно и данные наверное надо в нее подгружать из скриптабл обжекта. СО передается через конструктор.
Вью это моно и будет префабом, в коде содержатся данные только о визуале, анимация, спрайт рендерер, звук, хпбар.
Соответственно, видимо класс спавнер, как связующее звено между фабрикой и данными о префабах должен создавать контроллер и выглядеть это должно приблизительно так new EnemyController(EnemyVeiw - созданный фабрикой префаб, new enemy(enemySO)) и в класс контроллер уходит вся требуха о передвижении, обработке урона, эффектов и так далее. А тот же вью, будет только обрабатывать команды от контроллера типо View.playAttackAnimation();
Вроде +- понятно. Единственно я не уверен насчет кода о передвижении. Т.е. вроде кажется логично, что передвижения обрабатываются в контроллере, а потом вью просто получает команду сместиться в координаты, но так ли это должно быть? И допустим , если взять ХипПоинты. Контроллер модели передает команду - ты получил изменение хипоинтов на такую-то величину, Логика обсчета этого изменения инкапсулируется внутри модели же и контроллер про такую хуйню вообще ничего знать не должен?
>>844774 Взаимодействие с другими суцьностями идет через вью получается чтоли? рейкасты в колайдеры и так далее. Получается эти данные надо через вью передавать в контролер эвентами чтоли? Я же напрямую к контроллеру то обратиться не могу.
>>844805 >>844800 >>844783 >>844774 Модель, подходящую для создания интерфейсов, неоправданно использовать в более сложных объектах. Тем более в юнити, где один объект состоит из множества компонентов.
Для начала, вью у тебя УЖЕ отделён на архитектурном уровне - это компоненты Sprite renderer, Mesh renderer и так далее.
Моделью могут быть статы в Scriptable object, если под моделью подразумевать чистые данные.
А вот всё остальное придётся назвать "контроллером", что не очень помогает. И вообще, в контексте игр, контроллер - это объект, который принимает ввод с устройства ввода.
>>844840 А насчет скриптабле обжекта. Допустим я вынесу базовые статы в отдельный СО, там есть характеристики типа скорость, которые могут изменяться в течение жизни отдельной сущности, например эффектом замедления. Если я поменяю скорость напрямую в обьекте, она изменится во всех. Это неправильно. Если я скопирую все данные из СО в другой обьект, чтобы уже там их крутить вертеть, получается тупо и дублирование вроде как. Я так понимаю, чтобы было по уму, придется мутить декоратор?
>>844862 Обычно там хранят неизменяемые данные. Вот хороший пример https://habr.com/ru/post/421523/ А изменение скорости отдельного юнита лучше прописывать в отдельном скрипте "Модификторы", например.
У меня почти получилось сделать более-менее приличную анимацию рубящего удара. Всё больше чешутся руки попробовать воссоздать это в анриле и сравнить где проще.
>>844840 Мне такой подход не нравится, че толку с этой изоляции данных? По сути если делать модель только для данных, то логику получается просто в контроллер придется скинуть, и там же будет логика которая прокидывает все это к вью. Фу. Ниче и не меняется по сути по сравнению с тем, чтобы ну просто открыть скрипт и просто там все в куче написать.
Я обычно делаю мвп
Модель - скрипт отвечющий за логику и данные. Он и коллизии обрабатывает, и хранит параметры, и какие-то ивенты там запускает, и в апдейте что-то крутит. Но абсолютно никак не касается графики. Иногда добавляю какие-нибудь дополнительные ивенты или еще что, чтобы к ним можно было проще презентер прицепить.
Презентер - скрипт который зависит от модели, и обновляет всю графику от ее состояния.
Получается, вся логика и графика разделены, и если нужно для одной модели можно сделать несколько разных презентеров, чтобы и графику тоже разделить на части - один там аниацию персонажа обновляет, другой партиклы пыли спавнит под ногами.
>>844877 Да, само собой, по необходимости модель стоит дробить. Очевидный пример - какой-нибудь компонент для хп(типа модель), и презентер который отображает это хп.
>>844876 без учета юнитеков - разделяй и властвуй. могешь разделить любое действие на элементарные - РАЗДЕЛЯЙ. может на этот момент когда ты это делаешь выглядит избыточным, но завтра, когда понадобится новая фича, ты скажешь спасибо
>>844922 можно перевести на русский что он сказал? слова воопшем-то знакомые но смысл ускользает. при чем тут парадоксы? при чем тут клон парадоксодрочильни? при чем тут тера инвикта? при чем тут моды? при чем тут моно?
>>844925 Он сказал: кто-то недавно спрашивал, как сделать клон парадоксоигры - вот смотрите, я наткнулся на игру сделанную в одиночку. Блин, стремно что я понимаю местных шизов. Я еще понимаю нормисный язык, но надолго ли.
>>844774 Немного подправил. Уже вроде попизже получается.
Инкапсулировал работу с аниматором, теперь энеми похуй что в аниматоре происходит. Грит мне анимацию такую дай, как будешь делать не ебет вообще.
Вынес статы в отдельный класс разделил игровую смерть и удаление. Теперь статы сообщают наверх, что объект умер, управляющий срипт делает с этим что хочет, потом когда посчитает нужным запускает свой эвент на фабрику, что пора бы удалиться.
Раньше спавнер использовал напрямую метод SetPath в энеми, что хуйня вроде как, теперь спавнер просто передает нужные данные в энеми через инициализирующий метод. Осталость только инкапсулировать в отдельный класс выделенное красным и снаебнуть скорее всего стратегию, чтобы енеми мог менять поведение с похода по вейпоинтам до базы игрока на режим подраться в рукопашку с защитником из башни. Но это я наверное не быстро нахуярю.
>>844727 > UI Toolkit. странное. не ну юзабельно и местами удобно. стили опять же. НО кустом контролы это нечто слишком херово сделано. они создаются только кодом. т.е. возьмем стандартный прогрессбар. самое базовое - бекграунд - филлер - текст. я должен в коде прописать создание этих саб элементов и в коде же задать все параметры включая стили. ок я понимаю биндинги к данным или поведение задать только кодом, но почему нельзя скормить ему готовый юидокумент как шаблон? вместо простенького <ui:VisualElement class:"progress-bar__background"> <ui:VisualElement class:"progress-bar__filler" /> <ui:Label class:"progress-bar__text" /> </ui:VisualElement> попутно настроив все нужные стили в визуальном редакторе я должен делать var back = new VisualElement(); back.AddToClassList("progress-bar__background") Add(back) var filler = new VisualElement() filler.AddToClassList("progress-bar__filler") back.Add(filler) var label = new Label() label.AddToClassList("progress-bar__text") back.Add(label) после чего компилировать, кидать на форму и уже там настраивать дефолтные стили(банально расположение компонентов относительно друг друга) а если нужно что-то добавить или поменять структуру - повторить. я сначала думал что я что-то упускаю и есть какой метод типа LoadDocument() которому можно скормить uxml, но нет. в чем великая сермяжная суть делать вот такой uxml-based интерфейс и заставлять собирать его кодом?
далее стили для этих вложенных элементов в редакторе менять нельзя. только ручками прописывать стиль на основе стандартного. а там жопа вроде .unity-progress-bar__background-container которое не только скопировать нельзя оно еще не помещается в поле редактора и обрезается посему его надо гуглить отдельно. отдельно доставляет что в гайдлайнах не рекомендуют использовать длинные имена. и сами используют
В визуал студии есть какая-то залупа, которая сама за меня пишет код. Типо я хочу содать метод public void Init(), когда я нажимаю скобку, оно автоматом мне исправляет название метода на единственное похожее название из всех ему известных методов типа InitHuyPososyYaTebeTutNasRalTiPeredelivayKojaniyMeshok().
>>845006 Не по теме, но добавлю что перекатился с 2022 на 2019, по причине багов и заторможенности. По твоему кейсу чекай авто замену в настройках, там где интелектуальна.
В общем дело к ночи, накидал двигательную часть противника. Даже есть некоторая возможность для маневра и в целом все работает. Но есть какое-то ощущение перегруженности. Нужна экспертиза бывалых, как обычно.
Кто шарит в новой системе интерфейсов, дайте советов. Обработчик клика на вариант ответа вешаю на внешний контейнер - объект 1. Соответственно ему же вешаю в userData нужный логический объект реплики для последующей обработки. Но клик регистрируется по объекту 2 или 3, которые являются его детьми, на которых в userData закономерный null. Причем событие, повешенное на 1, почему-то прокает (потому что, очевидно, раз было кликнуто на его ребенка, то кликнуто и на него), но в аргументе ClickEvent, который подается в обработчик события, в target содержится не родитель, а ребенок.
Надо как-то исключить детей из системы отслеживания клика. Чтобы клик на ребенка считался не кликом на него конкретно, а кликом на весь родительский объект.
Юнитач, посоветуй Суть: звуки шагов. Я их реализовал как инстанс префабами (метод инстанса дергается через анимацию). Они по рандому проигрывают аудиосоурс из массива и самоуничтожаются.
Проблема: то что хорошо выглядит в траве или на деревянной поверхности плохо выглядит на твердой поверхности(на каменном полу где хочется однообразного "туп-топ-туп-топ").
Как это можно реализовать? У меня в голове пока только вариант перехватывать одним инстансенным объектом предыдущий пока тот не уничтожился и считывать из него флажок. Но это видится нерациональным
>>845086 Например, анимация в нужном месте запускает анимационный эвент. Эвент обращается к классу, который содержит в себе возможные звуки шагов и последний сыгранный и говорит ему - играй сука. Тот обращается классу, который детектит поверхность, а тот отвечает - пещера, ебать. Тут класс, который содержит в себе звуки создает через интерфейс new PesherniyRejim(lastSound,audiosorse). Послдений начинает кормить аудиосорсу одинаковые звуки. Для остальнх соотвественно звуки бы выбирались отличные от предыдущего. Я бы делал как-то так наверное
>>845086 > плохо выглядит на твердой поверхности(на каменном полу где хочется однообразного "туп-топ-туп-топ"). Ну так подбери однообразные звуки. Открой любую классическую игру типа халвы и там даже на твердой поверхности есть рандом шагов.
>>845086 Не понял вопроса. У тебя все звуки хранятся в одном массиве? ну так сделай ты несколько массивов по типам поверхности. А тип поверхности получай от коллайдера, когда вступаешь на новый тип поверхности.
Смотрел на ютубе видосик с обзорами кода новичков. Они делали игру, где падают шарики и типо на них надо кликать, чтобы они не долетели. И очень частой ошибкой там было, что начинающие девелоперы передавали ссылку на класс игрока, который считает хп, падающим шарам и те командомали игроку убавлять себе хп. Его спросили, типо чувак, а как делать, если так неправильно. Он сделал интерфейс с методом по отнятию хп, сделал класс игрока наследником этого интерфейса и условно шарам передавал ссылку на класс игрока только как интерфейс. Это че типа так и работает? Просто выделяешь у высокоуровнего класса какието обязанности в интерфейс и хуяришь его куда глаза глядят? рили?
>>845117 Нормально делать слишком тяжеловесно для обзора. А так, скорее всего суть в том, что интерфейс был IDamageable ил что-то подобное. Ну еще нужен менеджер мира какой-то например если мы хотим AoE урон, но для простой игры это не нужно. Так что тут фишка в том что ты не связываешь свой мяч обязанностью знать устройство игрока, а можешь наносить урон любому с таким интерфейсом. Например не игроку, а животному, ящику и т.п.
>>845138 Нет, смысл был не в гибкости, а стояла конкретная задача, прокинуть связь до мяча. Он на мяч передал игрока как интерфейс через цепочку классов. Типо класс контроллер начинает игру, создает класс игрока, потом создает игровую доску и передает ей класс игрока, та создает спавнер шаров и передает ему класс игрока, тоо передает игрока шарам и они его запоминают. Только он интерфейсом его передал. Типо шар не должен знать об игроке, но может иметь ссылку на его интерфейс.
>>845140 Т.е. получается, что упаковка метода убавления хп у игрока в интерфейс является по своему смыслу колбеком, который передается по цепочке куда-то на дно.
>>845140 Смысл всегда в гибкости, а именно, в возможности потом делать легкие изменения. Если ты напрямую связан с классом игрока, а класс игрока еще с чем то, а там еще, то хрен ты потом этот лапшекод изменишь когда захочешь добавить новые сущности. Интерфейс на то и является ИНТЕРФЕЙСОМ, что через него взаимодействуют, а не с функциями или переменными игрока напрямую.
>>845142 Бля. Лол. Чувак говорит, нельзя передавать класс игрока в шар, потому что шар низкоуровневый класс и по ооп не имеет права знать об игроке. На вопрос, а как? Он накидывает на игрока интерфейс и передает его. Интерфейс ни для какой не гибкости, а конкретно для передачи одного метода от игрока до мяча. Снабжая это комментариями о том, что мяч не должен иметь доступ к игроку и его функциям, которые мячу не нужны, а вот эту конкретную ему послать можно. Ты просто к слову интерфейс докопался, не понимая, что это реализация колбека просто такая
>>845143 Ну вот ты пересказываешь то, что я и говорю. Все верно. Шару нельзя знать класс игрок, ему можно знать интерфейс с одной функцией "получить урон". Хз че тебя не устраивает.
>>845143 Почему это гибкость в будущем, я тебе уже тоже два раза объяснил. Как минимум чтобы у тебя не было портянки if (obj is Player) (Player)obj.damage(val) else if (obj is Breakable) (Breakable)obj.do_wall_damage(val) и тд Будет прсто damage(IDamageable obj) obj.damage(val)
>>845143 возможно у тебя вызывает неприятие что он передает тот же самый объект плеер. но это так и работает, потому что за интерфейсом всегда находится какой-то конкретный объект. Просто тебе с этой стороны интерфейса неважно. Если ты подключаешь кабель IDE, тебе неважно что там - жесткий диск, дисковод, ссд. Но реальный объект там все равно есть и он как-то будет передан. А если подключаться без интерфейса, это как если бы ты провода прямо в контроллер жд впаивал. Но в реальности схема может быть сложнее, там может быть менеджер мира или сервис локатор, который подберет подходящий объект и т.д. >>845147 >Там вопрос абстракции вообще не стоял и не поднимался. > частой ошибкой там было, что начинающие девелоперы передавали ссылку на класс игрока, и вопрос чего это по твоему, как не абстракций?
Скачал вчера ридер попробовать, пиздец там по дефолту шрифты, я аж какать захотел. Но пока думал, как сделать удобнее работу с Ide дошел до одной очевидной вещи, что не надо табаться в юнити и там создавать скрипты, а их можно прям в иде создавать лол. Это кстати реально бесило.
>>845143 Для игры типа шариков это вообще не нужно. А для более сложной игры, ссылки на все IDamageable нужно будет хранить в одном компоненте, а потом передавать ему сообщения вида "персонаж X нанёc персонажу Y ущерба на Z хитпойнов", дёргая методы либо через делегаты.
>>845140 Не знаю, зачем так делать, особенно для простых игр. Unity-подход для внедрения зависимостей - это как раз выставление объектов в инспекторе, а не создание через код.
>>845176 > Не знаю, зачем так делать, особенно для простых игр. Unity-подход для внедрения зависимостей - это как раз выставление объектов в инспекторе, а не создание через код. Для простых игр базовички вешают зенжект, катаются еблом по клаве и просто смеются юнити в инспектор.
>>845171 А там в эксплорере можно убрать отображение мета файлов? Чтобы только скрипты были видны чi не? И типо чтобы в вс код создать новый скрипт я так понимаю надо создавать новый файл в формате имя.cs?
>>845176 >Не знаю, зачем так делать, особенно для простых игр
Ну чел, который это делал, учил не создавать игру про шарики оптимальным образом, он на основе разбора игры про шарики показывает подходы и знакомит зрителей с основными правилами ооп.
>>845164 > Но пока думал, как сделать удобнее работу с Ide дошел до одной очевидной вещи, что не надо табаться в юнити и там создавать скрипты, а их можно прям в иде создавать лол. Это кстати реально бесило. Всм? В вижуал студии тоже.
>>845216 Ну типо когда ты смотришь видео и курсы, в тебя один шаблон действий закладывают, что ты все делаешь через юнити едитор. И я допустим просто не думал о том, что можно работу со скриптами в полном объеме делать в вижуал студии. А потом как понял, переместил вкладку солюшен как мне удобно, раскрыл скрипты и все стало в миллион раз удобнее.
>>845219 Еще можно отключить автокомпиляцию скриптов, чтобы юнити не пытался каждый раз когда ты с иде переходишь в него переподгрузить скрипты, а только горячей клавишей.
VS code прикольный. только неприкольно, что он юзинги по дефолту сам не фигачит. И я вбил в юзинги UnityEngine, а этот пидор выделил неймспейс цветом обычной переменной и не давал мне достаточно долго доступа к юнити коду. И этот момент чета супер тупой.
Еще вопрос непонятен со студией. Если создаешь скрипт в солюшене, то студия ему неймспейс вкорячивает Assets.имя папки. И нахуя? А я файл перемещу из папки в другую папку, юнити у себя там что-то перекомпилирует, а неймспейс поди старый останется. Не вылезет ли из этого хуй в рот внезапный?
Сидел пердел все ок было, а потом вс код сказал мне - пошел ты нахуй и перестал видеть начинку монобихевиора, при этом сам моно он видит и подтягивает из using UnityEngine. Пиздец нахуй.
Включил все инлайн хинты и все равно такая залупа. Создается полное впечатление, что параметром в gameboard.initialize является плеер, пока не наведешь мышку на функцию. Есть варики высвечивать тип передаваемых параметров или ручками каждый раз проверять?
>>845237 у папочек в солющене еще можно отключить флажок "namespace provider" тогда не будет назначать.
воопше там есть где поигратся с опциями. хз решерпер это делает или сама вс но если у тебя в папке файлы в одном неймспейсе, то она проставляет этот неймспейс а не путь
>>845427 fbx. блендер его спойно экпортирует а юнити нативно хавает. собственно юнити хавает и свой формат блендера но самостоятельно конвертит в фбх используя блендер
>>845433 Первый раз во время экспорта чекни повороты по Y,и размеры в настройках импорта. Если все ок, то можеш забыть о траблах навсегда. Также есть разные тонкости экспорта анимаций, но это уже потом когда начнешь их делать.
В ходе экспериментов наговнокодил так что теперь с трудом понимаю что творится в моём собственном скрипе. Хочу написать скрипт с нуля, уже держа в голове общую архитектуру прошлого с надеждой что в этот раз я напишу получше. Всё правильно делаю?
Здарова аноны. Накидал тут опять говна.)) Переделываю систему строительства башен. В кратце, префаб каждой башни или пустое место для строительства башен, содержат в себе класс Building, в котором хранятся префабы того, что можно построить, цена текущей башни и эвент, который срабатывает при клике на башню или пустой фундамент.
Че по схеме. Класс buildingUI будет содержать в себе метод инициации Init, который на основе информации из класса building должен спавнить кнопки с иконками башен. К нему напрямую может обратиться только UIHandler. В самом UIhandler будет метод, который будет инкапсулировать в себя BuildingUI.Init(), и метод этот будет выделен в отдельный интерфейс. Соответственно Game при запуске игры, имея доступ к UIhandler, будет передавать этот интерфейс через Gameboard по цепочке до класса, который контролирует процесс постройки.
Балдеж же вроде?
И В итоге получается типо MVC вроде как. Я только тут не понимаю один момент, как правильно соединять эвент из Building с методом инициализации Building UI. TowerBuildHadler должен просто подписать переданный интерфейс на евент класса building, а все нужные параметры building передает через параметры эвента, правильно?
И еще вопрос, если мне нужно будет достать эвент из класса ниже чем BuildingUI? у меня все равно должна сохраниться иерархическая цепочка, где Game не лезет ниже чем UIHandler?
>>845454 Это норма, и это правильный подход если не знаешь что будет в игре дальше и придумываешь на ходу. Не бойся рефакторить и переписывать скрипты. Удобнее даже их разделять на несколько и строить по схеме модульности, что если меняешь один, другие не сыпятся следом.
UI нижнего уровня, занимается тем, что включает кнопки по количеству возможных апгрейдов башен, максимум до 4х, присваивает кнопкам картинки и прописывает цену.
Сам building выгядит вот так. Насколько я понимаю, если я в таком виде отправлю информацию через эвент в UI, который занимается спавном кнопок, то это не правильно. Потому что этому UI по факту придется препарировать полученный класс, а он типо не сильно должен вообще о таком знать, он просто должен получить число кнопок, картинки к ним и цифру денег, так?
С другой стороны, в старой версии у меня был вот такой подход. Связующий класс через эвент получал доступ к building, из билдинга доставал массив ангрейдов и прогоняя его через for давал команду BuildUI на активацию каждой кнопки по отдельности через метод ActivateButton , где соответственно индексы кнопок совпадают с индексами апгрейдов. Т.е. класс обозначенный на схеме как TowerBildHandler берет на себя всю обработку информации, а не подписывает тупо методы на эвенты. С моего дна, вроде как кажется, что так правильнее делать. Есть эксперты по архитектуре? солидам-хуелидам.
>>845467 Бля без обид, но ты делаешь явно какуюто хуйню.
Палю идеально, и просто решение одновременно. Создаешь 1 скрипт - Кнопка менджер. В нем при старте создаешь кнопки. Он принимает только команду - включить/выключить кнопку(С кастомными настройками по типу картинки/текста). Из 2 скрипта логики игры ты тупо посылаешь команды - Сделать видмыми какие кнопки, и при нужности меняшешь картинки/текст на них.
Это тупо занимает пару строк, при этом никакой дрочи с тем что утебя на скринах.
>>845467 А если допустим я напишу отдельный скрипт для кнопок в BuildUI и сделаю там метод инициализации тоже? И получится такая цепочка, что в BuildUI через эвент присылается массив upgrades. А BuildUI через for циклит этот массив и передает Building из него непосредственно в кнопки через button.Init(Building), а кнопки этот билдинг самостоятельно препарируют? можно так?
Ты буквально описал то, как у меня работало до этого, просто у меня связи были с нарушениями, на втором скрине ссылка на контроллер, который был самым топовым классом, например. А принцип такой и был, что класс обрабатывающий всю хуйню давал команду на включение, конкретных кнопок.
>>845456 >>845457 Спасибо посоны, я в принципе стараюсь модульно писать, и внутри скрипта всё разбивать на аккуратненькие функции с одной задачей у каждой, но сами понимаете во время эксперимента просто хотел получить пруф оф концепт и не заметил как наебенил говна. Но пруф оф концепт получил.
Накидал посоны. Тут пока не все, просто прокинул связь от башенного строительнства до UI, еще надо прокинуть на голдишку связь и обратку от UI до стройки, но это уже на завтра.
>>845470 Запомни - Упрощение логики залог успеха. А то что ты нагородил это усложнение читаемости и количества на ровном месте. Убирай эту хуету и делай по нормальному.
>>845476 Интерфейс не правильно сделал. Он должен не метод инициализации делегировать, а сам buildUI прокинуть и тогда можно на обратные эвенты подписаться. Даже из названия это следует. Как же реально упрощает жизнь отдельный скрипт для каждой залупы, для каждой сраной кнопочки.
>>845467 >>845475 Да бля возьми ты уже зенжект, на это же больно смотреть. Ты ж облысеешь эту лапшу писать дальше.
Не задумки так то твои логику имеют, но сколько же тут чисто механически дроча на ровном месте просто потому что ты решил делать классическую ооп архитектуру в стиле 90х а она тут не нужна.
>>845501 Блять, зачем вы это распространяете? Гиперверие лишь всё усугубит. >>845507 Ну, то и я не сделаю. А ИИ в скором времени сможет. >>845508 Не гугла. Это убийца форумов и чатов
>>845544 Это сделано для таких ситуаций когда у тебя функция foo(int, int) И тебе подсказывает Variable1 = 13 Variable2 = 27 foo(залупа: Variable1, говно: Variable2) Чтобы ты не написал случайно foo(залупа: Variable2, говно: Variable1)
Кто знает, надо ли отвязывать вручную обработчики событий перед тем как объекты уничтожать, или сборщик мусора сам соберет? А то может я один как дурак вручную отвязываю.
>>845593 Ты про стандартные события Си-шарпа? Если да, то надо отвязывать обязательно. Это такое негласное правило. Более того, если ты подписан на событие какого-нибудь долгоживущего объекта или синглтона, то подписанный объект будет долго жить.
>>845614 только по этому треду. пожалуй таки большая часть упоминаний его здесь от меня(прошу извинить - меня таки торкнуло). в других тредах(включая прошый юнити тред) не срал
>>845616 весьма и весьма базовую. приходится страдать на ютуб видео 2.5 человек(буквально. первый начал в древности, но с тех пор апи сильно поменялось а он воопшем-то подзабил. второй начала тогда же и старается освещать изменения - приходится понимать как оно работало тогда, работало в промежутке и работает сейчас. третий таки вроде начал новое почти с нуля, но пока дошел только до самой базы - все остальное безбожно устарело и/или туториалы уровня "как нарисовать сову" или совсем пространные рассуждения "экс - крута" без конкретики) остается копать на форуме и автодоках с херовым описанием
хы. CodeMonkey, Turbo Makes Games, WAYN Games соответвенно
>>845617 Понятно, в общем как я и боялся. Собсно апгрейдиться я и не собирался, максимум сделаю проект тупо поиграться, но сперва игру допилю до релиза в стиме.
>>845619 оно странное. но все сводится к чистому "взять один набор данных. посчитать. сохранить результат" и порядок этого. приходится ломать привычки и учится программировать заново. с другой стороны оно логично перетекает в максимальную изоляцию элементов и многопоточность
>>845620 ессно что-то хотя бы частично готовое переносить смысла нет.
>>845626 я пока тупо эксперементирую и разбираюсь ессно смешиваю. гуя на экс нет в принципе. но тут есть нюанс - ты считаешь все в экс а результаты уже ложишь в гуй(или любые другие "стандартные" объекты юнити, которые не имеют прямого отображения в экс) через классы прокладки(вот ButtonDebugRef - это как раз такой) вот например всякие прогресбары - хп там или прогресс какого процесса. создаешь соответвующий гуй элемент стандартно. и делаешь 2 компонента public class PBRef : IComponentData { public ProgressBar value; } public class LabelRef : IComponentData { public Label value; } public struct CurMax : IComponentData { public float Cur; public float Max; } которые вешаешь на новую энтити. все зачем она нужна по сути - передавать данные из экс. ну и системы которая будет это делать CopyDataToProgressBarSystem: foreach(var (bar, cmax) in SystemAPI.Query<PBRef, RefRO<CurMax>>) { bar.value.Max = cmax.ValueRO.Max; bar.value.Value = cmax.ValueRO.Cur; } CopyDataToLabelSystem: foreach(var (label, cmax) in SystemAPI.Query<LabelRef , RefRO<CurMax>>) { label.value.text = $"{cmax.ValueRO.Cur}/{cmax.ValueRO.Max}"; } максимально просто. за "кадром" эти системы создают зарос на два компонента, и итерируют по ним. так как она работает с классом это "гибридный" экс - логика его но никаких профитов в производительности нет. его имеет смысл положить в фикседапдейт или еще куда более медленное. а вот то что будет писать данные в CurMax - "чистое" экс. добавляем парочку компонентов (все унаследовано от IComponentData, но опущу для простоты) public struct TagGetProgressFromHP {} public struct ProgressTarget { public Entity Target } public struct HPData { public int Hp; public int MaxHP } первый не содержат собственно данных и является тегом - по сути меткой какую систему гонять. вешаем прогресстаргет и тег на ту же энтити. в прогресстаргет ложим энтити с хп CopyDataFromHPSystem: foreach(var (cmax, target) in SystemAPI.Query<RefRW<CurMax>, RefRO<ProgressTarget>>.WithAll<TagGetProgressFromHP>()) { var hp = SystemAPI.GetComponent<HPData>(target.ValueRO.Target); cmax.ValueRW.Cur = hp.Hp; cmax.ValueRW.Max = hp.MaxHP; } опять все сводится к элементарным действиям. на первый взгляд громоздко(особенно учитывая что я опустил описания систем, оставив только код) - 3 системы и 6 компонентов для отображения текста и хпбара. но в этом суть. мы реализуем ОДНО изолированное действие за раз. получаем цепочку действий которые взаимодействуют через общие компоненты данных. можно легко заменять источник и получатель и связанную логику, вставляя и пропуская шаги или делая альтернативные ветки - например вместо стандартного прогрессбара использовать какой свой типа радиального или воопше повесить логику которая будет обновлять модельку в зависимости от прогресса строительства. а вместо хп использовать любые данные что ложатся в формат прогрессбара - заполненность инвентаря, кулдаун скила, прогресс строительства и т.п.
и вот это понимание, что все надо дробить дробить и еще раз дробить на максимально элементарные куски да еще разделяя данные и код как раз и ломает шаблон при переходе с ооп.
>>845666 С одной стороны - стили и воопше гибкие настройки самого гуя С другой стороны - не удобно работать с кодом(за пределами "стандартных" действий - кастом компоненты например) и нельзя нормально в ворлдспейс
Не могу понять. Создается класс для хранения данных. Но при чтении вылезает ошибка что null референс на него.
Строка: Test1: Что за символ стоит после двоеточия? Не "", Не " ", Не string.Empty. Что за? Как узнать? Причем на других позициях нормально считывается, а это строка должна разделяться в массив, но происходит вот эта ошибка при чтении.
>>845666 Самый главный плюс - flex. В старых гуях ты ебанешься при попытке сделать что-то сложнее полоски хп или статичной менюшки с кнопками. Любые динамически заполняемые элементы интерфейса - практически невывозимая задача для непрофессионального разработчика. К примеру список выровненных элементов, каждый из которых содержит список выровненных элементов. На новых гуях это задача тривиальная.
Минус, как сказал этот анон >>845667 в том, что непривычно работать с этим интерфейсом в коде. Как в вебе через жабаскрипт, так и тут придется сначала найти нужный элемент по его id, и только потом работать с ним. Т.е. нельзя до рантайма в инспекторе скрипта на префабе рассовать по местам все ссылки. В результате кода может получиться больше, чем раньше за счет ручной инициализации. Но во всем остальном проблем никаких не наблюдаю.
>>845674 А ты не знаешь, они сделали в новом УИ виртуальные списки? Помню мне пришлось самому это писать на старом УИ, это такой Ад был.
Виртуальные списки - когда в памяти существуют только элементы, которые видны в данный момент на экране. Даже если в списке 10 тысяч элементов разных размеров и с разными характеристиками, то всё будет идеально работать.
>>845680 Очень сомневаюсь. На настоящий момент состояние - "вроде работает". Я сам лично наткнулся на то, что до сих пор не работает событие GeometryChange, причем на форумах об этом писали еще в 2020 году. Так что использовать можно лишь на свой страх и риск. Я просто устал ждать релиза и жру что дают.
>>845677 ну например в процессе разработки ты накидал временный гуй без нормального скина - сильно заморачиваться смысла нет, оно все равно будет менятся и воопше ты погромист а не дизайнер. к моменту завершения разаботки наконец подъехал цельный, специально сделанный скин от художника и тебе надо его применить. для каждого окошка. для каждой кнопочки. для каждой надписи отдельно. а потом окзалось что вот тот зеленый не такой зеленый как было надо и все повторять... ну опять же вот этот флекс мне сильно знаком по WPF и он очень удобен, хоть и требует привыкания после стандартного формошлепства
>>845680 где-то отдельно упоминалась оптимизация списков в таком ключе. когда модили баттлтех пришлось пилить самим - то еще развлечение, но без этого никак. создание списка эквипа в мечлабе когда перевалили за пару сотен предметов занимало от 10 минут на нормальном компе и обновление фильтров минуты.
>>845684 Сначала может показаться, что все просто. Но когда у элементов списка есть свои layout group, а у них тоже есть вложенные элементы и т.д., то старый гуй жидко пукает и умирает.
>>845669 >>845671 Нашел проблему. Она не гуглится и весьма специфична. Для тех кто столкнется - При сохранении класса в файл, юнька по какой то причине в некоторых местах заместо строки сохраняет пустой аски символ. Этот символ не считается за пустоту или за любой другой. Пофиксил это тем что пересобрал класс под другим именем и другой формой записи.
>>845673 Да еслиб это было так просто, то мои 5 дебаг проверок это бы сразу выявили.
>>845688 И в чем проблема? Какой именно символ, какой у него ascii код? В hex editor что пишет? Почему он туда попал, из html копировал? Что именно его туда сохраняет?
>>845691 >И в чем проблема При чтении строки крашится игра ссылаясь на null референс, будто строки или файлы сохранения не существует, остальные же строки читаются нормально.
>Какой именно символ, какой у него ascii код Не знаю как узнать. Видится как обычный пробел " ", но при этом не детектится в проверках как пробел, пустота, или что еще.
>В hex editor что пишет У меня такого нету.
>Почему он туда попал, из html копировал? Что именно его туда сохраняет? Обычная строка с данными, коих пару десятков в сэйве(Сохраняется прогресс игры). Сохраняю и загружаю через бинари.
>>845695 Чем ты читаешь? Проблема была только с одной строкой, от этого и мистика. Поменяв название класс аи чередность строк проблема решилась. Это из разряда - Юнька что-то сломала, но потом сама и починила.
>>845685 > Но когда у элементов списка есть свои layout group, а у них тоже есть вложенные элементы и т.д Ваще не проблема же, если ты все скалирование настроил у каждого отдельного элемента.
Но да, я не отрицаю, что это несколько заебно в некоторых ситуация и может быть придется что-то упростить, но если совсем уж с ума не сходить и не делать редактор уровней так то все изи делается обычно.
>>845475 >>845476 Крутил, вертел, чувствую не то нихуя. В итоге двое суток ушло на то, чтобы догадаться, что соединять надо не Building и BuildingUI, а BuildingUI и класс обрабатывающий запросы на постройку и пиздец все шоколадно стало. Но могли бы и подсказать ебанарот.
>>845780 У меня тут на втором и третьем скрине есть эвенты, которые выполняют одну и туже функцию - просто пробрасывают один и тот же инт с днища наверх. Допустимо их в таком случае называть одинаково или лучше попердеть над названиями?
>>845825 Написано же что файл используется. Попробуй перезагрузить компьютер и удалить. Если уж не в терпешь то скачай анлокер файлов, такая маленькая тулза, она позволяет удалять любые файлы когда угодно.
>>845780 Вопрос нериторический. У меня при инициализации UI запускается цепочка инициализаций, на каждом отдельном уровне которой происходит подписание на эвенты. При закрытии UI происходит по сути полная деинициализация с обратным эффектом. Тут у меня два стула.
Стул-первый, подписание/отписание эвентов - затратная операция. Т.е. каждый раз когда я врубаю/вырубаю UI оно жрет какую-то лишнюю капельку.
Стул второй, я могу вынести инициализацию в отдельный класс. При запуске игры, будет запущена цепочка инициализаций, весь UI подпишется друг на друга туда сюда. Вызов отдельных элементов ГШ соответственно вынести в отдельные методы вызова. Проблема в том, что в таком случае UI будет перманентно откликаться на все события в игре и даже в выключенном состоянии что-то перезаписывать и как-то реагировать.
>>845907 >Стул-первый, подписание/отписание эвентов - затратная операция. а ты это профилировал? это не должно быть особо затратной операцией, у тебя там сотни тысяч этого все что ли?
>>845907 Да это не затратные операции. То, что их дохуя, создает иллюзию сложности. В реальности они все по затратности как отрисовка куба какого нибудь или сферы.
>>845907 > Стул-первый, подписание/отписание эвентов - затратная операция. Пизда затратная, штук 10, да пусть хоть 1000, элементов в список обсерверов добавить.
Ты давай лучше с профайлером прогони и посмотри что реально производительность жрет.
> и даже в выключенном состоянии что-то перезаписывать и как-то реагировать. Что конкретно? Тут как бы от твоей архитектуры и нужной тебе логики зависит, скорее всего можно вообще забить хуй и пусть оно "реагирует".
>>845902 Нет, ты по идее делаешь коммиты каждый раз когда добавляешь новую фичу, или даже функцию, или вообще строчку, как тебе нравится, но как правило чем чаще тем лучше. И комменты пиши нормальные, чтобы самому потом понятно было.
>>845913 >Что конкретно? Тут как бы от твоей архитектуры и нужной тебе логики зависит, скорее всего можно вообще забить хуй и пусть оно "реагирует".
А ничего на самом деле, я поспешил с вопросом, потом подумал, и придумал как логику разделить и там все заебись вообще. Т.е. если выделить логику инициализации как создание связей между элементами УИ, а запросы на активацию уже этих отдельных элементов и скакрмливание туда внешней информации вынести в отдельные методы, то все шикарно просто будет и читаемость возрастет и производительность даже лучше станет.
Синемашиной пользуется кто? Хочу сделать вид от первого лица, но при этом полностью анимировать тело ГГ и столкнулся с проблемой что мой простой скрипт который заставляет камеру двигаться за ебалом персонажа выполняет всё как положено и поэтому когда при анимации башка двигается - двигается и камера. Меня это бесит, хочу чтобы камера стабильно светила из уровня глаз персонажа.
Ебаться с анимациями чтобы голова стабильной оставалась или синмашина поможет решить вопрос?
Где вы 3-д модельки берете? Сами пилите? Пиздец аж страшно представить, сколько придется ебаться прежде чем у меня хоть куб покрасить получится. Вообще не лежу к этому.
>>846084 Берешь ассет паки с офф сайты, их них вырезаешь нужные модели. Также отдельно с разных помоек можешь качать. Вариант для особо изысканных эстетов качать ассеты на других движках и также вырывать нужное от туда. В 99% это быстрее и проще чем пилить самому. Для простого юзай блендер, мелочевку мелкополигональную самому быстрее сделать и натянуть текстуру. Пару видосов по блендеру и все получится.
>>846093 Материал это по сути шейдор, копай в этом направление. Но не забывай что там же еще как сделан этот материал в блендере, и через что рендерится. Там куча всего может быть.
>>846095 >>846096 По факту любой материал лишь графический редактор шейдера, который в конечном итоге конвертируется в код на соответствующем софту языке шейдеров. Но я надеялся что может есть какой-то конвертер или сопоставление нодов блендера и материалов юньки. Но видимо в блендере на материалы вообще время тратить не стоит.
>>846117 > знание базы редактора и основ шарпа? Смотря что ты подразумеваешь под базой и основами.
> Или солид + паттерны - необходимый минимум? Паттерны не особо(ну ток синглтон и обсервер=юнити ивенты и си шарп ивенты). Солид скорее да чем нет.
В целом, главное требование для джуна - у него должна быть своя игра сделана. Пусть она будет и простая, но это сразу индикатор, что ты физику можешь натсроить, анимации, юай сверстать и даже как-то кодом все это связать. Это прям самое главное на что смотрят, без этого вряд ли твою кандидатуру будут рассматривать.
>>846111 Пошел бы, но это тупой наеб джунов. Им откликнется на вакансию человек 100+, из них либо выберут тех кто готов быть рабом за еду, или будут кидать на тестовом.
>>846216 Видишь, анон всегда будет знать больше чем говнонейронка. Та будет высирать тебе неоптимальную копипасту из туторов, подходящую только для хелоу ворда, а не реального проекта.
>>846232 Я уже 3 часа пытаюсь от неё получить вменяемый скрипт для 2д топдаун машинки, она выдаёт какую-то чушь. И хотя у меня есть такие скрипты разного уровня сложности, от простого вращения и изменения велосити, до симуляции колёс - она ничего даже близко похожего до сих пор не смогла выдать, кроме самого примитивного варианта.
Просишь её чуть-чуть усложнить, и начинает выдавать какой-то бред, который не имеет смысла.
>>846239 Да, прогеров не скоро заменит. Она может в целом делать, то что нужно, но в деталях, например обсираться, пальцы кривые все дела. На картинке сразу видно, так мозг устроен, можно взять картинку и пальцы пофиксить. А с кодом, ну скажешь ты ей мини игру накодить, ну за секунду выдаст тебе 10к строчек, запуск ошибка. Там может не так много фиксануть надо будет, но ты же не сможешь быстро разгрести, что она там наплела. Скорее гугл разорится, она уже хороша в этих небольших подсказках, через три года красота будет. Эта нейронка как конфетка
>>846242 Мне кажется она норм только когда ты впервые юзаешь какой-то язык и стек и особо не знаешь как там делать даже банальные вещи. По сути такой своеобразный аналог гугла, с той лишь разницей, что тебе прям сразу код выдается, но его работсоспособность оценить не выйдет.
>>846107 Так посоны. По ходу пьессы решил инкапсулировать звук и спрайт в отдельный класс. И тут понял, что придется делать такую булдыгу чтоли ебаный икебастос? Или можно по кайфу на один презентер с анимацией все повесить?
>>846247 Программирование уже должно на еще более высокий и легкий уровень выйти, будешь просто проговаривать алгоритм, а оно пусть само там подбирает. Ну вот, например, в блендере в скелете нужно у выделенной кости выделить всех ее детей и к именам добавить 001, 002... Весь день проебешь, гугля как это делается, а так сразу хуяк тебе кодик, там уже примерно понятно будет как, что называется и легко допилить
>>846269 Он не поймёт если не отработает на подобном фреймворке пару лет. Я долго вертел нос от фреймворков, не желая отказываться от жейквери, пушо ничего сложнее визитосов не делал, для интернет-магазов юзали платформу. А потом вкатился в Vue, React и уже для самой тривиальной хуйни разворачиваю бойлерплейт ибо одной командой, удобно и уже знакомо.
>>846289 > я думал они нас рабсеян порешали Порешали в том плане, что игроки из России и Белоруссии не могут совершать покупки, то есть никаких донатов. И нет дохода с рекламы. Но ты можешь продолжать зарабатывать в других странах и выводить деньги в России.
Я уже подзаебался переосмысливать как работает мвп, если честно. В общем крайняя версия такая, что презентер завязывается не на SkillHandler, а на сам skill. отсюда у меня возникает сразу два варианта. Либо делать так, что SkillHandler скармилдивает презентеру Skill, в перезнтере идет какая-то логика отписок переподписок и дальше пошла работа. Но есть у меня подсознательное ощущение, что при инициализации башни нужно по количеству имеющихся Skill, создавать такое же количество View и соответственно сделать такое же количество MVP залупы.
Ведь для каждой модели должен свой вью-презенетр быть, так?
>>846320 >Я уже подзаебался переосмысливать как работает мвп, если честно. ну еще поебешься малех и поймешь что кушать суп ножом и тащить в юнити MV* не нужно
>>846320 Не уверен но помойму ты хуйнёй занят. Если твоя цель просто кодить ради кодинга то ок, но зачем тогда ты так сильно напрягаешься? Ты вообще игру делаешь или что?
>>846333 > что кушать суп ножом и тащить в юнити MV* не нужно Нужно, но не так
>>846336 > Альтернатива какая? в редакторе компоненты по публичным филдам перетаскивать? Перетаскивать компоненты или нет - это не вопрос к мвп или мвц. Чтобы передавать зависимости, ты можешь использовать сервис локатор(нет), ди, или фабрики.
>>846320 Я хз что ты там изобретаешь, но почему бы не сделать пикрил?
Tower - скрипт который вешаешь на геймобжект.
TargetLocator - нечто что дает цель. Будет ли это какой-то внешний сервис, или компонент - зависит от того, что тебе нужно.
Tower также полностью контролирует некий Gun, это может быть либо СО с прописанной логикой для метода Fire, или целый префаб
Gun это то, что стреляет по цели. Важно: это НЕ реальная пушка, это всего лишь нечто, что отвечает за запуск некоторой атаки. Tower передаст ему точку откуда стрелять и в кого.
TowerView подписывается на ивенты тавера, при необходимости мониторит даже в апдейте что-то. Это может быть как монолитный компонент, который управлет и анимациями и звуками, так и раздообленный на несколько, по сути как ты у себя нарисовал.
>>846350 В юнити уже реализован MVC, в самом движке. Модель - это, например, данные Transform. View/Presenter - это компоненты спрайтов, мешей и моделей, которые рендерятся там, где они находятся. Тебе не надо писать движок поверх движка, чтобы делать игры. А перетаскивание компонентов в формы - это всего лишь способ управления зависимостями. Хуячь всё в одном скрипте, не ошибёшься.
>>846350 Чел я без негатива пишу. Не занимайся хуитой. Ты движок взял чтобы игру сделать, а не написать свою лапшу поверх движка. Если была цель насрать кучу кода чтобы показать на гите и взяли как джуна то ок, но зачем тогда срать в треде об этом?
>>846346 >Я хз что ты там изобретаешь, но почему бы не сделать пикрил?
У меня башня потенциально может иметь несколько вариантов действий, кроме автоатаки. То что на твоем рисунке по сути отображает класс Skill на моей схеме. За исключением того, что я пока думаю, как к нему прокинуть View составляющую. Не, ну в целом, я могу просто к каждому скилу конечно прикрутить отдельный аниматор и не ебаться вообще. Но
>>846355 > У меня башня потенциально может иметь несколько вариантов действий, кроме автоатаки. Значит даешь ей весь TargetLocator, и из него пусть берет че надо.
> За исключением того, что я пока думаю, как к нему прокинуть View составляющую. Зачем? Что конкретно view будет отображать из скилла?
Вот есть башня да, стоит такая коробка и на ней сверху оружие - это все вью башни. А у скилла че отображать тебе надо?
> Не, ну в целом, я могу просто к каждому скилу конечно прикрутить отдельный аниматор и не ебаться вообще. Ну, когда "скилл" стреляет например пулей - пусть просто спаунит эту пулю, вью тут никакой не нужен. Или ты хочешь чтобы там огонь как от выстрела появлялся? Так это ж ответственность вью башни, и ей пох чем там она стреляет.
>>846366 Так дело не в споре. Ты пытаешься реализовать велосипед поверх готового решения. В этом 0 смысла во всех смыслах. Помимо того что ты на пустом месте усложняешь архитектуру и читаемость (А это один из столпов геймдева и программирования в целом) ты еще и городишь жуткие костыли ухудшая производительность. Бросай это дело, ну или залей на гит и показывай всем что ты сделал, но не применяй на реальных задачах.
>>846363 >Что конкретно view будет отображать из скилла?
Ну стоит башня с магом. У него анимация автоатаки- просто поднимает посох. Добавляю ему с прокачкой возможнсть кастовать ледяной дождь, он начинает этим посохом 2 секунды баландать в воздухе типа призывать стихию.
>Значит даешь ей весь TargetLocator, и из него пусть берет че надо.
может быть. я уже внутрянку не помню че там с ним.
Вообще полный цикл выглядит так Башня проверяет готовы ли скилы - запускает первый готовый - запускается анимация - анимация содежит эвент который сообщает, когда включать "пулю"- дальше в анимации есть эвент, сообщающий о конце анимации скила, это означает, что аниматор свободен и можно использовать следующий доступный скилл. Пуля там куда-то летит сама по своим делам уже несколько кадров.
>>846372 >Помимо того что ты на пустом месте усложняешь архитектуру и читаемость По слоям от большего к меньшему - сложно. Кинул макаронину от кор класса в самый анальный уголок игры - архитектура. Все понятно. лайк.
>>846374 Ну смотри, можно так сделать: Tower - содержит CurrentSpell и поднимает ивенты типа начал кастовать, закончил кастовать, текущий спелл сменился.
Вью - маг - ловит эти ивенты и выбирает анимацию в зависимости от спелла(и ее длительность подстраивает под каст тайм). Т.е. надо сделать чтобы ты ему в паметрах мог задавать пары: спелл-анимация. Т.е. словил он старт каст - начал играть анимацию заданную, и никаких проблем.
>>846372 > Так дело не в споре. Ты пытаешься реализовать велосипед поверх готового решения. В этом 0 смысла во всех смыслах. Он все правильно делает, организовывает код по логике, с опытом будет щелкать такие задачи и ебошить готовый прототип за то время, пока кирилл спрайт двигаться заставит.
Итак, представляю видимо финальную схему работы башни. Объясняю на пальцах почему так. Возможно у некоторых возникнет вопрос почему не прокидываю эвенты через башню, а делаю презентер. особенно у любителей потаскать поля в редакторе Потому что башня занимает вершину иерархии и не должна работать на тех кто ниже и чтобы этим не заниматься, она создает им интерфейс взаимодействия. Который в том числе не засоряет код башни, а инкапсулирует в себе это самое взаимодействие. Дальше все понятно. скилл простой дата класс из которого при необходимости таскаются параметры и передаются во вью.
Пацаны, а работаете с Юнити на 2х мониторах или на одном? Не знаю есть ли смысл второй брать. Чтобы разделить юнити и студию например. Хотя это не так полезно. Полезнее было бы разделить вкладки Scene и Game по разным мониторам, но такое вроде как невозможно?
Посоны, я пиздец туплю на ровном месте. Как сделать чтобы мили атака тригерила все в определенной области, но если натыкалась на стену, то дальше переставала тригерить?
Например, на пике, пускаю луч, все что зеленым должно стригерится, все что за стеной должно игнорится. Как такое запилить?
>>846458 Так намного удобнее? Какая диагональ у мониторов? Ещё видел некоторые размещают второй монитор вертикально для отображения большего количества года, но хз насколько это пригодится на самом деле.
>второй монитор вертикально Хочу попробовать эту тему, но некоторые аноны что шея затекает и неудобно. Хотя мне в принципе пох и я всё равно буду брать вертикальный монитор. Если не зайдет, то будет просто третий моник.
>>846460 У меня три моника, но так как основной это 2К/27 дюймов то два других используются только для демонстрации ютабчика и аниме-картинок, так как крутить ебалом становится неудобно. Еще пробовал ставить один над другим - хуита. Два 22-дюймовых рядом да, реально юзать.
>>846458 И как работать? Вертеть головой, как конь, от кормушки к поилке? Гораздо легче альт-табнуться, да и научные исследования подтверждают, что наличие второго монитора УМЕНЬШАЕТ эффективность работы. За редким исключением, типа слежения за камерами наблюдения или биржевыми графиками.
>>846482 >научные исследования подтверждают, что наличие второго монитора УМЕНЬШАЕТ эффективность работы Не верю. У меня 1 большой моник и я постоянно вынужден то открывать Picture in Picture, то изъебисто разделять экран на 2 части. У тянки два монитора, на одном у нее открыт реф, на втором рисует. Альт табаться тут вообще не вариант. Твое исследование явно не про разработчиков игр. Может быть, про каких то офисных операторов или водителей трамваев, которым второй монитор мешает, потому что они на нем сериалы смотрят, и они звонки пропускают.
>>846482 > научные исследования подтверждают, что наличие второго монитора УМЕНЬШАЕТ эффективность работы Научные исследование на ком, чьих задач, и почему меня это должно ебать?
Я ща с одним монитором, и это жутко не удобно по сравнению с двумя в некоторых ситуациях, которые занимают процентов 15 времени, но это как бы тоже существенно. Если ты делаешь что-то посложнее чем движущийся куб, то в какой-то момент придется настраивать сцену и смотреть на нее с разных ракурсов, да еще и открывать сразу несколько инспекторов и подкручивать в них значения, на одиг монитор это не влезет. Также документацию на втором мониторе можно открыть. При профайлинге нужно порой сразу несколько окон открывать.
>>846453 > Чтобы разделить юнити и студию например Полная хуета.
> Полезнее было бы разделить вкладки Scene и Game Да, хотя бы так.
>>846510 У меня противоположный опыт. Есть два монитора, и я не нашёл ничего, что можно было бы разместить на втором, в контексте работы с юнити. Пытался игровое окно - для тестирования игры приходится перекладывать в его сторону мышь, клавиатуру и поворачиваться в его сторону, а потом опять убирать, либо косоёбится всем телом и перекручивать позвоночник. Потому что главный монитор находится прямо перед глазами, а побочный - в стороне. Либо можно поставить два монитора так, чтобы они находились равноудалённо от клавиатуры, но тогда неудобно смотреть ни на один из них. В итоге я вывел на второй монитор окно консоли, чтоб не занимало место в основном окне. Польза сомительная.
>>846520 >Также документацию на втором мониторе можно открыть. При профайлинге нужно порой сразу несколько окон открывать.
Это всё работает, если мониторы квадратные (см. пик). Но один широкоформатный монитор заменяет два квадратных. А на два широкоформатных не хватит ресурса шеи или позвоночника, потому что перед глазами их не разместить, а значит, придётся крутиться и перекручивать позвонки, что травмоопасно. Ну или есть ещё вариант, что у вас пиздатое 100% зрение, тогда 2 широкоформатных монитора можно поставить перед собой на расстоянии 1.5-2 метра.
>>846529 >и я не нашёл ничего, что можно было бы разместить на втором, в контексте работы с юнити Я профессиональный юнитидебил, когда надо было переносить дизайн интерфейса от хуйдожников из фигмы в юнити то второй моник сильно помогал.
У меня достаточно близко стоит монитор на 27". Я так прикинул, если поставил ещё один, то мне уже не хватит глаз, придётся крутить шеей, что неудобно как минимум.
палю лайфхак, если у тебя есть достаточно современный телевизор подключаешь его как второй монитор и уже смотришь удобнее стало или нет. если да, берешь нормальный монитор. если нет, то ничего не потерял.
У меня вопрос по лицензиям: а откуда Юнити узнает, сколько денег заработали мои игры? И вообще, если я делаю билд, он привязан к моему аккаунту, то есть типа нельзя опубликовать игру анонимно?
>>846567 Посмотрел сразу конец. карочи это в лучшем случае глава 3 метанита по с#. В общем по факту 30 минут самостоятельного изучения вложили в 10 часов видео.
>>846587 Если ты не знаешь, у них эдитор вообще то отправляет кучу инфы о твоей игре, где аи всё анализирует. Но как сказали выше, с шансом 0.00001% что заинтересуются.
>>846587 >а откуда Юнити узнает, сколько денег заработали мои игры? Дураку понятно что твоя игра ничего не заработает, ведь чтоб заработать на игре надо ее сначала сделать.
https://www.superplay.co/ тимлид этой конторы, утверждает, что монобехи перегружены и не следует их бездумно штамповать. При разработке надо писать классы без монобеха до тех пор, пока без него возможно обходиться.
>>846599 >При разработке надо писать классы без монобеха до тех пор, пока без него возможно обходиться. Все правильно. Это же логично. Создавай пустой класс, остальное дописывай по мере необходимости.
>>846603 Последнее время задумался достаточно серьезно о том, чтобы залететь на работку, потому что не хочу топтаться на месте и уподобляться местным лепилам, и бля чет реально работы то нихуя нет. пхех.
Кто сталкивался на последней версии юнити все массивы каждый раз во всех скриптах разворачиваются при запуске проекта? Еще и это дурацкое окно появляется что бла-бла ограничьте права для запуска эдитора, а я ебу как и зачем вообще это надо.
>>846599 Очень странная формулировка. У монобехов есть своя задача, там где они не нужны - их юзать и не будут, там где нужны - там будут. А юзать их в любом случае надо, потому что а как ты иначе на сцене что-то покажешь?
>>846677 Ну тут вот есть отряд девелоперов, который не может в архитектуру, поэтому все в игре делает монобехами, чтобы протаскивать через них связи. Аргументируя это тем, что юнити сделали монобехи, значит лучше всего работать именно с ними.
>>846599 Всё ок, но монобеха тащит с собой апдейты, старты и прочее-прочее для взаимодействия с двиглом. Ты что там собрался делать такое что тебе монобеха не нужна?
>>846688 Когда код без нее можно написать лол))) Ну типо по сути монобеха это точка входа/взаимодействия со сценой. я ее сделал в объекте и раскидываю дальше от нее что надо вниз по архитектуре. Больше она мне не нужна обычно. Ну есть специфические методы, типо инстантиейта или корутины, тут приходится да.
>>846715 Если ты в коде создаешь создаешь какой-то класс, который не имеет отношения к сцене, то нах тебе его делать монобехом? Чтобв потом заморачиваться с его удалением?
Мне кажется большинство пользователей монобех-без-оглядки, сидят там чета придумывают названия методов, переменных , пытаются разделить ответственность, и такие с важным ебалом потом резюме пишут - солид етпа. Ток в этом солиде депенденси инвершен просто да иди ты в пизду, нам юнити монобихевиор сделали, гет компонент епта из анального очка пускаю и заебиииись.
Ни одного метода монобихевиор не использовал, но отнаследовался. Заееебииииись. Бааалдеж. ЧИтаемость? охуеннно. IDE если не покажет какой объект этот код использует, просто невозможно в этом кале вообще будет разобраться, где это говно висит, че оно откуда гетает и что ему в филды гиперказуальный умелец перетащил.
>>846719 Я просто не знаю, как это, типа чисто математику вычислять? Что там такого надо напридумывать, чтобы специально выводить и вычислять, блокчейн считать что-ли? Примерно что-то уровня параллельных вычислений?
>>846735 > Я просто не знаю, как это, типа чисто математику вычислять? Что там такого надо напридумывать, чтобы специально выводить и вычислять, блокчейн считать что-ли? Примерно что-то уровня параллельных вычислений?
Вот >>846710 Зачем счетчику счета, или какому-нибудь классу, который проверяет пройден ли уровень, быть монобехом?
>>846719 Пока один ИТТ не может сообразить, как его башенки разделить на model и presenter, другой не заморачиваясь кидает компоненты на объекты и выпускает игру. Мы тут почти все любим программировать, но если нет разницы, зачем тратить время и силы?
>>846739 Двачую частично. Может быть в этом и есть смысл сделать свою архитектуру поверх юнити, но если цель создать игру, эту идею лучше отложить и воспользоваться решениями от самого движка, и уже исходя из них реализовывать планы. Поэтому не соглашусь что дополнительные время и силы потрачены напрасно. Вспомнить только одних пчеликов которые на 3д движках годами кодят сценки, и им по кайфу. Вроде были их треды на этой доске даже. Приятно было смотреть на интересные штуки у них.
>>846743 Игры разные бывают. По факту усилия должны соответствовать задаче. Но в общем и целом, в том чистом коде написано как надо и для чего это надо. Просто челы работают в одиночку и лепят, игры объемом с змейку. Ну до пенсии ты эту хуету то не будешь делать. Надо куда-то двигаться вперед.
>>846739 ну так ты когда какать ходишь, штаны зачем снимаешь, если результат один и тот же? Или если для тебя в данном случае результатом являются чистые штаны, тогда не какай просто и все. Зачем какать, если можно не какать, а результат то тот же.
>>846739 > Пока один ИТТ не может сообразить, как его башенки разделить на model и presenter Ну так он разберется, научится, и дальше будет быстрее делать. Это ж не так что ты можешь просто впервые про что-то услышать и сразу начать ебошить.
> другой не заморачиваясь кидает компоненты на объекты и выпускает игру Наоборот. Не заморачиваысь с архитектурой проект станет невозможно развивать, попробуй сам скачать зенжект и накидывать классы по солиду, уже через месяц ты с него ни за что не слезешь.
Но к вопросу это кста отношения не имеет - делаешь ты мвп или нет, в любом случае у тебя так или иначе будут классы не монобехи в каких-то ситуациях.
>>846754 ожидаемо, типикал двачер хотел повыебываться ложнологическими приемами, был обоссан своим же оружием и ушел в режим постановки диагнозов. У тебя вышка то хоть есть? Знаешься ли философию преподают буквально везде.
>>846757 Тебе нужен специалист с медицинской вышкой - у меня её нет. Нельзя обсуждать предметно вопрос, если собеседника что-то отвлекает (позывы в туалет, как в твоём случае).
>>846770 Нет. Сразу столкнешься с неудобствами, например в HDRP опять переделан постпроцессинг, пускай минимально по сравнению с постпроцессинг стек, но все равно придется переписывать скрипты. Также у меня в хдрп не работает всинк в редакторе, вообще охуеть.
>>846755 Бля что за бред ты пишешь животное? Если челик за место игры дрочится с той хуитой что написана выше он никогда ни вчем не преуспеет, и просто будет тыкаться дальше. Хватит травить эти влажные мечты.
>>846816 От тебя прям такой самобытный запах двоща. Все эти темы о том как выебать писечку, как вкатиться в айти, почему у меня ничего нет и ничего не могу ведь я очинь умный. умнее всех других. Все это ты. А жизнь тем временем идет вперед.
В общем была у меня башня как центральная сущность, на которую можно было цеплять различные поведенческие компоненты. Изначально идея казалась балдежной. как конструктор ее накидал, сразу статы подправил покрутил повертел и так далее. Но в целом каких-то плюсов я не ощутил. Даже если посмотреть с точки зрения изменений. Решил я, чтобы снаряд летел по другой траектории. Мне нужно один компонент открепить, другой прикрепить, мышкой там куда-то тянуть. Вроде не много, но заебывает. Что-то забудешь еще обязательно. Проще в коде одну строчку с абстракцией поменять и все заебись.
>>846808 Это не влажные мечты, это я тебе говорю, что понял, после того как начал работать в геймдеве, где надо быстро результат получать, да еще и есть риск что проект норм зайдет и придется много че расширять. Ты думаешь это все просто так придумали, потому что заняться нечем?