Это копия, сохраненная 5 сентября в 23:04.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: >>846842 (OP) (OP)
Официальный сайт: https://unity3d.com/ru
Документация: https://docs.unity3d.com/ru/current/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com/
Магазин ассетов: https://unity3d.com/ru/asset-store
UnityWiki: http://wiki.unity3d.com/index.php/Main_Page
На 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х полноценных игр на движке, обязательно нужно скачать код проектов, так как в книге он местами уже устарел.)
Ебать блять, это самый худший перекат из всех. Пиздец, нахуй ты перекатываешь даже не читая? И что с картинкой в ОПпике?
Ебанутый.
Что за клоунский перекат ебанарот. 26 тема по счету не может нормальную шапку сделать. Еще и картинку непонятную поставил. Казел.
Вот прям нарываются чтобы я сделал след перекат по красоте и с любовью.
Если это продолжиться я займусь лично тредом своего любимого движка. Не поленюсь потратить своё время чтобы всё привести в порядок.
Если ты используешь карты нормалей для сглаженных углов, то это, или же потому что у тебя просто куб из восьми точе и нормали расположились под углом 45 градусов
Да, восемь точек и фаски. думал чем меньше полигонов сделаю, тем лучше. Видимо, при экспорте в fbx нормали перевернулись (хотя показывает, что они обычные типа). Если я нарежу ребер на модельке, они станут по идее соответствовать же? Попробую, спс
Ты правильно думал, но в игровой индустрии уже десятки лет используется практика запекания нормалей с хайполи модели на лоуполи игровую модель. Почитай про это.
Так это делают для сохранения деталей вроде. Чтобы из миллиона полигонов осталось десять тысяч, а все финтифлюшки были на текстурах. Ну короче просто закину в Сабстенс Пейнтер стол, и мне выдаст автоматом Нормал мэп и свет запечется хорошо?
Хэндлер офк не будет статическим, прокину там по архитектуре норммально. он же будет хранить уровни апгрейдов и он же будет бизнес логикой для построения связи с юай и дергать датабазу он будет через конструктор офк.
А андерскоре перед названиями переменных это часть синтаксиса или просто традиция, чтобы визуально отличать переменные от названия классов?
общепринятая(одна из, другая например m_*) "традиция" для именования приватных полней
прозреваю они были приватными изначально (на что SeriazableField указывает - на публичных оно тупо не нужно)
помечаю так филды, без привязки к модификаторам доступа.
В данном случае частично традиция(перед приватными полями), частично долбоебизм(перед публичными)
А зачем вы переменные называете полями? локальные приватными? функции методами? хватит меня бесить!
переменная - именованная область памяти.
поле сдвиг в этой области относительно начала.
локальность - воопше другая концепция никак не связанная с приватностью/публичностью.
локальная переменная видна только в том куске кода где объявлена(ака зона видимости) поля класса доступны всегда и везде, даже если они приватные - тут только компилятор не дает влезть в приват, но его можно наебать прямым доступом по сдвигу.
зы. локальную переменную вытянуть не получиться никак ибо она просто не существует вне своей зоны видимости.
И в чем долбоебизм?
Ну вот что ты выебываешься? То, что ты так жаждешь называть полями - это просто вид переменных, который используется в классах. Возможно, это разграничение имеет роль для тех, кто занят архитектурой и инжинирингом ЯП, но не для обычного использования. Просто усложняешь и плодишь сущности зачем-то
> поле сдвиг в этой области относительно начала.
У него тоже есть имя пчелидзе.
Более того
> переменная - именованная область памяти
У этой именованной области памяти есть адрес, что есть сдвиг.
Ну и лан чтобы слишком сильно не рофлить держи официальное определение
> Afieldis a variable of any type that is declared directly in aclassorstruct. Fields aremembersof their containing type
>>1048
Потому что разрабы си шарпа так придумали, и ввели такое понятие - поле. Просто чтобы удобнее было, потому что это тебе не С++, у нас тут есть атрибуты например, которые можно повесить на поле, но нельзя повесить на локальную переменную в функции.
л-я п-я
Тут отписок не хватает, лучшим способом будет метод deinit который будет отписывать, плюс булева _isInited которая не будет давать два раза заинитить, а значит подписать два раза. Если нужно будет реинит делать то тогда будешь вызывать свой deinit() в начале инита без булева isInited.
>>0946
>[SerializeField]
>public
Двойная сериализация лишняя
>GetTowerType() и GetUpgradeLevel()
здесь и в других напрашивается свойство
public TowerType TowerType => _effectedTower;
Поле - это скорее не просто переменная, а переменная типа инстанса, то есть то, что вы в классе объявляете. Переменная более узкое определение.
сенкс за фидбек
Я так понял, что если инициализация происходит не через конструктор, а через отдельный метод, то, если по уму, то надо в каждый публичный метод пихать проверку на инициализацию. Эм ай райт?
"по уму" - да. ну т.е. если ты хочешь написать красивый код, который будет проверять все ошибки и правильно их обрабатывать, что бы какой-то левый юзер который будет его использовать все понимал даже не читая доков - то надо. ах да доки тоже "по уму" надо. и подробные комментарии.
"ирл" - а надо ли оно все тебе? ты знаешь что компонент надо инициализировать перед использованием знаешь где и как это происходит, ибо пишется под конкретную задачу в конкретном приложении.
Если будет много кода и захочешь переинитить объект то словишь очень странное поведение и можешь долго искать причину.
На подкорке уже срабатывает - вижу подписку ищу отписку, тем более написать отписку одной строкой дешевле чем ловить непонятное поведение в будущем.
Юнитеки придумали ивенты OnEnable, OnDisable, OnDestroy - подходят для многих кейсов чтобы туда засунуть подписку/отписку.
> а надо ли оно все тебе
В высокоуровневых классах стоит добавлять проверки. Это классы которые будут работать со Steam API например, или с аналитикой, мультиплеером. А в геймплее оно конечно нахуй не нужно.
> а надо ли оно все тебе?
А че, так впадлу написать 3 строчки?
Ну серьезно, это написать займет 30 секунд, чего тут думать, конечно надо сделать. Даже если он сейчас пройдется по ВСЕМУ коду чтобы расставить выбрасывание исключений и проверки внутри классов чтобы сделать невозможным их использование неправильным образом - он потратит на это ну полчаса-час если я правильно прикидываю масштаб его проекта.
Зато не облысеет когда вылезут баги. Это даже не вопрос красивого кода, он просто рискует сойти с ума потом если не сделает этого.
Есть аниматор у которого переход из Walk u Attack построен из AnyState. Переход из Entry выведен в пустой стейт.
Переход из Walk u Attack происходит по булевым флажкам.
Проблема: какого хуя между переходами анимаций аниматор все равно лезет в пустой стейт? В дебаге проверил, ситуации когда работают\выключены оба стейта не происходит
Пикча не моя
Что именно проходишь? PUN уже устарел и выкинут на помойку, если что. Его заменил Photon Fusion.
Сейчас в трендах Photon Quantum. Там уже надо писать код на ECS и хорошо его оптимизировать.
А свою пичку не догадался скинуть? По описанию не понятно нихуя
> Во фьюжене подходы из пуна не используются?
Общий подход такой же, если ты используешь модель с мастер-клиентом, когда вся логика на клиентах крутится. Посмотри туториалы. Можешь начать с доков:
https://doc.photonengine.com/en-us/fusion/current/getting-started/fusion-intro
Он стоит дороже, чем обычный Фотон (на котором крутится PUN), но при этом не даёт ничего особо нового для модели мастер-клиента. Он больше заточен под выделенные сервера. А под мастер-клиента лучше учи сразу Quantum, ибо это реально ПРОРЫВ нахуй. Особенно когда они выпустят версию 3.0, в которой будет много нового.
Ты конкретно про сеть или в общем? Для сети у них есть вот это:
https://docs-multiplayer.unity3d.com/netcode/current/about
Но проблема в том, что это чисто сетевая либа. Никакой тебе интерполяции, никакого предикшена, никакой проверки попадания с откатами (которая реализована была ещё в древней КС 20 лет назад). Ебись сам как хочешь.
Видел ещё вот этот сетевой движок популярен:
https://mirror-networking.com/
И вот этот:
https://www.darkriftnetworking.com/
Понял/принял.
https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html
Понял
нет, мне конечно льстит предположение, но это успешный титан игродел с 134 подписчиков, а у меня ноль потому что канала на ютубе нет
так я игры на 21 делаю. а это легаси и чужое, я его для души допиливаю у меня даже сорцов нет, только ilspy
а нахуя ты покупал курсы и оставлял свою почту?
Этот инфо-циган и у меня в ленте бывает всплывает.
пришло время поговорить о боге нашем git'e...
серьезно попробуй. хотя бы в виде локального репозитория
Хорошо
Не думаю, что связано с этим
Фпс сколько? Ты можешь хоть кс 1.6 видеокарту так нагрузить - если проц вытягивает дохуя фпс и не стоит лимит на фпс(всинк тоже очевидно дает лимит на фпс)
Да и вообще больше конкретики нужно, что за видеокарта, что есть на сцене - сколько треугольников, есть ли полупрозрачность, какие рендер пайплайн и есть ли какие-то особые шейдеры?
Я знаю что это за трабла, и она решается ровно одной строчкой. Что ты готов сделать ради неё?
фпс по ощущениям 60+
Полупрозрачность есть — стандартный шейдер для стекла типа. Есть шейдеры которые импортировались с модельками, но там типа аутодеск шейдер и че еще такое, не страшное. Частицы скачал, но их в сумме 400 на всю сцену, просто снежинки летают. Треугольников хз сколько, по идее не выше среднего. Текстурки пережал. Видеокарта 3060ти
>>1919
Ну это мир сбилженный под VRchat, поэтому я не уверен, что мы говорим об одном и том же. Я грешу все-таки на свет, хотя внутри движка не нагружается так видюха
Без разницы под что сбилжено хоть под ведро. Если сбилженая игра жрёт как не в себя гпу под 70-90%, хотя в теории и 5% не должна то я знаю что это.
А я не знаю
> фпс по ощущениям 60+
Ну а надо по факту, а не по ощущениям. Может оно там в 500 фпс крутится.
> Есть шейдеры которые импортировались с модельками, но там типа аутодеск шейдер и че еще такое, не страшное
А кто знает, может и страшное. Материалы это серьезное дело, надо знать что у тебя за материалы висят и сколько их.
Треугольники в статс можно посмотреть
Глобальное освещение есть? Реалтайм освещение?
Ну а что ты готов сделать ради этого?
Это примитивная херня, но без опыта и понимания долго можно копать. Если не синьерпомидор то никогда не выкопать.
ничего разумеется, если такая проблема у меня возникнет я ее решу без твоих выебонов
Ну смари чел. Если вдруг не сможешь решить, ты знаешь где меня искать.
>Глобальное освещение есть? Реалтайм освещение?
Дирекшнл свет и сфера с небом, которую вставляю на вкладке Lighting. Риалтаймовые 5 поинт лайтов и 2 спот лайта (ну они у меня Mixed стоят с Hard shadows) в комнатке 5х5 метров.
Ну попробую все материалы прочекать и поменять их на оптимизированные. Только после перевода проекта под андроид, свет стал запекаться странно (серый вместо черного цвета; причем запеченная ранее карта света на винвовс норм отображалась)
Типо структура, которая хранит данные игрока, сейчас содержит два раздела. Номер последней игровой сцены и апгрейды. Данные совершенно разные для разных систем. Значит надо разбивать на два интерфейса. И пошло, поехало.
Переместил проверку на наличие файла из ридера в лоад метод менеджера, если файла нет менеджер запускает райтер с дефолтными статами игрока в аргументах, и возвращает их же. Запилил код для уи основного меню, код, управляющий сценой главного меню, код управляющий переключением сцен.
Осталось сделать прототип меню апгрейдов, его код и принять пару архитектурных решений как все прокинуть и скомпоновать и будет рабочий прототип игры. В принципе все наработки уже есть, думаю справлюсь.
Последнее время началась хуйня, не знаю почему, юнити скидывает протянутые в редакторе связи, чет подзаебало.
класс DataManager лучше сделать статикой.
Ты можешь свои классы сериализировать в json, юнити предоставляет нативное легкое решение, да ещё скорее всего будет быстрее работать.
https://docs.unity3d.com/ru/530/Manual/JSONSerialization.html
https://www.youtube.com/watch?v=gMfijpTkKX8
лучше взять json.net он быстрее и получше. юнитековский корявый весьма
В курсе что бесплатная версия лежит на сайте разрабов?
дык сам напиши астар же очень простой
> юнити предоставляет нативное легкое решение
Забавно, что сами они им не пользуются в своих SDK, а используют Newtonsoft.
https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.0/manual/index.html
Лампу повесь для освещения динамических объектов, одной глобалкой нормально ничего не осветишь. На лампе можно выставить на какие отдельные объекты он будет светить.
О, прикол
Я нашел туториал и там чел делал это через слои. Он правильно делал или это костыль?
Ничего страшного, в соседней комнате переиспользуешь эти же слои.
Да похоже я тоже перепутал, думал как раз об этом пакедже у них в мануале и написано.
это билт ин рендер пайплайн такой? На юрпе у меня таких проблем изначально не возникало - после запекашки всё равномерно освещено и динамический объекты не выбиваются из вида
всё так, тебе дают калпилятор под все платформы, кое-как рабочий редактор, несколько кое-как рабочих калпанентов и несколько полезных API функций, всё остальное делоешь и думоешь сам
А почему? Ну, потому что программист - это про код, про программу в целом. Дофамин у программиста вырабатывается именно при таком положении, когда их код их целиком удовлетворяет. Они просто физически не смогут продвинуться дальше, пока их текущий код их всецело неудовлетворяет. Пока они чуют, что что-то не так/что можно сделать лучше, они и не продвинутся ни на шаг.
Они могут игру сделать быстро, если не будут рефлексировать над каждой строчкой/классом. Возможно, даже код будет не говнокодом, если хотя бы будут избегать самоповтора.
Не сужу. Программисты они такие. Возможно, это работяги-программисты, а геймдев - это хобби. Либо хобби связано с программирование. У них в мозгу уже вшито правильное программирование, и есть печальный опыт еботни с кривой архитектурой.
Не-программисты ебашат сразу, коряво, всрато, но идут семимильными шагами.
Ну видимо в этом есть и свои плюсы: работает на некропеках и игры делать можно для некропек, добавляя только оптимизированные штуки
Нормально гуманитарий порвался. Ты кстати тоже не игродел, потому что без прогера ты игру не сделаешь.
> Люди, которые больше дрочат на код, оптимизацию, архитектуру
Это три разные вещи.
1) Дроч на код ради кода. Это проблема перфекционизма. Ей страдают часть программистов. Это действительно проблема.
2) Дроч на оптимизацию. Есть игры в которых без этого никак, как в той же Факторио. Особенно это было раньше актуально. В этом нет ничего плохого.
3) Дроч на архитектуру помогает развивать игру. Если ты создаёшь пиксельную инди-хуинди, которую раз прошёл и забыл - ок. Если ты создаёшь игру-сервис или игру, которая будет развиваться, ты обязан сделать нормальную архитектуру. Тот же Нотч сделал шикарную расширяемую архитектуру в Майнкрафте, что породило много крутых модов.
https://pastebin.com/Pgdc4Tvr
А игру когда будешь делать?
и как без кодера перекатить правила например той же дынды? ну даже урезанной допустим. там их духуя. и как потом поддерживать эту яндерелапшу.
я без подъебы, мне реально интересно.
Ну ты говоришь, что геймдизанер не сделает игру без прогера. Но в реальности он ее сделает. Геймдизайн происходит из настолок и карточных игр, а не из программизма. Поэтому базовая смысловая единица для геймдизанера это именно настолка. Простая или сложная — значения не имеет, ибо прототип собирается из листочков бумаги, потом в издательстве художники рисуют картинки, скульпторы отливают фигурки итд. Программистов тут нет (только косвенно, который софт писали для 3д и 2д принтеров, для логистических программ)
>и как без кодера перекатить правила например той же дынды?
никак. Ну т.е. кто не брался, может и думает что сделает, но как сядет, будем несколько смущен тем фактом, что перетаскивание ссылок в редакторе не решает вопросы, а ответов в гугле об архитектуре подобной системы нет.
ну хорошо допустим геймдизайнер сделал эту настолку на листочках. как их переводить в код? они же не сами там образуются. а что потом делать, когда правила надо будет поменять или дополнить? правила же не в граните отливаются. даже в чисто физических настолках есть ревизии разные.
>>2647
вот тут реально бы подошли blueprints из анрила
какой-то кривой косой можно было бы сделать, а потом передать людям которые уже шарят
Люди, которые больше дрочат на механики, баланс, таблички - это просто геймдизайнеры, а не игроделы, которые, конечно же, больше чем просто геймдизайнеры. Им правда важны механики. Даже если у них будут готовые няшные ассеты, готовое окружение - пока они не будут удовлетворены балансом, они игру так и не сделают.
А почему? Ну, потому что геймдизайнер - это про баланс, про механики в целом. Дофамин у геймдизайнера вырабатывается именно при таком положении, когда их баланс их целиком удовлетворяет. Они просто физически не смогут продвинуться дальше, пока их текущий баланс их всецело неудовлетворяет. Пока они чуют, что что-то не так/что можно сделать лучше, они и не продвинутся ни на шаг.
Они могут игру сделать быстро, если не будут рефлексировать над каждой механикой/комбо. Возможно, даже механика будет не говномеханикой, если хотя бы будут избегать самоповтора.
Не сужу. Геймдизайнеры они такие. Возможно, это работяги-бухгалетеры, а геймдев - это хобби. Либо хобби связано с табличками. У них в мозгу уже вшито правильное сведение баланса, и есть печальный опыт еботни с кривой табличкой.
Не-геймдизайнеры ебашат сразу, коряво, всрато, но идут семимильными шагами.
>ну хорошо допустим геймдизайнер сделал эту настолку на листочках. как их переводить в код?
Знаю довольно много не программистов, которые методом копипасты пишут скрипты для разных программ, наподобие Tabletop Simulator и прочих VTT. Ну то есть это уровень примерно как формулы в экселе писать.
Ну разговор же шел о том, что без пограмиста игру не сделать, а оказывается, что сделать
Соболезную.
Я смог, просто это рушит все твои аргументы, ведь мир не ограничивается только видеоиграми. Самое тривиальное упражнение для гд: создать настолку как раз
Ну просто это шаблонное мышление, будто бы геймдизайнер это профессия только про компьютерные видеоигры и без программиста геймдизайнер никто
ну а тут делают компьютерные игры поэтому хош не хош а от нас макак кодерков и возможно даже полторы настоящего программиста не спрячешься братан
Проверка зависимостей лул)) во вкладке компоненты, ближе к концу в разделе с гитом в инсталере.
Ща пощупаем Pro c#)))) по оглавлению выглядит балдежнее
Хз, я не пойду пробовать посмотреть че там. уже был прецедент когда свинорылый пидарас через юнити хаб чета закидывал российским пользователям.
Это не через юнити хаб, это в браузере. Уже починили. Но я минут 40 не мог бесплатный ассет добавить, и через VPN тоже.
И вот тут нада пояснительную бригаду. а нахуя?
Я такпонимаю, что первая строчка дает имя солюшену. Збс, я его еще при создании указал. Вторая говорит, что солюшен будет на шарпе и использует дотнет5. Ну тут вроде тоже понятно, он был бланк, мы настроили. А вот смысл третьей строчки я не догоняю. Я же уже создал проект через солюшен эксплорер.
А не, тут даже получается, что он создает новый проект и потом регистрирует его в солюшене. Только нахуя я не понял
Ну да, только он это просит делать для проекта созданного через солюшен эксплорер. я думал может там двойное дно какое-то, но походу просто теже самые действия, только через консоль.
>Не стал выебываться, читаю Про си шарп с азов
А игры делать когда? Поступай как я: гуглишь нужную механику и воруешь код из туториала, так и учишь этот говнонедоязык
не заебало одну и ту же шарманку заводить каждый раз, болезный?
зачем тебе это нужно дикий подключи студию/райдер к эдитору и работай с юнити как нормальный человек
так ты не читай книжки для тырпрайсеров кровавых, плохому научат
Ну и заднюю давать тоже как-то некрасиво. Сделаю карочи туториал сцену и ебись оно конем.
ну зато ты получил ценный опыт
> осознание того, что никто играть в него не будет
Это правильные мысли. Я изначально решил, что буду реализовывать только популярные хайповые темы. И это сработало с первой же игрой. Жаль ребятишек, которые годами создают никому не нужное говно.
прикручивай механику по всякой прокачке и талантам и донат дающий доп. бонусы, 100% не прогадаешь
urp
Нет. IList не реализует интерфейс IReadOnlyList. Я всё ещё ищу тварь которая это сделала.
Соси.
Это конкретный класс, и он кста даже не реализует интерфейс IReadOnlyCollection.
)))
Смари:
private List<Yoba> _yobas;
public IReadOnlyList<Yoba> Yobas => _yobas; -----не выйдет, ошибка.
Внутри класса я юзаю _yobas и модифицирую его. Мне надо чтобы внешние классы могли получить доступ к этому списку, но не могли его менять. То что я написал - так по логике должно было бы работать, но нет. Конечно можно сконвертировать лист в ireadonlylist, но типа какого хуя я должен с этим заморачиваться, особенно мерзко когда надо в методы передавать и там лишний мусор выделять
да похуй свои задачи выполняет и ладно
я уже заебался беспокоиться обо всей этой хуите которая творится вокруг коллекций в сисярпе мне нервы дороже
Это не играет роли, я проверял
Как его ротация отображается?
static выделяет память во время компиляции, поэтому можно создать массив с размером, записанным в статическую переменную. Но это всё какие-то нубские движения.
Я всё понимаю, это язык такой тупой, что нельзя создать массив вне функции, где количество элементов задаются перед этим в переменной
>количество элементов задаются перед этим в переменной
у тебя количество элементов как раз не задано.
На скрине нет, но я пробовал public int Points = 5;
Все равно была та же самая ошибка. Либо надо инт делать статик, либо запихнуть создание массива в функцию
Ты какую-то хуйню делаешь. Это же MonoBehaviour? Тебе вообще не нужно создавать массив. Потому что он создаётся автоматически Юнити, а количество элементов настраивается в редакторе.
Это сериализуемое поле. Его создаёт Юнити. И Юнити задаёт кол-во элементов массива. Вообще, используй SerializeField, чтобы код нормально читался.
Константой сделай
Можно если points будет константой или статическим полем.
Вовремя понял в который уже раз?, что это просто дата классы ссаные днище донное. Что методы, которые я кавалерийским наскоком хотел ебануть чарактеру вообще нихуя не его методы по SOLIDу и по совести. И что программу надо проектировать все-таки отталкиваясь от того что где с кем будет взаимодействовать, т.е. начиная с верхних уровней.
В общем попробую накидать схему. Начну с продумки подсистем.
Товер дефенс анон бывший майт энд мэджик анон в будущем возможно долбоеб, наступивший на старые грабли
Сделаю несколько простеньких игр, уровня крестики нолики. Одна будет обязательно сетевой. Добавлю в портфолио и начну долбить во все мидл вакансии.
ну так правильно, игоры все равно нахуй не нужны, а так хоть чем-то полезным займетесь
Он имеет ввиду что юнити тебе предоставит настраиваемый параметр в виде коллекции элементов в инспекторе, что как раз в концепции разработки под юнити, особенно если элементы будут Monobehaviour
короче смотри что происходит. суть в том что на момент создания массива его размер должен быть определен. для инициализатора поля points на этот момент не существует, посему он не может его прочитать и ругается на это. более того ятп тебе надо что бы массив ресайзился через при задании количества точек - в таком варианте это происходить не будет, потому что инициализаторы отрабатывают один раз перед конструктором. более того массив уже имеет свойство которое дает его длину, хранить отдельно нет смысла
в теории можно сделать через свойство типа
public int Points {
get => ArraySphere?.Length ?? 0;
set { создание нового и копирование старого }}
||но опять же если это динамически(и регулярно) изменяемый массив то лучше юзать List<>||
НО как ужо сказали юнити уже содержит все нужно - юнити инспектор умеет и ресайзить и количество пишет. просто сделай его сериализируемым что бы увидел
Понятно. Ну я просто засунул его в метод старта, теперь он создается при старте игры
Какого хуя это ваше юнити такое тяжелое? По ссылкам из шапки начал проходить юнити эссентиалс, там был лего туториал. Вся эта шняга весит гигабайт с лишним. Потом у меня была ошибка, надо было добавить скрипт. Сука, скрипт на 10 строчек весит 300 мегабайт. Это я делал на старой лежавшей с 21 года версии. Вот сейчас обновился до последней LTS версии 2021 и этот же самый лего микрогейм у меня открывается уже минут 15 и размер папки с проектом доходит до полутора гигабайт, а таймер в unity package manager'е все увеличивается и увеличивается. Все докачалось и открылось. В итоге эта лего микрогейм весит 2.42ГБ!!! Первый маунт и блейд весил меньше гига. Третьи кресты весят всего в два раза больше. А тут блядская демка после создания билда весит 3.33ГБ. После переката на последнюю ЛТС версию кстати грузиться и тормозить стало запредельно дольше, чем на предпредыдущей версии. Какие же дауны на разработчиках я просто охуеваю. Вопрос у них там вообще об оптимизации думают нет? Я конечно видел в видео, кто у них там работает. Какой-то трап, негр, индус и две фемки. Эти про оптимизацию даже не слышали наверное
почему для этого надо делать цикл и брать их трансформ
почему нельзя...
ИИшная дура мне вообще ерунду советует...
В папке Library накапливается всякий кэш и прочие временные файлы.
> А тут блядская демка после создания билда весит 3.33ГБ.
Ну а ты хуле думал.
Такое я уже добавлял, это легко.
У меня там кастомный скрипт (ну вот когда создаешь например новый скрипт в контент-бравзере и перетягиваешь его потом на объект, появляется компонент для скрипта)
>>3365 (Del)
Ты показываешь, что сдк2 деприкейтет, а выше написано про сдк3. Там только имя класса дается, а я про более общую вещь спрашиваю вообще
Она у меня появляется во время старта игры, а я хочу ее вызвать в редакторе по клику просто. Это наверное надо в консоли что-то прописать? название класса и метод?
> Вопрос у них там вообще об оптимизации думают нет? Я конечно видел в видео, кто у них там работает. Какой-то трап, негр, индус и две фемки. Эти про оптимизацию даже не слышали наверное
Ну тебе то открывшему юнити в первый раз явно виднее как там что должно быть и что сколько должно весить.
А так - ты путаешь что такое билд и проект.
В проекте лежит: куча всякого неисользуемого мусора на всякий случай, несжатые текстуры, кэш чтобы все в редакторе моментально запускалось, скомпилированные шейдеры.
Всё это весит много, в итоговый билд очевидно оно всё не нужно.
> Сука, скрипт на 10 строчек весит 300 мегабайт
Ну тут уж просто хуйню несешь.
>В юнити есть возможность вызывать функцию (метод) прям в редакторе, а не в рантайме?
Конечно, есть, ты просто тупой петух неосилятор, ищи господина прогера себе, сам не сможешь
Конечно можно. Ты можешь создать свои пункты меню, свои окна и т.п. и из них вызывать код.
https://learn.unity.com/tutorial/editor-scripting
https://docs.unity3d.com/ScriptReference/MenuItem.html
Дохуя примеров на ютабчике есть. Вообще, в редакторе можно сделать что угодно.
>Ну тебе то открывшему юнити в первый раз явно виднее как там что должно быть и что сколько должно весить.
Не надо, но я могу сравнить с полноценной игрой и какой-то демкой, где 9 сцен и некоторое количество объектов
>А так - ты путаешь что такое билд и проект.
А, вроде понял о чем ты. Тогда да, наверное хуйню сморозил
>Ну тут уж просто хуйню несешь.
Я реально посмотрел сколько весит весь проект, накинул в него скрипт и посмотрел опять. Возможно за это время в тот же кэш какая-нибудь хуйня отлетела, но не могу ручаться, надо проверять еще раз, а мне уже лень
Не виднее*
хуй соси сынок ебаный пока струю мочи в ебало не отхватил сын спида и пидора хусосинка
Если ты будешь одет в девочку, то это уже не гомофантазии, зайчик
Старшеклассник, не скули. Лучше домашку начни делать, иначе завтра Мариванна тебе двойку влепит, а дома мамаша за это интернет отберет
не возвращайся пока не посмотришь весь гайд от спасителя нашего ромки. он сделает из тебя настоящего программиста по юнити играм.
https://www.youtube.com/watch?v=w8rRhAup4kg
Врчат работает через юнити
Да именно так.
Могу сказать по своим примерам - у нас проекты от 4 до 20 гб где-то весят, просто потому что туда сваливаются тонны ассетов из стора. А итоговый билд в районе 100мб выходит.
Да нах он вам нужен, когда есть метанит?
Как сделоть чтобы объект отлетал от другого объекта по X и Z, но не по Y. Т.е. я передаю во врага трансформ взрыва, а дальше что надо вписать в AddForce чтобы он отлетел так, как я хочу?
Чел есть такая вещь доки, научись ими пользоваться.
https://docs.unity3d.com/ScriptReference/Rigidbody.AddExplosionForce.html
Долбоеб, это другой клоун. Чмо ты шизоидное с паранойей
Тебе тут не помогут, лучше сразу поискать норм коммьюнити
Да там вроде можно работать как со старой даже, только вместо input используется девай. Но оно конечно нахуй не надо, когда ты жмешь два клика мышкой, а тебе выдает уже готовые 3дэкшон биндинги причем на 3 вида девайсов сразу.
вот допустим если я в VS делаю проект с нужным таргетом и потом скомпилированный длл пихаю в /plugins - все работает как часы
а вот если я пытаюсь какие-то фишки из нового языка уже в эдиторе пилить - хуй, ругается
оно гвоздями прибито или есть варианты?
Ну чем новее версия юнити тем новее компилятор. Последняя версия шарпа это 9 емнип. Хз какие ты там фишки нагуглил которые не поддерживаются.
так в том и дело что я не на последней версии юнити сижу. все вкусное начинается где-то с 19-20, а у меня ниже. каждый раз приходится либо переписывать либо компилить вне
Все "фишки" это синтаксический сахар, вместо которого на старой юнити писать надо на пару строчек больше, только и всего. Не припомню киллер фич шарпа без которых на старых юнитях писать совсем тяжко.
я об этом и говорю т.к. моя версия старой юнити это 5.3.5 и либы которые я переодически тягаю с гитхаба с более новых версий - все лицо в сахарке, весь лог в ошибках.
переходить на новую версию не могу потому и ищу наизжопный хак
Ну так обнови?
Делай на старых версиях либ.
Например, в классе LohMonobehaviour есть private float pidr, и я бы хотел ее мониторить прямо на экране в игре в runtime.
Также, когда переменная меняет значение, я бы хотел, чтобы она например подсветилась временно, чтобы я заметил.
Есть готовые решения с кучей полезных прибамбасов?
Вроде можно отобразить все все поля в инспекторе, но мне я бы хотелось чтобы именно на экране, чтобы сразу все было видно
Зы: я тут подумал, что GUI.label("loh:"+loh) вполне подойдёт.
задумывались во времена юнити 5.0/5.1
когда уже готовился 6й (или 7й?) шарп а юнити толком в 4й не умело. была ебля с подменой компилятора(тут фишка в том что шарп коспилируется во внутренний язык дотнета а он обновляется очень редко, обновления шарпа - синтакс, библиотеки и допиливание компилятора на il никак не влияет, а юнити работает уже по сути с этим языком передавая его дотнету или ил2срр или еще чему под конкретную платформу) можешь попытатся побыть некромантом и впендюрить
https://libraries.io/github/iamchenxin/CShape6_Unity3D
если совсем все плохо.
с 20хх версий это ушло нахер и юнити без проблем использует(и более того требует для новых фич) компилятор вижуал студии
> Ну остановить тут дебилушка!
Как же я тебя понимаю. Устал себя хуесосить за это. Когда ловлю себя на мысли, что уже не решаю конкретные задачи, а просто дрочу код ради кода, то хочется разъебать пк.
о, спасибо, я как раз задумывался над тем не подменить ли его, а тут такой подгон как раз от человека который на 5.x это делает
Сап, расскажите про TextMeshPro. Я "интегрировал" гит в юнити, а из-за этого ТМР у меня проект отображается будто написан на ШейдерЛабе, тк там дохуя файлов связанно с ТМР. Как мне избавиться от этой хуйни? Перевести все в текст? Так текст в юнити галимый. Или дальше страдать?
> Хуже меня никого нет
Я хуже тебя. Как-то больше суток потратил на то, чтобы придумать название для класса.
Почему кастомный класс - event удаляет инфу о количестве референсов.
>Как-то больше суток потратил на то, чтобы придумать название для класса.
Какое в итоге придумал?
> а из-за этого ТМР у меня проект отображается будто написан на ШейдерЛабе
Где отображается и почему на это не похуй?
Ну это стоило того
Идеально
не зря сидел
С каких пор в названии класса есть точка?
Велик соблазн делать через классы. Но на самом деле днд это ecs.
Но делать ее не советую. Там сейчас бурления говен с лицензией. Лучше делать свои механики и геймплей.
Впряглись но результаты пока неизвестны, поэтому они сами на волоске.
Как бы их самих не раздели.
Ждем ОРК под черным флагом!
Создают видимость, переставляя пункты туда сюда, а по главному вопросу (отзыв старой лицензии, с которой PF посыпется) никак не отвечают.
Если я хотя бы базис самый осилю накодить, там куда угодно можно будет повернуть. Пока я только пропукиваю над архитектурой.
Просто учитывай что бывают такие вещи вроде аур или лужи кислоты.
Похоже на рабочий вариант чи шо?
Зачем тебе дополнительные слои абстракции? Просто сделай класс инвентарь и пускай с ним работает и UI, и персонаж. Внутри него будут ссылки на объекты, которые содержат всю инфу о предмете. В пустых слотах будет просто null ссылка. Если нужно пройтись по всем предметам и что-то подсчитать, сделай это через сам инвентарь.
Почему ты ещё не бросил геймдев? В нем же одни минусы:
1. Ты портишь зрение.
2. Ты портишь осанку.
3. Ты утомляешься, психуешь, бугуртишь в этих проклятых циферках.
4. Все было легко и классно, когда ты был новичком. Когда чуть стал постарше, ты понял, какие умственные напряги нужны чтобы писать нормальный код, чтобы не спотыкаться, не тормозить, не переписывать и при этом легко править и добавлять новые фичи.
5. И самое главное - осознавать, а ради чего это все? Если ты развил свой ум, а в программировании это все же естественно,то ты понимаешь, что не сможешь создать игру, которая всем понравится. Ты правда считаешь, что можешь изобрести новый интересный геймплей/сюжет/графон? Ты можешь сделать только очередной клон. Все эти твои усилия - ради очередного клона? Ты такой взрослый, но надеешься как девочка, что произойдет чудо и ты вдруг заработаешь неплохо. Чтобы сделать такую игру, пусть это и будет всратый клон, нужно ещё больше усилий, маркетинг, попсовый графон и вау музыка и эффекты.
А может ты оправдываешь себя тем, что твой опыт позволит тебе устроится на работу в заветный геймдев? Ок, это возможно. Но в 99% ты будешь делать раковые игры для деточек. Ведь твой босс будет хотеть лишь заработать денег, и поэтому ты будешь как конвейер клепать то, что заходит современным школьникам. Лучше в офисе бумажки перебирать, ей богу, тот же онанизм, но без умственных напрягов.
Я скажу тебе, когда стоит быть в gd. Когда у тебя есть единомышленники и у вас у всех есть идея игры, которая привнесет что-то новое, которая захватит сердца и потрясёт ум игрока. Когда вы по настоящему одержимы идеей и готовы идти до конца. Вот, он истинный геймдев. Все остальное рак, духота, дроч.
Вот что тебе не хватает. Именно в твоём подсознании мучает тебя - ты делаешь не то, ты делаешь зря, у тебя нет идеи и смысла.
Серьезно, лучше научись делать что-то практичное и полезное. Лучше бы учился готовить, или делать деревянные вещи, или чинить технику.
Бросай геймдев. Освободи гигантское количество умственной энергии и свободного времени.
Почему ты ещё не бросил геймдев? В нем же одни минусы:
1. Ты портишь зрение.
2. Ты портишь осанку.
3. Ты утомляешься, психуешь, бугуртишь в этих проклятых циферках.
4. Все было легко и классно, когда ты был новичком. Когда чуть стал постарше, ты понял, какие умственные напряги нужны чтобы писать нормальный код, чтобы не спотыкаться, не тормозить, не переписывать и при этом легко править и добавлять новые фичи.
5. И самое главное - осознавать, а ради чего это все? Если ты развил свой ум, а в программировании это все же естественно,то ты понимаешь, что не сможешь создать игру, которая всем понравится. Ты правда считаешь, что можешь изобрести новый интересный геймплей/сюжет/графон? Ты можешь сделать только очередной клон. Все эти твои усилия - ради очередного клона? Ты такой взрослый, но надеешься как девочка, что произойдет чудо и ты вдруг заработаешь неплохо. Чтобы сделать такую игру, пусть это и будет всратый клон, нужно ещё больше усилий, маркетинг, попсовый графон и вау музыка и эффекты.
А может ты оправдываешь себя тем, что твой опыт позволит тебе устроится на работу в заветный геймдев? Ок, это возможно. Но в 99% ты будешь делать раковые игры для деточек. Ведь твой босс будет хотеть лишь заработать денег, и поэтому ты будешь как конвейер клепать то, что заходит современным школьникам. Лучше в офисе бумажки перебирать, ей богу, тот же онанизм, но без умственных напрягов.
Я скажу тебе, когда стоит быть в gd. Когда у тебя есть единомышленники и у вас у всех есть идея игры, которая привнесет что-то новое, которая захватит сердца и потрясёт ум игрока. Когда вы по настоящему одержимы идеей и готовы идти до конца. Вот, он истинный геймдев. Все остальное рак, духота, дроч.
Вот что тебе не хватает. Именно в твоём подсознании мучает тебя - ты делаешь не то, ты делаешь зря, у тебя нет идеи и смысла.
Серьезно, лучше научись делать что-то практичное и полезное. Лучше бы учился готовить, или делать деревянные вещи, или чинить технику.
Бросай геймдев. Освободи гигантское количество умственной энергии и свободного времени.
В гитхабе, там показывает прямо какой язык преобладает в проекте. И из-за ТМР там шейдерлаб этот ебучий. А тк я в шарпе практикуюсь я хочу чтобы проект и отображался шарповым
Полгода назад именно так бы и сделал.
ладно наебал, вроде раньше была такая настройка
https://stackoverflow.com/questions/13597892/how-can-i-change-the-language-of-a-repository-on-github
второй пост. пометь папку с тмпро как внешнюю либу, что бы он её не учитывал
Так я ее и сделал епта, даже три по сути, тебе мой гитхаб кинуть?
Лучше я тебе итч скину, зацени, правда там только одна игра
https://rk800-1.itch.io/pong
>>4322
Я через гит-атрибуты настроил выдал все файлы с .shader расширением как шарповые
Неосилятор, спокуха.
как вы работаете с иерархией?
допустимо ли чтобы в компоненте был например лист из других компонентов, а система бы потом брала этот лист и по нему работала?
Если надо хранить мало данных, то конечно playerprefs.
ну ва первых лист там быть не могет в принципе.
динамикбуффер имеет ограниченный размер и тут нада балансировать между ожидаемой максимальной вместимостью и производительностью. ну и очень хуево паралелится на запись
если нужно прям МНОГО энтитей то лучше уж сделать лукап или формировать что-то типа нативхешмепа предварительно
воопшем давай конкретный юзкейс
Не следует множить сущее без необходимости.
Вот тут пацаны карочи тоже есть вопросы. Например - группа хранит список персонажей, добавляет и удаляет. Мне кажется это норм класс, он делает свое дело. Селектор принимает инпуты с хоткеев или щелчок по иконке персонажа в гуи и вот тут у меня сомнения. Получается, что это по сути контроллер, и вроде как он не должен хранить данные. но мне надо сохранить где-то индекс текущего персонажа. Такое ощущение, что мне нужен еще один класс, который будет хранить этот индекс и содержать в себе эвенты завязанные на изменение выбранного персонажа.
А еще лучше, это класс может хранить в себе уже не индекс, а ссылку на персонажа и его уже все кому надо могут раздергивать на интерфейсы. мне кажется так вполне даже заебись.
Еще есть вопросы по селектору. Он по уму не должен знать об устройстве группы. Он должен ей просто систнуть, типа эй, сюда дай персонажа под индексом 6. А в группе их всего три. Она должна сама обработать эту проблему, выдать ему например последнего доступного и селектор уже его переправляет в класс, который непосрдественно дает доступ к интерфейсам персонажа.
мой короче конкретный юзкейс, я хочу попробовать ецс у меня сейчас все работает на старом подходе
родительский объект-сплайн, у него контрольные точки - трансформы, разнообразные проперти-настройки
к сплайну цепляются другие объекты и по его t высчитывают свою матрицу(ездят по сплайну)
как это дело на ецс перетащить?
я ж говорю попробовать хочу. сначала посмотреть как это работает на примере одной задачи и если допру то уже все остальное переводить буду
у меня проблема что я тупо не могу понять как это ецс вообще работает
https://github.com/YarnSpinnerTool/YarnSpinner-Unity
заткнулась пидорша
Карочи смотрите, класс отвечающий за хранение данных о группе игрока. Хранит список персонажей, имеет публичный интерфейс для его изменения. Ок. заебись.
Мне надо сделать классическую так сказать панель с портретами, при клике на который выбирается персонаж. Я кавалерийским наскоком делаю контроллер, связываю в нем UI и PlayerGroup и они начинают типа взаимодействовать. Делаю в группе эвент, который в случае изменения состава группы пошлет в контроллер новый состав, контроллер его декомпозирует на портреты и прочую хуйню и скормит в UI.
Но тут я понимаю, что это ебись оно конем просто пизденейшее нарушение инкапсуляции, настолько хуевое, что граничит с зашкваром.
А че делать? Как разрулить?
Какие варианты у меня есть:
1) Сделать структуру, которая будет контейнером нужных данных - портрет, хп, имя и так далее. В конструктор этой структуре скармливается персонаж, она из него дерграет че надо, и уже в контроллер мы передает список структур, а не персонажей. А в группу добавляем нужный метод, который будет эти стрeктуры делать и отправлять.
С одной стороны, мы вроде защищаем данные группы, с другой стороны и не сильно ее напрягаем, потому что она не занимается там какой-то декомпозицией, не лезет внутрь персонажей, за нее это делает структура.
Что думаете?
ты эти модерские штучки бросай, персонажи ему в ридонли видите ли. Они тебе что, мешают, что ты им ридонлями рот заткаешь?
забань их еще для коллекции! коллекционер епт
1280x720, 0:02
> и уже в контроллер мы передает список структур, а не персонажей
Чел, это шиза из энтерпрайза. Там это актуально. Не пытайся затащить это в геймдев, иначе шизофрения и седина на волосах тебе обеспечены. Допустим, ещё момент - ты посылаешь список, А ВЕДЬ Я МОГУ ЕГО ИЗМЕНИТЬ ХИ-ХИ-ХИ!!!!
Короче, смотри:
1) Не нужно кидать список в ивент. Просто сообщи, что произошли изменения. Далее UI или класс-посредник самостоятельно через свойство прочитает обновлённый список. Единственное, можно ещё добавить ивенты CharacterAdded(ссылка на char), CharacterRemoved(ссылка на char).
2) Как я уже сказал, лучше вынести список в свойство. Либо сделай из PlayerGroup полноценную коллекцию, реализовав ICollection или IEnumerable. Тогда невозможно будет изменить список извне, но вопрос - а нахуй всё это нужно, если это к геймдеву не относится никак.
3) Хранить можешь интерфейсы, а не сам Character. Например ICharacterInfo. Какой в этом смысл? Так ты сможешь протестировать интерфейс накидав тестовых чарактеров без какой-либо логики. При этом свойства будут ReadOnly - твоя любимая инкапсуляция.
4) В константе нет смысла указывать чарактеров во множественном числе, так как ты уже написал COUNT. Типа characterCount, characterList - правильнее без s.
>Просто сообщи, что произошли изменения.
интересная мысль
>реализовав ICollection или IEnumerable
хммммм ммммммм хммхмхмхм
3. Вопрос не в чарактерах, а в защите состава группы.
>чарактеров во множественном числе
угу. да.
Все свои заебы оставлю на пошаговую систему, вот там меня точно разъебет, распидорасит как надо.
Бля, где найти РАБоту/команду? Я сам кодер, у меня опыт даже коммерческой разработки есть. На гитхабе три игры, в итче правда одну только выложил. Английский знаю. Вакансии смотрю - уже даже не от мидла а от сеньора и выше. Где хотя бы мидловские поискать? Ну или на крайний случай адекватную команду найти, может на реддите чего есть? Интересует именно юнити
>Вакансии смотрю - уже даже не от мидла а от сеньора и выше
ты мысли сначала выражать свои научись грамотно.
Душнила спок
вот решил посмотреть а как игоры-то делают на примере популярного фреймворка (leoecs lite) ведь лучший способ разобраться кмк взять уже то что работает и покрутить его в руках
https://github.com/supremestranger/3D-Platformer-Lite/blob/main/Assets/Scripts/Systems/PlayerMoveSystem.cs
он короче в этой системе
и вообще в системах
берет фильтрует компоненты для своей системы
и прогоняет систему по ним
и так все системы каждый тик апдейта
получается что ецс настолько быстра что кешировать не надо ничего?
я не пони
Для фильтра там может быть под капотом заведен отдельный массив, где уже в момент добавления/удаления хранятся только нужные сущности.
Очевидно он на полпути, так как у него уже:
>сервис по расчету атаки производит расчет он просто прогоняет поиск этой коллекции и ищет нужный интерфейс и все.
Осталось всего-то заменить интерфейс->компонент и сервис->система.
ну поехали.
ва первых иерархия трансформов в ецс уже есть. можешь тупо го построить в иерархию и они так и конвертнутся или сделать вручную. нужно по минимуму
на обооих энтитях LocalTransform, LocalToWorld и на дите Parent. система инициализации добавит(если нужно) DinamicBuffer<Childs> на парента, LocalToParent и PrevParent(для отслеживания смены родителя) на дитё если нужно. далее связанный объект будет следовать за главным повторяя его движения, учитывая вращение и скейл как обычно.
конкретно это делается в SumulationSystemGroup -> TransformSystemGroup -> ParentSystem соответственно все движения объектов желательно проводить до неё, что бы правильно обновились все связанные объекты и пересчитались координаты, а читать данные - после.
дополнительно есть DynamicBuffer<LinkedEntityGroup> который вроде как отвечает за уничтожение связанных объектов при уничтожении главного, но заставить его работать я не смог. почему то первый и последний в списке не учнитожались. в доках ничего не нашел, написал свою реализацию.
конкретных подходов несколько.
1. самое простое, для случая если измения происходят постоянно в паренте и детях - парент считает общий кусок и ложит в свой комонент(в иерархии это например трансформ). дети через компонентлукап достают с парента это значение и считают что-то свое(т.е. свой трансофрм) на его основе.
2. парент имеет какой-то "большой" неизменный кусок данных(и соответственно хранить его в каждом дите кагбы и невыгодно) дети считают все сами. например тот же сплайн общий для всех детей а позицию на нем они считают по каким-то своим данным. BlobAssetsReference - единожды создается сплайн а детям выдается ссылка на него(собственно именно на сплайне или пути обычно примеры с ним и построены)
3. есть еще "средний" вариант с шаред компонентом, но это очень специфичный случай и требует точного понимание что происходит. суть - этот компонент один на чанк, общий для всех его энтитей. но изменять его дорого и муторно, посему нельзя просто так. он обычно используется для объединения однотипных энтитей по какому-то признаку
ну поехали.
ва первых иерархия трансформов в ецс уже есть. можешь тупо го построить в иерархию и они так и конвертнутся или сделать вручную. нужно по минимуму
на обооих энтитях LocalTransform, LocalToWorld и на дите Parent. система инициализации добавит(если нужно) DinamicBuffer<Childs> на парента, LocalToParent и PrevParent(для отслеживания смены родителя) на дитё если нужно. далее связанный объект будет следовать за главным повторяя его движения, учитывая вращение и скейл как обычно.
конкретно это делается в SumulationSystemGroup -> TransformSystemGroup -> ParentSystem соответственно все движения объектов желательно проводить до неё, что бы правильно обновились все связанные объекты и пересчитались координаты, а читать данные - после.
дополнительно есть DynamicBuffer<LinkedEntityGroup> который вроде как отвечает за уничтожение связанных объектов при уничтожении главного, но заставить его работать я не смог. почему то первый и последний в списке не учнитожались. в доках ничего не нашел, написал свою реализацию.
конкретных подходов несколько.
1. самое простое, для случая если измения происходят постоянно в паренте и детях - парент считает общий кусок и ложит в свой комонент(в иерархии это например трансформ). дети через компонентлукап достают с парента это значение и считают что-то свое(т.е. свой трансофрм) на его основе.
2. парент имеет какой-то "большой" неизменный кусок данных(и соответственно хранить его в каждом дите кагбы и невыгодно) дети считают все сами. например тот же сплайн общий для всех детей а позицию на нем они считают по каким-то своим данным. BlobAssetsReference - единожды создается сплайн а детям выдается ссылка на него(собственно именно на сплайне или пути обычно примеры с ним и построены)
3. есть еще "средний" вариант с шаред компонентом, но это очень специфичный случай и требует точного понимание что происходит. суть - этот компонент один на чанк, общий для всех его энтитей. но изменять его дорого и муторно, посему нельзя просто так. он обычно используется для объединения однотипных энтитей по какому-то признаку
ты пропустил четвертый основной концепт ЭКС, который в название не вошел - запросы(фильтры в терминах лео). заметь что фильтры должны быть объявлены в системах как поля и не создаются на ходу по необходимости(в дотс вроде бы создаются, но стоит открыть автогенерированые исходники и там видно что это наебка - запросы создаются статично, "за кадром", а "динамические" просто их берут). вот на это и ложится большой кусок оптимизации - правильно рассортировать энтити по запросам что бы системы получили именно то что нужно а не лазили по ВСЕМ энтитям в поисках нужных
Бля, подскажите пожалуйста, в юнити есть менее ебанутый способ скрывать/включать отображение UI кроме как оборачивать все в канвас и через GetComponentsInChildren с предварительным пропуском parent-объекта их обрабатывать?
Ну просто это даже звучит дегенеративно, однако гуглеж других способов как не получить при этом NULL Reference exception не подсказал Может вы подскажете...
Ну самое очевидное - делаешь синглтон, UIManager какой, которому в общем случае говоришь какую менюшку показывать и все такое. у него всегда есть(должны быть иначе он работать не могет) ссылка на корневой канвас и он соответственно может его безболезнено скрывать/показывать целиком. упрощая до минимума - синглтон с ссылкой на корневой канвас, а там уже делай що хочешь
В смысле "литерали то же самое"?
зы. А зачем воопше идти по всем детям? скрываешь корневой канвас и всё..
Так тогда у меня Null ref будет, тк у меня панель должна появляться только когда геймовер, а по умолчанию она должна быть отключена
Вот код можешь глянуть если хочешь https://github.com/RK800-1/Flappy-Clone/blob/main/Assets/Scripts/GameOverPanel.cs
так значит смотри. делаешь синглтон гуйменеджер вида
public class UIManager : Singleton<UIManager>
{
public Panel GameOverPanel;
public Panel MainMenuPanel;
public Panel SomeOtherGUI1;
....
private void HideAll()
{
GameOverPanel.GameObject.SetActive(false);
MainMenuPanel.GameObject.SetActive(false);
SomeOtherGUI1.GameObject.SetActive(false);
....
}
public void GameOver()
{
HideAll();
GameOverPanel.GameObject.SetActive(true);
}
}
вешаешь его на основной канвас. назначешь все вложенные менюшки по соответвующим панелям, все отключаешь и включаешь нужные методами типа GameOver()
вполне стандартный способ. как продвинутый вариант - хранишь эти менюшки как префабы создавая по необходимости
есть причина зачем их искать через таг?
можно поля либо публичными либо сериализированными сделать, перетащить в эдиторе нужные элементы и жить не тужить
поменялся таг @ все сломалось @ не знаешь почему
Бля, а ведь реально, тут сериалайз можно, чет я затупил. Я просто вообще думал чтобы в GUI не настраивать нихуя все тегами пометить и к ним доступ иметь
Можешь мои другие скрипты глянуть если хочешь)
мне тупо было лень писать сериалайз филд перед каждой панелью, но по хорошему надо.
файнд же юзать следует в очень редкому случаю - какой-то ну прям очень нестандартный путь исполнения, где действительно надо перебирать все что есть что бы найти кто тебе нужен. т.е. все пошло не так как задумывалось и ты пытаешься правильно обработать ошибку
Да, согласен, надо бы это все исправить, спасибо.
Я еще после этой поделки первую планирую "рефакторить"
делаешь префабы всех компонентов UI, на старте сцены кор игровой скрипт инициализирует UI, тот подгружает их из ресурсов в приватные переменные. Если тебе прям пиздец приватность надо. Но приватность не приватность по-большому счету к солиду мало относится вообще.
Мимо архитектурный анон.
Не, мне таких штук не надо, я же просто аналог флеппи берд бля делаю, просто чтобы это совсем колхозно не выглядело.
Я сам на безопасника учусь и у нас есть аксиома что "стоимость защиты не должна превышать стоимости риска"
Я насчет солида просто пытаюсь каждой фиче свой класс выделять и примерно одни функции туда пихать. Типа игроку свой класс, там только управление игроком, препятствиям свой класс, зоне увеличения очков свой класс и тд. Такой вот солид на минималках
Ну и геттеры с сеттерами использую
Я даже не понимаю че ты делаешь своим способом.
В чем проблем активировать/деактивировать геймобжект под которым висит юи?
Этот чел приблизительно с таким заходом мне за 2 часа до нового года писал, типа тоже у него на 2 часа работы, либо щас делай либо в 9 утра вставай 1 января)))
Хз, я просто не хочу это делать. Хочешь заняться, дай телегу, я ему перекину
Перед отправкой поигрался с окнами и узнал что глитч убирается, если сменить размер любого блока хоть на пиксель. Все равно кину.
Спрашиваю заранее потому что в игре моей мечты у персонажа и мобов будут скилы. Ну частично магия. По задумке анимация скилов будет не сложнее чем в вове.
Ну и частично эффекты оружия / брони.
Легко, в Particle System
В том-то и дело, что тебе не придётся тратить время на создание партиклов. Лучше игру делай. А партиклы купи на ассет сторе.
https://assetstore.unity.com/?q=particles&orderBy=1
Нутк подредактировать готовые проще чем с нуля делать.
Я просто пытаюсь реализовать менеджера объектов, чтобы не создавать кучу сцен, а сделать все в одной - разбил объекты на канвасы которые олицетворяют определенную игровую сцену и их все закинул в "менеджер" канвасов
Короче, как это исправить или сделать нормально?
там суть в том что координаты зависят от анчора/пивота/стретча.
т.е. начальная точка. в какую сторону от неё считать координаты и как их считать относительно анкора
задается кликанием по квадратикам с зажатым альт/шифт/контролом. там в принципе все довольно интуитивно(я даже не запоминаю какой шифт за что отвечает) - поискперементируй.
С виндой разобрался, еще про юнити похожий вопрос.
Обязательно ли ставить хаб или лучше скачивать отдельно LTS? Будет ли в таком случае доступна загрузка из ассет стора?
Хаб удобнее
>Ну, если нету желания сидеть афк ждать пока оно прогрузится долго
у меня они на м2 и все равно грузятся по 300 лет
старые юники так не грузились даже на ждд
> у меня они на м2 и все равно грузятся по 300 лет
Ну вот и представь ебало чела с хдд, там 3000 лет будет.
И еще включи параллельный импорт в настройках
Отдельную боль доставляет тот момент, что надо тоже самое имплементировать еще и реалтайм режиме. Во-первых, потому что наложенные заклинания должны как-то обсчитываться, во вторых я планирую походовую и реалтайм систему боя. Типа как в меджике.
В плане создания нпс пока не придумал ничего другого, кроме как сделать монобех - NPC, это контейнер, который будет в себе содержать тот же Character класс, что и мои персонажи и походу набор бихевиор скриптов типа диалог, мувинг, хуювинг со стейт машиной под стратегию. хз.
Такие дела, маслятки.
Была еще проблема, типа я накидал общую идею и пару конкретизирующих строк, и наткнулся на такой момент. Как определить, что бой окончен? Все участвующие в бою являются одним классом с одним набором данных. Т.е. я не могу их отсортировать. Вводить в класс Character какой-то флаг - нпс не нпс, ну это слабенькое решение. И тут пришла в голову идея, что бой должны начинать отряды, тут соответственно достаточно легко понять идет бой или нет. Сразу встала проблема, как формировать отряды. Наверное придется таки вводить какие-метки, типо отношение к игроку и засовывать это все в нпс контейнер.
Из неоднозначного: не нашел доступа в ассет стор. Как правильно им пользоваться? В самом движке будет окно с ним и выбором ассетов, или же это в браузере делать надо?
Второе что хотел узнать - раньше в тредах по юнити писали, что есть инструмент (видимо в ассет сторе) который добавляет доступный визуал скриптинг. Везде упоминали одно и тоже название этого инструмента (плагина).
И третье - с чего начать? Может есть ютуб канал/курсы которые в уроках трогают самое необходимое для нуба? Когда я изучал майю, то в курсах videosmile прямо выжимку дали, что я без проблем мог уходить уже в английские туториалы.
>Как правильно им пользоваться?
через браузер, руками и ногами
>визуал скриптинг
хуета bolt
>с чего начать?
с делания игры
через браузер покупаешь или добавляешь бесплатные ассеты в сторе
после чего в пакет менеджере - мои ассетсы - добавляешь их в игру
болт выкуплен юнитеками и входит в стандартные ассеты(пакет менеджер - юнити регистр) под названием visual scripting. не помню установлен ли по дефолту
ну и если из россии - готовь впн, в не пускает.
или таймаут или 403
пакменеджер пишет что не можут загрузить список пакетов.
через впн ессно все работает
Хз. Судя по гитхабу она джуниорский джун. В коде чувствует себя очень неуверенно. Не представляю, чем она занималась 3 года в команде. Приносила кофе красноглазикам?
Это видимо тот долбоеб, который пару дней назад прибегал со скрином с ньюсача о том, что у кого-то стим не грузанулся и полилася перемога лол.
Конченный хуесос настолько тупой, что пытается напиздеть там, где каждый может проверить нажал одну кнопку лол.
Есть
у меня есть этот кал, если ты ждёшь, что там будет красивенький редактор и кнопка сделать пиздато - то можешь забыть
Там есть готовая система скилов насколько я понял по скринам, а нубу такое воссоздать будет трудно.
Ну смотря в какой команде, типа с друзьями собраться и учиться делать игру - это ж тоже "работа в команде"
Импортировал. Все сцены с ошибками. Гора чужого кода. В мейн меню на камере весит анкноун скрипт.
И типа серьезно, покуешь за 200 баксов и сидишь ебешься чтоли?
добро пожаловать в юнитимир.
и кстати если ты думал что отзывы могут хоть как-то помочь не купить кусок говна то нет, негативные отзывы можно тупо удалять чем хуесосы вроде автора odin inspector занимаются с огромным удовольствием
Запросы по реализации у меня небольшие. Помните Lineage 2 или первые версии вова? Вот геймплейно в этом духе, только без онлайн составляющей и сложных штук вроде инстансов:
-глобальная система статов и пассивных/активных умений (одна и та же для игрока, нпс, моба)
-реализация квестов с простейшими сценариями
-дроп предметов, где статы экипировки генерируются в зависимости от уровня персонажа
-инвентарь
Первая планка для меня - создать набросок стартовой деревни с парой -тройкой функциональных нпс: кузнец, торговец, учитель навыков, житель выдающий один единственный квест на убийство мобов в двух локациях рядом.
>>5603
Благодарю, попробую разобраться или что нибудь за основу взять
>-глобальная система статов и пассивных/активных умений (одна и та же для игрока, нпс, моба)
>-реализация квестов с простейшими сценариями
>-дроп предметов, где статы экипировки генерируются в зависимости от уровня персонажа
>-инвентарь
это не сложно, проблема только с визуалом, если ты не умеешь рисовать или моделить это я
Я начал изучать моделирование за 7 мес. до установки юнити. В реализм не могу, и не стремлюсь (моего железа на это просто не хватит). Текстуры на граф планшете планирую отрисовывать.
Стремится буду примерно к такой же стилистике как на пике (естественно выйдет хуже).
У меня проблема с кодингом, придется учить эти скрипты так или иначе. Ну и звук, откуда то придется брать саунд. В качестве затычки на первое время будет нейрогенерация с AIVA
>Стремится буду примерно к такой же стилистике как на пике
не знаю как остальным, но мне такое по кайфу, только светлее и побольше солнца
>У меня проблема с кодингом, придется учить эти скрипты
можно пиздить из чужих игр
Единственное я не знаю как с растительностью быть. Вероятно в юнити есть инструмент, чтобы загрузить туда вариации растительности, какого то мелкого окружения (обломки, вещи) чтобы потом мазать это по террейну.
У меня даже рендер из коробки срет. Все кроме террейна маджента.
Грубо говоря после прожатия кнопки время только начинает замедлятся, через 3 секунды достигает своего пика (полная остановка) и после снова уходит на ускорение.
"просто" все затронутые замедлением объекты должны использовать в апдейте вместо Time.DeltaTime какой-то условный MyTime.DeltaTime с которым в начале фрейма производятся все необходимые искажения относительно обычного течения времени.
Сап аноны, сделал вторую игру, вот репозиторий если хотите можете заценить/разъебать/поддержать
https://github.com/RK800-1/Flappy-Clone/
https://github.com/RK800-1/Flappy-Clone/
Давно юнити изучаешь?
Вот несколько советов, они не прям критичны тут, но в будущем могут пригодиться:
Пик 1. Лучше не делай GameObject поля. Вот нупример у тебя есть player, и ты ниже из него получаешь PlayerController гет компонентом. Лучше сразу пусть будет PlayerController player. Почему? Потому что есть риск что ты перетащишь туда что-то не то, в процессе игры вылезет ошибка и ты потом долго будешь искать в чем дело. Конечно в такой маленькой игре ты быстро найдешь, а представь игра больше будет.
Пик 2. Есть атрибут RequireComponent. Советую его повесить на этот класс, чтобы не было такого, что скрипт ты повесил, а ригидбади забыл.
Пик 3. Вот у тебя есть private KeyCodeButton. И этот геймобжект где-то лежит на сцене. Чтобы это поменять тебе надо открыть сцену, найти его и там менять. Ты мог бы использовать ScriptableObject с этим кей кодом и запихнуть его сюда в качестве параметра, а его уже положить в папку настроек какую-нибудь. Когда у тебя будет много таких настроек(особенно которые нужны сразу нескольким объектом и должны быть одинаковыми), то будет сложна перебирать сцену и искать там всё, поэтому лучше заранее подобные вещи с СО делать.
Пик 4. Чтобы не мучаться с this и не добаалять везде pub, можешь просто на поля класса добавлять префикс _. Будет у тебя не protected float speed, а protected float _speed, зато больше никаких this и никаких pub
Я не виноват... Меня подставили
Что если будет псевдо открытый мир с условными переходами которые обусловлены геймплеем?
Ну как давно, может несколько месяцев. Я скорее не изучаю а гуглю в процессе. Изучал шарп.
За советы спасибо, а насчет this, я просто на РАБоте с похожим на шарп ЯП работаю и уже привык.
Вообще задумка была максимально по солиду сделать и чтобы ориентироваться и поддерживать было относительно просто. Понимаю что хуйня но тем не менее, я пытался. Завтра начну рерайтить первую игру Понг, можешь тоже глянуть если хочешь)
Вот насчет настроек кстати не знал. Я тоже думал мол как сделать так чтобы например имена сейвов сохранить в одно место и там их доставать, или вот то что ты описал. Гуглил - не нашел ничего
>просто на поля класса добавлять префикс _
а я считаю это крестобесовщиной и визуальным мусором хотя конечно зис еще хуже мне проще в аргументы newX передать чем видеть эту хуйню во все поля
360x642, 0:26
Тоже когда-то так думал. Пока не стал возвращаться к старому коду. И когда его читал, то понял, что мне приходится тратить время (пускай секунды) на то, чтобы понять является переменная локальной или же это поле класса. Поэтому теперь использую "_". Да и в целом следую современному коде-стайлу команды .NET
https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md
Норм, так и надо
> Вообще задумка была максимально по солиду сделать и чтобы ориентироваться и поддерживать было относительно просто. Понимаю что хуйня но тем не менее, я пытался. Завтра начну рерайтить первую игру Понг, можешь тоже глянуть если хочешь)
Ну обязанности ты кое-как разделил, но с поддержкой тут еще много работы. Пикрил например. Короче основной совет, что вот прям супер сильно и заметно прям щас можно улучшить - пытайся сделать так, чтобы у тебя было как можно меньше GetComponent(за исключением когда у тебя висит RequireComponent или когда ну это реалльно надо, в твоем случае с обстаклами по идее - но сделай отдельныц гемобжект, повесь их под него, и на нем делай GetComponentsInChildren тогда уж) или его аналогов - пусть ты сделаешь новый класс, пусть ты добавишь поля куда надо мышкой будет перетащить потом значения, это всё лучше чем работать с GetComponent и надеяться что нужный компонент действительно есть на нужном месте.
>>6011
Ой да подумаешь, для нескольких месяцев это ок
>>6014
Ну, FindObjectsWithTag это очень тяжелый метод, а ты его ебошишь каждый тик фиксед апдейта. Его ток иногда можно юзать.
Тебе надо сделать класс управляющий списком обстаклов, чтобы он обновлял список только когда это надо, и все кому этот список нужен уже у него его просили.
По второму пику - получается у тебя текстовое поле хранит рекорд. Во-первых из этого вытекает ебанина с parseInt, а во-вторых это как бы не его обязанность - текстовое поле должно отображать информацию а не хранить число.
Т.е. тебе надо сделать класс для управления рекордом, который будет чекать сейв(это лишняя обязанность если прям поехать на солиде, но по здрааому смыслу это ок) и сохранять его по необходимости, и через него все остальные будут получать рекорд в виде int, и дальше нужен класс отобразительРекорда который будет чекать рекорд и заносить его в текстовое поле(но не каждый тик апдейта, а когда пришло событие что рекорд обновлен - гугли пока что в сторону c# events и UnityEvent, ну и если хочешь базу то это называется паттерн обсервер)
Норм, так и надо
> Вообще задумка была максимально по солиду сделать и чтобы ориентироваться и поддерживать было относительно просто. Понимаю что хуйня но тем не менее, я пытался. Завтра начну рерайтить первую игру Понг, можешь тоже глянуть если хочешь)
Ну обязанности ты кое-как разделил, но с поддержкой тут еще много работы. Пикрил например. Короче основной совет, что вот прям супер сильно и заметно прям щас можно улучшить - пытайся сделать так, чтобы у тебя было как можно меньше GetComponent(за исключением когда у тебя висит RequireComponent или когда ну это реалльно надо, в твоем случае с обстаклами по идее - но сделай отдельныц гемобжект, повесь их под него, и на нем делай GetComponentsInChildren тогда уж) или его аналогов - пусть ты сделаешь новый класс, пусть ты добавишь поля куда надо мышкой будет перетащить потом значения, это всё лучше чем работать с GetComponent и надеяться что нужный компонент действительно есть на нужном месте.
>>6011
Ой да подумаешь, для нескольких месяцев это ок
>>6014
Ну, FindObjectsWithTag это очень тяжелый метод, а ты его ебошишь каждый тик фиксед апдейта. Его ток иногда можно юзать.
Тебе надо сделать класс управляющий списком обстаклов, чтобы он обновлял список только когда это надо, и все кому этот список нужен уже у него его просили.
По второму пику - получается у тебя текстовое поле хранит рекорд. Во-первых из этого вытекает ебанина с parseInt, а во-вторых это как бы не его обязанность - текстовое поле должно отображать информацию а не хранить число.
Т.е. тебе надо сделать класс для управления рекордом, который будет чекать сейв(это лишняя обязанность если прям поехать на солиде, но по здрааому смыслу это ок) и сохранять его по необходимости, и через него все остальные будут получать рекорд в виде int, и дальше нужен класс отобразительРекорда который будет чекать рекорд и заносить его в текстовое поле(но не каждый тик апдейта, а когда пришло событие что рекорд обновлен - гугли пока что в сторону c# events и UnityEvent, ну и если хочешь базу то это называется паттерн обсервер)
> Тебе надо сделать класс управляющий списком обстаклов, чтобы он обновлял список только когда это надо, и все кому этот список нужен уже у него его просили.
Или вот так
> в твоем случае с обстаклами по идее - но сделай отдельныц гемобжект, повесь их под него, и на нем делай GetComponentsInChildren тогда уж
Просто других вариантов не нашел. С поиском по тэгу слышал что тяжелый метод, пытался просто сравнение объектов, а там хуйня получилась тк объект который я цепляю уничтожается хоть и префаб, а это нульреференс вызывало насколько помню. А так спасибо, буду иметь ввиду.
А что из подобного вообще стоит новичку "покупать"/брать по бесплатной лицензии?
Или же это профессиональный софт, и для нуба не будет разницы между audacity с десятком плагинов и этим wwise?
Какой софт посоветуете для общих задач по звуку начинающему?
Задач несколько:
1. Обработка звуков записанных с микрофона - шаги, лязг, звуки оружия, столкновений либо взятых с стоков
2. Синтез с нуля чего нибудь необычного, что нельзя изобразить в домашних условиях
3. (необязательно) Обработка фраз для озвучки персонажей
Я начал исправлять другую игру, там сделал по другому, можешь глянуть если хочешь. Надеюсь это получше. По крайней мере теперь там геткомпонент один и при добавлении новых объектов не надо добавлять их в коде
https://github.com/RK800-1/Pong/blob/main/Assets/Scripts/Main%20menu/SceneLoader.cs
А вот ты посмотри, я пытался это сделать вроде как
Там у меня есть переменные геймобжектов чтобы их использовать в качестве аргумента для переключения а в массиве нужно чтобы их запарсить и закинуть в словарь чтобы менеджмент панелей работал
Кстати насчет вакансий джунов. Я в одну гк залупу на похуй закинул, отказ пришел спустя 20 дней только. Вот такой там конкурс на место походу.
А в балдуре все переделали воообще ни разу не нвн лол.
Пацаны, советуйте. Карочи у файтера, паладина, ренджера, варвара и может еще у кого-то точно такая же профа по оружию. Я пока ебанул просто для каждого отдельный класс с повторяющимся кодом, но это офк не правильно. Есть другой вариант, взять класс файтера, отнаследовать всем остальным от него и просто переопределить в нем описание. Но этот подход, я полагаю, тоже не правильный, потому что они все в горизонтальной зависимости. Т.е. получается мне нужно сделать абстрактный класс AllWeaponProficiency, а уже от него каждый класс с такой профой будет наследовать и переопределять дескрипшен под себя.
Эм ай райт?
Какой смысл тебе советовать, если ты совет тупо игноришь? Ецс.
Ты в курсе что у днд есть бесплатная версия, где всего один фит, и всего по одному архетипу класса, а есть платная, по которой ты игру делать не можешь? Ну то есть можешь, только потом никуда выложить не выйдет.
Да, я в курсе, спасибо за заботу.
А у вас было такое. Целый день хуячишь жёстко, под конец к ночи/вечеру пиздецки устаешь. А на следующий день мозг работает намного хуже, вяло, и кодинг вызывает раздражение и даже простые вещи идут тяжело
Например, если бы я пилил Майнкрафт.
1. Таблица материал:
id|name
1|wood
2|gold
3|diamond
....
2. Таблица инструмент
id|name
1|лопата
2|кирка
...
3. Инвентарь
Инструмент_id|материал_id
2|3 (алмазная кирка)
Выглядит не очень
> Например, если бы я пилил Майнкрафт
Ночт все предметы объявил в статических полях и ему было заебись.
Ты так каждый раз об этом говоришь с придыханием лол. Майнкрафт то хоть купил?
В последнее время я так не люблю гулять. Что я там не видел. Подумываю купить беговую дорожку. Открою форточку, закрою глаза и буду представлять что иду/гуляю по парку
спасибо за совет, обязательно куплю, как только сделаю игру и буду получать с нее миллионы
Естественно первая игра должна быть простенькой,типа floopy birds, поэтому из-за спидрана код все же можно починить, и чтобы в итоге все работало, даже с нарушением всех правил солид и прочего.
>типа floopy birds
Ну сделай, че там делать то, работы на полчаса? И чем тебе поможет, такая игра? Вон в геймджеме любом поучаствуй там такой уровень и будет.
https://store.steampowered.com/app/754150/Rolling_Line/
начинающему программисту?
ну скачай да посмотри исходники (если она в моно), по скринам параша какая-то
Что за тулза?
Добавьте тоже потом в шапку, документация по Unity на русском
https://unityhub.ru/manual/index
https://unityhub.ru - портал для всех юнити разработчиков
Что сделано за 2022 год:
1. Был создан раздел "Документация" со всей официальной документацией (почти 25к страниц). И вся эта документация полностью переведена на русский язык.
2. Было написано 90 гайдов.
3. Был создан новый раздел "Магазин Ассетов", и загружено 300 ассетов.
4. Был создан новый раздел "Игры", и загружено 85 игр.
5. Был создан личный блог для пользователей, с возможностью оставлять посты и подписываться на интересующего Пользователя.
Что планируется сделать в 2023 году?
1. Возможность загружать на сайт игры формата WebGL.
2. Возможность подписки на загруженные игры/ассеты, чтобы следить за последними обновлениями данной игры/ассета.
3. Создание нового многофункционального раздела GameJam.
Как лучше это сделать, создать в одном скелете/рисунке кучу слоев сразу на все позы, и выключать не нужные слои/кости в каждой конкретной анимации
Или же создать несколько скелетов и как-то хитровыебано переключать их, чтобы на каждую позу включался свой скелет?
Надеюсь понятно спросил
Какое тут соглашение по наименованиям
А)
PlayerMovement.cs:
namespace Player
{
class PlayerMovement {}
}
Или же
Б)
Movement.cs
namespace Player
{
class Movement {}
}
Если не заметили, то во втором варианте я опустил слово Player из названия файла класса, и самого класса.
Вообще, у меня такая идея. Если файлы по Player находятся в одноименной папке Player, то как-то странно, что внутри этой папки, где и так ясно, что там все по Player-у, в названии файлов дублируется Player. То есть, в этом случае, если есть папка, то подходит вариант А).
А вот если файлы по игроку находятся в общей куче с другими файлами, то логично, чтобы отделить друг от друга, надо писать PlayerMovement. Ведь там может так же быть EnemyMovement.
Короче, я безыгорная чмоня, как вы поняли, но мне все равно это интересно.
Неймспейсы хуйня.
А кидать классы с одинаковыми названиями в разные неймспейсы типа потому что один для ишрока другоц для врага - и того хуже, это вообще кошмар, ни в коем случае так не делай.
Назови хоть 1 объективный профит от использование неймспейса в твоем проекте
Неймспейсы нужны только когда над проетком работает несколько человек, при этом в проекте есть явное разделение на отдельные наборы модулей. Тогда неймспейсы будут выполнять 1)поисковую функцию - человек сможет сразу посмотреть что есть в каком-то неймспейсе 2)возможность быстро понять где идут зависимости между разными наборами модулей
Сцук, ты конечно молодец, что попытался представить, что у меня за проект, но вопрос был чисто про нейминг, а то что я описал выше это взятые с рандома примеры.
system.windows.markup.xamlparseexception - не нужен?
Неймспейсы вообще не имеют отношения к тому, сколько человек работает, шиз. Или по твоему Вася может писать только в Render.Drawing, а Коля - в Input.Gamepad?
Пчел, ты чо рофлишь? Ты спрашиваешь какое решение подойдет к рандомному проекту(ответ - рандомное, можешь хоть монетку подбросить, правда не жди с этого пользы) или всё таки конкретно твоему? Абсолютно любое решение делается исходя из проекта и его особенностей с какой-то конкретной целью - т.е приняв это решение ты должен получить какой-то профит с этого.
Если ты собираешься делать неймспейс Player и Enemy и в обоих делать Movement - то я тебе сразу говорю это надо совсем долбоебом надо быть чтобы не видеть какие из этого вытекут проблемы, поэтому я тебя сразу предостерегаю - не надо так делать, и лучше вообще свои неймспейсы не определяй с такими вопросами раз ты не понимаешь зачем они нужны(если бы у тебя был проект, где они нужны - ты бы сразу это понял скорее всего и даже ни у кого ничего спрашивать бы не стал)
Вот пара подсказок:
1. Название Movement скорее всего никак не отражает что конкретно оно будет делать
2. Куча веселья в едиторе если они монобехи
3. Еще больше веселья в иде, надо постоянно чекать тот ли у тебя неймспейс подключен(особенно актуально если у тебя нормальная архитектура и оба мувмента один и тот де интерфейс реализуют), а если нужны оба то еще и юзингом переименовывать придется, и спрашивается а зачем ты их вообще одинаково назвал.
Короче ты в результате либо экран кулаком разобьёшь, либо переделаешь.
> но вопрос был чисто про нейминг
Ну так нейминг сразу 2 проблемы затрагивает - понятность того что делает класс и конфликты имён.
>system.windows.markup.xamlparseexception - не нужен?
Нужен. Во всяких бибилиотеках обязательно должен быть хотя ды корневой неймспецс. А десятки неймспейсов тебе в проекте скорее всего не нужны.
using Infrastructure.Game.Entitites.Player;
using Infrastructure.Game.Entites.Enemy
и так нахуй целая простыня а в каждом по паре классов. Ебало представил своё от этого? А профиты хоть малейшие?
И абсолютно другое дело, когда проект большой или над ним работает много людей.
>>8073
> сколько человек работает, шиз.
> Или по твоему Вася может писать только в Render.Drawing, а Коля - в Input.Gamepad?
Ну конечно же нет бля. Вася говорит Коле - еба я сделал сервисы для прогресса игрока, давай ка в ui мне отобрази его. У нас там уровень, статы, деньги, дохуя всего ну разберешься короч. И коля такой пишет Game.Services.PlayerData. и ему иде сразу показывает че там есть и ему не надо ни по каким там папкам копаться и разбираться что ему нужно. Вот сразу понятный и конкретный профит который даже в небольшой команде будет.
А если проект очень большой, то там будет еще и разделение кто над какими модулями работает поэтому могут быть конфликты имен, т.е. потребность в неймспейсах еще больше.
А сидеть в соло хихикать и отделять игрока от врага разными неймспейсами - ну это же безумие.
Пчел, ты чо рофлишь? Ты спрашиваешь какое решение подойдет к рандомному проекту(ответ - рандомное, можешь хоть монетку подбросить, правда не жди с этого пользы) или всё таки конкретно твоему? Абсолютно любое решение делается исходя из проекта и его особенностей с какой-то конкретной целью - т.е приняв это решение ты должен получить какой-то профит с этого.
Если ты собираешься делать неймспейс Player и Enemy и в обоих делать Movement - то я тебе сразу говорю это надо совсем долбоебом надо быть чтобы не видеть какие из этого вытекут проблемы, поэтому я тебя сразу предостерегаю - не надо так делать, и лучше вообще свои неймспейсы не определяй с такими вопросами раз ты не понимаешь зачем они нужны(если бы у тебя был проект, где они нужны - ты бы сразу это понял скорее всего и даже ни у кого ничего спрашивать бы не стал)
Вот пара подсказок:
1. Название Movement скорее всего никак не отражает что конкретно оно будет делать
2. Куча веселья в едиторе если они монобехи
3. Еще больше веселья в иде, надо постоянно чекать тот ли у тебя неймспейс подключен(особенно актуально если у тебя нормальная архитектура и оба мувмента один и тот де интерфейс реализуют), а если нужны оба то еще и юзингом переименовывать придется, и спрашивается а зачем ты их вообще одинаково назвал.
Короче ты в результате либо экран кулаком разобьёшь, либо переделаешь.
> но вопрос был чисто про нейминг
Ну так нейминг сразу 2 проблемы затрагивает - понятность того что делает класс и конфликты имён.
>system.windows.markup.xamlparseexception - не нужен?
Нужен. Во всяких бибилиотеках обязательно должен быть хотя ды корневой неймспецс. А десятки неймспейсов тебе в проекте скорее всего не нужны.
using Infrastructure.Game.Entitites.Player;
using Infrastructure.Game.Entites.Enemy
и так нахуй целая простыня а в каждом по паре классов. Ебало представил своё от этого? А профиты хоть малейшие?
И абсолютно другое дело, когда проект большой или над ним работает много людей.
>>8073
> сколько человек работает, шиз.
> Или по твоему Вася может писать только в Render.Drawing, а Коля - в Input.Gamepad?
Ну конечно же нет бля. Вася говорит Коле - еба я сделал сервисы для прогресса игрока, давай ка в ui мне отобрази его. У нас там уровень, статы, деньги, дохуя всего ну разберешься короч. И коля такой пишет Game.Services.PlayerData. и ему иде сразу показывает че там есть и ему не надо ни по каким там папкам копаться и разбираться что ему нужно. Вот сразу понятный и конкретный профит который даже в небольшой команде будет.
А если проект очень большой, то там будет еще и разделение кто над какими модулями работает поэтому могут быть конфликты имен, т.е. потребность в неймспейсах еще больше.
А сидеть в соло хихикать и отделять игрока от врага разными неймспейсами - ну это же безумие.
Сами игры: https://rk800-1.itch.io/
Репозитории: https://github.com/RK800-1/Flappy-Clone
https://github.com/RK800-1/Pong
Сами игры: https://rk800-1.itch.io/
Репозитории: https://github.com/RK800-1/Flappy-Clone
https://github.com/RK800-1/Pong
Отвечайте лучше под этим постом, предыдущий чет не отображается как мой
private wait = new WaitForSecondsRealtime(1f)
1.вроде бы сейв манагер, но зачем-то текст
2. итт кто-то парсит из текста переменные?
короче всё хуйня
да мусорит
если ты про эти то да
https://github.com/ColinLeung-NiloCat/UnityURPUnlitScreenSpaceDecalShader
Я ее об этом не просил. Две отдельные текстуры тела с белыми и черными трусиками. Скрипт просто меняет текстурные карты материала:
public void SetTexture(int _material_id, int _texture_id)
{
for (int i = 0; i < property_names.Length; i++)
{ target.materials[_material_id].SetTexture(property_names, textures[_texture_id]);
}
}
При этом в редакторе все отлично работает, эффект наблюдается только в окне игры.
Версия Юнити древняя: 2018.4 LTS. Шейдер: https://github.com/Santarh/MToon
https://github.com/Unity-Technologies/arfoundation-samples/issues/438
https://issuetracker.unity3d.com/issues/urp-reflection-probe-is-black-after-baking-when-using-the-blit-renderer-feature
https://forum.unity.com/threads/why-are-reflection-probes-black-in-my-urp-project.1173692/
https://issuetracker.unity3d.com/issues/lighting-reflection-probes-bake-black-in-2020-dot-1-0b5
Сейчас смотрю/трогаю dotween и никак не соображу как сделать отложенный запуск секвенции анимаций. Вызывается метод, добавляющий ui элемент в очередь на анимацию(типо чтобы потом каскадом всё красиво сделать) и после добавления последнего элемента вызывается коллбек, котороый запускает каскад. Насколько я понял, то секвенция запускается сразу после того как она заполнится, что мне не совсем подходит, т.к. между добавлениями элементов могут быть большие временные промежутки. Помогите идиоту :(
Цикл перебирает просто массив строк property_names, ну то есть параметры шейдера где хранится ссылки на текстуры. Ну, так чтобы не только _MainTex изменить, но и карту для теней.
Материал и текстура только одна в данном случае, так что вряд ли это связано.
Я в шейдерах не шарю, честно. Просто я это вижу так, что он тупо назначает каждый элемент пока не дойдет до указанного тобой. Даже если по итогу остается только требуемый, я почему-то считаю что сам цикл какой-то странный и можно сделать эффективнее если ты просто вызовешь нужный тебе элемент
Делаю простенький лифт для 2д платформера. Пустой геймобжект лифта и платформа лифта в дочернем объекте с коллайдером(так надо)
Вопрос: можно ли как то подсосать методом OnTriggerEnter2D из родительского объекта контактирует ли игрок с дочерним объектом?
Есть конечно вариант повесить скрипт еще и на платформу который бы определял стоит ли на ней игрок и сигналил об этом в скрипт лифта, но хочется все одним скриптом.
получить ссылку на дочерний коллайдер и прописать в родительском скрипте событие с определением, что произошло ли событие именно с дочерним коллайдером? Но на мой дилетантский взгляд - достаточно костыльно
Врядле, у инфоциган будешь самым хуевым, а для того чтобы стать как Ссакутин надо ещё курсов навалить за шекели, ну ты понял.
Лучше ментора поищи, сделай портфолио и тыкай вакансии.
Оставишь упоминание UnityScript и я тебе кадык сука вырву!
Это копия, сохраненная 5 сентября в 23:04.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.