24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
На 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 лицензию.
- Движок Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка. http://www.ozon.ru/context/detail/id/34792570/ Также посмотри на видеотуториалы с официального сайта: https://unity3d.com/learn/tutorials Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь: http://catlikecoding.com/unity/tutorials/ Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху: https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов: https://noobtuts.com/unity В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Есть где скачать простой CRT (эффект CRT монитора) шейдер/скрип для камеры, который работает c URP? Все интернеты облазил, нихуя простого/рабочего нет.
Аноны, что думаете о ork framework? Выгляди как топ ассет для создания РПГ. Но сел на нем данжен кравлер делать и что то все там как то через жопу работает. И вот думаю стоит ли его дальше изучать или пойти по хардкору все кодить с нуля, без всяких этих визуальных программирований. Есть аноны с опытом работы в нем? Стоит ли его изучать или дело гиблое?
>>766778 (OP) Разрабатываю я, значицца, игру и иногда анал. И вот такой у меня вопрос возник. Хочу текст (цвет, шрифт и пр.) всей игры менять где-то в одном месте и чтобы изменения происходили везде. Это делается только через префабы? Или еще как-то можно?
Аноны поясните за префабы. Я сделал босса, прикрепил к нему скрипт с условием если босс умер то дверь дальше открывается, на двери так же скрипт открывающий дверь только тогда, когда босс мёртв, но когда я делаю префаб босса и удаляю со сцены босса, чтобы он не просто стоял, а вызывался из кода, как префаб внезапно у него теряется связь между его скриптом и скритом даери и заново в ручную нужно назначать ссылку на скрит двери. У меня есть подозрение, что я фундаментально неправильно прописываю вызов префаба.
>>767198 Первый пик это то что я сделан на сцене и связал, второй пик это то что я имею в префабе когда вызываю его из кода и естественно такой префаб не работает.
Как лучше сохранять данные между сценами, допустим, в РПГ?
Пока я думаю создать один объект DontDestroyOnLoad, и там хранить все переменные: характеристики и инвентарь героя, пройденные квесты, результаты диалогов и т.д.
Но, может, это не самый оптимальный вариант. Так как это получится очень огромный класс с кучей значений.
>>767203 >характеристики и инвентарь героя, пройденные квесты, результаты диалогов и т.д. игрока не надо удалять при смене сцены, и т.д. ты просто переключаешь декорации, а все основные объекты остаются неизменными. проще всего это сделать аддитивной загрузкой сцены с картой.
чтобы сохранять состояние объектов на сцене и загружать его обратно при загрузке сцены, надо сериализовать объекты. это просто так не сделать.
>>767203 Самый простой вариант иметь обьект который не будет удаляться при переносе сцен и в себе он имеет скрипты с данными. + Всегда можно их читать/менять. - Весьма примитивно.
Посоветуйте пожалуйста какую-нибудь книгу или видео, по которому можно понять принципы SOLID и подобное. Хочется понять как правильно писать красивый и поддерживаемый код
Как быть, если нужно хранить в объекте одного и того же типа функционал и данные разных типов. Например, есть класс Modifier - модификатор характеристики. В простом случае он просто добавляет или отнимает число от характеристики перса. Но целью модификатора может служить не только персонаж, а, скажем, другие вещи, надетые на персонажа, например +1 к защите для всей железной брони. В этом случае при применении модификатора получать нужно уже не набор характеристик перса, а надетые на него вещи (персонаж и вещь разные типы, очевидно), среди них искать подходящие, и вешать модификаторы уже на них. Тут сам собой напрашивается сделать у модификатора target общего или интерфейсного типа, но юнити не умеет такие типы сериализовать, и в инспекторе этой переменной не будет, а что тогда делать то ебаный ебоманый. Кто-нибудь сталкивался с такой архитектурной задачей?
>>767998 Так при чём здесь юнити? Меняй/изменяй архитектуру хранения и взаимодействия, видно же что какую-то хрень придумал. Не зря же пограммист, вот решай задачу. Такие задачи ты можешь решить на любом языке, разница лишь в твоём складе ума и подходе к реализации.
>>767998 А ты поменяй подход к реализации. Например, тебе нужно +1 к защите для всей железной брони. Сделай для перса скрытую характеристику, которая будет называться как-то "ironArmor". Каждый елемент брони будет увеличивать ironArmor, также как и другие характеристики. Ну и твой модификатор будет увеличивать скрытый стат у перса, и не нужно будет навешивать ничего на другие вещи.
>>767998 Модификатору не надо знать тип target. Это может быть просто некий фильтр, правило, которое уже потом в коде применяется только к надетым железным вещам. Грубо говоря, когда у тебя в браузере на сайте выпадающий список опций, это не значит что кто-то завел реально такой тип данных.
>>768039 Так в том то и смысл ебли, чтобы за каждый элемент давали +1. Одна железка надета - +1, две - +2 и т.д. В любом случае надо знать, сколько вещей надето. Это не говоря о том, что если модификатор будет процентный, тогда нужно знать еще и сколько каждая штука дает, чтобы процент высчитать.
>>766778 (OP) Сап аноны, я застрял на одном неприятном баге, который не могу исправить вот уже неделю. Есть бот игрока который охотится за врагом, отлично охотится, находит и уничтожает его в то же время и враг отлично воюет против бота это всё если я префаб врага перетаскиваю на сцену, но как только я создаю здание которое будет респавнить врагов, то тут же бот перестаёт видеть врага, я проверял, були не срабатывают. При том враги продолжают видеть игрока и бота.
Блядь, посоны, наверняка ПЛАТИНА, но хуле юнити микрофризит? Делаю тестовую гиперказуалку, при клике машинка должна менять направление. Но ПОРОЙ, клики тупо не проходят. Вообще не ебу в чём дело, профайлер пики никак внятно не расшифровывает. Грит эдитор луп. Объекты создаю в пуле, хуле ему ещё нужно-то сука тварь?
>>768202 >профайлер пики никак внятно не расшифровывает Как ты себе это представляешь? Копай свои скрипты если фризит всегда в одни и теже моменты чекай и пытайся понять что может происходит в эти моменты. Если в разные, то надо копать в сторону циклов и подобной хрени. И если используешь инстансы и чекай Не забывай заместо инстансов юзать простое включение/выключение. Одним словом, скорее всего лапша говнокода. А и последнее сделай билд и чекни вне редактора, возможно это только в редакторе.
вопрос - в мануале по Unity Ads несколько раз наткнулся на упоминание файла app-ads.txt типа его нужно внести на свой сайт и тд
это сильно нужно для работы рекламы? у меня простая аркада на телефоны с короткими баннерами раз в 10-15 минут и, судя по дэшборду, по несколько центов там капает с юзера, хотя у меня этого файла нет (и даже в профиле Гуглплея как оффсайт указана страничка на itch)
>>769103 >Здесь даже разжёвывать нечего было Дела в том что есть метод AddComponent который действительно добавляет компонент а не вертит сракой как ты.
>>769113 >И нахуя ты вопрос задавал, когда ответ осознать извилин не хватает? Я никаких вопросов не задавал. Зашел в тред для того чтоб обоссать тебя, т.к. такие дауны как ты путают ньюфагов, а те потом пишут что юнити говно. Своим разорванным очком ты больше можешь не трясти, в этом нет смысла, любой кто мало мальски разбирается в юнити давно понял кто прав, а кто нет. А если ты сам не понял то поймешь когда на собеседовании расскажешь что GETCOMPONENT ЭТО ДОБАВИТЬ КОМПОНЕНТ В ПЕРЕМЕННУЮ и увидишь реакцию на сей высер.
>С кем сижу на одной борде, охуеть просто С теми с кем не получается хуйню спиздануть с умным видом? Ну в /б пиздуй, там с остальными пориджами тебе комфортнее будет.
>>769135 Ты при инстансировании префаба заполни все переменные, иначе работать не будет. А ещё лучше напиши логику в одном скрипте, где будут ссылки на босса, двери и всю эту хуйню. Так не придётся передавать ссылки туда-сюда, всё будет сразу под рукой, так сказать. >>769107 Хуя ты тупой.
В тайлмапах все тайлы одного типа это не отдельные инстансы, а ссылки на один и тот же объект? Хотел было прицепить к отдельным тайлам функционал, а хуй там плавал по ходу. Есть какой-то способ это обойти?
Посоветуйте курсы/лекции для вката с нуля. Можно и ру, и англ. >>767156 Эти видел, но вижу там даты 15-16 годов, не устрарело ли? Что стоит учить сначала, c# или сперва разобраться в ООП?
>>769210 Для начала стоит понять ты хочешь делать игры или смотреть туторы/читать миллионы гайдов, но ничего не делать. Как только с этим определишься дальше сам поймёшь. Подсказка - Если собрался делать игры, то открываешь тутор на оф сайте и делаешь по примеру, следом делаешь любую простую игру которая приходит на ум одновременно гуглишь все возникающие трудности. Поздравляю, вы научились делать игры. Теперь дело за малым, научится делать контент к ним.
>>769214 >Я хочу, возможно, в перспективе, работать в этой сфере На собеседовании тебя не будут спрашивать какие ты курсы смотрел. Берешь и делаешь игру, че непонятно гуглишь.
До чего же юнити любит делать больно. Накинул такой инверсную кинематику, всё отлично. Ограничить скручивание на конкретных суставах? Накинь отдельный компонент и настрой. Ограничить вращение? Ахахах! АХАХАХ! АХАХАХАХ! Разве что импортировать файлы и редактировать их вручную самому. Люто, конечно, добавить корекшн твистов, но не добавить корекшн ротейшонов. Пора забрасывать этот проект с домиками.
>>769219 Да понятно, но теория то нужна, и, как я понял, не мало. Берешь и делаешь, че непонятно гуглишь приведет к пробелам в теории, в любом случае, какое-то поэтапное структурированное обучение в этом плане лучше, разве нет?
>>769231 Уже миллиарды раз везде обосывали, что 'обучение' заканчивается на просмотре видосиков и читке текста. Если ты хочешь как написал научится, лучше чем делать сразу ты ничего не найдёшь. Если же ты ищешь оправдания делать что угодно лишь бы не заходить в проект и писать код/таскать ассеты, то дальше туторов ты никогда не уедешь. Пробелы ты будешь встречать на всём пути разработки, даже с опытом сто лет всегда что-то новое, что-то меняется, еще что-то ломается, гуглить/смотреть видосики всегда прийдётся.
Итог TLDR: Берёшь и делаешь. Хочешь 2Д? Сделай простую игру где у игрока меню, смена сцены, кликать по картинкам. Хочешь 3Д? Тоже самое, менюшка, сцены, двигать кубы физикой, делать камерой облёт вокруг куба. Уже то что я написал затронет большой спектр основных механик к любой игре.
Единственное куда не лезь никогда и даже не думай, это в сетевые взаимодействия.
>>769233 Я не говорил о том, что не хочу писать код, лол. Совмещение теории с практикой и всё. Большинство "курсов", что на торрентах лежат в том и заключаются, из того, что видел, на выходе пара тройка проектов будет. Просто спросил, чтобы случайно не нахвататься неправильной инфы от хуевых людей
>>769235 Еще раз повторю. Если ты реально хочешь заняться юнити, то единственное что тебе это надо - скачать хаб -> скачать последнею версию юнити вместе со студией -> создать проект 'New project 0' -> Запустить его и начать делать то что у тебя в голове. Не знаешь что нажать? Не знаешь как реализовать что-то? Заходишь в гугл и пишешь 'Unity3D chto-to' пытаешься сформулировать свою мысль на англюсике. И я тебе гарантирую, после пары вечеров ты уже сможешь сделать простую игру, да, вот так просто, всего то надо блять зайти и начать делать а не пиздеть.
>>769235 >чтобы случайно не нахвататься неправильной инфы от хуевых людей То есть ты намеренно решил нахвататься хуйни от хуёвых людей? Проверь строку адреса и спроси себя, понимаешь ли ты, что это за сайт.
>>769210 > Что стоит учить сначала, c# или сперва разобраться в ООП? ООП — это парадигма, C# — это язык, инструмент. В чём ты хочешь в первую очередь разобраться? Вот в этом и разбирайся. Но если ты с головой залезешь в теорию, то 99% что ты очень быстро заебёшься и забьёшь сколько я таких повидал, ты охуеешь, так как не видишь живого результата и эту самую теорию не закрепляешь. Не строй себе графиков, типа "в понедельник ООП, во вторник C#, в среду гоняю капсулу по террейну", ты так очень быстро сгоришь. Правильно тебе анон говорит, создаёшь проект и делаешь то, что хочешь. По языку есть MSDN, по юнити — документация. Что непонятно — смотришь. Попляшешь на граблях, набьёшь шишки, построишь пару десятков башен из говна и костылей, после этого поймёшь где у тебя узкие места, поймёшь нахуя нужны абстракции, паттерны, солид, грасп и прочие штуки, выведенные за десятилетия мучений и страданий. Научишься строить грамотную архитектуру, тогда и попрёт.
>>769248 >поймёшь нахуя нужны абстракции, паттерны, солид, грасп и прочие штуки, выведенные за десятилетия мучений и страданий. Забавно, лет 5 ебашу в юньке, и в душе не ебу что эти понятия значат лишь образно представляю о чём речь, и что самое смешное за плечами имею две игры в стиме и десяток в маркете. Проще описать весь процесс создания игры, чем даже гуглить и читать эти слова от которых в сон бросает. Алсо, за качество говно-кода не выёбываюсь, но главное что работает и без лагов
>>769250 > в душе не ебу что эти понятия значат Это нормально. У нас есть один в отделе, как два года назад пришёл джуном, так до сих пор джуном и остался. Ему это просто не интересно. Сидит себе пилит что дают, ему норм. Ну и мне норм, такие тоже нужны.
>>769251 >как два года назад пришёл джуном, так до сих пор джуном и остался Это называется галеры. Но больше похоже на выдумку, как за два года активной разработки не апнуться выше? Прохладная история.
>>769251 У нас тоже такой был когда я пришел в контору. Посмотрел что и как он пилит, ну и сказал чтоб его пидорнули т.к. пользы от него не было. Начальство не всегда понимает что такие люди типа >>769250 просто не нужны и поэтому не западло им подсказывать.
>>769255 > как за два года активной разработки не апнуться выше? Ему это просто не нужно. Отсидел от звонка до звонка, получил аванс, через 2 недели получил ЗП, смыть, повторить. Да, код уже совсем не такой говёный, как был когда он пришёл, но он не хочет сам что-то решать а именно это отличает джуна от миддла, он хочет чтобы ему ставили простые задачи и он их делал.
>>769256 > такие люди типа просто не нужны Тут нужно смотреть что за контора, какие проекты и задачи и т.д. Иногда такие нужны, иногда — нет. Если он тянет команду на дно, то да, его надо увольнять. Либо перевести в другую команду. Тут надо, опять же, смотреть по ситуации.
>>769250 А надо ли оно? По факту из всех этих парадигм только ецс имеет смысл освоить, улучшает производительность. Хотя и ценой лютого запутывания кода. Солид - говно собаки. Кисс пытается подтереть собачье, и не только, говно. Навязывая очередные принципы, которые должны нивелировать навязанные ранее принципы. Как и yagni. Чтобы пользоваться dry нужно просто быть ленивым, но, что самое смешное, он применим в настолько редких случаях, что, можно сказать, не существует в природе. Вообще в юньке базовая парадигма это КОП, вот и пишите КОП. А когда залагает, тогда вам пизда и переделаете.
>>769260 > А надо ли оно? Если ты сидишь дома и пилишь что-то для себя, то, возможно, и не надо. Ты можешь и в маркете выпускаться и в стиме. Но ты сам по себе. А в большой разработке — надо, да. Оно не просто так придумано. Оно как раз нацелено на решение кучи однотипных проблем, возникающих при масштабировании проекта, при изменении его курса и прочих факторах, которые неизбежны, если ты на рынке.
>>769261 >нацелено на решение кучи однотипных проблем Но игроделание это специфическая проблема и много хуйни просто неприменимо. Я вот нахуярил много-много опп-кода и вижу, что пора его разделывать на фабрики и менеджеры, которые 15 лет подряд называли плохим кодом. >А в большой разработке Ну я последний коммерческий код писал не для игр и там чаще требовали сделать быстро, чем сделать правильно. Да, просто срать в файлы нежелательно, но если на первый взгляд прилично и работает, то похуй. А что у тебя в приложении интерфейсов вообще ни одного - никого не ебёт. Всегда ненавидел это говно, лол, бесполезное засирание пустотой. А потом приходит начальник и говорит, что нужна какая-то фича, крайний срок вчера и вообще. А ты такой, ой знаете, её реализация нарушит принципы open-closed, так что нет.
>>769260 >Солид - говно собаки Чому? Солид - это просто здравый смысл. Не плодить в классе лапшу, не относящуюся к его роли. Не лазить менять реализацию базового класса. Не ломать в наследуемом классе общую логику базового. Не плодить в интерфейсах лапшу [x2]. Не создавать зависимые объекты там, где не надо, а передавать их извне. Дри это тупо экономия времени, если ты скопипастил что-то, то ты 100% наебнешься когда будешь что-то менять и забудешь исправить во всех местах, и получишь веселые баги, проверено тысячекратно.
>>769256 Конечно если челик работает в конторке, то и требования к нему другие, тут правильно.
>>769257 А вот тут уже странно, даже просто ебаша код и представляя что ты делаешь, уже через пол года явно будет уровень и понимание выше. Это же не дворник где ты делаешь одно и тоже и не развиваешься. Тут каждый раз что-то новое либо обновлённое.
>>769260 Как уже писали конечно надо, но в другой области разработки, и в больших проектах где просто если дать каждому право делать как хочет, всё наебнётся. Раньше думал что единственное место где эта дрочь может понадобится это в net фраемворках, но после того как сделал игру с реализацией сервер-клиенты понял что и там в пизду это не надо. Ну и если лагает да, значит ты явно обосрался и иди апать скилл и всё переделывать, тут 100% виноват проггер Если конечно это не 3д где моделист обосрался тоже, сделав ебучие модели по 100к и обвесив их десятками материалов.
>>769262 >А что у тебя в приложении интерфейсов вообще ни одного - никого не ебёт. Всегда ненавидел это говно, лол, бесполезное засирание пустотой Понятно что тут все свои и стесняться некого, но сообщать что ты отсталый долбоеб не обязательно.
>>769263 Я не против здравого смысла, но запрещать самому себе модифицировать базовый класс, когда требования к нему уже изменились? Ну такое, ты по сути, пишешь код, который с первого дня - легаси.
>>769266 Так я и не говорил давать каждому обязанности продумывать архитектуру. Если команда больше одного, то уже нужен лид и вся хуйня. Но при этом если зона ответственности программистов не пересекается, то уже не так уж и нужен.
>>769272 Смешнее всего, что если следовать тому же ягни, то интерфейсы это как раз тот код, который вам не нужен и не должен быть написан никогда.
>>769279 >запрещать самому себе модифицировать базовый класс, когда требования к нему уже изменились? Если требования изменились, то изменились, но тут речь идет о том, что если ты поменяешь поведение базового класса, то тебе надо во всей программе исправить использование базового и всех его наследников. Какой-нибудь банальный пример, ну, у тебя класс возвращал в length() длину в байтах, а ты делаешь свой подкласс и такой буду в нем возвращать длину в символах, и где-то в программе начали грустить оверфловнутые буфера.
>>769283 Так у меня процесс разработки идёт, я не могу заранее предсказать требования к классу.
>>769284 Окей, класс возвращает длину в байтах. Но 99 классов из ста используют метод расширения базового класса, который возвращает длину в символах. И, собственно, длина в байтах больше не нужна. Хотя если на основе какого-то класса массово создаются буфера, то проще сделать фабрику.
Вы ебанулись, что вы обсуждаете? Тут тред блять про разработку игр на юнити блять а не шарп под винду. Всё ваше говно сводится просто к использованию готового ассета и написанию кода по тутору.
Юниторы, может вы поможете? В общем у меня вылетает одна игра во время загрузки. На полсекунды вылезает окошко как на пикрил (пик взят из интернетов, игра не вальхейм) и потом вылезает ошибка от Виндоуза. Я смог записать код ошибки, Unity 2019.4.20f1_6dd1c08eedfa.
Что делать? Играю я на ноуте, драйвер своей встроенной видеокарты обновил. Может что-то установить надо?
Игра точно будет работать на моём некроноуте, так как версия игры на питоне запустилась сразу и без проблем.
>>769357 >Unity 2019.4.20f1_6dd1c08eedfa Это не код ошибки, это идентификатор билда движка. Можешь поискать логи в аппдате. А лучше обратись в поддержку твоей конкретной игры.
>>769359 >>769361 В общем я и программу поюзал и в логе поковырялся. У меня только один вопрос: вот это ERROR: Shader Hidden/PostProcessing/ScreenSpaceReflections shader is not supported on this GPU (none of subshaders/fallbacks are suitable) ERROR: Shader Hidden/PostProcessing/Debug/Waveform shader is not supported on this GPU (none of subshaders/fallbacks are suitable) ERROR: Shader Hidden/PostProcessing/MultiScaleVO shader is not supported on this GPU (none of subshaders/fallbacks are suitable) ERROR: Shader Hidden/PostProcessing/Debug/Histogram shader is not supported on this GPU (none of subshaders/fallbacks are suitable) ERROR: Shader Hidden/PostProcessing/Debug/Vectorscope shader is not supported on this GPU (none of subshaders/fallbacks are suitable) ERROR: Shader Hidden/PostProcessing/Debug/LightMeter shader is not supported on this GPU (none of subshaders/fallbacks are suitable)
означает что я соснул и мне не судьба поиграть на своём ноуте?
>>769364 Шейдеры не может запустить на твоей видяхе. Странно, что пытается грузить дебаг шейдеры. Если есть возможность, выключи полностью все пост эффекты в настройках игры. Главным образом отражения. Вообще похоже что у тебя нет DX11.
>>769365 Возможности нет, так как я в саму игру зайти не могу. DirectX11 есть. Ладно, не буду вам тут мозги ебать. Это уже выходит за рамки треда про Юнити. А тут уже полезли хардварные траблы. Спасибо вам, юниторы.
За меня не переживайте, я через 10 дней наконец вернусь домой и попробую поиграть уже на своей игровой пекарне.
Редактор работает отлично, ни единой ошибки. Собрал проект. Краш. Логи? В логах хуета, по факту нуллпоинтер, но где, откуда? Где-то в цпп. Ага, переключим бекенд на моно, чтобы найти где ошибка. Переключил, пересобрал. Всё работает, ошибок нет, краша нет. В редакторе всё работает. Скопировал манифест в пустой проект, собрал il2cpp. Все работает, ошибок нет. Охуительно.
Начал делать анимации атаки через DOTween и появился вопрос. Предположим у меня сложная анимация, состоящая из около 30 точек, это нормальная практика все 30 точек руками вписывать в метод и потом этот метод вызывать? Может как-то импортировать данные из Animation Clip'oв? Знаю что можно пользоваться анимационными кривыми, но какой способ конвенционально лучший?
Хочу перекатиться в юнити, думаю сделать что-нибудь вроде дюны или какой-нибудь тд, но не как в мобилках, где на нужные точки башни ставишь, а как аналог в варкрафте замок скиби. Какие подводные?
>>769558 Рантайм генерация навмешей, соснёшь. Так что советую делать, как в богоугодном варкрафте 3, разбиение на квадраты, а потом уж а-стар справится без навмешей. Но ты всё равно соснёшь.
>>769558 Перекатывайся, есть навмеш из коробки, есть ассеты, юзал и на 3д и на 2д, если не дорабатывать работает, но смотрится не очень красиво. Пару дней допилить и почти идеал и то что ты хочешь.
>>769659 Смотри, допустим игрок посторил коридор, в него зашли мобы. Игрок застроил туннель с обоих концов тупиками. Все, никакой пасфаиндинг тебе не поможет. Твоя проблема не в пасфайндинге, а в том, что ты не проверяешь возможность строить башни создавая непроходимые пути. я уж молчу про то, что нормальный пасфайндинг изначально не пойдет под вражеские башни, а обойдет за километр.
>>769662 >Все, никакой пасфаиндинг тебе не поможет. В этом случае мобы начинают атаковать и ломать башни.
Хуёвость этой затеи в том, что игроку приходится каждый раз строить одинаковый, самый лучший, лабиринт из башен.
Поэтому со временем ТД эволюционировала до заранее проложенных путей мобов, на которых башни строить нельзя, позволяя в остальных местах ставить башни как вздумается. Собственно современные ТД на ПК до сих пор работают по этому принципу.
На мобилочках же для упрощения планирования ца - казуалы, им думать слишком сложно оставили только избранные точки, куда можно ставить башни.
>>766778 (OP) Как экспортировать большие анимационные сцены из блендера? Есть персонажи с индивидуальными анимациями (ходьба, атака...), каждый в своем бленд файле. А есть сцена, где много персов друг с другом взаимодействуют. Могу создать еще один бленд файл для этой сцены, импортнуть туда персов, анимировать их. Потом из этой сцены обратно импортнуть анимации в персональный файл каждого перса, потом все это экспортировать в юнити. Есть способ лучше?
>>769662 Ты вообще в ТД не играл, там всё это решено давно. Иногда по-тупому, не позволяя игроку строить башни на дороге, это явно хуёвые тд, потому что не позволяют тебе реализовывать весь потенциал как башни, так и творческий. >Твоя проблема не в пасфайндинге Но у меня нет проблемы, я не делаю тд, мне хватило их ещё в нулевых. Хороших, годных тд. >изначально не пойдет под вражеские башни Только вот у него точка назначения непосредственно указана и он не может туда не пойти. Но да, если ты делаешь максимально херовую т.д, то можно даже заранее захаркодить мест 10 под вышки, кликать по ним и жать "поставить вышку". В идеале ещё совместить с каким-нибудь кликером, потому что экстремально скучно получается. Хотя и казуально, для игроков жопой в сортире сойдёт.
>>769666 Есть несколько подход. Самый простой, но и рабочий это есть модельки персонажей с обычными анимация, и дополнительными анимациями по типу: получил урон, прыгнул, использовал. Для отдельных сцен или редкий вариаций используются дубликаты модели, но с нужными анимациями. Подменяется модель персонажа игрока на дубликат при проигрывании нужной, редкой анимации. Второй метод, хранить все анимации в персонаже, но как понимаешь тут сразу есть и явные минусы, особенно если анимацией и их вариацией под сотню и более, но зато удобное хранение всего в одном месте.
Для твоей же задачи подходит первый вариант. Сложно сказать не глядя. Тут нужно смотреть по гемору, что быстрее и удобнее, анимировать сцену с кучей персонажей в блендере и переносить один ассет, или каждого персонажа по отдельности.
>>769671 Неужели в юнити так сложно добавить искаробочный риггинг и сложную анимацию с констрейнами, ИК и драйверами как в блендере? Вот была бы действительно полезная фича, чтобы основной контент можно было пилить непосредственно в самой юнити, а не сторонних прогах, чтобы юнити стал самодостаточным инструментом как флеш. Флеш умер, а его убийцу так никто и не сделал.
Труден и тернист путь Кирилла. Может кто то подсказать? Как запихать методы OnCollider2D/OnTrigger2D в другой метод что бы тот запускался по нажатию кнопки? Поясню. Нужно включать\выключать лампу. Однако , с моим уровнем знаний после включения лампы из ее коллайдер-триггера нужно выйти и снова войти что бы выключить.
>>769810 >что бы тот запускался по нажатию кнопки? Здесь нужно понимать, что весь старый инпут говно собаки. И чтобы без боли в заднем проходе пилить инпут - нужно импортировать и настроить пакадж с новым инпутом. Однако, если его нет..
void Update() { if (Input.GetKey("a");) { Debug.Log("A!"); //Можешь добавить сюда чё хочешь }
>>769814 https://docs.unity3d.com/ScriptReference/Collider2D.html OnTriggerStay2D Sent each frame where another object is within a trigger collider attached to this object (2D physics only). OnCollisionStay2D Sent each frame where a collider on another object is touching this object's collider (2D physics only).
Дрочит каждый фрейм проверки на физике. Естественно лучше это реализовывать как Вход->Выход и по желанию добавить отдельный менеджер или функцию которая следит за объектами которые сейчас используются или могут использоваться(Находятся в радиусе). Если у тебя что-то не работает ищи косяки в коде, компонентах.
>>769815 >что весь старый инпут говно собаки Огорчу тебя, новый еще хуже, к тому же наполовину не рабочий. Единственная фича которая мне зашла из нового это возможность менять координаты курсора мыши.
Не не, ты не понял вопроса. Кнопка, назначена, она работает, свет выключается , все норм. Проблема в триггерколлайдерах. То есть OnTriggerEnter и OnTriggerStay не чекают постоянное нахождение в коллайдере лампы , а только факт столкновения или захода в нее. Отчего что бы включить лампу нужно выйти и снова войти.
То есть. Мне нужно что бы или чекалось постоянно (для чего нужно в метод Апдейт запихать метод OnTrigger или запихать этотже метод на if (Input.GetKey("a");). Но он нехрена не работает в обеих этих случаях
>>769817 Может я что то делаю не так , но у меня OnTriggerStay2D дрочит проверку только несколько секунд после захода в коллайдер цели и при смене позиции внутри него.
Что нужно : Что бы коррекно работало void Update() { if (GetButtonDown("Knopka")) NajatKnopku(); ... private void OnTriggerStay2D(Collider2D collision) { if (collision.gameObject == Lamp.Instance.gameObject&&NajatKnopkeu)
>>769831 Там всего два положения - Если объект рядом то истина, если же нет, то ложь. Пограничного состояния, или не известного нет. Это идёт по сотне проверок в секунду, дрочь.
>>769832 Та же проблема что и была, но с другой стороны . При выходе из зоны триггера флажок не меняется на false. По итогу персонаж-телепат и включает лампочки на расстоянии Что я делаю не так?
>>769837 Где то проёб либо в компонентах, или самих объёктах, что-то упускаешь. Сделай для теста c OnTriggerEnter и OnTriggerExit, и чекай где у тебя может проёбываться.
>>769837 1. by lamp стнает false, если в триггер попадет другой объект, хотя лампа все еще останется в триггере 2. если лампа выйдет из триггера, else не выполнится, потому что функция больше не вызовется.
>>769819 Полностью отказался от старого инпута, всё делаю на новом, вообще ни одной проблемы не заметил пока что.
>>769823 Ояебу. Я бы на твоём месте вообще нахуй послал коллайдеры. Ну или вот так, наговнякаем лишь бы работало. Пара нюансов, лампам нужен тег, сам нагуглишь и нельзя, чтобы коллайдеры ламп были внахлёст.
Пишу небольшую мультиплеерную игру для WebGL и думаю, как реализовать Authority.
Хотел спросить(сам никогда с WebGL до этого не работал), лучше сделать всё как надо и считать большую часть логики на сервере, чтобы даже при вторжении в код игры извне проект был защищен от читерства или забить и считать все это на клиенте?
Защищен ли WebGL билд от вторжения, если он крутится на моем сервере?
>>769975 >или забить и считать все это на клиенте? На данном этапе да, в твою игру всё равно никто не будет играть - это первое, логику на сервере ты не осилишь - это второе, но лучше сидеть с игрой в которую никто не играет чем быть безыгорным.
>>769975 Палю самый простой и эффективный вариант. Делай всё на клиенте, и не запаривайся насчёт защиты. Как только ты сделаешь что-то похожее на игру, что можно будет тестово запустить в несколько окон и протестить, только тогда ты поймёшь какие значения и данные следует прятать и не показывать игроку. Потом просто переносишь все связанные с этим вычисления на сервер и всё. Ну и авто логи которые чекают значения в пределах нормы, если нет дисконект.
>>769978 >>769979 Благодарю за дельный совет. Я расчитал объем работ, сопряженный с реализацией логики на сервере и действительно, это силно затянет разработку.
Два самых лучших чая вам, Аноны!
Код, который должен выполняться при прерывании корутиныАноним18/09/21 Суб 17:52:24#163№769995
Для выполнения атак/передвижения противников использую корутины, но хочется чтобы любую атаку противника можно было остановить, застанив врага.
В приведенном коде атака выполняется следующим образом - противник начинает двигаться в сторону игрока и у него активируется триггер, который наносит урон противнику, но если прервать корутину - коллайдер обратно не включится и получится баг.
Я исправил это тем, что копировал финальную часть кода (не выполняемую из-за прерывания корутины) и вставлял её в кусок кода, который прерывал корутину. Какое есть лучшее решение этой проблемы? Может как-то можно указать корутине, что определенный кусок кода должен обязательно исполниться
>>769995 Сделай в цикле корутины проверку на переменную bool stopped какую-нибудь, while(!stopped && time < AttackDashTime), когда надо закончить корутину делаешь stopped = true.
>>770153 Давай погадаем. 1. У террэйна или обьектов по которым ходит игрок нет коллайдера. 2. В скрипте игрока в месте с гравитацией указан тэг, или тип который используется для проверки работает ли она, так этот моментик нужно указать объектам по котором игрок ходит. 3. Спав игрока происходит под или ниже средней линии террэйна. 4. Скорость или механизм гравитации слишком высок, что делает игрок не восприимчивым к любым коллизиям.
При движении строго влево-вправо или строго прямо-назад все вроде нормально. При движении по двум осям сразу, да если еще и крутить камеру пытаясь удержать объект, вокруг которого ты идешь, в центре экрана - получается вырвиглазный пиздец с дерганьем камеры/геометрии и остаточными контурами (ghosting?).
Капсюль со стандартным rigidbody. Код движения: rb = transform.GetComponent<Rigidbody>(); void Update() { float x = Input.GetAxisRaw("Horizontal"); float z = Input.GetAxisRaw("Vertical"); Vector3 moveBy = transform.right x + transform.forward z; rb.MovePosition(transform.position + moveBy.normalized speed Time.deltaTime); }
Код камеры: Vector2 mouseLook; Vector2 smoothV; public float sensitivity = 2.0f; public float smoothing = 1.0f; GameObject character;
public void Update() { var md = new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
>>770242 Сроки опыта пишут для отпугивания бесхребетных чуханов, просто в резюме кидаешь ссылки на свои игори (пару демок надо иметь в портфолио) и ты принят.
>>770276 >и программное ограничение кол-ва кадров. Последнее, к слову говоря, можно смело ставить на 30-40, человеческий глаз все равно больше не увидит Статью годотя писала? Дальше не читал.
>>770284 >>770276 >Последнее, к слову говоря, можно смело ставить на 30-40, человеческий глаз все равно больше не увидит Не читал что там, но это же бред. Как такие люди живут на свете? Всё что ниже 300 кадров, 144гхц грязь.
>>770292 У меня на ноуте 4гб, и работать в юнити боль. 8 конечно лучше, но минимум сейчас надо 16 для комфорта, чтоб и музычку слушать и двачик скроллить во время разработки.
>>770326 Не стоит думать об оптимизации того, что оптимизировать не надо и обусловлено самим движком. Не засовый в апдейт кучу кода и всё. Нужные вещи вызываются одноразово. В апдейте только всякое говно с вычислением при необходимости которое выключается когда не надо.
>>770345 >>770344 Опа, поясните за райдер. Всё планирую перекатиться на него со студии, т.к заебало что она большая и лагучая и куча лишнего функционала. На сколько он удобнее и быстрее? Триал раз в месяц батником и всё, траблов во время работы нет?
>>770357 Мне райдер больше нравится. Но я не профи, не знаю всех тонкостей. Для себя пришлось немного цвета в теме менять, плагин скачал для скролла средней кнопкой мыши, всё заебись, он за меня код пишет, я просто наблюдаю и радуюсь
>>770367 Мда, как раз бесит такое, особенно если во время написания внезапно какое нибудь говно вылезет. Наверное тогда всё таки попробую его завтра поставить, слишком уж его хвалят все, что он удобнее и быстрее студии, пора трайнуть.
>>770371 Кстати про него забыл, как то давно ставил, и что то он не хотел доки с юньки подтягивать и я забил. Ща поставил, вроде шустро, единственное комменты кирилики не отображает.
You must include a demo scene (.unity file) in order to be approved. You must include a .unity file within your submission that shows your asset working. If your contents are 3D models, there need to be prefabs placed within the scene in an appealing way that shows all of the contents of the package. Please include 3-point lighting set up and a floor plane with a flat color material to set up your 3D models on. If there are animations included within the package, you must display those in the demo scene. For information on attractive lighting setups, please go to this link: https://unity3d.com/learn/tutorials/topics/graphics/introduction-lighting-and-rendering (https://unity3d.com/asset-store/sell-assets/submission-guidelines, Section 3.3.a)
Какое демо? Если там пропсы обычные, меш и текстуры
>>770522 А если ты нахуячил где-то 100500 тыщ полигонов в скрытой геометрии, из-за которой сцена с твоим ассетом будет выдавать 5 фпс? Это же нужно проверить. Ну и сделай презентабельно, чтобы купить захотели и проблем подобной выше не было. Или иди на цгтрейдер какой-нибудь.
>>770536 А чем тебе так цгтрейдер презрителен. Треш ты конечно можешь там выставить, но его никто не купит. Юнити куча правил, ничего не объясняет,комментарии не дают хотя там исправить пару кликов, ждешь месяцами.
суп гдач, на связи мамкин праграмизд плохо секущий в ооп
Допустим есть класс, BeizerMover, он перемещает годаунов по кривой безье, но в моём проекте разные типы годаунов, одни сосут хуй Хуанатм (SimpleMover), другие на нём прыгают (SimplePhysicMover), и чтобы не было конфликтов, то все годауны которых можно двигать реализуют интерфейс IMove, что гарантирует что они все будут идти по кривой безье к хую Хуанатм.
Но встаёт проблема, как вызывать движение годаунов через интерфейс, ведь я же не стану проверять каждого годотю через какой скрипт его нужно двигать, заражусь ещё. Если просто объявить поле с типом IMover в качестве годоти, то его не видно в редакторе, и вообще ему не присваивается значение, что приводит к ошибке. Как же Даше-Путешественнице заставить годоть присесть на хуй Хуанатм и при этом не зашквариться?
>>770766 Создаешь все объекты IMover через манагер который сохраняет созданные объекты в список и он же Move у IMoveров будет вызывать в цикле. Интерфейс через sozdanniyImover.GetComponent<IMover> можно достать.
>>770767 Спасибо, через getComponent<IMover>().Move() работает, но всё равно не могу понять, почему я могу присвоить значение полю с типом GameObject, из которого потом достать интерфейс, а присвоить значению полю с типом интерфейса - нет, с остальными компонентами же всё так и работает, интерфейс что, особенный? Хотя вроде догадываюсь, интерфейс же нельзя инстанировать, хотя по идее присвоение значения полю это не создание нового интерфейса, или всё таки создание?
>>770768 OnTriggerEnter срабатывет в момент когда объект залезает в триггер. У тебя код "если в момент захода в триггер надавить на пробел..." - ты никогда не сможешь тыкнуть пробел именно в момент срабатывания триггера. Юзай OnTriggerStay, он вызывается пока объект находится в триггере.
Продукты, опубликованные с этой лицензией, не могут быть проданы, переданы или переданы другому физическому или юридическому лицу в том виде, в каком они загружены с сайта, но могут быть использованы в ваших коммерческих проектах несколько раз после оплаты только один раз.
так я не понял использовать в комерции можно или нет
Почитал в треде советуют начинать делать свою игру по примерам сразу же и тем самым обучаться. Я уже начал c# учить по курсам с ютуба, с нуля буквально, стоит закончить обучение хотя бы базовым вещам языка или можно сразу переходить к практике с юнити?
>>770839 Купил ассет, не можешь его выложить в маркет от своего имени. Но можешь вставить ассет в проект и зарелизить, получая с проекта денежный профит.
>>770842 Основу посмотри от самих юников на ютабе, это около 2 часов ирл времени, и далее только практиковаться в юньку, не надо тратить время и силы на чтения всякое устаревшей залупы, главное опыт. Ну и второе по значимости, если что-то не получается реализовать, идёшь в гугл гуглишь примерно что представляешь на инглише, также ошибки сразу туда же гуглить.
Что лучше, в одном классе иметь ссылки на все компоненты и получать доступ к копонентам через этот класс или по необходимости вызывать GetComponent там, где он нужен, даже если этот компонент уже хранится в другом классе, к которому есть доступ?
Существует ли вообще нормальный классический FPS контроллер? Чтобы не прилипал к стенам, поднимался по ступенькам, пинал ящики, отскакивал от прилетевших ящиков, переносился и вращался движущимися платформами?
>>770993 Там вроде как есть Rigbody для физики. Хотя при попытке использовать его в качестве контроллера он начинает вести себя как говно, и всё равно приходится писать куту скриптов.
В который раз сажусь пилить свои корованы, вот дошел до этапа, на котором требуется работа с графонием. Больше всего, как я сейчас вижу, мне подходят тайлмапы. Суть игры в том, что можно отправлять корованы, и они быстрее едут по тайлам, соединенным дорогами, и мне кажется, здесь-то я и ебанусь. Я планировал 6 типов природы: луга, леса, жунгли, пустыня, болота, снега. На каждый тип по три варианта тайла. Для каждого тайла надо нарисовать все возможные конфигурации дорог, их всего 40... И еще я планировал разное качество дорог, 3 уровня. Итого, 6 3 40 * 3 = 2160 тайлов... Я не беру в расчет особые тайлы - города, деревни, важные места, и т.д., их не так много относительно общих, но в итоге все равно выйдет где-то 2500. И тут закономерный вопрос, как теперь жить то блядь? Не, я понимаю, что работа так-то умственного труда не требует, можно навалиться и за один день все запилить, просто надо засесть. Но может подскажете более простой способ, как с такой задачей разобраться?
Еще проблема в том, что отдельным тайлам нельзя настроить собственную логику, они не инстансы, а ссылки на один и тот же библиотечный объект в палитре. Начал смотреть в сторону объектовых тайлов, чтобы каждый тайл был объектом и ему можно было в инспекторе накидать логику - в каких направлениях дороги, какого качества, и какой вид он в связи с этим должен принять, но это надо в 3д вкатываться, в блендеры хуендеры, я в этом вообще не шарю. Помогите советом, братва.
>>771126 Пчел, не надо не каких тысяч разных объектов, реализовывай логику которая позволит смешивать и изменять графику. В твоей же случаи точно стоит это делать по другому, никаких сотен вариаций, всё намного проще. Первый слой это графика лес/луг и т.д. Второй слой это дорога, и в него же входит улучшение по средством уровня. Еще раз напишу, что всё намного проще, не надо мудрить.
>>771131 Да, я это понимаю, было бы здорово рисовать на тайле в несколько уровней. Нижний - нетронутая природа, средний (или несколько их) - уровень дорог, верхний - природа со стертыми по маске линиями под дороги. Но только готового решения под такую задачу нет, а я уже говорил, я не так силен в графике, чтобы запилить собственный компонент.
>>771132 Начал сейчас считать и понял, что их даже больше, чем 40. Я не посчитал все тройные дороги.
На каждом тайле могут быть следующие варианты конфигураций дорог. Дорогой я называю путь от края до центра тайла. Итак. 1 - нет дорог, 1 - все дороги, 6 - одна дорога с каждого направления с тупиком в центре, 6 - две дороги под 45 градусов, 6 - две дороги под 60 градусов, 3 - две дороги под 180 градусов (напрямую), 6 - три дороги под 45, 12 - три дороги (из них 2 под 45 и одна под 60), 2 - три дороги под 60 (трехконечная звезда), 6 - четыре дороги под 45 градусов, 6 - 5 дорог под 45 градусов. Итого - 55. На один вариант тайла. Короче, это точно не вариант так ебаться.
>>771137 Ты же понимаешь, что это всего ШЕСТЬ вариантов? Что дорога состоит из 6 линий, каждая из которых вкл/выкл? Ну семь от силы, если еще центр нарисовать.
Я указал, чтобы игнорировался слой номер 2. И тем не менее, он вполне себе хитится, в дебаге выдает: layer = 2 (это я свой класс дебага написал). ЧЗХ, как мне заставить, что луч пролетал мимо layer 2
>>771141 Способов так много, что их перечисление тут будет слишком утомительно и излишне. Можно, например, держать 6 картинок с прозрачностью и скрывать их по надобности. А можно раскрашивать шейдером.
Как такое вообще может быть? По умолчанию, если не передать layerMask в physic.raycast, игнорироваться будет IgnoreRaycast. Так почему же он не игнорится, аааа
>>771148 Разобрался. Проблема уже несколько лет существует (https://forum.unity.com/threads/raycast-on-child-gives-parent-name-in-hit-transform-name.57172/), а юнитя не может добавить пофиксить это, или добавить разъяснение в документацию, что, если луч ударил в дочерний обжект, то raycastHit.transform ссылается на родителя. Поэтому, если нужно получить именно тот обжект, куда реально стукнул луч, надо писать raycastHit.collider.transform. Пиздец, как же я блять до того не додумался-то, это же блять так очевидно. Вот из-за таких странных багов, на которые тратишь по пол дня, мне прям очень хочется дропнуть юнити. Но потом осознаю, что в других движках тоже могут быть проблемы, да и изучать что-то новое времени нет, поэтому продолжаю страдать
>>771153 >мне прям очень хочется дропнуть юнити Так дропай, хули ты разнылся, думаешь тебя утешать кто-то тут будет? Полдня потратил, на тебя мамаша 15 лет потратила а всё равно вырос долбоеб.
>>771153 >Вот из-за таких странных багов, Это не баг, а особенность, у меня тоже несколько таких случаев было. Юнити хорош тем, что уже всё сто раз обсосано, нужно усиленно гуглировать
>>771153 Физоний в юнити от нвидии, так что это не проблема юнити и пофиксить они её вряд ли могут. Если вообще хотят, сейчас-то на подходе два новых физона, все силы туда кинуты. Я надеюсь. >очень хочется дропнуть юнити Если тебе хочется дропнуть юнити из-за проблем, которые решаются за полминуты, то лучше дропай.
>>771189 >решаются за полминуты хм, и как бы ты за полминуты решил этот вопрос, не зная, что hit.transform.gamoeobject это не всегда hit.collider.transform.gamoeobject Разве что на форум пошел спросить, где мне и помогли
>>771193 В гугл вбиваешь и читаешь десятки постов. На ансверхабе таких, как ты, очень много. Буквально с такой же "проблемой". Хотя сначала я думал, что ты долбоёб из-за длины луча.
>>767111 Ну, если работает нормально, то лучше не трогать. Если визуально, я бы вместо построчного повторения перменных, сделал бы всё в одну строку, соответствуя типу. Например: public Vector3 Up, Down, Left, Right; Код будет более компактным, а работать будет так же.
>>771196 гуглил, у всех проблема - неправильно маску прописали или типо того. я все делал по их коду тем не менее, не получалось. ах да, писали везде raycastHit.transform а не raycastHit.collider. Но я на это особо и не предавал этому значения. С чего бы? Я же не знал, что проблема именно в этом. знал бы - тогда и проблемы бы не было. у меня же была проблема: есть parent с layer Raycast Ignore, и есть дочерний объект, который мне и нужно ловить лучом, минуя родителя. Но ловился всегда родитель
>>771196 гуглил, у всех проблема - неправильно маску прописали или типо того. я все делал по их коду тем не менее, не получалось. ах да, писали везде raycastHit.transform а не raycastHit.collider. Но я на это особо и не предавал этому значения. С чего бы? Я же не знал, что проблема именно в этом. знал бы - тогда и проблемы бы не было. у меня же была проблема: есть parent с layer Raycast Ignore, и есть дочерний объект, который мне и нужно ловить лучом, минуя родителя. Но ловился всегда родитель
>>766778 (OP) Котятки, я уже давно задался идеей реализовать управление через систему событий в юнити. Идея такая: есть скрипт, который отслеживает определённый ввод по нажатию кнопки/движению стика/етц, а затем запускает определённое событие, на которое подписаны объекты. Цель данной затеи в том, чтобы не отслеживать нажатие кнопок в апдейте для каждого объекта, как учат во всех туторах по юнити. В общем, мне такой подход кажется более целесообразным и красивым, но я не надеюсь на какой-то большой прирост производительности, а просто хочу повыёбываться. Подскажите пж, как это можно грамотно реализовать/что почитать/готовые решения, а то я новичок и лох. Заранее спасибо.
>>771205 Грамотнее всего это реализовывается так. Жмёшь Window, там выбираешь Package Manager. Там жмёшь import from git url. Туда вводишь com.unity.inputsystem.
>>771208 Ну ты предлагаешь всё равно через апдейт отслеживать нажатие клавиш, а я как раз хотел бы уйти от этого. Хотя я не представляю, как это можно сделать и можно ли вообще.
>>771218 Можно что угодно, можно хоть массив в массив и на массив, всё зависит от потребностей, скилла кодера который всё это пропишет и сам себя не наебёт где-то при передачи ссылки, и не создаст парадигму феллера.
А вот такую хуйню я вижу впервые. У куба и плейна один и тот же материал, но куб это GameObject, а плейн это entity. Это, конечно, не ошибка, просто плейн не получает информации об освещении, но в итоге задумался. Чтобы плейн с кубом рендерились одинаково, я уже добавил на плейн 15 компонентов. Это причём просто плейн, без логики никакой. Будет ли вообще хоть какой-то прирост перформанса-то, лол. Кто вскрывал эту тему, давайте советов мудрых.
>>771205 Как сказали выше - InputSystem. С одной стороны удобно что оно за ьебя разруливает штуки типо "удерживай Е 5 секунд чтоб открыть ящик". С другой - GodObject 99% гаррантирован. И всё равно половину инпута прихлдится получать в апдэйте.
>>771286 Ньюфани досихпор не научились в менеджеры? В чём сложность сделать уникальную обработку нажатий всего лишь в одном скрипте, не разнося это дело по миллионам других? Это я если что про старый импут, новый адская параша.
>>771287 Что блять? >В чём сложность сделать уникальную обработку нажатий всего лишь в одном скрипте SRP может быть? >>771286 Ну вот это и смущает. Правда везде написано, что это по перфомансу не должно сильно бить, но чисто архитектурно выглядит по-еблански, кмк
Анон, подскажи. Допустим, есть простой раннер. Как генерировать дорогу с поворотами, как это было в ретро гоночках? Попробовал сам додумать, но в итоге при перспективном виде дорога быстро заканчиватся.
>>771462 Может я неверно выразился. Вобщем. Есть некий объект(без Rigidbody) который должен дойти до определенной точки и повернуть обратно. Пытался реализовать это через ОnTrigger и через OnCollision. Оба одинаково не работают. Что я делаю не так?
Как сделать с ригидбади нормальный лифт? Когда персонаж становится на платформу и едет вверх, еще более-менее, но когда лифт едет вниз, игрок не держится ней, тупо остается в воздухе а потом падает на платформу, и так пока платформа не достигнет дна. Вариант с заменой родителя игрока не работает.
Короче летом залетел в юнити, нарисовал графония для проекта, в анимацию даже вьехал, но скрипты совсем никак не даются. На них мой запал потух. Я ещё очень слаб в английском языке, поэтому туторы из шапки мне не помогли. А с русских уроках с ютуба во мне как-то очень плохо все усваивается, и четкой картины не составляется. Подскажите какие-то русские книги мб или уроки, чтобы прям даже тугой понял
>>771499 Данный шедевр игровой индустрии помог мне вылечить артрит, склероз и геморрой. Всем очень. Сюжет захватывающий, дизайн сногсшибательный, геймплей мощный.
>>771499 Чел, если ты сумел не то что сделать игру, а её еще и выпустить в стим, поздравляю, ты успешнее 99% разработчиков из гэдэ, моё почтение, продолжай.
Вот допустим у меня есть на сцене какое-то количество объектов X и Y. И объекты X должны высчитывать значения на основе состояния всех объектов Y. Допустим X суммирует все координаты объектов Y и на этой основе решает куда ему пойти. Как это все грамотно организовать в unity, чтобы я мог взять все объекты Y, высчитать какое-то значение и передать всем объектам X, чтобы они уже что-то свое посчитали?
>>771525 Только через главный менеджер на который у каждого обьекта X и Y появляется ссылка при спавне. Не вздумай дрочить апдейт в каждом из этих обьектов.
Задача на 5 минут, пиздец блять Скачал блендер и сделал модельку (пик 1) Закинул в юнити и сколько я не ебался то выходит пик 2, какого блять хуя, как эту хуету убрать, у меня жопа горит, работы на 5 минут что бы минимально блендер узнать и простую модель сделать, а я мозги себе ебу всю ночь
Сделал в блендере гекс, а он подтягивается со своим светом и камерой. Камеру я убрал, а вот если без света в блендере пересохранить, то происходит пик 2 - моделька какого-то хуя поворачивается на 90. Что за хуйня?
>>771635 Ты каждый мизерный вопрос будешь в треде писать и ждать ответа? Тысячи человек импортит из блендера в юнити, может кто-то уже задавал такой вопрос, гугли
>>771629 >Сделал в блендере гекс, а он подтягивается со своим светом и камерой Так в блендере на сцене удали источник света и камеры, омг.
>Камеру я убрал, а вот если без света в блендере пересохранить, то происходит пик 2 - моделька какого-то хуя поворачивается на 90. Во первых после изменения модели делай апплай в блендере. Во вторых, у блендера по другому ось идёт, нежели чем в юнити, и ты эту траблу решаешь либо питоновским скриптом при импорте, либо же сменой в конце координаты(Гугли, там 30 сек делов). Так-же влияет формат импорта фбх или сам бленд.
>Что за хуйня? Первое что пробуй это всегда самому гуглить, смотреть туторы а ютубе, и лишь если не помогло беги на двачик спрашивать.
Как создать префаб какого-нибудь объекта типо спрайта вместе с UI элементами? Обязательно ли тогда каждому объекту на сцене иметь свой канвас? Просто получается, что при паре десятков таких объектов едитор люто засирается этими километровыми канвасами, хотя мне надо просто маленькую кнопку и текст под объектом отобразить.
Почему юнитеки еще не придумали?Аноним03/10/21 Вск 16:50:36#324№771755
Префабы аниматора. От которого делаем префаб варианты для всех нужных персонажей, и если надо как-нибудь изменить логику анимаций - меняем в префабе, что меняет сразу для всех дочерних аниматоров. Почему такого еще нет, или я о чем то не знаю?
>>771783 Рофлишь? Как только заканчивается анимация, происходит стандартный переход на самую первую от входа, если её нет, то ставится начальное состояние модели. Заморозить на последнем фрейме анимацию в юнити нельзя.
>>771754 Берешь и создаешь. Канвас таскать не обязательно, но помни, что любой объект, который таскает на себе CanvasRenderer не будет рисоваться, если на каком-нибудь из парентов не висит канвас. То бишь, ты можешь сделать 100500 префабов кнопок с текстом/спрайтами, но обязан их всех спавнить в любом из чилдов канваса.
я сейчас делаю игру по вот этому туториалу в рамках освоения юнити:https://noobtuts.com/unity/2d-pong-game Я сделал функционал описанный в туториале и помимо этого я хочу добавить следующее: -главное меню -счет -возвращение положения ракеток и мячика в исходную позицию после того как кто-то из игроков забьет мяч. у меня есть несколько вопросов по этим пунктам. 1.Правильно ли я понимаю что главное меню реализуется отдельной сценой/набором сцен? 2.Счет можно реализовать при помощи объекта UI а шрифт добавить при помощи Text Mesh? 3.Как реализовать третий пункт? Я пробовал менять позицию мяча и ракеток через присвоение значения полям position в классе Transform (возможно немного криво пишу, извините.) но visual studio ругается и говорит что "Не удалось изменить возвращаемое значение Transform.position так как оно не явлется переменной. Заранее спасибо за помощь.
>>771847 >Unity 2018.3.14f1 Едрать ты откопал тутор древнее чем чьято мамка! Чем тебя современные видео туторы от самих юников не устраивают? Куча всего меняется и используется по другому, лишь засоряешь голосу сторой не нужной инфой.
>>771849 Вот тут https://learn.unity.com/, самые актуальные туториалы. Смотришь видосик, делаешь по аналогии, всё расписано и понятно. И что главное от самих юников.
>но старые типа вообще бесполезны Конечно нет, но смысл от затраченного времени почти нулевой. Но главная трабла может какая нибудь старая херня реализовываться которая в новой уже нету, или же не используется и есть более новые решения.
Актуальная версия юнити сейчас чтоб ты понимал Unity 2021.1.23. Думаю улавливаешь на сколько большая разница уже.
да, и что по основам. я правильно в итоге понимаю что в Юнити все строится на сценах? главное меню - это отдельная сцена, первый уровень - это отдельная сцена и т.д., так?
>>771855 Я те говорю что в 2020 ничего существенного по сравнению с 2018 не заметил. (на черную тему похуй) А, ну 2020 запускается медленнее и тормозит, да.
Два rigidbody, boxcollision ящика. У обоих метод коллизии Discrete Один стоит на втором. Если удалить нижний ящик через Destroy(); то верхний будет висеть в воздухе пока его чем-нибудь не стукнуть.
Как заставить верхний ящик падать после удаления нижнего без изменения метода коллизии на Continuous?
>>771869 вот весь код скрипта для мячика. подчеркнут тот код, которым я пытаюсь реализовать возвращение мяча в изначальную позицию.
public class Ball : MonoBehaviour { public AudioSource Sound; public Transform positon;
public float speed = 50; // Start is called before the first frame update void Start() { //Initial velocity GetComponent<Rigidbody2D>().velocity = Vector2.right speed;
>>771847 >"Не удалось изменить возвращаемое значение Transform.position так как оно не явлется переменной.
Transform.position это property а не field, там сеттер сразу весь вектор3 ждет пиши не positon.position.y = 0.0429; positon.position.x = -2.6; а positon.position = new Vector3 (-2.6, 0.0429, 0);
Как анимировать List<>? Анимировать можно переменные, всякие GameObject поля, вектора и прочую хуйню, а листы и вроде как массивы нельзя. Какие же есть варианты, если очень нужно? Корутины? Неудобно и долго, заебёшься катсцены делать. Создать методы, меняющие массив и их вызывать через анимацию? Не практично.
Какие ещё есть способы? Мб асеты какие, или встроенные приколы? Нужна в первую очередь практичность.
Да, гуглил и яндексил, по запросу "how animate list/massive/collection unity" выдаёт максимум туторы по анимациям.
>>771946 > Вообще опиши задачу нормально, что ты хочешь анимировать Постараюсь описать понятнее
Абстрактно: Есть List<GameObject>, задача изменять его содержимое во время катсцен, удалять, добавлять элементы по заранее заготовленному шаблону. Изначально планировалось делать это через компонент Animation, но он не позволяет анимировать List<>, поэтому требуется найти другой метод это делать, не уступающий по простоте использования компоненту Animation.
Более конкретный пример использования: Есть объект "группа рабов 1", на нём висит скрипт "управление рабами", с полем типа List<GameObject>, содержащем ссылки на каждого раба, формально принадлежащего этой группе. Задача: "освободить" половину рабов из группы, то есть удалить из списка, причём "освобождение" является частью катсцены, то есть должно быть заранее заготовлено и вызываться анимацией. Ограничения: тк групп рабов будет много, катсцен будет много, прописывать каждое изменение List<> вручную непрактично, нужно упростить процесс.
Надеюсь понятно расписал, если нужно, могу скинуть скрипты
> и зачем. На днях Аллах явился ко мне (он тоже использует юнити) и сказал что я должен написать ему продвинутую систему управления муслимами, он хочет чтоб можно было в два клика мышкой создавать их группы, разделять их, автоматизировать, анимировать всё это и не париться с каждым муслимом вручную.
Рефлект от стены в 3DАноним07/10/21 Чтв 17:35:52#362№772156
Захотел перенести 2D прототип игры в 3D, столкнулся с проблемой в физике. Если запустить игрока в стену, то он не отрефлектит под тем же углом, а отлетит перпендикулярно поверхности.
Не хочется писать скрипт рефлекта через Vector3.Reflect, есть какой-то способ это пофиксить через параметры физики или как-то ещё?
пик1 - рефлект в 2Д проекте (как должно работать) пик 2 - рефлект в 3Д проекте (как НЕ должно работать) пик 3, 4 - параметры Physic Material для 2D и 3D соответственно, которые применялись для объектов
Если что рефлект в 2D делал просто через Physics Material 2D, игроку давал скорость через rigidbody.velocity, тоже самое делал и в 3D, только использовал обычный Physics Material
Бродяги, платина конечно, но всё же спросить негде. Хочу запилить кликер на юнити да, да, я знаю, иди нахуй В общем суть - хочу иметь панель вкладок (порядка 10), если видели в глаза хоть раз idle игру для десктопа, то понимаете о чем речь. И не совсем врубаюсь как его реализовать чтобы пооптимальнее. Туториалы везде опираются на меню из 3х кнопок, и там ссылки на сцены, как то слишком ресурсоемко, имхо Думал о чем то вроде 10 панелей и панель с кнопками, каждая из которых делает setVisible (не нашёл кстати в unity мда) определенную панель(или поднимает её поверх остальных) setActive не подходит если что.
>>772200 Пофиксил, спасибо, но все равно нихуя не работает. Как советовали в одном из гайдов - поставил пик 2. Перезапустил юнити и VSC. В визуалке появились две страницы с кодом, на несколько кусков которых ругалась визуалка. Я попробовал их удалить, В VSC ошибки пропали, но теперь вылезло говно как на пике 1.
>>772205 >using UnityEngine.UI; Написал, один хуй. >выдели пару неделек на изучение C# А каким образом лучше учить по твоему? Я когда курс по юнити на тытруба искал, так там все друг друга хуесосят и обвиняют в криворукости.
>>772206 Блять, я рот ебал этого юнити. Оказывается, не надо было ебаться в каком-то стороннем файле с библиотеками, качать ассеты, етс, надо было тупо делитнуть старый проект и создать новый.
>>772001 Нахуй вы лезете в макакинг игр, когда не знаете основ макакинга общего назначения? Твоя задача решается через стек корутин которые задают сценарии поведения объектов заданного типа.
Вот есть у тебя лист рабов. Ты создаешь клас раьменеджер, пишешь в нем корутину, в которую передаешь массив ссылок/индексов на рабов из листа и сам лист. Корутина представляет собой сценарий событий, например запускает анимацию плюс выводит рабов из листа который ты в нее передал. Эта корутина универсальна для любых листов с объектами типа "раб".
Кто пользуется ui toolkit? Как гуй делаете? Я вот делал через создание гуя полностью через посторонний код, то есть вот точка входа, которая на основании загруженной сцены выбирает нужный класс, который уже спавнит гуи елементы. При этом никакого наследования от VisualElement нет. В целом работало нефигово. Но потом решил сделать правильно, как это задумывалось разработчиком. Наследуемся от VisualElement, добавляем обязательные UxmlFactory, UxmlTraits и переопределяем войд Init. Вуаля, наш класс появляется в списке доступных контроллов в Ui builder и можно начинать таскать мышкой. Окей. Пусть это будет "базовый" класс, поверх которого я создам разные гуи элементы. Ну, чтобы не создавать каждый раз однотипные классы с одинаковым функционалом. Создаю новый класс, наследуюсь от предыдущего и его Ui builder не видит. Потому что в нём нет UxmlFactory, UxmlTraits и так далее. Отлично, то есть мне нужно копипастить хуйню из класса в класс. Что несколько неудобно. Во втором подходе в принципе код выглядит как-то неприятно. Так вот - как сами делаете? Есть ли профит в мышкотягании? Пока что выглядит менее удобным, потому что отпадает возможность просто скопировать папку Ui в новый проект и получить готовый гуй.
>>772191 щас вот подумал и вроде бы неплохая идея, все расчеты просто с дуру клал на панели, ща понял что это хуйня и лучше скрипты работающие фоном держать отдельно.
Вечер в хату юнитаны, вопрос не из простых для меня хочу пощупать как верстаются интерфейсы в ngui, сам до этого с юнити почти не работал, вопрос - как то его ngui можно посмотреть-поверстать не покупая? Или если покупать, есть ли место где это можно сделать дешевле чем в ассетсторе?
>>772317 Jason Weimann, Максим Крюков. Если полный ноль - Brackeys. Но нет никакого смысла смотреть всё подряд, ищи то, что интересует и не понятно. Для развлечения и вдохновения - Sebastian Lague. Все остальные - только во вред или нудные, за редким исключением.
Кто-нибудь сталкивался с задержкой при лупе Audio Source? Есть правильно зацикленный кусок мп3 на 2 минуты, при окончании он стартует с самого начала с небольшой задержкой(0.1 секунды да, я проверял) что довольно заметно, так как музыка идет плотной стеной. Лупнул просто поставив галку Loop в инспекторе. Есть что с этим сделать? Вроде банальная вещь ведь.
Господа, я нид хелп. 1)Какого-то хуя у генерируемого объекта не работает физика. Риджибоди подключен. 2)Без цикла после создания объекта сцена вылетает. С циклом происходит пикрил 2. Чому так? Ведь при каждом нажатии должен создаваться всего один объект.
>>772389 Я вообщем-то нахуй в цикл полез - писал генерацию объекта по гайду с ютуба, написал слово в слово, но у меня нихуя не работает. Создает один куб и вылетает из сцены. Для примера поставил сферу, которая с тем же реджибади падает Где я проебался и как это можно пофиксить?
>>772397 >как ты умудрился в такой простоте запутаться Тут скорее интересно, как один и тот же код умудряется работать на одной системе и не работать на второй.
>>772398 По своему опыту скажу, накосячил ты. Я уже тыщу раз проклинал юнити в разных затыках, и всегда оказывалось что тупанул я или просто не знал как устроено. Судя по тому куда ты цикл воткнул ты вообще нулевый. Попробуй еще раз повторить урок
>>772398 >Тут скорее интересно, как один и тот же код умудряется работать на одной системе и не работать на второй. На всякий напомню, что код исполняется одинаково где угодно, на то он и код, а не что-то выдуманное или мысленное. Если что-то не работает, или не то что ты ожидаешь, то единственный вывод - ты говнокодишь не понимая что делать. Есть супер редкие случаи багов самой юньки, но с вероятностью 99.9% ты их никогда не встретишь.
>>772402 >>772403 Ну а можете подсказать, в чем именно я накосячил? Я все делал по алгоритму в гайде: 1)Создал объект, повесил на него рб 2)Сделал его префаб, изначальный объект удалил 3)Написал скрипт слово в слово
>>772408 И что ты хочешь? Спавнить обьект? Ты его спавнишь. Хочешь свойства обьекта? Меняешь свойства. Что сложного? Я в душе не чаю чего ты хочешь, и что в твоём гайде. Может он старое гавно на старой версии и уже не работает. Единственный путь это понять что ты хочешь, следом понять какой код написать.
Во долбаёб! У тебя ГетКейДаун обновляется кадый кадр и в каждом таком кадре спавнится физический хуй. Сколько кадров выдаёт легаси сцена? Ну скажем тыщу, на кнопку ты допустим нажимаешь пол секунды, то есть у тебя друг в друге создастся 1000/2=500 кубов. А теперь умножь это число на свой цикл for, и получишь 50000 полностью физических объектов в один тык. Сколько миллионов лет потребуется чтобы посчитать все коллизии между твоими кубами? А потом этот долбаёб спрашивает почему у него юнька вылетает. Съеби нахуй из треда учить матчасть.
>>772499 Я просто предупредил анона, что если ему что-то надо - пусть скачивает сразу и не рассчитывает на свой аккаунт. >изредко проявлять активность А смысл заходить на эту помойку, если всё равно аккаунты стабильно стираются? Зарегался, взял что надо и забыл, что они вообще существуют. А ещё лучше - нагуглил что надо на любом другом сайте. Абсолютно теряется смысл заводить аккаунт, когда чуть что и его удаляют. Тем более этот сайт не несёт какой-то ценности, просто помойка, каких много.
>>772510 Да таких помоек тысячи. Вбиваешь в гугл Unity Asset Collection и вот уже одна. В тг тоже скорее всего есть, но в тг в принципе крайне неудобная навигация, хуй найдёшь что.
>>772512 Ну повезло значит. Проверь ещё раз, вдруг удалили, пока ты пост писал. У меня до бреда доходило, когда я раздаю, а аккаунт уже удалён. Так на эту парашу и забил.
Обратил внимание, что повороты происходят по разному в 2D и 3D проектах. В 2D они как будто вращаются вокруг какой-то оси, я предположил, что это зависит от родителя, но потом я вынес меч из родителя и ничего не изменилось.
>>772395 Больше смотри таких же дегенератов на ютубе. Пиздец, хуею. Не разбираются и смотрят каких-то придурков, чтобы ещё тупее становиться. Гугли Jason Unity и нахуй год не вылазь с его канала, ни дай бог что-то другое посмотришь - анус отвалится, и разумеется после этого уже никогда не будешь разработчиком.
>>772545 Ещё одна нюфаня? Официальные уроки такое же дерьмо, в них очень много плохого кода. И они безумно затянутые к тому же. Не знаю как можно было так обосраться. Если смотреть что-то от Юнити, то только презентации, но это уже не начальный уровень.
А Джейсон профессионал с многолетним стажем, всегда отмечает, что этот кусок кода нежелателен и как его можно оптимизировать, если показывает какой-то быстрый пример. Человек отлично понимает как Юнити, так и программирование в целом.
>>772553 Слова гения. Те, кто шарят, кидают ассеты и молча воруют код со стаковерфлоу и видосов на ютубе. Как ты. Потому что не в состоянии отличить хорошего программиста от плохого.
>>772554 Вот, у тебя в голове не сказать, чтобы дельные мысли, но проблески бывают. Стаковерфлоу, там есть код. Заметь, тебе на ум пришел не ютуб. Потому что уроки в целом не должны быть видосами, это должен быть текст, а не бесконечно экание и бэкание на фоне пустого экрана. Видос про кодинг это автоматически сблёв, который не стоит смотреть. Да, я знаю, что большинство юнити-уроков это видосы, но они прилагают ещё и код, который можно почитать. Не то, чтобы я его читал. Можешь бесконечно защищать бесталанного ноунейма с ютабчика, но это ничего не меняет. Спасибо, хоть не с твича. Но я его даже загуглил, какая-то реклама unity3d.college с патреона. Мда. Ну ладно, никто не говорил, что уроки должны быть бесплатными. И вишенка на торте, я открыл его рандомный видос с ютуба. Во-первых, while в апдейте. Никогда так не делайте, потому что это может вызвать краш юнити. Во-вторых, геткомпонент в апдейте. Геткомпонент это довольно дорогая операция и делать его в апдейте не рекомендовано. Кешируйте ссылку на компонент.
>>772559 https://youtu.be/YdERlPfwUb0?t=396 Как и говорю, всегда отмечает такие моменты. Но мне тоже не нравится, что он в принципе так оставляет, не понимающие люди всё равно начнут втупую копировать. В целом, хорошо описывает паттерны и другие штуки, когда нужно быстро вникнуть в тебе и дальше самому разобраться какое решение применить.
Пытаюсь сделать slow-mo через Time.timeScale = 0.3f; Но все объекты с rigidbody начинают перемещаться рывками. Решается это через установку им интерполяции в окне настроек rigidbody. Но юнити пишет про такую практику: >It is recommended to turn on interpolation for the main character but disable it for everything else.
Какие подводные камни если на сцене будет сотня или больше rigidbody?
Где зеленому Кириллу подсмотреть годный и универсальный код на инвентарь? Пытался слепить что то с ютуба но там все из разряда "5 роликов пишем тонны кода, вот наш инвентарь, можно в нем вещи перетаскивать и стакать" . При этом так и не понятно как в такой инвентарь пихать вещи из сторонних контейнеров. Кирилл удручен и просит о помощи
>>772700 Отталкивайся от задач, Кирилушка. Универсальный инвентарь, возможно и существует но это будет платный ассет за 100 баксов предусматривающий все случаи жизни и ты такой никогда не напишешь.
Определись с тем что тебе нужно. В просто случае это информация которую ты хранишь в какой-то структуре данных состоящая из айди и класса вещи например, и рисование окошка.
>>772700 >как в такой инвентарь пихать вещи из сторонних контейнеров У тебя же есть драг-н-дроп, в функции стопа драга проверяй, над чем был стоп. Если это условный другой контейнер - перемещай предмет из одного инвентаря в другой.
Но вообще я пришёл к выводу, что инвентарь невозможно написать "правильно", в нём в любом случае будет куча каких-то ебанутых хаков. Вот берём мы перетаскиваем окошко, а юнити рисует все окна с соблюдением иерархии, что в югуи, что в юиэлементс. То есть нам надо перетащить это окно поверх всего, что уже как бы некрасиво. А ещё асмдефы. Решил такой писать код "как положено". Есть "сборка" персонаж, есть "сборка" инвентарь, есть "сборка" гуи. Окей. Персонаж создаёт инвентарь, инвентарь создаёт гуи. Звучит логично. А теперь берём в гуи и взаимодействуем с инвентарём. Только вот гуи не может ничего знать про инвентарь и про персонажа. В общем, не советую асмдеф использовать.
>>772741 Нет, мне похуй на него, но пока один из самых адекватный из всех, кто делает ролики на все темы, поэтому последнее время стал включать его видео в поисковой выдаче. Несколько месяцев назад попал на какое-то очередное видео Кодманки и окончательно закрепилось мнение, что они - это что-то вроде зарубежного фламинго или как там его. Максимально уебанский код и ентри-левел туториалы.
>>772934 Проверил на 200 коробках, стоящих друг на друге в ряд по 10 штук и падающих. Лок в 250 фпс держался, но сцена была пустая. Поэтому и не понимаю что не так.
Есть у меня такой дом-каркас, где происходит игра, он что-то типа дебажного объекта, чтобы мне не приходилось сначала создавать модели всего мира. Это не игровой объект, я его текстурить не собираюсь - когда игра будет готова, я на него отдельными объектами наложу пол, стены, обои и все остальные объекты. А сам объект я хотел удалить. Но потом решил оставить и использовать его как огромный коллайдер дома (Mesh коллайдер). Вопрос: не слишком ли сильно отобразится это на производительности? У него 1244 вершин/1939 граней/660 плоскостей.
И еще вопрос: как можно определить, что производительность хромает, если у меня железо хорошее? Вот я бы хотел узнать, например, сколько будет fps в i3 8100 +1050.
>>772966 зы делаю на pc, но потом планирую на ведро, хотелось бы, чтобы можно было играть на мобилках от 13К рублей хотя бы, так что производительность да, важна
>>772966 Я конечно нуб, но с дивана мне кажется что куча квадратных примитивов в качестве коллайдеров будет лучше чем один здоровенный дом. Подкрепить фактами не могу.
>>766778 (OP) Курс XYZ School - Алексей Малороссиянов - "Unity" (2021) https://t.me/ue4ru/47 Цель курса: Научить тебя работать с Unity — движком, на котором создают 90% мобильных игр. На курсе ты сделаешь прототип простого 2D-платформера и с каждым уроком будешь добавлять в него новые механики: от перемещения по уровню и диалогов до чекпойнтов и босса с несколькими фазами боя. Продолжительность: 74:56:27
Содержание: Блок 1. Пазл-платформер Лекция 1. Знакомство с Unity Unity HUB и версия, IDE, создание пустого проекта, обзор интерфейса (scene, game, hierarchy, inpector, console). Трехмерное пространство сцены. Разбор GameObject и компонентов: Transform, Camera. Концепция Prefab. 1.Настраиваем окружения для работы: • получаем Unity Id • скачиваем Unity Hub • договариваемся о версии Unity 2.Создание нового проекта: • выбор необходимого темплейта • обзор интерфейса (Scene, Game, Hierarchy, Inspector, Console) 3.Базовые сущности: • пространство сцены • unit • Game Object • Transform • Camera
Лекция 2. Создание сцены и ее наполнение Объяснение объекта .unitypackage и импорт необходимых ассетов. Сборка игровой сцены из префабов. Объяснение понятия текстур и Sprite. SpriteRenderer. Настройка камеры (инструменты редактора по алигну камеры). Запуск проекта. 1.Импорт ассетов: • импорт ресурсов через unitypackage • импорт сырых текстур 2.Настройка текстур: • обзор возможных настроек текстуры • настройка текстур под пиксель-артный проект 3.Grid & Snap Settings 4.Создание объектов на сцене: • компонент SpriteRenderer и его свойства • взаимосвязь настроек текстур с SpriteRenderer 5.Камера и её свойства 6.Пакет 2d Pixel Perfect
Лекция 3. Оживляем сцену Понятие MonoBehaviour. Создание Player.cs базовый цикл жизни бихэйва (Awake, Start, Update, OnDestroy). Разбираем методы, переменные, базовые типы, условные операторы, модификаторы доступа. SerializedField и то как это влияет на GameObject (посмотреть на изменение сериализованных данных). Разбор класса Input, реализация базового передвижения игрока по сцене. 1.Первый скрипт: • Обзор MonoBehaviour • Жизненный цикл скрипта • Создание контроллера игрока Player.cs 2.Вспомним теорию: • переменные • базовые типы • условные операторы • методы 3.Пользовательский ввод: • Разбор класса Input • Обработка ввода через Input • Обзор нового пакета Input System • Создание контролов и привязка методов из Player.cs 4.Перемещение объекта по сцене
Лекция 4. Физика и коллизии Рассказ о физике: гравитация, rigid body, импульсы, статические объекты. Размещение на сцене необходимых компонентов пола и привязка физики к GO игрока. Переделываем управление на импульсы. Рассказ детекции коллизий, компоненты Colider. Методы колизий в компоненте игрока. Создаем новый компонент коина и добавляем механику собирания монеток. 1.Физическая модель Unity 2.Разбор Rigidbody: • типы физических тел • масса • гравитация • ограничители 3.Разбор Collider: • виды коллайдеров • обзор параметров компонента 4.Переписываем управление персонажем на физическую модель: • Velocity, AddForce • Добавляем возможность прыгать • Ground Check и его различные реализации 5.Делаем управление более отзывчивым: • управление высотой прыжка • safe jump 6.Реализуем детекцию коллизий на примере монеток.
Лекция 5. Тайлсеты и камера Работа со спрайтами и тайлами. Настройки и свойства Sprite, SpriteRenderer. Обзор встроенных инструментов для тайлсетов и грида. Создание тайлсета для уровня. Расстановка тайлов из палитры на сцену. Расширения и кастомные тайлы. Что такое тайлсет и зачем он нужен? 1.Импорт ресурсов: • настройка спрайта • нарезка текстуры. 2.Создание уровня с помощью Tile Palette • Обзор интерфейса и возможностей • Grid и TileMap 3.Простой скрипт слежения за передвижением игрока: • Интерполяция: зачем нужна и как применить? 4.Пакет Cinemachine и реализация слежения через VirtualCamera: • обзор технологии • разбор параметров камеры • настройка камеры под проект
Лекция 6. Анимация Рассказываем о покадровой анимации, знакомимся с интерфейсами Animator/Animation. Создаём аниматор для героя с набором состояний передвижения. Рассказываем о переходах и параметрах анимации. Программируем контроллер для анимации. 1.Анимация в пиксель-арт играх: • Покадровая анимация. • Спрайтшиты. • Настройка и нарезка ресурсов. 2.Интерфейсы Animator/Animation 3.Анимирование героя: • Добавление аниматора и состояний. • Создание анимаций и привязка к состояниям. • Условные переходы между состояниями и проброс параметров. • Привязка к коду. 4.Программная покадровая анимация: • зачем может понадобиться • реализация компонента
Лекция 7. Программирование игровых механик Рассматриваем компонентный подход в разработке. Пишем компоненты для лестницы, переключателя (открывалки дверей), передвижной платформы, разрушающихся платформ. Компонент для слежения камеры за игроком. 1.Разбираем компонентный подход в разработке. 2.Немного теории о делегатах и разбор UnityEvent. 3.Создаём интерактивные компоненты и связываем их между собой: • переключатель • дверь 4.Опасные предметы: • Добавляем пики и обработку их взаимодействия с героем • Добавляем анимацию урона и связываем с кодом.
Лекция 8. Партиклы и инстанциирование Рассказываем о Particle System. Создаём партиклы для прыжка, резкого разворота, сбора монет. Программно привязываем всё это. 1.Частицы, какие бывают и зачем нужны: • Particle System • Спрайтовая анимация частиц. 2.GameObject.Instaniate зачем нужен, как применять 3.Пыль под ногами: • Настраиваем точки спавна для частиц и реализуем компонент • Ивенты в анимации и связывание с кодом. 4.Реворк монеток: • Новые ивенты в покадровом аниматоре • Добавляем эффекты исчезновения монеток.
Блок 2. Боёвка и NPC 1.Melee и разрушаемые объекты. • Реализуем механику холодного оружия. Дополняем код и соответствующие контейнеры в префабе персонажа. Реализуем механику разрушаемых пропсов. 2.Модель данных игрока и текущей сессии. • Рассказываем о ScriptableObject как о хранилище данных и настроек. Проектируем и реализуем модель данных игрока, привязываем эти данные к игре. Реализуем бочку со взрывчаткой, которая ранит персонажа при ее взрыве. Дополнительное задание: на основе материалов с этой и предыдущей лекции реализовать механику аптечки. 3.Мобы и базовый AI. • Рассказываем о неигровых персонажах и добавляем простой контроллер моба который который ранит персонажа при приближении. Рассказываем об агро рэнже и базовых поведениях. 4.Range атаки. • Рассказываем что такое проджектайл и настройки Bullet в разрезе физики и детекции коллизий. Реализуем рэнж оружие игрока (пистолет). Доп. задание: реализовать дробовик. 5.Стреляющие противники и стратегии ИИ. • На основе компонентов и предыдущей лекции реализуем стреляющего моба. Рассказываем о стратегиях и стэйт машинах для AI. Реализуем простую модель поведения моба. • Дополнительное задание: реализовать такое поведение моба, чтобы стреляющий переходил в рукопашную при приближении персонажа. 6.Инвентарь. Модель данных и связывание. • Создаем модель данных инвентаря и ячеек быстрого доступа. Реализуем собирабельные ресурсы и механики патронов, ключей. • Доп. задание: собирабельная аптечка. 7.Звук. • Обзор звуковой подсистемы Unity, реализация эмбиента уровня, программное воспроизведение звуков, компонент воспроизведения звука. 8.Чистый код, связность, зацепление. • Лекция на тему хорошего кода: какие есть признаки, чего нужно придерживаться. Рефакторим созданные классы. • Дополнительное задание: отрефакторить один из старых классов.
Блок 3. UI и новые игровые механики 1.Введение в UI. 2.Скрины и HUD. 3.Диалоговые NPC. UI диалога. 4.Локализация. 5.Загрузка новых уровней. 6.Чекпоинты. Красивости (паралакс). 7.Продвинутые механики: способности и прокачка. 8.Прокачка персонажа.
Блок 4. Продвинутые игровые механики и «красивости» 1.Освещение. 2.Эффекты камеры. 3.Coroutines. 4.Сражение с боссом. 5.Сражение с боссом-2.
Блок 5. Оптимизация, аналитика, сборки 1.Инструменты анализа производительности. 2.Память, атласы, пулы объектов. 3.Сборки под разные платформы, на что смотреть в параметрах. 4.Unity Analytics. Ивенты, воронки.
>>772966 Во-первых, твой "каркас" обычно делается из небольших примитивов, это буквально называется грейбоксинг. Мне кажется, так проще и тебе, и движку. Теперь к вопросу о коллайдерах. Большой коллайдер это плоховато, но ты вряд ли заметишь разницу. Просто если у тебя в одной из комнат дома будет падать условная чашка на пол, физика будет просчитывать, не может ли эта чашка контактировать с любым объектом в любой из комнат, ну и не только, захватится ещё лишнее пространство вокруг всего дома. Ну и по классике - меш коллайдер это дорого, используй составной из примитивов. Хотя разницы в 90% случаев ты просто не увидишь.
>>772734 >Персонаж создаёт инвентарь, инвентарь создаёт гуи. Звучит логично. Блин, тут подумал, что если заюзать MVC из вебмакакинга? Каждый объект состоит из трёх частей, модель, отображение и контроллер. Так я смогу связать логику и отображение объекта вместе. А условная сборка "гуи" будет содержать в себе только примитивные типы и сама гуй создавать не будет. Вообще заметил, что в гдаче по вопросам архитектуры даже срачей нет.
>>772993 Слишком специфично, слишком абстрактно чтобы об этом сраться. Допустим опишу я архитектуру своего рогалика на ECS+MVC , половина не поймет, половина начнет доказывать что надо делать на ООП+лапше. А вообще SOLID. Тогда персонажу и не захочется создавать инвентарь, ведь это не его зона ответственности, а менеджера уровнем выше.
>>773114 >половина начнет доказывать что надо делать на ООП+лапше. В споре как-то проще добраться до нужных решений. Даже если не принимаешь точку зрения оппонента, всё равно как-то задумываешься над разными вещами. Как там с ецс-то дела, скинмеши прикрутили уже? >менеджера уровнем выше. Менеджеры это в принципе идея так себе. Но допустим. Есть какой-то менеджер, который создаёт персонажа, инвентарь и гуи к нему. И это ведь тот же mvc, только с прикрученным сбоку менеджером-фабрикой. В этот момент пытаемся взаимодействовать с инвентарём. Гуи инвентаря как это должен обрабатывать? Обращаться в менеджер он не может. Допустим, гуи может обратиться в сам инвентарь. А теперь гуи нужно перерисовать. И из инвентаря мы его перерисовать не можем, только из менеджера. Мне тут два момента не нравится, что персонажи со своими инвентарями не связаны и что менеджер получает очень большую зону ответственности. Наверное, переделаю сейчас на этот подход, а то из предыдущего невозможно передать ссылку на инвентарь персонажа в глобальном "гуи-менеджере", который рисует панели быстрого доступа.
Короче. Объект создается через GameObject.Instantiate под объектом, который задизебленен. Таким образом. Start и Awake не будут дернуты для созданного объекта, пока его родитель (и он сам) не буду раздизейбленыны. Есть какой-то способ (или другие методы), которые можно использовать в данной ситуации?
>>773486 проблема в том, что это ряд компонентов, который может быть, а может не быть у игрового объекта. Т.к. компоненты нельзя получать по интерфейсу, придется для каждого отдельное условие писать, если у каждого свой базовый класс уже есть.
ньюфаг на связи посмотрел гайд и озадачен почему нельзя сразу написать ghost.transform.position = ghost.home.inside.position? автор что-то про это сказал но я не могу разобрать что именно на ангельском + съел окончания
Заебался настраивать navmeshagent с animator-ом с включенным apply root motion. Адекватного движения так и не смог достигнуть.
Собственно, проблема, моб может ходить с переменной скоростью, от точки А до Б скорость может варьироваться от 1 до 2, например, если он хромает. Если использоваться скорость как константу, то местами он будет скользить, или на месте топтаться.
Поэтому анимация сама должна толкать моба.
Сейчас решил убрать нахуй компонент navmeshagent, и использовать только статичную функцию calculatepath. Еще не использовал, но, думаю, сделаю так. Получаю все углы, и просто поворачиваю объект от одного угла к другому по мере достижения. А анимация сама его будет двигать, то есть, позицию мне обновлять не надо.
Анимация двигает трансформом. Если ты двигаешь трансформом - значит что объект будет проходить сквозь коллайдеры, стены и т.п. Двигай через rigidbody.addforce или character controller.
>>773587 > значит что объект будет проходить сквозь коллайдеры
В основном у моба анимации ходьбы и бега - при запуске моб тупо бежит вперед, куда повернут его rotation. Поэтому, все, что мне нужно, это изменять его rotation от одного угла к другому
насколько я понял, NavMesh.CalculatePath возвращает позиции, по которым надо двигать персонажа, чтобы он дошел до указанной точки, не сталкиваясь с препятствиями. при этом надо чтобы была навигационная сетка была запечена. То есть, чтобы заставить двигаться анимированного персонажа, я должен его повернуть к ближайшей такой точки. анимация сама доведет его до нее. Когда он до нее дойдет - повернуть к следующей и тд, пока не дойдет конечную точку. Потом его можно будет стопарнуть анимацией идлинга.
Не знаю с чего начать делать игры, да и надо ли. Вроде, есть какое-то небольшое желание что-то делать, а что конкретно - не понятно, и идей нет. С таким настроем, наверное, и вкатываться бесполезно, а?
Не думал, что когда-нибудь забреду на это доску, но... С инженерной вакансии вдруг прислали задание реализовать в Unity3d емкость с жидкостью и изменение уровня жидкости. Это сложно для человека, который Unity и ему подобные среды разработки в глаза не видел?
Есть разные объекты и они ходят по поверхности, на которую я наложил SurfaceShader, который меняет высоту поверхности по y.
Вид меняется, но не физические свойства. Как сделать так, чтобы физическая высота поврехности соответствовала визуальной? Хочу чтобы объекты пиздячили вверх-вниз по волнам поверхности, а пока они игнорируют ее, им похуй. Как это сделать?
Пытаюсь заставить персонажа патрулировать между двумя точками. Вычисляю путь с помощью CalculatePath и гоняю это персонажа по этим точкам. Точнее, гоняет его анимация (включен Apply Root Motion), я лишь его поворачиваю от точки к точке по мере достижения. Проблема в том, что анимация бега включает в себя вращение влево-вправо спины и его потомков. Поэтому, на поворотах я бы хотел ее отключить, а то эти вращения иногда выглядят очень широкими. Как лучше ее сделать? Я пытался в LateUpdate transform.rotation = nextCorner. Не помогло, пытался залочить всю спину - спина-то залочилась, а вот руки, и все остальное по-прежнему крутились, несмотря на то, что спина - их родительский элемент.
>>773933 Какой то велосипед - велосипедов делаешь, до тебя уже миллион раз делали. Загугли примерное решение и посмотри, всё делается намного проще и быстрее.
>>773963 Этот способ требует несколько строчек код, и он простой, никакого агента. Он отлично работает, тут чисто косметику навести надо. А именно чтобы телом не вилял в определенных местах. Например, при приближении к углу. Все решения в инете, где нужно подружить агента с навигацией, были сложнее, и требовали допила, чтобы корректно работали. Или вообще предлагали новые библиотеки. Ну, в любом случае может возникнуть такая ситуация, что анимацию нужно подкорректировать с учетом местности. Не делать же мне отдельную анимацию "RunInCorner". Хотя уже думаю, что просто скачаю другую анимацию, где чел при беге не виляет, а прямо бежит.
>>774047 >У тебя крайне специфический случай, никто рутмоушном не пользуется Ну ладно. Пусть чела гоняет навмешагент. Но это значит, у персонажа будет постоянная скорость. А есть анимации с переменной, например хромота. В итоге чел скользит по полу
>>774054 Не приходилось этого делать, но думаю в скрипте, который отвечает у тебя за ии моба можешь в апдейт закинуть условие, изменяющее velocity агента при условии хромоты.
Такой вопрос, допустим я хочу сделать небольшую 3д игру, бюджет нулевой, где брать на нее ресурсы (ибо в магазине из бесплатного нихуя нет), и где их берут аноны, неужели все сами делают?
Аноны, посоветуйте как быть. Недавно начал искать работу джуном, вакансий норм очень мало (без опыта чтобы и без сверх. скиллов). Написал один челик, ищут типа джунов и готовы меня рассмотреть после тестового. Тестовое я сделал, после оценки сказали хорошее и готовы (внезапно) давать пробовать пилить прототипы ГК. Собеса даже и не было. Но то хуй с ним. Но вот цена это пиздец. Начальная ставка аж 2$ в час. Я конечно понимаю что геймдев это не ВЕБ какой-то, да и я зеленый джун. Но блять, это же крохи пиздец. Вот и думаю соглашаться или нет. С одной стороны я готов пойти чтобы опыт капал какой-то. Но с другой, это же ебаные прототипы ГК (даже не фул игры), и ебаная галера раз платят так мало. Там не ревью, не менторства не будет. Так какой опыт я там заработаю я хз. Проще уже самому идею взять с ютуба и пилить ее периодически подсматривая решения. И в спину никто не давит дедлайнами. В общем, хз как поступить. Есть тут братья работающие?
>>774383 Во-первых, делать гиперказуалки на самом деле труднее, чем сидеть месяцами на большом проекте. Поэтому опыта будет нового предостаточно. Во-вторых 350$ / мес для зеленого джуна, вполне норм. Но ты, скорее всего быстро выгоришь (а.к.а. заебешься), потому что, опять таки, делать гиперказуалки это на самом деле трудно, а тебе придется выпускать примерно одну в неделю.
>>774409 Я не говорю что их делать легко, они разные бывают. Некоторые механики вообще хуй пойми как сделаны. Я говорю про то, что меня будут заставлять делать прототипы ГК на отъебись, без ревью и прочего. И вот стоит оно того или можно еще работу поискать а пока ищу, самому пилить прототипы и без переработок и заебок свыше.
Вообще, я в ахуе видеть что в айти 350 норм. Даже джуну. Ну правда, смешно. Или это геймдев такой где нет норм зп. Пока не понял.
>>774410 Гит есть, нахуй никому не нужен. Ну судя по игнору от хрюшек. В плей маркет хз че лить. Точно не прототипы недоигр. А заканчивать такое это не один месяц может уйти. И опять же, вдруг похуй будет и снова не кто не глянет.
Блять, в шапке надо еще писать, что хуй устроишься на работу если вдруг решили сюда вкатываться.
>>774411 >Вообще, я в ахуе видеть что в айти 350 норм. Даже джуну. Ну правда, смешно. Или это геймдев такой где нет норм зп. Пока не понял. А ты поверил в сказки про 300к / сек? На самом деле это не сказки, просто нужно годик - два поРАБотать за "копейки"
>>774411 >делать прототипы ГК на отъебись Ну так-то ты на ревшару обычно претендуешь, нет смысла делать на отъебись. Так-то если есть возможность не работать то делай сам, можешь даже в издательство отсылать на тесты.
Анонасы, хочу сделать 3д порнушную адвенчуру от третьего лица где в приоритете будут катсцены, это лучше делать на Unity или на Unreal? Я графон в модели пытаюсь максимально сильный выкрутить
>>774432 Где удобнее, и что понятнее там и делай. Разницы в этих двух движках давно уже почти нет. Что-то лучше там, где-то проще там. Вкусовщина. Сам юзаю юньку около 5 лет, и паралельно анрил 2 года.
>>774438 Потому что камера мейн это поиск по тегу MainCamera. Проверяй тег.
Олсо, аноны, а кто как раелизует базу данных? Я пока что придумал только создавать под каждый объект скриптейбл и плюс-минус организовывать через другие скриптейблы. Но выглядит не слишком гибко.
>>774466 Мне не нравится sqlite. Чтобы использовать пароль нужно отдать два вечнозелёных килорубля. Это много. Можно запаковать базу, а не хранить её в streaming assets, но тогда нужно будет её всю загружать в память. Это плохо. Меня не интересует какая-то серьёзная защита, но когда база лежит в открытом виде и редактируется за полсекунды это как-то хуёво.
>>774475 Предметы хранить, параметры, вот это всё. Для рпг-лайк игры. Сейчас пилю расширение редактора, чтобы не утонуть в файлах и никогда не заглядывать в папку с ними. Получается не слишком гибко, но лучше, чем ничего.
>>774485 Не знаю, если нормально организовать данные это буквально пару словарей. Не могу представить ни одной ситуации, когда нужно подкручивать полноценную бд.
Как быть, если у персонажа 10 анимаций, и должна быть возможность плавно перейти из одной анимации в любую другую? Как убрать этот пиздец, как на пике? (хотя в боевых условиях работает он все же хорошо) Я слыхал про blendrtee, но он годится для объединения одного типа анимации (бег влево, бег вправо и тд). Ну, допустим я могу запихать в blendtree анимации: 1) стоять (x=0) 2) оглядываться (x=0.5) 3) бежать (x=1)
Допустим, чел стоит, я и хочу чтобы бежал. Я могу с 0 поменять до 1, он побежит, но это будет без плавного перехода от анимации "стоять" до "бежать". А если я буду плавно менять 0, 0.05, 0.1,0.15 .... 1, то это коснется и анимации "оглядываться ". В итоге весь этот переход будет выглядеть странно.
>>774496 >finding yourself needing to make use of a database in the cloud? Явно не то, что мне нужно. Хотя традиционную sql базу делать всё равно надо, но там уже просто парсинг файлов и заливка куда-то в постгрес.
>>774499 БД это в принципе удобно. Тем более дальше я захочу добавить квесты, ещё какие-то параметры, так бы создал таблицу и погнал. Скриптейблы не слишком удобны, делать свою бд на основе жсона или xml это шиза. Адекватная поддержка mysql была бы кстати. >буквально пару словарей Да пока списками обошёлся, номер списка в качестве ключа сгодится.На сколько я помню, юнити не умеет сериализовать словари. Но всё равно не нравится создавать по файлу на каждый предмет, надо как-то оптимизировать. Либо делать массивы в скриптебле, который играет роль таблицы, но тут меня пугает добавление новых полей, не проебётся ли вся старая информация.
Посоны, тупой вопрос наверное, но все же. Нихуя не пойму как адекватно сделать анимацию приземления, типа облака пыли. Сделал через collision 2d, но анимация срабатывает когда персонаж подходит к краю земли и резко поворачивает обратно.
Как лучше и правильнее всего передвигать 2д персонажа? Велосити, аддфорс или еще что? Использую капсульный коллайдер чтобы не застревал нигде, но персонаж постоянно скользит с уступов вниз, как пофиксить?
>>774565 в vmware заблочена возможность установки макоси, но есть кряк под 15 версию (вроде) но учти что и 15 версия уязвима и есть способ заражения зондами основную ОС
>>774606 вот как оно в жизни бывает. Пишешь код абы как. Похуй, лишь бы доделать и лишь бы работало. Все равно скачает от силы 5 человек. А потом тебе становится похуй на свое желание "лишь бы доделать", и появляется чувство прекрасного, и ты начинаешь править свой код, шоб было красиво и правильно. А потом, уставши, осознаешь свою никчемность, и снова пишешь код абы как. колесо сансары
А можно ли для 3д объектов использовать нарезку из SpriteSheet, как в 2д, или для каждой текстуры отдельный файл? Мне нужно на каждый куб написать номер. И так получится, что нужно импортировать 30 картинок.
>>766778 (OP) Сап аноны, такое дело пилю АИ противника на навмеше всё ничего, быстро, дёшево и сердито, но один косяк, КАК УПРАВЛЯТЬ МОДЕЛЬЮ В НАВМЕШЕ? Короче когда охранник теряет игрока то возвращается на стартовую точку, но стоит при это условно лицом к двери, а мне нужно чтобы это даун стоял спиной к двери. Как обычно, вытягивают информацию о положении модели из навмеша АИ, чтобы я мог её развернуть?
До меня только дошло, причём тут веб к uiElements. Это злоебучие таблицы буквально со всеми их недостатками. Сам-то я всегда верстал на дивах, потому пытался найти тот же функционал в элементах. А он не про дивы, а про таблицы. Очень неудобно.
Сап вечерний. Может кто дать скрипты к tpc и заделом под аниматора (playercontroller буквально прыжок, ходьба и если есть возможность атаки). Пытался написать сам камеру с контроллером, но соснул хуйца, камера как шальная крутиться и пофиксить после нескольких дней дрочи нонстоп не смог. Гуглить пытался, везде не рабочее говно либо я не так гуглю.
>>774783 Отслеживай дистанцию до двери или состояние охранника двигается-стоит и как только он подходит к двери или останавливается, пусть отворачивает хлебальник.
Вкатываюсь с тупым вопросом. Есть кольца. На них, на костях, которые идут внутри модели (не юнитивские Динамик Бонс, а то, что из Maya экспортировалось, jointы). Я на них повесил по бокс коллайдеру, и всё было бы хорошо: колечки вешаются друг на друга, врезаются в стены и пол и вообще прекрасно себя чувствуют, но если запустить анимацию, то с радостным свистом коллайдеры пролетают друг через друга. Почему и как это пофиксить? 1 - кольцо 2 - каждый джоинт в нём 3 - физика.
>>766778 (OP) Посоветуйте годных слитых курсов на русском в фоне послушать.
Желательно с более углубленным разбором физики и/или шейдеров, да и вообще нормальный разбор рендер-пайплайна и что мне из него нужно знать, а что ни в коем случае не трогать.
Xyли ЮНЬКА такая необъятная? Уже полгода пытаюсь сделать свою игру, но вечно упираюсь в одну проблему Я НИЧЕРТА НЕ ПОНИМАЮ! Смотришь гайд, где вроде как все понятно объяснят, так в коментах его засрут и скажут, что все не так используя кучу непонятных слов и букаф, пытаешься смотреть прокачанных ребят, так они сами говорят какими-то непонятными словами и бууквами. Однако сколько курсов я не смотрел нигде не было видевоурока в котором бы произошел этот момент перехода с базы, на сложные буквы и слова. Кароч я в отчаянии анонче, кажется что я мегатупой валенок который ничерта не способен понять в этой жизни(
>>775167 Сделаешь как в туториале @ Обнаружишь, что чего-то не хватает (универсальности/производительности/фичи, которая задумана в твоем проекте и тд) @ Бля, а как сделать получше @ Так вот зачем эти сложные буквы
>>775164 >засрут и скажут, что все не так используя кучу непонятных слов и букаф Это дрочеры на корпоративные стандарты. Им необходимо, чтобы каждый использовал KISS, SOLID, синглтоны и прочую херню. Потому что их на работе заставляет это делать менеджер, который даже не знает, что все эти слова значат. По факту ты можешь уже использовать все эти буквы, не зная, что они на самом деле значат. Сделал статик класс? СИНГЛТОН. Сделал класс, который спавнит кубы? ФАБРИКА. Разделил гуи и данные? MVC. Не совсем так разделил? MCVV или MVCC или хуй моржа. Можешь загуглить все эти буквы, короче. Сейчас тренд один, архитектура, ориентированная на данные, это единственное, что тебе не мешало бы знать и использовать.
>>775024 Признаю долбоеб, немного поебал шары и понял. >>775055 >>775114 - этот правду рубит, без визуала, аудио в чистом виде больше запутает чем научит, как ты собираешься запоминать всякие графики и остальные хитросплетения? >>775164 Изучи вобще тему тему программирования, сначала простое, потом ООП и забудь (судя по специфике кодинга на юни), но все равное пойдет понимание как гуглить и что тебе надо. >>775184 А вобще этот говорит правду. У тебя есть в голове игра делай любыми способами, главное чтоб фпс не падал и проект не весил терабайт за 2 минуты гейплея
В GTA SA все интерьеры зданий находятся высоко в небесах и в одном мире, насколько целесообразно делать так же в юнити? Хочу так же, но очкую что нужны какие-то скрипты отдельные для этого
>>775225 В принципе можно, но я бы не советовал. Чем больше Go в сцене, тем больше мс займёт сортировка окклюжн куллинга. Лучше посмотри в сторону аддитивной загрузки сцен в рантайме.
>>774453 Как понять, что ты конченный? Написать около 2к строк кода, которые ничего не делают. Упоролся в эту ёбаную базу данных, в какой-то момент решил, что ну всё равно же связывать это с инвентарём. Так что создавать автоматически атласы и класть туда спрайты для инвентаря это хорошая идея. А ещё все ГО можно паковать в адресейбл ассеты.
>>773264 >Скоро 2022, а в юнити все еще нет стандартного средства для декалей от выстрелов. Декали улучшены и теперь доступны как для URP, так и для HDRP.
В URP были добавлены декали с двумя режимами: экранное пространство или использование DBuffer. Последняя версия менее адаптирована к архитектуре мобильных графических процессоров, но дает доступ к свойствам поверхности для более продвинутого смешивания.
UX также был улучшен для размещения декалей проектора с помощью инструментов преобразования точки поворота и масштаба, поддержки Prefab и возможности множественного выбора.
В HDRP был добавлен параметр обычного смешивания, улучшающий смешивание неплоских форм, а полный шейдер декалей HDRP теперь доступен из графика визуальных эффектов.
>>775359 >October 29, 2021 in Ты хочешь чтобы я юнитековские новости рефрешил каждый день? Следить за обновлениями на продакшене смысла мало, больше вероятность похерить все при перекате на новую версию.
>>775351 спасибо, но там все нормально включено было. Когда строишь локацию, все текстурки хорошие если приблизить, как надо (пик 2). А как загрузишь в игру там если приблизить то хуево (пик 3). думаю это как-то с настройками камеры мб связано?
>>775369 Во-первых, у тебя не назначен рендер пайплайн ассет. Если не импортировать SRP, то поля вообще не должно быть, а если импортировать и не назначить, то он не работает. Во-вторых, а как ты приближаешь? Если через перемещение камеры и\или FOV и текстуры бесоёбит, то переключи разрешение гейм окна на фиксированное, я обычно всё проверяю на Full HD. Если это не помогает, то проблема в фильтрации текстур. Билинейная фильтрация ок. А вот если ты "приближаешь" через ползунок скейл, то всё так и должно быть.
>>775373 Когда ты в режиме сцены крутишь колёсико, то фактически "камера эдитор мода" перемещается. Когда ты таскаешь скейл, то у тебя просто итоговая картинка растягивается. То есть как бы очевидно, что будет пикселизация, если пикчу растянуть в пять раз. Тебе нужно двигать камеру.
Я помню во времена, когда вы ещё не родились, была охуительная технология, которая позволяла смотреть ленту новостей, собранную из избранных тобой сайтов. То есть заголовок новости, картинка 100х100 и буквально две строчки краткой информации. Тебе не требовалось заходить на каждый сайт и смотреть, не запостили ли чего, ты открывал одну страницу в браузере и видел всё сразу. Эта хуйня ещё кое где встречается до сих пор. И ридер этой хуйни был в каждом браузере по умолчанию, иконка в строке адреса была просто обязательной. А сейчас даже хрому нужно устанавливать дополнительное расширение. Блядь, это что, доступ к информации усложнился, хотя самой информации стало больше?
>>775400 Так я о ней и писал. В хроме из коробке нет поддержки rss фидов, у меня они открываются, как xml просто. В строке адреса нет кнопки rss, нужно долго и нужно искать ссылки на фиды. Короче rss почти умер, все забыли. > нахуя еще что-то? Есть ещё Atom.
Посоны, ща с ума сойду, что за хуйня. В анимации есть анимейшн ивент. Если он стоит на 0:45, то все работает. Передвигаю его на 0:50 - не работает. Тупо не вызывается.
Сап юнитач, нужна помощь нубу. Освещенный квадрат содержит 70x70 гексов. Таких квадратов может быть довольно много. Если создается сетка 10 на 10 квадратов, то на это уходит много времени. Комбинирование сеток - не вариант, так как я сталкиваюсь с допустимым пределом для вершин. Как ускорить создание таких квадратов?
Я правильно понимаю, что вся логика игры должна находится в специальном отдельном классе, а все компоненты игры ничего про игру не знают, в смысле, там нет никаких проверок о текущем состоянии игры, игрока, и прочем?
Например, есть компонент карта. Все методы и переменные, которые в ней есть, относятся именно к карте. Так что этот компонент можно легко переносить из одной игры в другую.
И еще, например, есть компонент "дверь" и есть "ключ". Ключ не должен знать, что он может открыть конкретную дверь, а дверь не может отслеживать, какой именно ключ к нему применили. Компонент "ключ", возможно, вообще может не содержать никакого кода, а дверь может лишь иметь методы Open() и Close(). Вся это логика открывания-закрывания должна лежать именно в отдельном классе. Например, в нем можно указать ссылку на дверь и на ключ, и этот же компонент проверяет, что, если у игрока есть ключ, то он может открыть такую-то дверь.
Пацаны, может кто знает, как сделать так что бы когда я касаюсь экрана двумя пальцами (одним управляю персонажем, вторым жму на кнопки) они не складывались?
>>775548 Так получается ты создаёшь 490 000 квадратов. Это будет быстро только с многопотоком. Но комбинировать меши тебе всё равно надо. Лимит вершин огромный, меши у тебя простые, сможешь сократить количество квадратов в сотни раз.
>>775569 Используешь шейдер, который не поддерживает hdrp.
>>775577 Я бы делал по-другому. В двери есть инт айдишника ключа, в ключе есть свой айдишник. Применяешь ключ на дверь, дверь проверяет айдишники и открывается. В отдельном классе заебёшься, тебе придётся создавать списки дверей, ключей и т.д. А если окажется, что один ключ может открыть две двери либо одна дверь может быть открыта двумя-тремя ключами, то можно пиздануться.
>>775577 Ну в целом да, это же принцип SOLID и прочих взрослых букаф. Но жаль что не всегда так получается писать. По крайней мере у меня. С точки зрения архитектуры проекта это крута. Разделенная логика и т.п. Но когда ты делаешь проект в соло, у тебя таких абстрактных классов не знающих друг о друге может переваливать за еба кол-во в n степени. Мне вот дают задания делать вонючие ГК и я не могу туда впихнуть эту парашу с единой ответственностью. Поэтому пишу иногда как жмыхи-бородачи с ютуба. Типа, есть мелкий скрипт (объект) который нихуя не знает, а этот мелкий скрипт в свою очередь держит в себе скрипт по крупнее. И т.д. Компонентный подход короче. Хуй знает, правильно или нет, но прототипы делаются.
>>775597 Ну смотря какой. Они разные бывают. Но в целом, у меня 2 недели примерно уходит до создания прототипа. В прототипе у нас обычно 1-2 уровня, ну и вся механика игры работает. А потом если тесты проходит, то полировкой и доводкой занимаются уже другие челы еще недели 3-4.
>>775577 Я бы сделал так наверное: есть ключ у которого есть только идентификатор, который задается в инспекторе, либо в другом классе есть дверь, у которой тоже также есть идентификатор. И метод который берет идентификатор ключа и сравнивает с ключом, если они совпадают, то дверь открывается Хуй знает, может я долбаеб, но в моей голове выглядит норм
>>775613 Неудачником делающим прототипы ГК за 50к в месяц? Блять, да лучше не надо. Я то на свою шарагу устроился даже без собесов и прочего. Просто в чате пиздел в телеге и написали. На ХХ было несколько собесов, но там такие кабанчики, думащие что я буду делать их тестовое на 3 дня рассчитанное. Но если у тебя с этим проблем нет, то можешь попробовать. А вообще, просто сделай резюмехи везде где только можно, социализируйся в деве и думаю найдешь работу. А пока ищешь сделай пару простых ГК игр, подключи сдк и рекламу типа ты еба крут. Думаю ты уже сделаешь больше чем 90% соискателей.
Как натянуть материал на внутренний объект? Я сделал бутылку у которой внутри есть другой объект типа жидкость. Но материал я могу перетащить только на внешний объект, а редактировать материал выделенного внутреннего объекта никак нельзя. Видимо есть какой-то другой способ?
Сап юнитач, суть проблемы, зелёное поле - сгенерированный меш, у которого ВСЕ вершины по y иеют позицию 0. Сами куски дороги - тоже сгенерированы, но у них высота по y по середине - больше нуля. В чём может быть причина по которой идут такие артефакты? Пробовал создать пустой проект где также генерируются эти меши и всё в порядке, наложений нету. Но при переносе - такая срань
Может кто-нибудь посоветовать какой-нибудь хороший бесплатный инструмент для редактирования примитивов прямо в юнити? Надоело заходить в блендер каждый раз, когда нужно сделать треугольник или полукруг
Платиновый вопрос. Как сделать интерфейс или хотябы шрифты самой среды большего размера. На 1440р ломаются глаза. Гуглится только метод менять масштаб винды, что не уперлось.
>>776391 Типа триггер находится в другом скрипте и ты не знаешь как поменять переменную из другого скрипта или что?
Если да, то просто берешь ссылку на скрипт кирилла, либо через инспектор, либо через: "hyinya = gameobjectКрилилл.GetComponent(scriptКирилл);" и потом "hyinya.speed = 1;"
СССССУУУУУУУУУУККААААААААААА Короче, если запустить StartCoroutine(f1) впервые, то в дебаге выдаст "f1 start". А если я потом остановлю корутину StopCoroutine(f1), и запущу снова, то этот дебаг больше не выдаст, то есть, код, который вне while, выполняться не будет. Отныне всегда будет выполняться только тот код, который в while. Можно фиксануть? Блять, три часа думал, почему все так хуево работает. А оно вон оно как оказалось.
Использую DOTween для создания эффекта повреждения. Моделька становится красной и обратно синей. Использую сиквенсы. Не знаю с чем это связано, но если в методах, которые вызывают функции DOTween'a не использовать yield return new WaitForFixedUpdate() и не делать функцию IEnumarator'ом, то переход цветов будет слишком быстрым что ли, обрезанным. При этом у меня есть объекты, на которых я тоже использую переход цветов DOTween'ом и они нормально работают и без WaitForFixedUpdate(). Есть идеи с чем такое поведение может быть связано?
На первом видео - неправильная анимация(без WaitForFixedUpdate) На втором - правильная анимация (с WaitForFixedUpdate)
>>776550 Вообще просто не пробовал, но думал об этом. У меня эффект получения урона может происходить во время любой анимации, а разве можно запустить например поверх анимации атаки анимацию изменения цвета?
Где лучше всего освоить работу с шейдером? Взял курс, начал проходить(на 19 юнити), потом узнал, что все это не работает для следующей версии (20 или 21 какая там).
>>776566 У меня несколько типов врагов, у всех разные геймобджекты и разная иерархия объектов. Тела, которые должны меняться находятся в разных местах. Мне же придётся создавать отдельную анимацию изменения цвета тела на каждого врага, потому что одну анимацию можно привязать только к одному геймобджекту?
Кто-то юзает unity editor под линухом? нормально работает? Много прям критичных багов?
Я тут захотел поиграться с этим вашим юнити, скачал, поставилось, но первый же пример из встроенного в эдитор туториала начал работать всрато - в туториал лейауте написано "выбери объект во вкладке "иерархия"", а этой вкладки нигде нет, лол. Я так понял, что это лейаут какой-то всратый, потому что при переключении на Layout->Default всё появляется и на первый взгляд работает.
>>776616 Ещё раз, в лейауте "туториал" такого окна вообще нет. Даже если я сделаю View->Panel->Hierarchy, то оно ничего не показывает. Ещё пример: в туториале говорят "нажми play" чтобы начать играть. Я нажимаю, начинается музыка, но играть нигде нельзя, потому что кроме туториала ничего перед глазами не видно. При этом если я переключу лейаут в default, то увижу окошко со сценой и при нажатии на play смогу там что-то потыкать.
Я считаю, что "туториал" забагованный на линуксах.
Вот надо локализацию делать - хранить данные в файле .csv, который в папке StreamingAssets. Чтобы добавить новый язык, достаточно открыть файл, и добавить новый столбец, и даже игру заново собирать не нужно. Этот новый язык (берется из первого ряда) появится в dropdown списке.
>>776739 У тебя не метод, а просто описание где хранится локализованный текст. Как он подставляется куда нужно? Как локализуются не текстовые штуки, спрайты например? Как в текст добавить переменную, например Привет {player_name}? И тд и тп.
а как делается смена скелетов при анимации? например у меня есть скелетная анимацию челика который идет вверх, соответственно видна его спина. Потом когда я хочу сделать анимацию хождения вниз, мне нужны уже другие спрайты на другом скелете. Есть какие-то примеры как таким образом аниматор делать?
В данный момент выбираю нишу для развития в сфере геймдева (всегда нравилась эта индустрия). И вот у меня выбор стоит между изучением Unity и изучением Blendera.
Понимаю, что это разное но всё же. Насколько востребованны те же джуны в юнити ? Сколько времени требуется на вкат при хардкор обучении ?
Сегодня после обновы ui интерфейс стал съезжать куда то в сторону, у кого нибудь было? Физически он стоит на месте , но его выделенная рамка(зелёная), будто на треть экрана уехала, и так со всем интерфейсом. Короче эта хрень следует за камерой, а не стоит на месте с физическим интерфейсом, не смертельно, но гемор конечно прибавился в редактирование. Надеюсь пофиксят.
Нужен совет умелого проггера. Наткнулся тут на уроки по состояниям объектов. Создают пустой абстрактный класс, в котором объявляют методы как в монобехэвиор. А описывают эти методы в подклассах для каждого отдельного состояния с оверраид. Потом объект-контроллер, привязанный к объекту переключается, когда надо и выполняет псоответствующие процедуры текущего состояния. Вроде и понятно для чего, и скрипты стройно начинают выглядеть.
Но сам сижу и думаю, насколько целесообразен такой переход в каждом отдельном случае. То, что я делаю через описания состояний, могу также прикрутить парой иф элс и созданием чаилда для своего объекта. Это костыль? Следует себя во всем дисциплинировать или для простых вещей забить?
Или вот еще момент. Будет у объекта скажем несколько состояний. Но есть поведение на апдейте, которое останется единым для них всех. Как с этим быть? Вынести его в объект-контроллер? Тогда нафига создавать все эти классы состояний, раз по мимо них все равно отдельный привязанный к объекту скрипт понадобится. Прописать поведение во все состояния? Выглядит излишне. Дайте советов хороших.
>>776851 нахуй ты кому нужен в юнити без навыков в блендере, это в принципе созависимые вещи. Либо можешь пиздовать за 40к/месяц работать над проектом пердящей тёлки сплошь из купленных ассетов
>>776873 В принципе сам себе уже ответил. То, что обновляло четыре ифа изначально с помощью этих состояний теперь обновляет один иф. Получается обязательная хуйня для объектов с хотя бы двумя разными состояниями.
>>776873 >Нужен совет умелого проггера Программирую 2 месяца, но даже я тебе скажу, что ты какую-то хуйню написал, какие у тебя поведения в апдейте? Паттерн поведения используется для создания, как это не странно, поведения Если ты хочешь в игру добавить в будущем, допустим, выбор расы или класса, какие-нибудь приколы с idle в афк, берсерк-мод и прочее, то закладывай поведения, а если у тебя линейность во всём, то нахуй надо >Создают пустой абстрактный класс насколько я знаю, к состояниям подходят через интерфейсы, а твоё описание больше похоже на дженерик, это другая тема, смотри нормальные уроки, а не майнкрафтеров всяких
>>776895 Глянул, он делает состояние, да, но делать его через абстрактный класс - хреновая затея в данном случае, так как C# не поддерживает множественное наследование, в отличие от других языков. Представь, что у тебя есть транспорт в игре, ты создаешь дженерик (абстрактный класс) Vechicle от которого наследуются разные типы: авто, самолет, ракета, инвалидная коляска и т.д, и потом ты захочешь ещё добавить поведение: транспорт сломан, нет бензина, улучшен...тогда ты начнешь ебаться через костыли и дубли, а нормальный пацан бы сделал состояние через интерфейсы, а потом добавлял их ещё сколько угодно
>>776962 Интерфейс это такой базовый класс, который содержит в себе только информацию о непосредственно классе. Делаешь ты персонажа, начинаешь с интерфейса ICharacter. Персонаж может ходить, стоять и срать. Значит, в интерфейсе должны быть функции Walk, Stand и Shit. Но это пустые объявления функций, без реализации, интерфейс не может содержать реализацию. И если ты унаследуешь от интерфейса класс Character, то среда разработки тебе выбросит ошибку, что у тебя нет явной реализации заявленных функций ходьбы, стояния и сранья. Сам я агитирую за то, что интерфейсы не нужны. Не тот, кто писал тебе до этого.
>>776965 Нихуя не понял, ICharacter имеет функции Walk, Stand и Shit, но они пустые? Допустим я создаю еще два класса и наследуюсь от ICharacter - IErohin и ISychev. В них я переопределяю функции Walk, Stand и Shit? Нахуя тогда нужны пустые интерфейсы в ICharacter если мне один хуй их прописывать у ерохина и сычева отдельно? мимодругойвкатывальщик
>>776968 Даа, но нет. Восьмой шарп? В юнити? >>776969 >я переопределяю Нет, не переопределяешь, просто реализуешь. >один хуй их прописывать Потому что тогда ты будешь обязан закодить их реализацию. Да, можешь просто сделать пустой войд или выбрасывать исключение. Интерфейс это своего рода обязательство, что такие-то функции будут реализованы. Не более. >>776970 Не совсем. Абстрактный класс это же класс, а интерфейс даже объявляется не так.
>>776962 два дженерика невозможны, так как > C# не поддерживает множественное наследование Интерфейсы - это другой уровень абстракции, их может быть много
> Я туго соображаю На каких-то рандомных туториалах давно не уедешь, начни с беглого чтения C# для чайников, потом язык программирования Троелсена зачитывай, потом, если захочешь, Рихтера CRL via C# освой, и, наконец, тонкости Скита, тогда ты, скорее всего, будешь знать язык на уровне мидла
суп. Нужен шарящий за ВР разработчик, чисто для консультации, плачу почасовку. Пару вопросов по XR Interactor Toolkit'у как правильно реализовывать хваты как работать с UI и пару вопросов по Skinned Mesh Render'у
Оставляй контакты, и время в которое удобно будет поговорить.
Посоны, нихуя не пойму, как лучше реализовать. Допустим у меня есть 500 уровней в игре. Перед загрузкой каждого уровня надо вывести какие-то данные этого уровня (количество ходов, время, жизни хз).
Где и как хранить эти данные? 1) Создать к каждому уровню json, а потом, перед загрузкой уровня, парсить его? 2) Создать каждому уровню scriptable objects, а потом подгружать его через Resources.Load? 3) ??? 4) Закешировать 500 переменных с ссылками на на хранящиеся scriptable objects это что-то совсем наркомания
Или я хуйню придумываю и есть более очевидные способы?
И еще вопрос, как лучше сделать эти 500 уровней? 1 уровень = одна сцена? Или 1 сцена и 500 префабов? Что будет лучше с точки зрения размера приложения и производитльности?
Привет Анон, хочу найти решения по инвентарю. Я гуглил, но ситуация разбилась на два лагеря: 1) Говнокод от школьников, которые могут запихнуть цикл в апдейт. 2) И мидл-код, который сложно переваривается и айтем является скриптом.
Про скриптаблобжэктс я разузнал, но не понимаю реализацию допустим экипировки и оружия. Вкатился в гейдев недавно, сам по большей части 3дшник, кодил крайний раз года два назад на плюсах и чистом и немного ООП на жаве ,но концепцию шарпа по сути уловил. С меня тонна нихуя, возможно после нг буду постить инфу или заведу тред.Дропать не собираюсь так, как вчера утвердили диплом и буду ебашить до талого
>>777163 Смотря че ты хочешь делать вообще, гиперказуал или типо 3 в ряд или детализированный 3/2д игрулю. Если каждый лвл отличается по геймдизайну, то 1лвл = 1 сцена. Если ты просто хочешь дрочь уровней устроить и на геймдиз тебе похуй, то можно обойтись процедурной генерацией и все. Я конечно хуй с горы и не разбираюсь, но и ты по сути нихуя не описал какие лвл ты хочешь делать
На плиту жмут два объекта по ОнТриггерСтэи. Если один из них стоит на плите, а второй ливает, то во время ОнТриггерЭкзит плита моргает и снова нажимается. Есть способ убрать моргание?
>>777222 Даже небо, даже аллаха. Словари не сериализуются, то есть ты там что-то можешь покрутить, но оно не сохранится. С Go в скриптейблах только одна проблема, когда загружаешь этот скриптейбл - все Го грузятся в память. Тема интересная на самом деле, но как же долго пилить такие системы.
>>777226 Половину не понял потому что немного прочитал про скриптобжект и я немного дебил, но грубо говоря скриптобжект - это объект БД скрипта (те пишем скрипт с хар-ками, и на основе него создаются скриптобжект) и мы в инвентаре управляем кол-вом и типами этой грубо говоря БД, ссылаясь на скриптобжект и фасуем все в UI. И для условной еды и экипировки надо будет 2 разных скрипта с характеристиками, а в экипе мы ссылаемся на префаб/модельку. И как могу предположить в инвентаре мы ссылаемся на ID шмотки вызываемой из скриптобжект?
>>777229 >пишем скрипт с хар-ками, и на основе него создаются скриптобжект Да. >в инвентаре мы ссылаемся на ID шмотки вызываемой из скриптобжект Ага, только ссылки на скриптобджекты тебе тоже надо куда-то сохранить. Для этого неплохо подойдёт ещё один скриптейбл обджект с массивом ссылок. >Я правильно понял? Да я хуй знает, лол.
>>777232 >Да я хуй знает, лол. Ну значит вроде разобрался >Ага, только ссылки на скриптобджекты тебе тоже надо куда-то сохранить. Для этого неплохо подойдёт ещё один скриптейбл обджект с массивом ссылок. Ну т.е. мы создаем скрипт с датабазой всех обжектов и их айдишников, и в других скриптах с работой айтемов мы обращаемся к этому скрипту с айдиштками обжэектов ? Спасибо тебе анон
>>777236 >мы создаем скрипт Только не скрипт, а скриптейбл обжект >public class SomeData: ScriptableObject Плюс тебе нужен эдитор скрипт, чтобы создать инстанс объекта. Вроде, есть какой-то ещё другой вариант, но я его не помню. Эдитор скрипты работают только из папки эдитора. Ну и потом ещё один скриптейбл с массивом или списком всех Somedata.
>>777237 Слушай, а гайда нема по этой теме как ты организовал все? Вникнуть то я вникну, просто боюсь въебать пару дней на ошибки, ведь я даун ебался с нерабочей кнопкой в меню паузы, хотя надо было просто в местах поиграться с видимостью курсора и время у меня подгорает я решил запилить все таки в определенные рамки. А вот хотя бы на что ориентироваться было бы полезно
>>777230 нахуя оверлап? Ты мог просто создать лист коллайдеров, в онтриггеринтер засовывать в лист, в экзит высовывать, а, если лист становится пустым - то выключать кнопку. Очевидное и не жрущее каждый кадр память решение, в отличие от оверлап
>>777255 Спасибо анон, дошло, что можно stay на enter поменять, чтоб все время не обновляло. А оверлап коллаидер нужен.
Раньше было так: Мне нужно следить за тем, что на плите объект все еще находится. Для этого использую ontriggerstay. Вот только когда два объекта, например игрок и предмет жмут на плиту вместе, когда игрок сходит с плиты, во время экзита она промаргивается на отжатие и снова нажимается оставшимся объектом. Пофиксил это условием (если колладиеров на кнопке == 0) вырубай. Для этого оверлап коллаидер подошел. Моргать перестало.
Сейчас как раз с этим оверлапом можно поменять stay на enter. Без оверлап коллаидера предмет стоит на кнопке, я с нее сходу, и кнопка ввключается.
>>777238 Наверни любой васянский ассет на инвентарь и посмотри как сделан, своруй платных ассетов и разбери их. Лучшие примеры же, можешь и использовать их и когда поймешь, что именно тебя в них не устраивает - напишешь на их основе свое решение. Пока же ты слишком упариваешься в мелочи. мимо
>>777238 > а гайда нема по этой теме В гугле всё есть, очевидно же. >как ты организовал все? В мой шизокод ты точно не вникнешь. Радактор накидан на похуях, есть пара багов. Игровая часть накидана слишком сложно. Я использую атласы спрайтов, асинхронную рантайм загрузку ресурсов, автоматическое подсасывание лодов, новый гуй. По факту самый главный мой скриптейбл выглядит как-то так, как на первом пике, лол. Это "таблица" предметов. На каждый тип предмета создаётся новая таблица, в которую сохраняются уже сами предметы. Все таблицы хранятся в основном скриптейбле.
>>777257 >Спасибо анон, дошло не дошло, видимо. Ты в курсе, что OnTriggerEnter срабатывает вне зависимости от того, есть ли на нём уже кто-то или нет?
1) объявляешь в полях private List<Collider> colliders = new List<Collider>(); 2) OnTriggerEnter - colliders.Add(other); 3) OnTriggerExit - colliders.Remove(other); и здесь же проверка if (colliders.Count == 0) то вырубай, страшна
>>777302 Просто общее понимание что такое моделька, что такое скелетная анимация, как накладываются текстуры и вот это вот всё. Про анимации еще можно почитать, если совсем упарываться то и шейдеры глянуть. мимо
>>777302 Как он и сказал: >>777308 Риги, анимация, UV развертка, текстуры. На счёт шейдеров я бы лучше рекомендовал после освоения азов юнити делать свой первый проект на URP и играться с шейдерами там, т.к. ноды блендера и юнити пока что не дружат
>>777296 Blender - уровень говноконтор которые не могут купить лицуху макса а значит будут платить печеньками и чаем. Лучше брать связку 3ds Max+Maya+сабстанс, теже гайджины в максе делают.
Dotween нужная вещь для простых анимаций для интерфейса например? Все это время анимировал ручками на корутинах, стоит заморачиваться или это блоатваре вонючий?
>>777350 Я в целом говорю, что блендер - уровень говноконтор и школоты на ютубе, но опять же чем тебе стек как гейдев не угодил? Анон попросил грубо говоря, фул список ПО вката в геймдев, не обозначая чем он именно хочет там заниматься. А вобще вопрос размазан как сопля по столу, как именно он хочет вкатиться в гейдев, в офис или хобби. Если первое, какая позиция его интересует и тд. Если второе, то желательно все начиная от ворда и экселя, заканчивая фл студио и кучки vst которые можно прикрутить если цель стоит сделать свое, а не напиздить ассетов/звуков/идей раскидать на одной сцене и выложить в стим свою страшылку-брадилку
>>777361 Речь о вкате в геймдев индустрию под ИНДИ студии. Почему-то у многих геймдев это или инди-говно-конторы или ААА студии. Есть вообще-то варианты и посередине.
Senior Blender может тоже ОЧЕНЬ хорошо зарабатывать.
>>777364 >Речь о вкате в геймдев индустрию под ИНДИ студии. >чтобы через пол года+ можно было вкатиться в геймдев.
Не хочу разводить срач, но я не гадалка и написал выше, что если анон хочет внятно получить вопросы на свои ответы, то конкретики пусть подвезет, тк ответы - палец в небо.
>Senior Blender может тоже ОЧЕНЬ хорошо зарабатывать Да понятное дело, что 3д художник на любом софте получает хорошо. Я лишь намекнул, что если рассматривать профессиональный забег на дальнюю дистанцию, профитнее все же стек выше, плюсом подкрепляю мои субъективные размышления и опыт работы в блендере. Каждый дрочит как он хочет
>>777368 >если рассматривать профессиональный забег >вкатиться Сморозил хуйню, теперь оправдывается. Ты долбаёб, зачем новичку юзать пиратский софт и охуевать от кучи вылетов и, если нет опыта, от вирусни, либо покупать за дохулиард лицензии прог, из которых ему нужно просто понять основы?
Алсо перекат профессионалу с блендера на майю и макс дастся проще, чем обратно, но он в любом случае не займет много времени (месяца 2-4 без напряга)
>>777378 >если рассматривать профессиональный забег на дальнюю дистанцию Ты давай не вырывай слова из контекста. Никто не мешает взять учебную лицуху, или обновлять триал раз в месяц. Алсо перекат юзерам макса/майи вобще не грозит перекат. P.S Свою быдлячесть и маняпроеции лей в бэ
>>777383 Майка, нужна именно для анимации, маск для полигонального моделирования. По сути инструменты есть что там, что там, но зачем копать граблями, если есть лопата
Анон, есть такая хуйня OnTriggerStay(Collider other) С помощью нее я вычленяю item'ы в определенном радиусе. Во первых, гугл не смог мне показать что такое other и как с ними работать полагаю что это коллайдеры???. Меня интересует как можно other передать в другой скрипт и можно ли как то расчленить коллайдеры на массив gameObject'ов? Просто при использовании >if(other.CompareTag("Item") && Input.GetKeyDown(KeyCode.F)) реагируют сразу два объекта, а мне надо на одно нажатие реагирование 1ого объекта.
>>777407 Если тебе нужен коллаидер второго объекта в первом, пиши:
поле типа коллаидера = GameObject.Find("Имя объекта, либо для тега вместо фаинд хуярь FindWithTag").GetComponent<Название компонента, например BoxCollider2D>();
>>777411 Не-не, у меня есть тригерКолайдер персонажа A и 2 объекта с колайдерами обычными B/C и общим тегом "Food". И я задаюсь вопросом что при >if(other.CompareTag("Item") && Input.GetKeyDown(KeyCode.F)) B/C пропадают почти в один момент, а мне бы на одно нажатие 1ин предмет. И второй вопрос как мне из OnTriggerStay, other отправить в другой скрипт;
Запиши из триггер ентера в поле объект, чей триггер ты запустил. А в апдейте по кеикоду дестрой(поле_с_записанным_объектом). На онтриггер экзит стирай поле, а то можно будет с другого конца уровня подобрать.
>>777422 Если в одной куче много предметов лежит, то тогда уже массив по результату он триггер энтера создавай и дестрой(массив_предметов[0]). Каждое нажатие кнопки будет из кучи один собирать.
Я выше когда с кнопкой ебался, мне анон посоветовал list<t> как раз для этого.
>>777423 Думал про ентер, а сейчас до конца допер как это реализовать, спасибо тебе большое Анон!плюсом избавился от Stay который каждый кадр обрабатывался
это ещё что? У тебя у контроллера триггер что ли? подход абсолютно ебанутый. Во-первых, там выше было обсуждение по триггерам, тебе лучше на OntriggerEnter добавлять коллайдеры в список и можно ими манипулировать через обращение по порядковому номеру. Во-вторых, не слушай этого уебана >>777411 пользоваться именами, тегами и прочими строковыми значениями, а так же использовать тяжелыми функциями типа GameObject.Find тем более каждый кадр - путь на рынок труда по вакансиям клининг-менеджеров.
В твоём случае лучшим решением будет создать интерфейс для этих объектов, которыми манипулируются на триггере (например IManipulable), и использовать оператор проверки типа (other is IManipulable) вместо тегов и имён. А вместо OnTriggerStay использовать эвенты через обращение к определённому элементу в листе
>>777437 >это ещё что? У тебя у контроллера триггер что ли? подход абсолютно ебанутый А что плохого что у меня на игроке есть колайдер с тригером? И почему использование проверки по тегу так плохо?в шарпах и юнити библиотеках я вобще новый. У меня стоит задача, что вокруг игрока допустим на расстоянии 2 метров была возможность взять предмет, не наводя мышкой на сам айтем, а просто клац по клаве и предмет в инвентаре если он в области. Я сначала подумал сделать тригер колайдер второй на самих предметах, а потом понял, что если айтемов будет куча, то и лишних колайдеров тоже куча и я решил идти от обратного делать сбор не от айтема, а от персонажа, ведь так у нас будет всего 1ин коллайдер на сбор. Вдобавок как проще реализовать проверку на собираемый айтем-коллайдер, проверить тег строчка же просто смотрит в инспекторе тег и сверяет. Ну а вчера уже под утро решил с подачи анона выше, оптимизировать со Stay в Enter>Exit триггер. Где проеб моей логики или где я проебланил и использую лишнюю память??
>>777458 В самой проверке по тегу ничего плохого, вот только это добавляет мануального контроля и, как следствие, увеличивает вероятность генерации ошибки. Сперва ты по тегам проверяешь, потом корутины и делегаты запускаешь через строковые значения, но вдруг ты, или кто-то переименовывает метод или тег и весь проект летит по пизде, потому что на этапе компиляции никаких ошибок не возникает. Создать тег вот буквально на 5 секунд быстрее, чем пустой интерфейс >>777454 > А что плохого что у меня на игроке есть колайдер с тригером? Ну, если это базовая механика в твоей игре, то, наверное, ничего плохого, вообще сама идея странная. Про ебанутость я о проверках на нажатие клавиши и проверки по тегу одновременно. Ты бы хоть проверку на нажатие первой поставил (читай в чём разница условных операторов от обычных), но в идеале вообще не делать проверок на нажатие в апдейтных методах. Я так понял, ты хочешь организовать сбор предметов в радиусе? Я бы лучше сделал отдельный метод на оверлапсфер с поднятием одного любого предмета, метод бы запускался по нажатию. > Ну а вчера уже под утро решил с подачи анона выше это я и был, то есть тот, который расписывал методику работы с листом
>>777460 >Не делать проверок на нажатие в апдейте С этого места по подробнее. Алсо это относится только к нажатиям или к продолжительно нажатой клавише тоже?
>>777460 По итогу вышло как то так пик1, все работает как мне надо, сейчас думаю прикрутить UI и пойду допиливать остальные части интерфейса. >В самой проверке по тегу ничего плохого, вот только это добавляет мануального контроля и, как следствие, увеличивает вероятность генерации ошибки. Конечно, исключать такой возможности не стоит, но так по сути с любой хуйней тут, где то что-то тыкнул и пиздец, благо я в соло работаю и какие то свои ошибки компиляции записываю, чтобы сразу понять как решить хуйню. > вообще сама идея странная. Хех, ну я думаю на/gd есть более ебанутые идеи, чем подбор вещей в радиусе. >Я так понял, ты хочешь организовать сбор предметов в радиусе? Я бы лучше сделал отдельный метод на оверлапсфер с поднятием одного любого предмета, метод бы запускался по нажатию. Блять я так и знал, что есть аналог RaycastHit, только нагуглить это говно не смог в документации. Но с другой стороны у меня самобытный макакен-код, который я понимаю и не надо даже вектора строить Это
>>777465 >благо я в соло работаю и какие то свои ошибки компиляции записываю Твоё право, я даже не буду тебе врать, у меня не было опыта такого, но я смотрел на ютубе пару роликов по типу "типичные ошибки новичка" и там сотни комментов о том, что строковые значения сломали их инди-проекты и убили мотивацию, поэтому я теги никогда не использую с тех пор
>>777472 >Твоё право Да, буду креститься на то, что уровень моей самоорганизации сопоставим с моим мнением.
>сотни комментов о том, что строковые значения сломали их инди-проекты и убили мотивацию, Немного рефлексии Так это же хорошо, нет переизбытка рынка как с музыкантами или дизайнерами или писателями и тд. Порог вождения особенно Инди огромен и тем самым ценнен. Есть же огромная ЦА, которая играет в индюшатину и отплатит тебе по трудам своим рублем. К слову о "убили мотивацию", я могу сказать только одно, что люди часто путают два вида мотивации "TryToWin" и "DoToWin", это же не рулетка в казино, а ремесло, следственно ты должен этим заниматься не по логике: > Гы-ы-ы, ща сделаю на пирадцких асцетах игру и буду вторым гадзимой или перссоном или диннхоуллл))) А более методично и структурно, имхо
>>777475 согласен полностью, понятно, что ты сразу всему не сможешь научиться и через спотыкания осваиваешь ремесло, а хвататься за каждый совет - не менее губительно, чем долбиться самому о каждую стену, только вот простые и довольно очевидные упрощения не стоит игнорировать, ты просто попробуй хоть раз проверку по компоненту, и ты больше никогда к тегам не захочешь возвращаться
>>777485 если ты его обнуляешь в другом месте, то, видимо, запускаешь корутину в апдейте? В таком случае можешь вообще цикл удалить и оставить только то, что внутри. Видимо, спиздил код и не разбирался как работает?
>>777489 точнее не так, корутина сохраняет все данные, а так как это однопоточное выполнение, то данные каждый раз переопределяются на то, что сохранилось внутри цикла, и т.к. он бесконечный, то твой куренттайм не сбрасывается снаружи
Есть 2д поверхность, на которой надо генерировать партиклы. Сложность в том, что поверхность должна меняться динамически. Грубо говоря, есть прямоугольник с партиклами на весь экран и периодически в случайном месте нужно удалять их. Как быть?
>>777545 Можно через слои, через доп.камеру, или через скрипт удалять, много подходов, но, грубо говоря, из твоего объяснения не понятно что тебе нужно
Пиздец я тут упоролся. Написал как мне казалось простенькую механику логической цепочки. Есть источник и проводники. Пока реализовал все случаи с одиночным включением и отключением, групповым, чтобы можно было замыкать несколькими предметами совместно цепь и разрывать ее в любом месте, накодил такой ебучей лапши, что сам охуел. Без апдейта не обошлось понятное дело. Как включать все предметы, если они рядом друг с другом, а один из них до цепи дотянулся, без апдеита не додумался. Там триггеров уже не происходят.
Короче реквестирую у анона литературы по тому, как структурировать код. Прям для пиздец тупых как я. Кодю за рамками лаб в универе на делфи две недели и даже в принципы ооп вник не до конца еще. Вся эта хрень абстрактная с очень большим трудом усваивается в голове.
Ну и если есть рекомендации, как убрать апдеит и чем заменить, тоже спасибо заранее.
Пиздец! У меня код: Sprite Test = Resources.Load<Sprite>("frame0"); UnityEngine.Debug.Log(Test); UnityEngine.Debug.Log(Test.name); на выходе имею NullReferenceException: Object reference not set to an instance of an object А спрайт вот он родненький в реусурсах лежит. ЧЯДНТ? Уже второй час сижу.
Каким образом можно проверить, что коллаидер соседнего по оверлапу объекта отделился от еще одного соседа? Если известно их конечное количество, то по соседям, но это костыль. Надо циклы в циклах писать. Есть какой-то универсальный метод определить, что одна группа целиком отделилось от второй группы.
Анон, возникла проблема с пушем риджибоди. Толкать предметы я могу если они 1/4 от контроллера, меньше 1/4 не толкаются, а персонаж взбирается. Как пофиксить?
>>777668 Понимаю, как повесить отделение одного объекта. Не понимаю, как задетектить отделение группы произвольного количества объектов. Отлеляется толлко один конкретный объект. При этом состав группы динамический.
Юнитач, помогай. Как обычно импортировал из асепрайта анимацию (получился довольно длинный холст) убрал сглаживание и компрессию , но изображение все равно размытое. Где проебался?
>>777715 Бля, да как вы не поймёте, что ваши абстрактные примеры вообще не понятные. Ну, например, создать динамический список (list) твоих объектов и прописать глашатая с эвентом ListChanged
>>777719 в версиях до 2021 Edit -> Render Pipeline -> Universal Render Pipeline -> Upgrade ... 2021 и выше - Windows -> Rendering -> Rendering Pipline Converter -> ставишь галочку и Convert
>>777797 >Абстрактные Вот есть источник сигнала 1. Я по триггер ентеру с источником присваиваю единицу другому объекту. Теперь объект выдает единицу. И так по цепочке. Если объект отделился от остальных, снова единица на ноль меняется. Когда по одному их "подключаю", "отключаю", все хорошо. Но если от общей цепи отключить группу, то они друг в друге детектят единицу и остаются активны, пока не разъединишь друг от друга. Даже пикрил в пеинте для этого выше зарисовал.
Вот я и не понимаю, как отследить, что от цепи с источником внутри отделилась группа объектов. Среди них источника нет, надо их единицу на ноль обратно поменять. А они "видят", что у соседей единичка по-прежнему, ну и хули продолжаем тоже показывать значит. Я конечно могу рекурсивно циклы в циклах выписывать проверять массив своих соседей и соседей соседей, но это хуйня. А как вот список всех объектов в сцене на отдельные группы объектов у которых коллаидеры пересекаются проверять, есть среди них источник или нет, не могу допереть.
>>777798 Ааа, то есть разрыв цепи нужно предусмотреть? Я бы, как простой вариант, сделал у источника опять же лист объектов (или сразу инстанс айдишников) и метод который принимает сигнал от источника, идентифицирует его порядковый номер в листе по айдишнику и выкидывает из цепи всех выше этого номера, включая его самого.
>>777816 Проблема в том, что порядок предметов меняется. Объект1 подсоединился к Источнику. К Объекту1 - Объект2, Объект 3 и Объект 4, последовательно. При этом игрок может так переместить объекты между собой, что пока они замкнуты Объект3 например сам замкнется Объекту1. А значит порядок подключения уже выдаст ошибку. К примеру, Объект2 вместе с Объектом4 отделятся от подключеных к Источнику Объектов 1 и 3. И по списку отключим Объект2 и все ниже по списку - Объекты 3 и 4. Но Объект3 то еще в цепи. А он отключится.
Я пока единственное, что придумал делать, но не как реализовать - это делить объекты на группы. Соединились больше двух по триггерам - их в список. А дальше проверять каждый из списков на наличие в нем контакта с источником. Но это дохрена циклов в апдейте будет, да и как-то перегруженно все равно, мне не нравится.
Как бы найти способ, чтобы объект узнал, что вся его группа отключилась.
>>777818 тогда всё зависит от механики твоего случая (количество связей, множественность источников и т.д) для линейного варианта - 1 связь на объект, 1 источник, можно обойтись одной булевой переменной, доступной на чтение, и массивом из 2 элементов
добавление связей онколлайдеринтер() { если other имеет нужный интерфейс (IPlugable, например); определяем i элемент массива = other; i = i + 1; если i > 1, i = 0 (переход к 1 элементу); }
в онколлайдерэксит присваиваем вышедшему элементу null
в апдейте постоянно смотрим если оба элемента != null и хотя бы у одного булевая true то и у этого ставим тру. если хотя бы 1 = null - то булевая false
Таким образом имеем Источник (true) - объект 1 (false) Источник (true) - объект 1 (true) - объект 2(false) Источник (true) - объект 1 (true) - объект 2(true) - объект 3(false) Источник (true) - объект 1 (true) - объект 2(true) - объект 3(true) - объект 4(false)
разрываем Источник (true) - объект 1 (true) / объект 2(true) - объект 3(true) - объект 4(false) объект 2 становится false и все по цепочке false за ней
doublePlug - на чтение если обе переменные не null
isPower - если хотя бы у одного из соседей isActive true
isActive - на чтение если у соседей у обои doublePlug true, и своя isPower тоже
(isPower , doublePlug , isActive) Источник (всегда всё true) - объект 1 (true, false, false) Источник - объект 1 (true, true, false) - объект 2(true, false, false) и т.д Источник - объект 1 (true, true, true) - объект 2(true, true, false) - объект 3(true, false, false) и т.д
обрубаем: Источник - объект 1 (true, true, true) / объект 2(true, true, true) - объект 3(true, true, true) - объект 4(true, true, false) - объект 5(true, false, false)
1- кадр Источник - объект 1 (true, false, false) / объект 2(true, false, false) - объект 3(true, true, true) - объект 4(true, true, true) - объект 5(true, false, false)
2 - кадр Источник - объект 1 (true, false, false) / объект 2(true, false, false) - объект 3(true, true, false) - объект 4(true, true, true) - объект 5(true, false, false)
3 - кадр Источник - объект 1 (true, false, false) / объект 2(false, false, false) - объект 3(true, true, false) - объект 4(true, true, true) - объект 5(true, false, false)
4 - кадр Источник - объект 1 (true, false, false) / объект 2(false, false, false) - объект 3(true, true, false) - объект 4(false, true, false) - объект 5(true, false, false)
5 - кадр Источник - объект 1 (true, false, false) / объект 2(false, false, false) - объект 3(false, true, false) - объект 4(false, true, false) - объект 5(false, false, false)
привязываться, как ты понял (свечение или что там у тебя) нужно к isPower
>>766778 (OP) На каком железе анон разрабатывает свои игры на юнити? Хочу купить себе стационарный пека, чтобы серьезно заняться разработкой, но бюджет ограничен.
>>777861 Что-то не понял вот тут. > isPower - если хотя бы у одного из соседей isActive true > Источник - объект 1 (true, true, false) - объект 2(true, false, false) и т.д У объекта 1 isActive false, при этом у объекта 2 isPower true. Я точно правильно понял?
>>777883 Запутался, но концепция правильная, заново
isPower - если хотя бы у одного из соседей isActive true doublePlug - на чтение если обе переменные не null isActive - на чтение если у соседей у обоих doublePlug true, и своя isPower тоже
Источник (true, true, true) - объект 1 (true, false, false) Источник (true, true, true) - объект 1 (true, true, false) - объект 2 (false, false, false) Источник (true, true, true) - объект 1 (true, true, true) - объект 2 (true, true, false) - объект 3 (false, false, false) ... Источник (true, true, true) - объект 1 (true, true, true) - объект 2 (true, true, true) - объект 3 (true, true, true) - объект 4 (true, true, false) - объект 5 (false, false, false)
обрубаем Источник (true, true, true) - объект 1 (true, true, true) / объект 2 (true, true, true) - объект 3 (true, true, true) - объект 4 (true, true, false) - объект 5 (false, false, false)
1: Источник (true, true, true) - объект 1 (true, false, false) / объект 2 (true, false, false) - объект 3 (true, true, true) - объект 4 (true, true, false) - объект 5 (false, false, false) 2: Источник (true, true, true) - объект 1 (true, false, false) / объект 2 (true, false, false) - объект 3 (true, true, false) - объект 4 (false, true, false) - объект 5 (false, false, false) 3: Источник (true, true, true) - объект 1 (true, false, false) / объект 2 (false, false, false) - объект 3 (false, true, false) - объект 4 (false, true, false) - объект 5 (false, false, false) 4: Источник (true, true, true) - объект 1 (true, false, false) / объект 2 (false, false, false) - объект 3 (false, true, false) - объект 4 (false, true, false) - объект 5 (false, false, false)
Получается, что тогда активность (подсветку) нужно сводить к проверке если хотя бы у одного из соседей isPower - true xD
>>777883 Ага! Сделал: Источник - объект 1 (true, true, true) - объект 2(true, false, false) и т.д И заработало как надо.
>>777891 Вовово точно. Я тоже допетрил. Сообщение написал, а отправить не отправил. Огромное спасибо еще раз. Я до вот этой третьей переменной сам не дошел, что нужно ограничить количество связей и сообщать об этом. Очевидно же, что даже в большой куче объектов с только двумя "соседями" объекты просто последовательную цепочку сами выстроят.
>>777891 Жаль только, что если игрок активно таскает эти объекты в запитанном состоянии, то они рискуют терять уже полученные связи. Провожу цепь объектов со второго по четвертый через запитанный объект1, и каждый из них теряет по связи со своим старым соседом. И когда они уже выходят из зоны объекта1, сосед "объекта1" в очередном объекте удаляется и объектик отключается, потому что до этого стер своего первоначального соседа. Когда проводишь группу через запитанный участок,у них doublePlug (остается только один сосед) отрубается после прохождения участка.
А больше связей им делать нельзя, потому что будут в рекурсии друг друга поддерживать. Боль. Завтра попробую еще в апдейт запихнуть присваивание свободной переменной дополнительного объекта. По идее должно пофиксить эту вот "потерю соседа" после прохождения цепи объектов через запитанный участок.
>>777897 Так я и написал, что этот вариант для линейного использования.
В динамике ты можешь тогда юзать не массив, а лист, и добавлять соседей через Add, но тогда нужно ограничение ставить на 2 элемента, либо прописать автосортировку массива при удалении (чтобы неnull всегда был под индексом [0])
Мля, такое чувство будто геймдев это не айти епт. Депутатом легче стать чем джуном. Вакансий кот наплакал, а те что есть с требованиями заоблачными и тестовыми недельными. Да и даже на те вакансии по 40 рыл претендует. Несправедливость бля, что веб мартышки научились за 2 месяца кнопки верстать и уже могут зарабатывать. А тут потеть приходится. Как сложность то сменить на легкую..
>>777966 так потому что все побежали куда, как им кажется попроще, ты почитай местную ветку, анон не знает что такое листы в c#, а уже инди свою пилит. Поэтому, сейчас требования выше, имей простое портфолио (3 в ряд, раннер и что-то по профилю), изучи хотя бы 1 книгу по языку и джун тебе обеспечен. По-хорошему, этого тоже можно за 2 месяца достичь, если планомерно делать
Анончик, я тут задумался вот о чем - все твердят что надо наследовать минимум монобехаверов, даже вон в кефире требуют тестовое задание - писать код без них. То есть все игровые сущности должны быть отвязаны от юнити... и все замечательно - но хоть один монобехавер должен быть
И тут я даже видел красивый код - где есть интерфейсы для всего, эти интерфейсы передаются в общий менеджер, сами они абстрактны и не привязаны к юнити (теоретически можно взять код и заюзать на любом другом шарп движке), с юнити работает только один менеджер...
Один вопрос - разве это не гудобжект?
Почему вообще подход юнити с кучей монобехаверов считают неправильным? Разве это лучший пример черного ящика? Вот например у меня есть гоблин - я просто кидаю его префаб на сцену и все работает. Делают ящера - кидаю его префаб на сцену и все работает.
А когда они наследуются от какого-то интерфейса - их же надо руками привязать к менеджеру, то есть уже лишняя работа, теперь недостаточно просто кинуть префаб, теперь надо еще его привязать к менеджеру. А что самое хреновое, если я захочу взять этого гоблина в другой проект, мне придется туда тянуть и менеджер, а ведь в нем может быть дохрена ненужного мусора.
То есть я вижу подход юнити как раз таки более правильным - а сама идея делать какие либо менеджеры - это убого... Но почему-то все другие считают иначе
Да, допустим есть теория что множество Update снижают производительность - но давайте честно - на каких проектах это может стать проблемой? на клонах ангриберда для андроида?
>>778032 Мне читка шилдта или лекции никаких знаний все равно не дают, как об стенку горох. У меня и в вышке например ООП было, так я нихуя не понимал, че там происходит. А задачи для примеров былы дохрена унылые, потому все лабы мы тупо скатывали.
Другое дело вместо штудирования теории сразу ебашить на практике то, что интересно. Через костыли, ошибки, лапшу и самому уже лезть в справочники, документацию читать по конкретной нужной именно в данный момент тематике. Так хоть какой-то интерес есть. Уже начинаю вникать и понимать по-немногу. Когда игрулька в юнити запускается, я хоть наглядно вижу, че написал, все поля на объекте в паблик вывел и зырю в них. Я не представляю, как эту муть можно изучать в отрыве от интересного практического задания.
>>778025 Ты о чем блин. У меня уже на гите кучу тестовых с разными механиками. Есть еще свои пет проджекты: простая RTS, Тавер-дефенсе, шутер с разрушаемыми объектами и даже репа с где я пытаюсь в архитектуру. Но всем похуй похоже. Что не отклик на вакансию - а сделай нам вот это еба-тестовое плиз. И похуй что там неделю делать, ты главное сделай. А, и не забудь плиз показать свои еба навыки плз, похуй что там геймплея на пару скриптов. Ты главное сделай еще 40 скриптов абстракции над ними, чтобы доказать что ты достоин нашей галеры.
А потом пидары ноют в чатах, что сложно найти разраба и приходится переманивать у других и вообще дефицит. Конечно бля, заниматься джунами то никто не хочет. Хуевая короче ситуация в геймдеве у нас.
>>778033 Когда ты пишешь клон ангриберда соло для андроида, можешь делать как тебе удобно.
Если ты гребешь на галере, то это может быть удобнее по тысячи причин. От написании тестов, уже готовой кодовой базы, единообразия и следования принятому код стайлу и т.д.
>>778033 Тож делал так, потом заебало выебываться перед самим собой без толку и делаю нормально. Но вообще тенденция конечно забавная - люди не доверяют юните и стараются архитектуру максимально отвязывать, чтобы чуть-что сьебать с тонущего корабля без проблем.
>>778033 Короче вскрываю тему. Когда ты создаёшь скрипт - в нём автоматически будет войд старт и войд апдейт. Юнити гарантированно вызовёт эти функции. Ей поебать пустые они или нет. А вызов этих функций гарантированно не бесплатный. Это не причина не использовать апдейты, просто когда их становятся тысячи - это может стать проблемой. Это не миф, но это не так уж и важно. Менеджеры же повсеместно считаются плохим кодом. Но всегда нужно находить компромиссы, верно? Для меня, например, отвязка от монобеха сработала просто идеально. Потому что все мои "гоблины" собираются из кода на лету, на вход нужен просто ГО и ничего больше. А вот теория о том, что можно просто взять свой код и портировать его на другой движок это абсолютная глупость. Ты всё ещё работаешь с апи, используешь библиотеки движка и встроенные компоненты, портирование этого всего потребует переписывания всего кода. Причём чем дальше ты от монобеха - тем сложнее портирование, лол. Как мне портировать маршаллинг байтов из NativeArray в MeshRenderer внутри JobSystem? А никак, за пределами юнити это всё не существует. Максимально правильным для меня лично выглядит код с одним-двумя связующими звеньями между монобехом и твоим кодом, в пределах одной сборки. Если ты не используешь разбиение на сборки, то всё ещё проще.
Припоминая дискуссию о поиске объектов по тегу, имени, типу и ненависть к строковым значениям, годится ли для поиска объекта пользоваться полями скриптбл обжекта? Даже если там только одна характеристика собственно и написана.
Вопрос. Вот я написал вычислительный шейдор на полторы тыщи строк. А есть ли способы структурировать это говно?! Хотя-бы что-то вроде регионов в шарпе. Я заебался открывать закрывать функции и скролить всё это.
Ебусь шарами в гугл. Анон, выручай! Есть у меня кнопка со скриптом прикл1, есть миллион GO под названием слот (i) и скриптом InventorySlot. Каким собачим хуем мне со скрипта InventorySlot пингануть в Кнопку, чтобы присвоить в скрипте Slot нужный GO. Более простым языком: как мне в коде указать референс другому скрипту EatFood.Slot = gameObject
>>778178 Либо через менеджер у которого есть доступ и к скрипту и к объекту, или по поиску/месседжу. Стандартный инвентарь выглядит так -> Есть менеджер который содержит в себе объекты(Клетки) и имеет доступ к ресурсам которые могут быть в этих клетках, и их связывает/развязывает. Сами клетки и объекты друг о друге не знают.
>>778197 >Как на счёт cginclude? увы нет. в том вычислительном шейдоре симулятор карты с водичкой, землёй, атмосферой и осадками лол. там уже под 40 кернелов. заебись прототип налепил. и разделить это между собой не так и просто так как всё это между собой взаимодействует в той или иной степени.
сегодня весь день делил это на три куска плюс пара cginclude чтобы это вообще читать можно было, но теперь это совсем спагетти код.
Ускоряем работу с юнити примерно в сотню раз. Заходим в менеджер пакетов, видим там установленные по умолчанию пакеты райдера, вижуал студио и прочий треш. Сносим нахуй. Заходим в Edit -> Preferences -> External Tools, выбираем в External Script Editor опцию Open by file extension. Не забываем назначить нужному типу файла нужный редактор. У вас там уже выбран нужный софт? Не-не, всё равно выбирайте by file extension. Спорное решение, но может быть полезно. Открываем Edit -> Preferences -> Asset Pipeline, убираем галочку Auto Refresh. Теперь юнити не перекомпилирует скрипты при каждом изменении скрипта, нужно жать контрол+R. Сюда бы прекрасно зашло отключение компиляции при создании нового скрипта, которое должно выключаться галочкой Directory Monitoring, однако она не работает. И напоследок мастхев, о котором все знают. Edit -> Project Settings -> Editor. Скроллим вниз, ставим галочку на Enter Play Mode Options. Галочки на Reload Domain и Reload Scene должны быть сняты. Данные опции пердолят статические переменные, не используйте статические переменные без чёткого понимания, что это такое. Спасибо.
Об assembly definitions. Разбиение кода с разными зонами ответственности на разные сборки это хорошо. Предположим, у нас есть папка с кодом GameWorld, папка Player и папка NetWork, с очевидным наполнением. Создаём в каждой папке файл assembly definition и проставляем зависимости - GameWorld спавнит Player'a, а тот отправляет по сети данные, используя NetWork. Теория - изменение кода только в одной из папок вызовет перекомпиляцию кода только внутри этой сборки. Практика - юнити проходится по цепочке зависимостей вверх и вниз, компиляция занимает больше времени, чем без asmdef. Использование сборок ускорит компиляцию только в том случае, если у вас есть независимые друг от друга цепочки зависимостей с большим количеством кода.
> И напоследок мастхев, о котором все знают. Edit -> Project Settings -> Editor. Скроллим вниз, ставим галочку на Enter Play Mode Options. Галочки на Reload Domain и Reload Scene должны быть сняты. Данные опции пердолят статические переменные, не используйте статические переменные без чёткого понимания, что это такое. Спасибо.
Вот после этого я охуел конечно от скорости запуска сцены, но не понял прикола с статиками, вроде всё ок и у меня там хранятся данные типо денег
>>778234 >И напоследок мастхев, о котором все знают. Edit -> Project Settings -> Editor. Скроллим вниз, ставим галочку на Enter Play Mode Options. Галочки на Reload Domain и Reload Scene должны быть сняты.
Примерно через полчаса работы схватил fatal error, благо привычка спасить ctrl+s/r перед каждым ctrl+p
>>778234 >Теперь юнити не перекомпилирует скрипты при каждом изменении скрипта, нужно жать контрол+R. Вроде для меня актуально, надо будет пробывать. Есть сотня скриптов и работаю с ними на автомате всё время проживая ctrl+s, из-за чего юнька вечно всю перегружает. Они сами перекомпилируются при тестовом запуске в плэй моде? Подводных нету?
>>766778 (OP) >Rust В игре когда сборщик мусора запускается происходит лаг. Разрабы с этим уже несколько лет ничего сделать не могут. Единственное решение это увеличивать размер буффера до максимума и запускать gc вручную перед файтом. Это реально не решаемая проблема заложенная в дизайне движка?
>>778312 Не в движке дело, если мусор не собирать, то у тебя память закончится. Это проблема в разработчиках, слишком много срут в память и забывают подчистить. Автоматическая подчиска срабатывает когда говна уже многовато, потому возможны лаги.
>>778234 >И напоследок мастхев, о котором все знают. Edit -> Project Settings -> Editor. Скроллим вниз, ставим галочку на Enter Play Mode Options. Галочки на Reload Domain и Reload Scene должны быть сняты.
Хуйня, короче. Вылетает и крашится редактор по кд, а жаль
>>778423 Reload Domain, как и сказал анон, сбрасывает статику, тогда как Reload Scene удаляет кэш сцены, поэтому как раз из-за скриптов вероятность вылета минимальная, а вот при работе с геймобжектами и графонием тоби пизда уже после 2-3 запусков без сброса
>>778492 >вот при работе с геймобжектами и графонием Спавнил тысячи го без деспавна, мутил процедурные меши, террейны, навмеши, вольюмы со спецэффектами. С тех, как фича появилась, короче - с тех пор и пользуюсь. Вылеты крайне редки. Вчера, например, включил кеш сервер, но не забил айпишники - посыпались вылеты. Выключил и сразу всё ок. Не в кешах дело, короче, это у анона или проект битый или пизда чему-то.
>>766778 (OP) Сап аноны, может кто разъяснить, что за байда с таймером в юнити?
Я уже не в первый раз сталкиваюсь с тем что таймер ведёт себя не так, как я привык в С#.
Ниже у меня действие - перезарядка, хочу чтобы на неё тратилось около 5 сек По логике я 1. нажимаю на перезарядить 2. запускаю таймер 3. он отсчитывает 5 сек 4. запускает код перезарядки 5. возвращаю время перезарядки
И все довольны
Но этот падла вместо запуска таймера, просто останавливается, каждое нажатие на R он просто отсчитывает время нажатия и останавливаемся и так во всём хочу сделать таймер который ограничивает героя от нажатия взаимодействия, на это когда игрок быстро клацает по E берёт не один патрон, а 2-6 и опять таймер не помогает я как то обходил это через булевые переменные, но это звездец как муторно, запускал таймер в апдейте только тогда, когда срабатывал булевая переменная и отключал так же, но это дикие костыли и я думаю, что, что-то не понимаю в апдейте юнити проясните, если не трудно.
>>778597 Ох ты ж ебаный насрал. Я не думал, что увижу такой хуйни. Ты что-то слышал про корутины и многопоточность? Если нет, то советую отложить пока свою поделку и начать с изучения юнити
>>778604 >то советую отложить пока свою поделку и начать с изучения юнити Ты охуел?
Единственное, что я знаю о многопоточности в юнити это метод Invoke, но это опять же предполагает, что в апдейте мне по умолчанию нужно запустить таймер и он будет постоянно там крутится.
>>778605 Бля анон, тебе бы не юнити подучить, а базовые алгоритмы задрочить, потому що сразу видна логическая ошибка. Таймер у тебя работает при нажатии соответственно он щитает только нажатие, выведи КД в апдейт. Примерная логика такая: start{ coolDawnTimer= 5f;} Update { if(coolDawnTimer < 5f){щитаем таймер КД} if(coolDawnTimer >=5f && "R"){Твоя перезарядка} }
>>778620 Тут собственно и нечего понимать, то что ты настрочил - это перезарядка зажимная: "Ал-я зайжмите на 5секунд R чтобы перезарядиться"мб кому пригодиться, по патрону заряжать . А так, советую обратиться все таки визуализации кода вида блок-схем, потому что ты не догоняешь как ты строишь алгоритм. Плюсом так можно выявлять алгоритмические ошибки в коде
start { coolDawnTimer= 5f;//инициализировали } Update { if(coolDawnTimer < 5f) //С какого он будет сравнивать если как было 5 так и осталось , счётчик ты запускаешь после условия ? { coolDawnTimer+= Time.deltaTime; //щитаем таймер КД } if(coolDawnTimer >=5f && "R") //что здесь вообще происходит, мы должны нажать R и в тоже время таймер должен быть больше 5? Это как вообще? Мне нужно чтобы я нажал на R прошло 5 секунд за которые проигралась анимация и звук и уже после добавились патроны. { Твоя перезарядка } >>778621 Чувак я ценю твой совет, но уроки по информатики я прошёл ещё 26 лет назад и мне кажется я достаточно логично описал, то что хочу реализовать.
>>778635 Я тебе же примерную логику написал, мог бы допереть че к чему. Условно кд который я тебе написал, можно еще хуеву тучу прикрутить типо прыжка или кнопки действия
>логично описал >не смог реализовать Я бы все таки попробовал вспомнить, тем более 26лет прошло
>>778597 Мимо. Это ли не делается отдельным евентом , чтобы потом таймер в апдейте считать? Типа нажал кнопку, сработал эвент, отсчитал 5 секунд и дестройнулся.
>>778647 >Сап аноны, может кто разъяснить, что за байда с таймером в юнити? >Я уже не в первый раз сталкиваюсь с тем что таймер ведёт себя не так, как я привык в С#. Алсо, тут проблема не в самом таймере, а в его реализации. Если ты сам не понял эту ошибку, то без базы тебе будет ой как трудно. Любой нормальный программист тебе скажет, что кодить без задроченных алгоритмов, пустая трата времени, и ты скорее макак, который чето покусочкам собирает но не понимает, что в итоге у него выходит. Проблема у тебя была в том что условие требует только нажатой кнопки в апдейте, то получается у тебя не секундомер анимации получается, а дебаг времени нажатия кнопки.
У меня такой код работает. Правда хз, чому нельзя в for цикле написать WaitForSecondsRealtime(1), чтобы отсчитывать i от 5 до нуля и дебугом выводить таймер. Мб аноны пояснят. Когда в for сую WaitForSecondsRealtime(1), корутина моментально завершается.
public class Reloading : MonoBehaviour { void Update() { if (Input.GetKeyDown(KeyCode.R)) { StartCoroutine("Reload"); } }
>>778649 >то получается у тебя не секундомер анимации получается, а дебаг времени нажатия кнопки.
Пчел, ну чего ты, я же сам об этом написал >>778597 >этот падла вместо запуска таймера, просто останавливается, каждое нажатие на R он просто отсчитывает время нажатия и останавливаемся
>>778641 А не запустит ли эта хуйня бесконечное число корутин? Или упадёт с ошибкой, мол, корутина уже бежит. Сам корутины не юзаю, слишком неудобные, просто спрашиваю. Сам бы такую хуйню реализовывал таймпштампами и стейт машиной.
>>778668 >>778649 >>778648 >>778647 >>778641 Господа спасибо за помощь, попытку. Но самый короткий и приемлемый для меня вариант оказался ниже. >>778659 Пчел ну коман, не включай учителя информатики
>>778678 >Я уже нашёл решение, но ещё раз хочу попробовать твой алгоритм. Там суть в том что таймер который нужен - это первый if. Так ты можешь к нему прикрутить еще действия, помимо перезарядки, по такому же принципу. Как по мне самое простое и логичное решение
Кстати парни ещё вопрос, скорее по оптимизации, насколько сильно загружает оперативку пк всевозможные таймеры? У меня на выстрел постоянно тикает таймер который отделяет по времени выстрелы, ну чтобы при нажатии игрок не высирал линии из пуль, насколько это плохо?
>>778694 Чел ну не работает твой алгоритм, я и в игре запускал и в отдельном скрипте, не работает он, просто считает до пяти и всё. Ты видишь на консоле что он считает время, но на самом деле он просто отсчитывает 5 секунд ты нажимаешь на кнопку он мгновенно совершает действие и опять отсчитывает 5 секунд. Что бы теоретически он стал работать нужно первый блок засунуть внутрь второго, но вы здесь все меня уже обсосали за это, так что я опять даже пробовать не стану. Без обид, спасибо за попытку помочь.
>>778710 Что "например"? Юнити так работает. Каждый апдейт берёт каждую корутину в основном потоке и проверяет, прошло ли нужное количество времени. Если прошло - запускает код. Если нет, то нет. Это не многопоточность, это однопоточность.
Очередной тупой вопрос врывается в тред. Вот есть у меня например объекты. Какие-то из них деревянные, какие-то металлические. Я мог бы создать class Things : ScriptableObject, туда запузырить поле material, создать два ассета Metal, Wood c соответствующими значениями material. И в монобехавиор скриптах в этих геимобжектах собственно создать объект класса Things thing= new Things(); выбрать туда нужный ассет. Потом ссылаться в других скриптах на это и так далее использовать как хочу. Писать GetComponent<имя скрипта>().thing.
А почему просто нельзя создать Монобехавиор скрипт, привязать к объекту(это ж в любом случае придется делать), назвать его для металлического предмета Metal, а для деревяшки Wood. В скриптах просто писать GetComponent<Wood>().
Что-то мне подсказывает, я нихуя не понимаю как люди используют эти скриптабл обжекты, определяя игровык объекты по параметрам. По сути мне нужно, чтобы скрипт определил, что мы столкнулись с Metal или наоборот Wood, и тогда начинаем исполнять код.
>>778724 То есть, когда я пытаюсь определить, какой например объект вошел в мой коллижнентер, мне нужно просто добавлять к объектам отдельные компаненты. И каждый компонент - пустой монобехавиор. Допустим скрипты Тяжелый : монобехавиор и Проводник : монобехавиор будут пустыми. И нужны только как компоненты с названиями. Из других скриптов буду проверять если геткомпонент<Тяжелый>, то пошла какая-то хуйня. Так? На каждое свойство отдельный скриптик создавать. Или есть альтернатива?
>>778727 Если бы у тебя был ецс, то я бы сказал "да, охуенно, делай так". Но раз у тебя монобех, боже упаси тебя делать так. Посмотри в сторону енумов, так можно просто парой интов задать все свойства. Type.heavy = 0 и так далее. >public enum Type { heavy, light, shitty };
>>778720 Не очень понял, вобще о чем ты говоришь, но попробую высрать свои 5 копеек. SO - такая абстрактная хуйня, которой ты можешь классифицировать предметы между собой типо: оружие/щиты/еда и тд те у тебя будет 3 типа SO с разными хар-ми и из этих типов ты можешь создать еще отдельные SO с различными хар-ками типо сколько защиты у щита. К сути. Как я понял ты хочешь описать столкновение или что то в этом духе металлических и деревянных объектов что по сути 3 скрипта минимум. Используя SO ты можешь написать один скрипт, просто в начале скрипта обраещаешься к свойствам SO объектов, берешь их и работаешь. Ну как то так скорее всего я ясности не внес
>>778730 Все круто, но мне ж все равно нужен отдельный монобех, привязанный к объекту. Зачем проверять if (other.gameObject.GetComponent<имя_скрипта>.type.shitty), если я сразу могу написать other.gameObject.GetComponent<shitty>. А к самому шитти объекту приклеить пустой sitty : MonoBehaviour.
>>778736 Не получится написать один скрипт. Потому что Металлические предметы взаимодействуют с одними объектами, магнитами например, а Дерервяшки с источниками огня. То есть уже как минимум будет два отдельных скрипта на притягивание магнитом Металлического и поджигания источником огня Деревянного.
>>778740 > Потому что Металлические предметы взаимодействуют с одними объектами, магнитами например, а Дерервяшки с источниками огня. Тем более. Берешь пишешь скрипт на взаимодействие типов айтемов магнит с металом и тд друг сдругом, и присваиваешь SO в этом скрипте. Далее в скрипте берешь св-ва SO тип/сила че угодно, и по типу айтема проворачиваешь свои действия
Коммент у этому коду: >>778641 Если ты хочешь, чтобы при запуске корутина выполнялась заново, то надо в параметр надо передавать строку, а не функцию, вот так StartCoroutine("Reloading") StopCoroutine("Reloading")
Не могу блять этим не поделиться, а то я на этом такую собаку съел, анону не пожелаешь.
Например, есть: IEnumerator Kek() { yeld return new WaitForSecinds(5): print(перезаряжаю) yeld return new WaitForSecinds(3): print(сру) yeld return new WaitForSecinds(1): print(умираю) }
Вот как это будет, если передать функцию, а не строку: StartCoroutine (Reloading()) // Через 5 сек выдаст "перезаряжаю" StopCoroutine (Reloading ()) StartCoroutine (Reloading ()) // Выдаст сру, хотя хотелось бы, чтобы весь код начал выполняться сначала, то есть, чтоб выпадало "перезаряжаю".
Впрочем, иногда реально нужно, чтобы код продолжался, но у меня такой ситуации ещё не было.
Бесит, что вся логика зависит в зависимости от того, что ты передал, строку или функцию. Хуйня, разрабы дебилы. Сделали бы строго, чтобы передавать можно было только что-то одно. А вторым параметрам сделали бы флаг, который отвечает за то, что делать при запуске корутины: продолжать с того места, где она остановилась, или начать выполнять код с нуля.
>>778740 Ты мыслишь узко. Мысли шире. Тебе не нужен скрипт, привязанный к геймобъекту, если у тебя будет геймобъект, привязанный к скрипту. >if (other.gameObject.GetComponent<имя_скрипта>.type.shitty), если я сразу могу написать other.gameObject.GetComponent<shitty> Потому что ты можешь сделать сразу > switch (type) > { > case type.wood: > burn(); > case type.metal: > NotBurn() > break; >}
>>778772 Не понял, что за история? В чем тут трабла? Только не говори, что если установить setActive(false) то все его компоненты все равно рабочие, в смысле, выполняются
>>778774 История в том, что в одном случае это метод, а в другом случае свойство компанента. Я постоянно путаю, че в каком случае писать. Почему нельзя было сделать активацию и деактивацию компанентов тоже методом, как с геимобжектами? Ну или свойство enabled геимобжектам запилить. В инспекторе они и те и те галочками включаются.
Сап двач, подскажите зелёному. Каким образом вызывается метод Start или прочие мною написанные методы, если они нон-статик и экземпляры класса я не создаю? Правильно ли я понимаю, что Юнити сама создаёт экземпляры класса и сама вызывает эти методы через объекты? И если так, как я могу пощупать эти экземпляры? Или я дурашка и то, что я навешиваю скрипт на объект - это как бы уже есть экземпляр этого класса? Тогда нихуя не понятно как работает статика, если мне надо для её использования навесить на объект, что уже не будет статикой.
>>778785 Я тоже зеленый и делаю так. В скрипте класса monobehaviour, что в объекте привязан создаю объект класса, в котором содержится нужный мне метод. И через на объект класса вызываю. Но если надо по-другому, аноны отпишут.
>>778788 Ты вопроса немного не понял. Например создаёт дефолт скрипт. В нём есть стандартный не статический класс и не статический метод Start. Пишем в Start Debug.Log("Test"). Навешиваем на объект. Какого хуя мы увидим текст, если у нас не статический метод, который нигде не вызывается нами?
>>778773 >А как мне вызывать сам burn() Так я код написал, алло. >Есть способ следить за коллаидерами Магические методы типа OnCollisionEnter можно ловить только через монобех. >>778785 >Юнити сама создаёт экземпляры класса Какие, в пизду, экземпляры? Ты класс создал, который скрипт-монобех. Юнити, по сути, рефлексией ебошит, находит все функции по имени и составляет списки. >как работает статика, если мне надо для её использования навесить на объект Так не нужно же. Или ты про статические переменные? Это другое. А статик класс просто создал и никуда не навешиваешь.
>>778797 Если все равно монобехи нужны, не проще ли прямо в них писать burn(), notburn() и другие методы. Я просто тупой и никак не могу понять преимущество перечислений.
Вот у меня есть условный wood : monobehaviour В нем метод горения описан, а вызывается на коллижн ентер, если other имеет компонент firesetter допустим. Так вот этот firesetter просто пустой монобех, который как свойство прикреплен к геим обжекту источнику огня. Что нужно сделать, чтобы заменить это на перечисления? Каким образом я могу навесить на источники огня (разные объекты) свойство firesetter, хранящееся в качестве элемента перечисления? Если определять источник огня будет wood : monobehaviour через геткомпонент монобеха источника огня во время коллижена. В каком месте источника огня будет храниться значение перечисления type.firesetter? Раз уж заменить обычный firesetter : monobehaviour на элемент перечисления?
>>778803 Дохуя компонентов это неудобно, это медленно, это хуёво кодировать, сам геткомпонент работает относительно медленно, ты хуй когда сможешь предсказать в каком порядке вызовется апдейт на одном из тысячи твоих компонентов. Короче, залупа.
>>778844 Да я согласен, что залупа, а как делоть то? Вот нужно отследить, что два объекта с определенными свойствами пересеклись коллаидерами. Как это детектить, кроме как в их внутренних монобехэвиорах?
>>778857 Я правильно понял, что абсолютно у всех объектов (в том числе управляемого игроком) должен быть ОДИН одинаковый монобех, который выполняет стандартные старт, апдеит, колижн/триггер-ентер/екзит и прочий стаф? А расписывать все поведение нужно в куче других скриптов и интерфейсов, которые будут подменять значение каждого конкретного метода(старт апдеит и т д) в зависимости от владельца монобеха и других владельцев этого монобеха при взаимодействии объект-объект или объект-игрок.
>>778900 Да, нужно. Однопоточные игры из 90х до сих пор тормозят на разных 90000000999990000kkk. Гугли Job system, для их использования не требуется ецс, ты можешь работать с обычными gameobject. При этом многое джобсы выполняются в мейн треде, лол. И если будешь юзать джобсы, забудь про группировку трансформов по родителям, вываливай всё в разных родителей, так работает быстрее.
А если кратко, что такое многопоточность? Можно распределить разные задачи на несколько потоков? Типа один поток ищет пути, другой двигает объекты? У меня например на процессоре 6 ядер 6 поток. Значит, мне можно использовать 6 потоков?
>>778936 >Типа один поток ищет пути, другой двигает объекты? да, но не так тупо, 1 поток загружает тяжёлый объект (след.уровень или кат.сцену), а второй позволяет продолжать игру. Деление взаимосвязанных вещей по потокам (путь зависит от положения объектов) приведёт к ошибкам, так как значения переменных не будут совпадать
>>779006 Так инди говно тормозит же. Конечно, инди даунам похуй, а вот игроки страдают. Хотя в арме тоже лоу фпс, не знал, что она умеет в мультитрединг.
Поздравьте долбоеба. За ебучий месяц наконец-то допер, как оставить на все игровые объекты один монобех со ссылкой на скриптабл объект ассет. В скриптабл объект расписаны, для каких объектов, атрибутов, состояний какие методы исполнять. Спасибо анону >>778857. А сами методы хранятся в отдельных классах каждого конкретного атрибута, объекта или состояния. И этот монобех теперь нужно запузырить на любой предмет сцены, чтобы он по своему скриптабл объект ассету сориентировался, что ему делать или как с ним взаимодействовать остальным.
аноны, есть ли реальные цифры по уровню ЗП разработчика Unity? Хочу сменить профессию и вроде даётся всё легко-понятно и душа лежит, но я продаю табуретки и пержу в них за 120-180 к/мес, можно ли надеяться на дроп в ближайшем будущем?
>>779131 да в том то и дело, что заебало. В принципе, есть бюджет чтобы полгода-год сидеть дома и заниматься только разработкой, поэтому хочу уволиться с расчетом трудоустройства хотя бы джуном до наступления голодной смерти, мне бы понять на что надеяться в ДС2, потому что разброс от 40 до 200 т.р по hh.ru Устраивался ли кто-то недавно, или шерстил рынок?
На бесплатной версии нельзя снизить прозрачности меньше 0.5 и убрать лого, больше никаких ограничений. Логотипов можешь ебашить сколько хочешь, после юнитековского.
>>766778 (OP) Попрозили по ТЗ сделать 2д-проект типа флэппи бёрд. Считается ли 2.5D-игра за 2D? И стоит ли такое делать? Или запилить хуйню с примитивами - и меня возьмут?
>>779128 В начале скорее всего будешь джуном за - от 0руб до 20к. Далее как повезёт, но первое время доход будет около 0, пол года-год. При условии что будешь ебашить чуть ли не 24/7.
>>779169 >от 0руб до 20к может спросил не так, но я не вкатываться собираюсь, вполне шарю по паттернам и архитектуре, хочу через месяц ЕЦС начать осваивать. Мне просто интересен уровень ЗП, потому что пиздец скачет. Бывает ли реально у мидла 150к или там максимум 60?
>>779243 Так сразу бы написал. Конечно если шаришь можешь изи делать под сотку, до 200 уже сложнее т.к вакантные места заняты и с улицы без портфеля не берут, ну и выше 300 уже сам понимаешь сеньёры помидоры проекта, ну там больше командование чем писяконье кода.
Чисто в теории, если у меня спиздят исходники и опубликуют игру от своего имени, но перед этим я в жопе какого-нибудь скрипта запрячу создание константы с своим именем и т.д и т.п и потом игру каким-нибудь анализатором прочекать на наличие этой константы по типу иды про, смогут ли мне помочь и из стора выпилить пидора?
На видео пытался показать, что при ресайзе окна по ширине у камеры расширяется..назовем это область видимости, НО при увеличении окна по высоте приводит к тому, что все объекты как бы приближаются, а при уменьшении отдаляются.
Как сделать так, чтобы камера при ресайзе по высоте вела себя так же, как и при ресайзе по ширине? Ищу такое, чтобы можно было настраивать размер камеры как по ширине, так и по высоте. В юнити это настраивается одной переменной orthographicSize, а я хочу, шобы не одна переменная, а две...
Вот есть в юнити функциональность serializefield на публичных полях или со специальной пометкой в монобехе. Очень удобно дебагать. Но я пишу все взаимодействие в отдельных классах, а потому в монобехи самих объектов никакой инфы не вывожу. Мусорить временной дебажной инфой не хочется. Очевидный выход следить за происходящим - писать вывод в консоль прямо в методе класса. Есть ли более удобный способ выводить нужные мне данные например с содержанием списков, массивов, логических переменных и прочих значений, чем в дебуг лог в консоль писать. Пока в голову пришел только способ отдельно в монобехе создавать ссылки на поля класса и потом удалять и по окончании отладки. Может я че упускаю и поудобнее инструменты есть.
Пацаны, как в юнити делать то что на шебмке? Это из констракта объект лист. Я нашел только scroll view и для каждой ячейки объект текст создавать, другого пути нет? С текстами если тыщ 10 создать уже лагает. Еще видел скрипт ListView, но это кажется только для редактора
>>779285 Анон, подскажи, как можно в if проверить, что у меня UI-кнопка в сцене нажимается непосредственно перед вызовом метода? Хочу сделать так, чтобы игру можно было начинать как с пробела, так и с кнопки этой, а она ничего не делает, кроме того что выводит лог в консоль.
>>779285 Мне кажется мне как раз не нужна адаптивность, я хочу чтобы любой объект в окне оставался одного размера, в случае с юнити при смене размера камера приближает/отдаляет, я не хочу этого...
>>779293 а, я сразу не прочитал что ты написал, подумал, ты страдаешь от того, что объекты в камеру не влезают, хз как полностью решить задачу, ты можешь сделать камеру физической и в настройках Gate Fit указать Fill, отдаление будет, но не такое >>779292 эм, вынести прыжок в отдельный метод и указать кнопке его выполнение
>>779305 а ты сам смотрел? он при нажатии прыжка вызывает метод на кнопке и отдельно задаёт какие-то параметры, тогда как это должны быть ВСЁ 1 метод и в Update должно стоять if (..."Jump") {JumpYoba();}, точно так же как и на кнопке отдельно указан JumpYoba, а тут какая-то хуй пойми солянка
>>779334 Не городи велосипеды, не можешь сам нормально камерой управлять как хочешь - делай через ассеты, как и все юнити разработчиикc (например Cinemachine).
>>779433 В настройках проекта ставь вырезку и желательно оптимизатор с++, и сверху бустер по полной. В конечном билде не будет ничего что не используется в игре.
Как научиться писать скрипты через ивенты и построить на этом архитектуру? Заебало писать говнокод с кучей связей и прочей ебалы, а по-другому не умею.
>>779448 Ага, пиздец простой вариант в чужом говнокоде копаться
>>779445 брать и писать, блядь, что за вопрос? юзай туториалы на ютубе, создай 20 ГО, свяжи их через эвенты, пиши на всю хуйню через делегаты, через экшоны, пару дней и ты на коне
>>779452 >Ага, пиздец простой вариант в чужом говнокоде копаться Там был вопрос о структуре и её выстраивание, а не о говнокоде. О картине в целом так сказать, и для этого как нельзя лучше подходит просмотр уже готовой игры, а именно её проекта. Если не понимаешь о чём речь, не встревай.
Как адекватно менять положение модельки персонажа через инверсивную кинематику тягая его за голову?
Пытаюсь сделать что-то ВР-ориентированное. Сделал стандартный гуманойдный риг с инверсивной кинематикой. Руки вроде трекаются без особых проблем (хотя хз что делать с длиной, как подгонять модель под длину рук разных игроков).
А вот с головой и туловищем проблемы, как быть с приседанием?Блендить переход в анимацию сидения на кортах, когда HMD опустится ниже установленной высоты или есть более элегантные и реалистичные решения?
Анон, я знаю ты очень умный. В игровых уровнях собираются однотипные коллектаблсы и ведется их общий счет. Нужно, чтобы при загрузке сцены проверялось, если коллектблс уже был собран, отключить его. Добавлять каждому коллектаблсу индекс в монобехе вручную и потом проверять массив этих индексов конечно работать будет, но как-то неудобно. Есть изящный способ такое реализовать иначе?
>>779470 Так-то это всё бесплатные ассеты из интернетов. И даже анимации. Уже 15 строк в файле кредитсов, лол. Деваха только, походу, пизженная из какой-то игры и выложена на сток, но я потом переделаю. Может быть.
>>779519 Потому что анимация ног от какого-то спецназера была, а слой анимации рук отключён. Потому я и проигрывал. Сейчас вот охуеваю с ротейшонов, хуй поймёшь, как пистолет ориентировать, чтобы он был, как надо. Как не надо получается, а как надо - не получается.
>>779641 Пытался на паре популярных фреймворках, слишком муторно и сложно когда становится много зависимостей и механик. Как в одиночной игре, но помноженной на х* сложность. Но я делал рпг+один сервер. Если делать кооп например через облако по типу локальных комнат, и простую по механикам игру, думаю не сложно.
>>779622 лол ну собери их в один массив в начале, присвой им индекс например исходя из их позиции в мире и веди список собранных.
но лично я бы просто сделал в юнити редактор который бы на указанных в этом редакторе точках сам размещал хуйню и вёл учёт этих индексов чтобы ничто никогда не перепуталось.
>>779657 Когда делал стимовские ачивки и карточки, то чекал все доки, и разницы между другими фраемворками не заметил, везде либо предоставляется хостинг с комнатами, или же сам ебёшься серверами.
>>778605 >Ты охуел? Да, и? >>779125 Корутины у него в юнити многопточные, охуеть просто. Совсем далбаэб, да? Это ты почему-то в своих фантазиях решил увязать корутины с многопоточностью? Перечитай ещё раз мой пост, дядь
>>779667 >Ты что-то слышал про корутины и многопоточность? Пиши внятней тогда, хлебушек. Я лично тут вижу очевидную связь в том как ты построил предложение и браваду ньюфага который советует другому ньюфагу выстрелить себе в ногу. Многопоточность это настолько глубокая жопа, что лезть туда без большой необходимости не надо и не стоит даже думать и упоминать о ней.
Так, зарегался на юнити, уже скачиваю. Хочу запилить что-то вроде гостраннера, только быстрее чем та ебаная черепаха. На графоуни не дрочу, но насколько хуже графон юнити хуже уе4 в котором и был сделан раннер, и насколько сильно с ним придется ебаться в юнити?
>>779692 >Пиши внятней тогда, хлебушек. Сорян, я не обязан за твою глупость отвечать.Если бы я написал про "синие и чёрные джинсы", то ты бы за полосатыми полез в интернет? Если бы я написал "асинхронность и многопоточность", то ты бы вообще умом тронулся? >Многопоточность это настолько глубокая жопа Ясно, для тебя многопоточность это уже сложно. Понял. Удачи тебе, хуле
>>779704 >для тебя многопоточность это уже сложно Ну да, как только вылазишь из тестовых проектов и пытаешься построить нормальную архитектуру для полноценной игры, все превращается в ад. При чем не всегда и не для всех случаев дающий хоть какую-то пользу, а не просто кучу геморроя. В 95% инди проектов это оверхед.
С тобой тоже все ясно, восторженный вкатывальщик. Попробуй релизнуть хоть одну игру для начала.
>>779697 В гугле забанили? Ищешь нужный ассет и ищешь его со словом "скачать".
Еще можешь по гитхабу искать, многие не заморачиваются и не прописывают плагины в .гитигнор, оно попадает на гит - его удаляют, но оно остается в истории коммитов.
Как реализовать поворт персонажа через нажатие на экран, чтобы поворачивался в сторону тапа? При использовании кода с первого пика после нажатия перса разворачивает левее, потом почти не реагирует на нажатия. Скрипт привязан к выделенному чару на втором пике. Обязательно нужно юзать raycast?
>>779735 Если ты миллионы начал зарабатывать, твою игру могут декомпилировать и найти доказательство того что ты спиздил часть кодой базы и у тебя нет на нее нужной лицензии. В любом остальном случае всем похуй.
К слову о перемещении. Портанул свою поделку на андроид и обнаружил какой-то недостаток плавности. Замерив фпс, понял, что дело не в нем. Сейчас игрок передвигается по полю через изменение параметра ригидбоди.велосити. Есть ли какие-то еще способы двигать игрока плавно, не мешая физике столкновений?
>>779781 Гм а есть принципиальная разница между аддфорсом2д и обычным? В 2д нет режимов ускорения и скорости. Но я ж могу просто 0 по зету вписать и обычный использовать.
>>779780 Уже перемещаю через addforce, на компе все плавно. Ставлю лок 60, плавно. На планшете плавности нет, хотя фпс мониторы показывают 60 кадров. От чего так может быть.
>>779839 Не может такого быть, если физических объектов не слишком много. Скорее накрутил с эффектами и поспроцессингом так, что не вывозит. Попробуй в чистом проекте реализовать и тоже количество физичных объектов и затести перемещение.
>>779851 Пост-процессинг вообще не делал, там голый прототип игромеха. Есть какие-то дефолтные нагружные настройки? В Quality поставил медиум, Физических объектов тоже неособо, 5-10 коллаидеров и ригидбоди на сцене. Velocity Iterations с 8 до 4 снизил. Стало лучше, но какие-то микрофризы проскакивают по ощущению. Где еще подкрутить?
>>779710 Да там один скам с левыми ссылками, 10 переходами по рекламным банерам где нужно решать капчу 3-4 раза, ждать 20-120 секунд на каждой. А по итогу попадаешь на платный файлообменник с которого скачать можно только заплатив за прем.акк. Нашел только один сайт где была бесплатная опция скачивания. Но после всего этого ада с порнобанерами и скачки 140 мегабайт на черепашьей скорости за 2 часа .unitypackage оказался битым и не распознается даже унпакером.
Есть вещи, которые мне не дано понять. Вот скачет на планшете фреймрейт между 60 и 30. Видно же, что не в производительности дело. Все холодное, частоты низкие, оверлеи летают, а игра тормозит. Ебнул на рандоме fixed dpi 500. Все летает. Сука че за хуйня блять.
>>779865 Убрал fixed dpi, выставил ультра пресет, стандартную физику, все равно все летает... Я ж пришел к тому, с чего начинал. Хуле оно лагало то тогда...
>>779852 Самый простой способ это профайлером посмотреть что кушает, и от этого отталкиваться. Если голая меха, то либо где-то лупы, или же тяжёлые вычисления каждый кадр.
>>779853 В настройках террэйна есть строчка дальности видимости травы/деревьев/объектов, по умолчанию вроде там 300 или 100, вот пока в редакторе выкручиваешь на макс 5к.
>>779856 Если сохранил сцену ctrl+S, то всё должно остаться независимо от того что эта за сцена. Посмотри по самим сценам, скорее всего открыл не ту.
>>779879 Дальность у террэйна травы, либо же качество травы, при постановки в 0 трава не будет отображаться, но она есть.
>>779881 Клиппинг камеры, смотри в настройках верху сцены там кнопка, по умолчанию 0.3 или около того. Второй вариант клиппинг в самой камере, в её нстройках филд ов вью.
>>779884 >Профайлером Так в том то и дело, что нихуя не поменял. В настройках поставил fixed dpi и заработало, убрал. Все еще работает. А профайлером я только скачки сборщика мусора увидел, больше ничего не просаживает. Рандом какой-то. Вроде нихуя не сделал, а фпс сам ровным стал в итоге.
>>779891 >Рандом какой-то Запомни, в программирование нету рандома, это не магия, всё работает строго по алгоритмам. Сложность заключается лишь в понимание и держание в голове всех возможных связей что, на что влияет.
>>779893 Чтобы делать горы и впадины в юнити есть несколько способов. Самый простой - Это Дефолтную высоту ставить высокую, и от неё плясать. По сложнее - Комбинировать несколько террэйнов с высотами и кастом смежей.
>>779898 Ничего, что я с позволения "напрограммировал" на производительность не влияет, экспериментально подтверждено уже. А что там в внутри у юньки происходит, мне все равно не узнать. Но сам факт. По какой-то причине фпс перестал быть рваным в один прекрасный момент.
>>779899 Ставишь нужную высоту, она идёт от 1 до твоих значений. В зависимости от предпочтений делаешь плато, как основу, к примеру от 500 это 250 в обе стороны.
>>779902 Я тебя уверяю, нету не магии, не волшебных свойств юнити. Причины могут быть там куда ты даже не заглядывал, или не знаешь. Если так уверен в своей правоте, просто отдай проект на аутсорс, и тебе буквально за пару тысяч деревянных найдут косяк. Еще раз - Программирование не магия, всё строго по алгоритмам, но из-за не знания или не опытности ты просто физически можешь всё не знать или не понимать.
>>779903 >Ставишь нужную высоту, она идёт от 1 до твоих значений. В зависимости от предпочтений делаешь плато, как основу, к примеру от 500 это 250 в обе стороны. У меня уже есть terrain и мне надо как-то его продавить. Я уже менял height для террейна и это нихера не помогло.
В любом случае, мой проект крашнулся и теперь не открывается. И тут я узнал, что юнити не делает автоматические бекапные сейвы. Охуенно.
>>779910 Посмотрел. Как менять карту высот для существующего террейна - не нашел, если не считать загружаемых из raw-картинок карт высот (что для меня нерелейтед).
Смотри. Если тебе надо допустим поднять текущий террэйн, но не изменяя его, просто добавить высоты, ты пользуешь стампом. Зажимая shift ты выделенную область поднимаешь, тем самым как бы копируя её. Посмотри видео по этой теме, куда проще и понятнее будет.
>>779913 Ну кистью работать я умею. Я думал, что есть какой-то параметр, который можно изменить в настройках, а не просто кисточкой поводить, создав возвышенность на всем террейне.
>>779901 Ну напиши скрипт, который в цикле пройдётся по твоей карте высот и поменяет значения, я хуй знает. А лучше в программе, откуда равку экспортируешь, всё настрой, как надо.
тыкал свой солвер для жидкостей/газов с давлением. неожиданно оно само организовалось без всякого инпута в какой-то паттерн а потом взорвалось! хуй знает что поизошло но мне понравилось! очень интересно такое интерпретировать.
>>779896 лол что ты делаешь карта высот локальная для земели. я даже не уверен есть ли в текущей земле кнопка для поднимания или опускания её целиком. https://pastebin.com/7StAVVU8 на сделай себе C# скрипт TerrainManipulator, скопипасти туда это, повесь его на землю тогда сможешь вводить значение (желательно в пределах единицы) и жать кнопку чтобы прибавить или убавить эту высоту с земли.
>>779928 э забыл убрать CanEditMultipleObjects. надо было функционал для этого сделать, или убрать. и ограничить инпут. и может проверять максимальные границы инпута чтобы не поднимал землю слишком высоко. и Ctrl+Z добавить. ну и хуй с этим. и так сойдёт.
>>779928 >тыкал свой солвер для жидкостей/газов с давлением. Хуя ты мутишь. Только хули такая запись стремная, абсом пиши и не сжимай так сильно, не видно нихуя, всю красоту похерил
>>779933 да там если битрейт выставить побольше то всего происходящего на экране оно либо в кашу превращается, либо занимает много. нука где мой ffmpeg попробую перекодировать так чтобы чуть получше было видно, а то и правда шакалов многовато.
такого сорта симуляции иногда всякую интересную хуйню показывают при тех или иных значениях. обычно оно просто взорвётся, или не работает как надо, но иногда интересно! а вообще это я откопал свой старый проект симуляции земли и стал работать над ним с новыми идеями. получше подумал над тем как мне симулировать атмосферу. недавно занимался рефакторингом вычислительного шейдора, делил его на куски. а то работать с шейдором на полторы тыщи строк уже было физически трудно.
Посоветуйте примеров\ассетов, связанных с генерацией уровня. Ни за что не поверю, что все в ГК говне расставляют руками.
Делаю учебный ранер и дошел до того, чтобы ввести чанк (3х3 блока), каждый блок будет превращаться при инициализации в один из префабов забитых в него (препятствие, монетка, ресурс, буст), у каждого из префабов свой шанс, ну и учитывая кривую интереса для всего уровня. Как вам идея? Изобретаю может велосипед и есть решение лучше?
>>779956 >at Library/PackageCache/[email protected]/Runtime/Components/Cinemachine3rdPersonFollow.cs:251 Тыкни блядь, на ошибку.
Он скорее всег оподтягивает синемашину, хочет задать какие-то параметры и не может из-за чего -то. Версии юнити, версии синемашины, небо или Аллаха. Попробуй поставить рекомендованную версию и начать с чистого проекта, обновить синемашину или удалить синемашину, а еще лучше - просто выдрать нужные куски кода с ассета вместо тупого использования.
>>779967 По твоей логике все, что не имеет ярлычка LTS. априори бажное? Oh my sweet child, это только у криворучек из юнити так. Они считают, что лтс это продакшн, а все остальное - альфа-сборки.
>>779972 >рекомендованные версии. А ты даже в это не смог. Рекомендованные для долбоебов? Логично, что я не смог - я же не долбоеб, в отличие от тебя, чтобы сидеть 5 лет на LTS. Но только криворучки из Unity не способны выпустить стабильный не-LTS, это о многом говорит.
>>779976 Я вчера обновился до альфы, хотя планировал дождаться беты. Второй день никаких проблем, всё работает, как часы. О чём это говорит? Да ни о чём. Просто ты долбоёб.
>>779978 Поясняю для особо глупых. То, что у тебя проблемы с юнити значит только то, что у тебя проблемы. Уже не первый год вижу, что проблемы бывают только у жопоруков, которые начинают гореть и носиться по всему интернету с горящей сракой. Десятки тысяч людей с этой юнити, я сам этой версией пользовался. И никаких проблем. А кто-то напишет while(true) в Awake и горит, что юнити падает.
>>779981 >Уже не первый год вижу, что проблемы бывают только у жопоруков, которые начинают гореть и носиться по всему интернету с горящей сракой Твоя выборка, несомненно, репрезентативна Что характерно - ведь у долбоеба иначе быть и не может.
>>779981 Да не отвечай ты троллю, он чисто срач разводит, да хейтит юнити. Тут по фактам так - У юнити случаются и баги и глюки? Да, но редко, как и в любом движке или программе. В юнити есть какие-то не понятные конечному юзеру механики? Нет, есть лишь куча подводных которые постигаются опытом и чтением форумов. Юнити ограничивает как то своих пользователей в создании контента или игр? Нет, делай как хочешь, что хочешь, зависит лишь от рук. По своему опыту использованию Юнити могу сказать что за 3 года, у меня случалось максимум пару десятков крашей, десяток утечек памяти, и так-же пару десятков ошибок библиотек. Но все эти проблемы решались тупой перезагрузкой проекта. Были ли какие-то уникальные ошибки и баги? Нет, кроме чужого говнокода и сломанных библиотек не встречал.
Что такое urp? В доке написано 5 строчек, типа рендер отличается, тени, чето еще. Мне это ни о чем не говорит. При этом, какой-то чувак на реддите грит, мол, новичкам надо вкатываться именно в urp.
>>780000 Типа новый рендер. Теперь он "скриптуемый". По факту особо ничего не меняется, разве что постпроцессинг встроенный и ты получаешь визуальный редактор шейдеров. Можешь посмотреть семпл сцену, там, в принципе, всё понятно. Ну и из нововведений, у тебя будут разные файлы с настройками UniversalRenderPipelineGlobalSettings плюс постэффекты привязаны к волюмам, а те, в свою очередь, к ГО. Старый рендеринг ещё не депрекейтед, но он точно будет, так что вкатываться в urp\hdrp смысл есть.
>>779986 >хейтит юнити Ну справедливости ради будущее за годотом. Проект не уступают в сложности юнити, но при этом имеет на порядок меньше ошибок, к тому же и работает быстрее. Крупный продакшн уже обращает на него внимание
>>780009 Юнитеки говорят, должен быть паритет между urp и старым рендером. Я не сравнивал, сравнивал hdrp и urp, hdrp пиздец, какой тяжёлый. А, ещё в hdrp пару ограничений захардкодили для ретроговна с gles 2.0, типа 8 источников света на объект.
Небольшая проблема: бэкграунд при движении персонажа двигается дерганно, как фиксить?
Нюансы(как в анекдоте про нюансы): Бэкграунд представляет из себя спрайт который летит за камерой а не канвас Персонаж двигается с помощью rb.velocity а не transform(пилил по гайду и понравилось что в таком случае персонаж останавливается не сразу, допроигрывая анимацию ходьбы).
Может ли является проблемой что то из перечисленного?
>>780079 Мне тут объяснили, что передвигать надо через аддфорс. От себя посоветую это еще в фиксед апдейте делать. Но только мувмент, нажатие кнопок в обычном апдейте. Если движение на клаве, нормализуй итоговый вектор, а то сумма двух осей даст скорость выше, чем на осях по отдельности как в старом думе.
создаю объект, он появляется вроде бы по центру, перехожу из фул скрина в микро окно, то он улетает нахуй аж сюда (960.00, 458.00, 0.00) в билде надеюсь такой хуйни не будет?
Аноны, а есть ли смысл верстать Canvas под минимальное поддерживаемое разрешение? Ну, сделать все в 800*600, и чтобы он растягивался на нормальных экранах. Насколько я понимаю, так делают ради игроков с железом 10-летней давности и ноутбучников. Или верстать под FullHD и не париться?
>>780116 А хули ты создаешь новый объект, или это так теперь принято в новых версиях? Я всегда всегда так делал: GameObject hui = Instantiate(parent)
>>780116 Вангую, что у тебя эта залупа в апдейте, потому работает через анусай. У меня буквально такой же код используется без проблем.
>>780122 Я под минимальное пилю, почему бы и нет? Ты готов игрока нахуй посылать только из-за его монитора? Это попахивает сегрегацией по мониторам. Ты там что, в гитлероподобных записался?
>>780122 Не понял вопроса. Если канвасу поставить scale with screen size, match mode shrink, в любом разрешении и аспекте будет скеилиться как надо. Я че-то упускаю?
>>780126 Я под минимальное пилю, почему бы и нет? Ты готов игрока нахуй посылать только из-за его монитора? Это попахивает сегрегацией по мониторам. У многих сейчас уже 2к или даже 4к мониторы. Если не считать Steam Deck, то игроков с микро-мониторами очень мало.
>>780128 В общем да, но с оговорками. Например, сверстал под старый 800*600 квадрат, а все играют в ФуллХД сейчас, соотношение сторон другое. Может какое-нибудь говно криво растянуться если ты элемент неправильно настроил.
>>780140 Как-то с интерфейсом было просто. Вот камеру (вид сверху) настроить так, чтобы с любым аспектом она показывала одинаковый масштаб картинки было труднее. Высчитывать ортографик саиз через соотношение сторон.
Поясните за scale спрайтов. Лучше рисовать большие текстуры и ставить единицу или свободно пользоваться скеилом? А делать его одинаковым только для предметов, которые в скриптах друг к другу в чаилды попадают?
Посоны, туплю пиздец, помогите. Допустим у меня в игре есть 100 комнат, в каждой комнате по 10 предметов. У каждого предмета свои картинки и 3 состояния сломан, нормальный, отсутствует например. Игрок может менять состояния обьектов, когда он заходит в комнату надо отобразить их состояния и картинки.
Где и как хранить данные о состояниях? Сделал к каждой комнате сктиптаблобжект, где хранятся картинки к каждому состоянию. Но как их потом сохранять и загружать? Делать 100 json'ов? А как потом эту сотню json'ов через гугл плей сервисы сохранять?
>>780116 короче щас сделал вот так, у меня к этой точке летят спрайты на экране и если в редакторе перейти из фул скрина в микро окно блядское, то эти блядские спрайты начинают лететь совсем не в центр экрана походу баг а не фича
>>780140 Просто ставишь скейлер чтобы на высоту экрана умножалось и все отлично скейлится хоть на андроед 1280х720, хоть на 8к телевизор. >сверстал под старый 800*600 квадрат, а все играют в ФуллХД сейчас А это вообще вопрос не про разрешения а соотношения сторон. Чтоб ничего не разъебывало раскидываешь свой интерфейс по углам или по сторонам экрана, так чтоб при любой форме элементы крепились к краям и двигались соответсвенно.
>>780197 Первое что тебе стоит понять это то, что если ты просишь помощь, не вести себя как наглое быдло. Это не бэ Второе же, взять на истину то, что ты можешь быть не прав, или заблуждаешься.
>>780197 >по моей логике я просто получаю точку в центре экрана Смотри сюда. Твоя точка это высота экрана и ширина экрана делённая на два. Берём 4к, прикинем чисто по ширине, как оно примерно. Это 3840\2, итого 1 920. Переключаемся "в микроокно", где по ширине 800 пикселей, например. А у тебя "центр" в точке 1920 нахуй. А ещё лучше, стартуй в микроокне, а потом растягивай свой анус и экран. То есть всё работает абсолютно корректно, просто так вышло, что ты долбоёб.
Раньше прокрастинировал, запиливая мелкие механики и бросая их. Теперь вообще хочется практиковаться в архитектуре, связи классов. Сильнее чем писать логику. Предлагаю свою помощь в рефакторинге. 2-3 года в юнити, могу в целом подсказывать что-то, помочь запилить фичу. Короче, хочется кооперации. Скучно, нет мотивации в одиночку. Если кому-то такое интересно, напишите тг или дис.
>>780187 А как грамотно организовать? Если за каждый предмет в комната своя переменная будет отвечать, то получится 1000 переменных, это нормально вообще? Так и делают?
>>780209 >Так и делают? В киберпанке ещё интереснее поступили, они каждую покупку\продажу тоже записывают в сохранение. Крафт тоже записывается, даже если предмета у тебя уже нет. Скрафтил предмет? Сохранили эти данные. Продал? Это тоже сохранили. Правда, потом оказалось, что сохранения больше 8 мегабайт корраптятся навсегда и больше не работают. Потом пофиксили коррапт, но осадочек остался.
>>780214 Но тогда как лучше сделать сохранение этой кучи переменных? Делать каждой комнате отдельный скрипт с методом сохранения - наркомания. Сделать один метод с 100 вариантов switch (roomName) тоже наркомания.
Сделать словарь с ключами к "комнатаПредметОдин" + "состояниеПредмета" и сохранять все в словарь нормальная идея?
>>780219 но зачем switch и зачем каждой комнате свою хуйню. просто сделай формат контента комнат таким чтобы было поебать из какой комнаты куда ты чё сохраняешь
>>780221 Возможно я тупой, но как? Предположим что каждая комната это отельная сцена, на каждой цене 10 предметов. За их расположение отвечает один и тот же скрипт. Как этот скрипт будет передавать разные переменные?
>>780219 Идеальный мир - в момент взаимодействия с объектом это взаимодействие с объектом сохраняется в буфер, который при сохранении записывается. Естественно, нужно учитывать, есть уже этот объект в сохранении или нет. Говнокод - при нажатии "схоронить" цикл for each transform, который просто в лоб сохраняет позицию трансформов + их имена. На загрузке пробегаешь по всем сохранённым данным, находишь трансформы в сцене по имени и заливаешь позиции. Точно то же самое с любым другим компонентом.
>>780227 Это понятно, я не понимаю другое. Смотри, у меня 100 комнат, у каждой комнаты один скрипт в котором есть переменные: состояниеПредметаОдин, состояниеПредметаДва и тд. Как этому скрипту передать данные в файл сохранения с другим названием переменных. В файле сохранение должно быть комнатаОдинСостояниеПредметаОдин и тд? Как в файле сохранения разделить состояния предметов по комнатам?
>>780225 гхм. а не похуй ли что отдельная сцена? что меняет разделение на сцены? что мешает скрипту передавать разные переменные то? ты хардкодишь их чтоли?
>>780228 у тебя там проблемы с головой чтоли. вот есть у тебя например три типа предметов, да? например картошка, банан, апельсин. ты говоришь ну короче картошка это 0, банан это 1, а апельсин это 3. и комнаты такой нумеруешь. и короче вот у тебя на каждую комнату отведён кусок массива по 10 индексов. какое число в индексе тот предмет там находится. а потом ты такой рядом ложишь ДРУГОЙ массив и сохраняешь там на тех-же самых индексах например позицию предмета. или его состояние. и вот хуяк у тебя сохранён тип предмета, его позиция, его комната (хули позицию в массиве можно на 10 поделить) и любая другая хуйня. например массив с булеанами да, если тру то нормас, а если фалс то гнилой. или что у тебя там предметы какие-то особенные? что у тебя предмет? что он должен собой представлять? что объединяет эти предметы? всегда можно нормальные методы сериализации ебануть
>что мешает скрипту передавать разные переменные то?
Либо я тупой что пиздец, либо я хуево обьясняю. Скрипт сохранения принимает переменные из комнаты, а как передать из раздельно потом в общий файл?
>>780230 Я думал сделать так: в файле сохранения есть словарь, ключ к нему - название комнаты и предмета, в скриптаблобжекте комнаты прописаны ключи. Беру ключ и сохраняю по нему состояние предмета
>>780228 >Как в файле сохранения разделить состояния предметов по комнатам? Так разработай свой формат, ёпта. >4 байта длина всех полезных данных >4 байта количество комнат >4 байта длина данных комнаты 1 //предположим, это число N >N байт данных >4 байта данных комнаты 2 >X байт данных
Я так по сети данные гоняю, только вместо 4 байт заголовки по 2, экономнее получается.
>>780231 Хотя, блядь, вроде проще все сохранять в один массив. Если в каждой комнате по 10 предметов, то с 1 по 10 это первая комната, с 11 по 21 вторая и тд. Так вроде проще будет. Спасибо, антоны, лол
>>780231 структурируй то как ты это сохраняешь ололо. хоть в массив с массивами сохрани. не похуй ли?
зачем тебе вообще названиями комнат оперировать. переименуешь комнату и хули теперь. тебе только индекс комнаты знать надо. они же у тебя пронумерованны.
>>780233 да ты можешь и в линкед лист нахуячить, в один большой массив, хули. например если у тебя 100 комнат, то ты знаешь что на первые 100 индексов можно положить индексы начала цепочки. а конец цепочки например указывается -1. тогда у тебя данные первой комнаты будут размещены как [0] = 101, [101] = 102, [102] = 103, [103] = 104, [104] = -1 где -1 на последнем 104 индексе в цепочке. а второй например [1] = 106, [106] = 107, [107] = -1. тогда можно ещё и компактно хранить всю эту хуергу и иметь произвольное количество предметов в комнате. а на указанных индексах ты хранишь уже актуальную информацию по предметам.
>>780238 >зачем тебе вообще названиями комнат оперировать. переименуешь комнату и хули теперь. тебе только индекс комнаты знать надо. они же у тебя пронумерованны. Да это понятно, под названием я имел в виду какое-то условное известное обозначение.
Вот с массивами что-то я не мог допереть сам, почему-то
>>766778 (OP) Аноны, есть тут добрые самаритяне, которые могут мне заанимировать готовую модельку в юнити? Либо за просто так, либо за пиво. Работа вроде несложная - нужно при нажатии разных кнопок на клаве, делать вид будто нажимаются элементы управления на модельке. И чтобы еще можно было от первого лица интерачить с моделью. тг на пике
Прошлый тред: https://2ch.hk/gd/res/752458.html
Официальный сайт: 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# можно узнать на интерактивных курсах здесь:
https://dotnetcademy.net/CSharp/Beginner
или в текстовом туториале здесь:
https://www.tutorialspoint.com/csharp/csharp_quick_guide.htm
Для изучения основ UnityScript выучи вначале основы JavaScript:
https://learn.javascript.ru/
Помни, что далеко не все элементы JS есть в US. Чтобы понять, в чём разница между этими двумя языками, прочти эту статью:
http://wiki.unity3d.com/index.php/UnityScript_versus_JavaScript
Помни, что тебе достаточно одного языка из двух и учить их оба одновременно не нужно.
- Движок
Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка.
http://www.ozon.ru/context/detail/id/34792570/
Также посмотри на видеотуториалы с официального сайта:
https://unity3d.com/learn/tutorials
Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь:
http://catlikecoding.com/unity/tutorials/
Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху:
https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started
Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов:
https://noobtuts.com/unity
В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Шапка: https://www.writeurl.com/publish/qzgktisltkskaitem6aa