Это копия, сохраненная 16 марта 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: 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
И вот думаю стоит ли его дальше изучать или пойти по хардкору все кодить с нуля, без всяких этих визуальных программирований.
Есть аноны с опытом работы в нем? Стоит ли его изучать или дело гиблое?
Как правильно сгруппировать эти переменные векторов и булевых значения?
Что-то мне подсказывает, что я говнокод лютый пишу.
Если чтобы визуально улучшить то массив/лист. Если структурно то функцию/структуру. Если работает и тебе понятно, то лучше не трогай.
Разрабатываю я, значицца, игру и иногда анал.
И вот такой у меня вопрос возник. Хочу текст (цвет, шрифт и пр.) всей игры менять где-то в одном месте и чтобы изменения происходили везде. Это делается только через префабы? Или еще как-то можно?
К примеру да
Я сделал босса, прикрепил к нему скрипт с условием если босс умер то дверь дальше открывается, на двери так же скрипт открывающий дверь только тогда, когда босс мёртв, но когда я делаю префаб босса и удаляю со сцены босса, чтобы он не просто стоял, а вызывался из кода, как префаб внезапно у него теряется связь между его скриптом и скритом даери и заново в ручную нужно назначать ссылку на скрит двери.
У меня есть подозрение, что я фундаментально неправильно прописываю вызов префаба.
Первый пик это то что я сделан на сцене и связал, второй пик это то что я имею в префабе когда вызываю его из кода и естественно такой префаб не работает.
Пока я думаю создать один объект DontDestroyOnLoad, и там хранить все переменные: характеристики и инвентарь героя, пройденные квесты, результаты диалогов и т.д.
Но, может, это не самый оптимальный вариант. Так как это получится очень огромный класс с кучей значений.
PS. Перенес вопрос с мертвого треда..
>характеристики и инвентарь героя, пройденные квесты, результаты диалогов и т.д.
игрока не надо удалять при смене сцены, и т.д. ты просто переключаешь декорации, а все основные объекты остаются неизменными. проще всего это сделать аддитивной загрузкой сцены с картой.
чтобы сохранять состояние объектов на сцене и загружать его обратно при загрузке сцены, надо сериализовать объекты. это просто так не сделать.
Самый простой вариант иметь обьект который не будет удаляться при переносе сцен и в себе он имеет скрипты с данными. + Всегда можно их читать/менять. - Весьма примитивно.
По книге не поймешь. Устройся в любую контору и тебя там быстро научат писать код.
Так чтобы устроиться в нормальную желательно уже знать
1920x1040, 0:31
Это Line.
Это блум альясит. Вообще не стоит всякие лазерные мечи делать блумом, сделай просто текстуру с размытием по краям.
Так при чём здесь юнити? Меняй/изменяй архитектуру хранения и взаимодействия, видно же что какую-то хрень придумал. Не зря же пограммист, вот решай задачу.
Такие задачи ты можешь решить на любом языке, разница лишь в твоём складе ума и подходе к реализации.
SendMessage
А ты поменяй подход к реализации. Например, тебе нужно +1 к защите для всей железной брони. Сделай для перса скрытую характеристику, которая будет называться как-то "ironArmor". Каждый елемент брони будет увеличивать ironArmor, также как и другие характеристики. Ну и твой модификатор будет увеличивать скрытый стат у перса, и не нужно будет навешивать ничего на другие вещи.
Так в том то и смысл ебли, чтобы за каждый элемент давали +1. Одна железка надета - +1, две - +2 и т.д. В любом случае надо знать, сколько вещей надето. Это не говоря о том, что если модификатор будет процентный, тогда нужно знать еще и сколько каждая штука дает, чтобы процент высчитать.
>Как быть, если нужно хранить в объекте одного и того же типа функционал и данные разных типов
https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)
Сап аноны, я застрял на одном неприятном баге, который не могу исправить вот уже неделю.
Есть бот игрока который охотится за врагом, отлично охотится, находит и уничтожает его в то же время и враг отлично воюет против бота это всё если я префаб врага перетаскиваю на сцену, но как только я создаю здание которое будет респавнить врагов, то тут же бот перестаёт видеть врага, я проверял, були не срабатывают. При том враги продолжают видеть игрока и бота.
Копай в сторону скриптабле обьектов, проверку ссылок при спавне и типы передачи. Это фишка юнити.
Делаю тестовую гиперказуалку, при клике машинка должна менять направление. Но ПОРОЙ, клики тупо не проходят. Вообще не ебу в чём дело, профайлер пики никак внятно не расшифровывает. Грит эдитор луп.
Объекты создаю в пуле, хуле ему ещё нужно-то сука тварь?
>профайлер пики никак внятно не расшифровывает
Как ты себе это представляешь?
Копай свои скрипты если фризит всегда в одни и теже моменты чекай и пытайся понять что может происходит в эти моменты. Если в разные, то надо копать в сторону циклов и подобной хрени. И если используешь инстансы и чекай Не забывай заместо инстансов юзать простое включение/выключение. Одним словом, скорее всего лапша говнокода. А и последнее сделай билд и чекни вне редактора, возможно это только в редакторе.
это сильно нужно для работы рекламы?
у меня простая аркада на телефоны с короткими баннерами раз в 10-15 минут и, судя по дэшборду, по несколько центов там капает с юзера, хотя у меня этого файла нет (и даже в профиле Гуглплея как оффсайт указана страничка на itch)
Не сильно, реклама и без него будет работать.
именно строчка
body = GetComponent<RigidBody>();
Эта строчка делает ровно то, чем является. Просто читаешь - добавить компонент ригидбоди. Что сложного? У тебя двойка по английскому?
Добавить компонент в переменную. А чтобы её добавить - нужно получить ссылку из геткомпонента. Здесь даже разжёвывать нечего было.
>Здесь даже разжёвывать нечего было
Дела в том что есть метод AddComponent который действительно добавляет компонент а не вертит сракой как ты.
Кроме добавления он ещё и возвращает ссылку. Пиздец, лучше даже не вникай в эту тему, сразу видно - не твоё.
Разве? В старте вызвать Find и полученную ссылку присвоить куда надо, или я не понял?
Ты при инстансировании префаба заполни все переменные, иначе работать не будет. А ещё лучше напиши логику в одном скрипте, где будут ссылки на босса, двери и всю эту хуйню. Так не придётся передавать ссылки туда-сюда, всё будет сразу под рукой, так сказать.
>>69107 (Del)
Хуя ты тупой.
>>67156
Эти видел, но вижу там даты 15-16 годов, не устрарело ли?
Что стоит учить сначала, c# или сперва разобраться в ООП?
Для начала стоит понять ты хочешь делать игры или смотреть туторы/читать миллионы гайдов, но ничего не делать.
Как только с этим определишься дальше сам поймёшь.
Подсказка - Если собрался делать игры, то открываешь тутор на оф сайте и делаешь по примеру, следом делаешь любую простую игру которая приходит на ум одновременно гуглишь все возникающие трудности. Поздравляю, вы научились делать игры. Теперь дело за малым, научится делать контент к ним.
Я хочу, возможно, в перспективе, работать в этой сфере.
Не просто поделки для себя делать, короче
>Я хочу, возможно, в перспективе, работать в этой сфере
На собеседовании тебя не будут спрашивать какие ты курсы смотрел. Берешь и делаешь игру, че непонятно гуглишь.
776x400, 0:28
Да понятно, но теория то нужна, и, как я понял, не мало. Берешь и делаешь, че непонятно гуглишь приведет к пробелам в теории, в любом случае, какое-то поэтапное структурированное обучение в этом плане лучше, разве нет?
Уже миллиарды раз везде обосывали, что 'обучение' заканчивается на просмотре видосиков и читке текста.
Если ты хочешь как написал научится, лучше чем делать сразу ты ничего не найдёшь. Если же ты ищешь оправдания делать что угодно лишь бы не заходить в проект и писать код/таскать ассеты, то дальше туторов ты никогда не уедешь.
Пробелы ты будешь встречать на всём пути разработки, даже с опытом сто лет всегда что-то новое, что-то меняется, еще что-то ломается, гуглить/смотреть видосики всегда прийдётся.
Итог TLDR: Берёшь и делаешь. Хочешь 2Д? Сделай простую игру где у игрока меню, смена сцены, кликать по картинкам. Хочешь 3Д? Тоже самое, менюшка, сцены, двигать кубы физикой, делать камерой облёт вокруг куба.
Уже то что я написал затронет большой спектр основных механик к любой игре.
Единственное куда не лезь никогда и даже не думай, это в сетевые взаимодействия.
Я не говорил о том, что не хочу писать код, лол. Совмещение теории с практикой и всё. Большинство "курсов", что на торрентах лежат в том и заключаются, из того, что видел, на выходе пара тройка проектов будет. Просто спросил, чтобы случайно не нахвататься неправильной инфы от хуевых людей
Еще раз повторю. Если ты реально хочешь заняться юнити, то единственное что тебе это надо - скачать хаб -> скачать последнею версию юнити вместе со студией -> создать проект 'New project 0' -> Запустить его и начать делать то что у тебя в голове.
Не знаешь что нажать? Не знаешь как реализовать что-то? Заходишь в гугл и пишешь 'Unity3D chto-to' пытаешься сформулировать свою мысль на англюсике. И я тебе гарантирую, после пары вечеров ты уже сможешь сделать простую игру, да, вот так просто, всего то надо блять зайти и начать делать а не пиздеть.
>чтобы случайно не нахвататься неправильной инфы от хуевых людей
То есть ты намеренно решил нахвататься хуйни от хуёвых людей? Проверь строку адреса и спроси себя, понимаешь ли ты, что это за сайт.
> Что стоит учить сначала, c# или сперва разобраться в ООП?
ООП — это парадигма, C# — это язык, инструмент.
В чём ты хочешь в первую очередь разобраться? Вот в этом и разбирайся.
Но если ты с головой залезешь в теорию, то 99% что ты очень быстро заебёшься и забьёшь сколько я таких повидал, ты охуеешь, так как не видишь живого результата и эту самую теорию не закрепляешь.
Не строй себе графиков, типа "в понедельник ООП, во вторник C#, в среду гоняю капсулу по террейну", ты так очень быстро сгоришь.
Правильно тебе анон говорит, создаёшь проект и делаешь то, что хочешь. По языку есть MSDN, по юнити — документация. Что непонятно — смотришь.
Попляшешь на граблях, набьёшь шишки, построишь пару десятков башен из говна и костылей, после этого поймёшь где у тебя узкие места, поймёшь нахуя нужны абстракции, паттерны, солид, грасп и прочие штуки, выведенные за десятилетия мучений и страданий. Научишься строить грамотную архитектуру, тогда и попрёт.
мимо сеньор-помидор
>поймёшь нахуя нужны абстракции, паттерны, солид, грасп и прочие штуки, выведенные за десятилетия мучений и страданий.
Забавно, лет 5 ебашу в юньке, и в душе не ебу что эти понятия значат лишь образно представляю о чём речь, и что самое смешное за плечами имею две игры в стиме и десяток в маркете.
Проще описать весь процесс создания игры, чем даже гуглить и читать эти слова от которых в сон бросает.
Алсо, за качество говно-кода не выёбываюсь, но главное что работает и без лагов
> в душе не ебу что эти понятия значат
Это нормально. У нас есть один в отделе, как два года назад пришёл джуном, так до сих пор джуном и остался. Ему это просто не интересно. Сидит себе пилит что дают, ему норм. Ну и мне норм, такие тоже нужны.
>как два года назад пришёл джуном, так до сих пор джуном и остался
Это называется галеры. Но больше похоже на выдумку, как за два года активной разработки не апнуться выше? Прохладная история.
> как за два года активной разработки не апнуться выше?
Ему это просто не нужно. Отсидел от звонка до звонка, получил аванс, через 2 недели получил ЗП, смыть, повторить.
Да, код уже совсем не такой говёный, как был когда он пришёл, но он не хочет сам что-то решать а именно это отличает джуна от миддла, он хочет чтобы ему ставили простые задачи и он их делал.
> такие люди типа просто не нужны
Тут нужно смотреть что за контора, какие проекты и задачи и т.д.
Иногда такие нужны, иногда — нет.
Если он тянет команду на дно, то да, его надо увольнять. Либо перевести в другую команду. Тут надо, опять же, смотреть по ситуации.
А надо ли оно? По факту из всех этих парадигм только ецс имеет смысл освоить, улучшает производительность. Хотя и ценой лютого запутывания кода. Солид - говно собаки. Кисс пытается подтереть собачье, и не только, говно. Навязывая очередные принципы, которые должны нивелировать навязанные ранее принципы. Как и yagni. Чтобы пользоваться dry нужно просто быть ленивым, но, что самое смешное, он применим в настолько редких случаях, что, можно сказать, не существует в природе. Вообще в юньке базовая парадигма это КОП, вот и пишите КОП. А когда залагает, тогда вам пизда и переделаете.
> А надо ли оно?
Если ты сидишь дома и пилишь что-то для себя, то, возможно, и не надо. Ты можешь и в маркете выпускаться и в стиме. Но ты сам по себе.
А в большой разработке — надо, да. Оно не просто так придумано. Оно как раз нацелено на решение кучи однотипных проблем, возникающих при масштабировании проекта, при изменении его курса и прочих факторах, которые неизбежны, если ты на рынке.
>нацелено на решение кучи однотипных проблем
Но игроделание это специфическая проблема и много хуйни просто неприменимо. Я вот нахуярил много-много опп-кода и вижу, что пора его разделывать на фабрики и менеджеры, которые 15 лет подряд называли плохим кодом.
>А в большой разработке
Ну я последний коммерческий код писал не для игр и там чаще требовали сделать быстро, чем сделать правильно. Да, просто срать в файлы нежелательно, но если на первый взгляд прилично и работает, то похуй. А что у тебя в приложении интерфейсов вообще ни одного - никого не ебёт. Всегда ненавидел это говно, лол, бесполезное засирание пустотой. А потом приходит начальник и говорит, что нужна какая-то фича, крайний срок вчера и вообще. А ты такой, ой знаете, её реализация нарушит принципы open-closed, так что нет.
Конечно если челик работает в конторке, то и требования к нему другие, тут правильно.
>>69257
А вот тут уже странно, даже просто ебаша код и представляя что ты делаешь, уже через пол года явно будет уровень и понимание выше. Это же не дворник где ты делаешь одно и тоже и не развиваешься. Тут каждый раз что-то новое либо обновлённое.
>>69260
Как уже писали конечно надо, но в другой области разработки, и в больших проектах где просто если дать каждому право делать как хочет, всё наебнётся. Раньше думал что единственное место где эта дрочь может понадобится это в net фраемворках, но после того как сделал игру с реализацией сервер-клиенты понял что и там в пизду это не надо.
Ну и если лагает да, значит ты явно обосрался и иди апать скилл и всё переделывать, тут 100% виноват проггер Если конечно это не 3д где моделист обосрался тоже, сделав ебучие модели по 100к и обвесив их десятками материалов.
>А что у тебя в приложении интерфейсов вообще ни одного - никого не ебёт. Всегда ненавидел это говно, лол, бесполезное засирание пустотой
Понятно что тут все свои и стесняться некого, но сообщать что ты отсталый долбоеб не обязательно.
Я не против здравого смысла, но запрещать самому себе модифицировать базовый класс, когда требования к нему уже изменились? Ну такое, ты по сути, пишешь код, который с первого дня - легаси.
>>69266
Так я и не говорил давать каждому обязанности продумывать архитектуру. Если команда больше одного, то уже нужен лид и вся хуйня. Но при этом если зона ответственности программистов не пересекается, то уже не так уж и нужен.
>>69272
Смешнее всего, что если следовать тому же ягни, то интерфейсы это как раз тот код, который вам не нужен и не должен быть написан никогда.
Если у тебя изменились требования к базовому классу, значить что то ты делаешь не так. Они не могут измекниться.
Так у меня процесс разработки идёт, я не могу заранее предсказать требования к классу.
>>69284 (Del)
Окей, класс возвращает длину в байтах. Но 99 классов из ста используют метод расширения базового класса, который возвращает длину в символах. И, собственно, длина в байтах больше не нужна.
Хотя если на основе какого-то класса массово создаются буфера, то проще сделать фабрику.
Всё ваше говно сводится просто к использованию готового ассета и написанию кода по тутору.
В общем у меня вылетает одна игра во время загрузки. На полсекунды вылезает окошко как на пикрил (пик взят из интернетов, игра не вальхейм) и потом вылезает ошибка от Виндоуза.
Я смог записать код ошибки, Unity 2019.4.20f1_6dd1c08eedfa.
Что делать? Играю я на ноуте, драйвер своей встроенной видеокарты обновил. Может что-то установить надо?
Игра точно будет работать на моём некроноуте, так как версия игры на питоне запустилась сразу и без проблем.
>Unity 2019.4.20f1_6dd1c08eedfa
Это не код ошибки, это идентификатор билда движка. Можешь поискать логи в аппдате. А лучше обратись в поддержку твоей конкретной игры.
>C:\Users\%USERNAME%\AppData\LocalLow\%ФИРМА%\%ИГРА%
>>69361
В общем я и программу поюзал и в логе поковырялся. У меня только один вопрос: вот это
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)
означает что я соснул и мне не судьба поиграть на своём ноуте?
Шейдеры не может запустить на твоей видяхе. Странно, что пытается грузить дебаг шейдеры. Если есть возможность, выключи полностью все пост эффекты в настройках игры. Главным образом отражения. Вообще похоже что у тебя нет DX11.
Возможности нет, так как я в саму игру зайти не могу.
DirectX11 есть.
Ладно, не буду вам тут мозги ебать. Это уже выходит за рамки треда про Юнити. А тут уже полезли хардварные траблы.
Спасибо вам, юниторы.
За меня не переживайте, я через 10 дней наконец вернусь домой и попробую поиграть уже на своей игровой пекарне.
>За меня не переживайте, я через 10 дней наконец вернусь домой и попробую поиграть уже на своей игровой пекарне.
Фух, слава богу
Есть персонаж и его коллайдер, есть мелкий монстрик(мышь) бегающий туда-сюда и его коллайдер.
Как реализовать что бы мышь могла пробегать через персонажа не утыкаясь в его коллайдер , но персонаж все еще мог с ней взаимодейстововать(задавать)?
Аа. все заработало. Держи котика
Никаких, бери и делай.
Рантайм генерация навмешей, соснёшь. Так что советую делать, как в богоугодном варкрафте 3, разбиение на квадраты, а потом уж а-стар справится без навмешей. Но ты всё равно соснёшь.
Нафига для тд вообще пасфайндинг? Поставил себе вейпоинты и двигаеш юнитов между ними.
тут разжевали, как это работает в Исааке (судя по пикам, у тебя нечто похожее планируется в плане карты)
https://www.boristhebrave.com/2020/09/12/dungeon-generation-in-binding-of-isaac/
А игрок строит из башен лабиринт и мобы не могут найти путь. Всё, рефанд, игра говно.
Перекатывайся, есть навмеш из коробки, есть ассеты, юзал и на 3д и на 2д, если не дорабатывать работает, но смотрится не очень красиво. Пару дней допилить и почти идеал и то что ты хочешь.
Перед каким сохранением? Ты в товер дефенс не играл чтоли?
Это в хуёвых тавер дефенсах так. Поиграй в хорошие.
>Все, никакой пасфаиндинг тебе не поможет.
В этом случае мобы начинают атаковать и ломать башни.
Хуёвость этой затеи в том, что игроку приходится каждый раз строить одинаковый, самый лучший, лабиринт из башен.
Поэтому со временем ТД эволюционировала до заранее проложенных путей мобов, на которых башни строить нельзя, позволяя в остальных местах ставить башни как вздумается.
Собственно современные ТД на ПК до сих пор работают по этому принципу.
На мобилочках же для упрощения планирования ца - казуалы, им думать слишком сложно оставили только избранные точки, куда можно ставить башни.
Как экспортировать большие анимационные сцены из блендера? Есть персонажи с индивидуальными анимациями (ходьба, атака...), каждый в своем бленд файле. А есть сцена, где много персов друг с другом взаимодействуют. Могу создать еще один бленд файл для этой сцены, импортнуть туда персов, анимировать их. Потом из этой сцены обратно импортнуть анимации в персональный файл каждого перса, потом все это экспортировать в юнити. Есть способ лучше?
Ты вообще в ТД не играл, там всё это решено давно. Иногда по-тупому, не позволяя игроку строить башни на дороге, это явно хуёвые тд, потому что не позволяют тебе реализовывать весь потенциал как башни, так и творческий.
>Твоя проблема не в пасфайндинге
Но у меня нет проблемы, я не делаю тд, мне хватило их ещё в нулевых. Хороших, годных тд.
>изначально не пойдет под вражеские башни
Только вот у него точка назначения непосредственно указана и он не может туда не пойти.
Но да, если ты делаешь максимально херовую т.д, то можно даже заранее захаркодить мест 10 под вышки, кликать по ним и жать "поставить вышку". В идеале ещё совместить с каким-нибудь кликером, потому что экстремально скучно получается. Хотя и казуально, для игроков жопой в сортире сойдёт.
Есть несколько подход.
Самый простой, но и рабочий это есть модельки персонажей с обычными анимация, и дополнительными анимациями по типу: получил урон, прыгнул, использовал. Для отдельных сцен или редкий вариаций используются дубликаты модели, но с нужными анимациями. Подменяется модель персонажа игрока на дубликат при проигрывании нужной, редкой анимации.
Второй метод, хранить все анимации в персонаже, но как понимаешь тут сразу есть и явные минусы, особенно если анимацией и их вариацией под сотню и более, но зато удобное хранение всего в одном месте.
Для твоей же задачи подходит первый вариант. Сложно сказать не глядя. Тут нужно смотреть по гемору, что быстрее и удобнее, анимировать сцену с кучей персонажей в блендере и переносить один ассет, или каждого персонажа по отдельности.
Неужели в юнити так сложно добавить искаробочный риггинг и сложную анимацию с констрейнами, ИК и драйверами как в блендере? Вот была бы действительно полезная фича, чтобы основной контент можно было пилить непосредственно в самой юнити, а не сторонних прогах, чтобы юнити стал самодостаточным инструментом как флеш. Флеш умер, а его убийцу так никто и не сделал.
Почему юнити превратился в тяжёлое лагающее говно с лежащими в разных местах фичами и ебанутым интерфейсом?
Может кто то подсказать? Как запихать методы OnCollider2D/OnTrigger2D в другой метод что бы тот запускался по нажатию кнопки?
Поясню. Нужно включать\выключать лампу. Однако , с моим уровнем знаний после включения лампы из ее коллайдер-триггера нужно выйти и снова войти что бы выключить.
Хз что там за лапша у тебя, но проще всего сделать либо массив доступных объектов вблизи, либо чекать коллайдер на нахождением в нём.
Как чекать постоянно на нахождение в коллайдере\триггере? OnTriggerStay 2D чекает только в течение нескольких секунд
>что бы тот запускался по нажатию кнопки?
Здесь нужно понимать, что весь старый инпут говно собаки. И чтобы без боли в заднем проходе пилить инпут - нужно импортировать и настроить пакадж с новым инпутом. Однако, если его нет..
void Update()
{
if (Input.GetKey("a");)
{
Debug.Log("A!");
//Можешь добавить сюда чё хочешь
}
}
https://docs.unity3d.com/ScriptReference/Collider2D.html
OnTriggerStay2DSent each frame where another object is within a trigger collider attached to this object (2D physics only).
OnCollisionStay2DSent each frame where a collider on another object is touching this object's collider (2D physics only).
Дрочит каждый фрейм проверки на физике. Естественно лучше это реализовывать как Вход->Выход и по желанию добавить отдельный менеджер или функцию которая следит за объектами которые сейчас используются или могут использоваться(Находятся в радиусе).
Если у тебя что-то не работает ищи косяки в коде, компонентах.
Если сможешь описать что ты хочешь я напишу код.
>что весь старый инпут говно собаки
Огорчу тебя, новый еще хуже, к тому же наполовину не рабочий. Единственная фича которая мне зашла из нового это возможность менять координаты курсора мыши.
Не не, ты не понял вопроса. Кнопка, назначена, она работает, свет выключается , все норм. Проблема в триггерколлайдерах.
То есть OnTriggerEnter и OnTriggerStay не чекают постоянное нахождение в коллайдере лампы , а только факт столкновения или захода в нее. Отчего что бы включить лампу нужно выйти и снова войти.
То есть. Мне нужно что бы или чекалось постоянно (для чего нужно в метод Апдейт запихать метод OnTrigger или запихать этотже метод на if (Input.GetKey("a");). Но он нехрена не работает в обеих этих случаях
Чел, монокласс тебе не надо запихивать в функции или апдейт, просто оставь его как одиночную функцию в скрипте.
Может я что то делаю не так , но у меня OnTriggerStay2D дрочит проверку только несколько секунд после захода в коллайдер цели и при смене позиции внутри него.
Что нужно :
Что бы коррекно работало
void Update()
{ if (GetButtonDown("Knopka")) NajatKnopku();
...
private void OnTriggerStay2D(Collider2D collision)
{
if (collision.gameObject == Lamp.Instance.gameObject&&NajatKnopkeu)
Lamp.Instance.Fire();
}
Думал сделать так как один из вариантов. А по выходу из зоны коллайдера флажок InArea сменится с true на false?
Там всего два положения - Если объект рядом то истина, если же нет, то ложь. Пограничного состояния, или не известного нет. Это идёт по сотне проверок в секунду, дрочь.
Та же проблема что и была, но с другой стороны . При выходе из зоны триггера флажок не меняется на false. По итогу персонаж-телепат и включает лампочки на расстоянии
Что я делаю не так?
Где то проёб либо в компонентах, или самих объёктах, что-то упускаешь.
Сделай для теста c OnTriggerEnter и OnTriggerExit, и чекай где у тебя может проёбываться.
Полностью отказался от старого инпута, всё делаю на новом, вообще ни одной проблемы не заметил пока что.
>>69823
Ояебу. Я бы на твоём месте вообще нахуй послал коллайдеры. Ну или вот так, наговнякаем лишь бы работало. Пара нюансов, лампам нужен тег, сам нагуглишь и нельзя, чтобы коллайдеры ламп были внахлёст.
Нет, просто рофл с дурачков. Какие сто раз за фрейм, ебанушки
Пишу небольшую мультиплеерную игру для WebGL и думаю, как реализовать Authority.
Хотел спросить(сам никогда с WebGL до этого не работал),
лучше сделать всё как надо и считать большую часть логики на сервере, чтобы даже при вторжении в код игры извне проект был защищен от читерства
или забить и считать все это на клиенте?
Защищен ли WebGL билд от вторжения, если он крутится на моем сервере?
>или забить и считать все это на клиенте?
На данном этапе да, в твою игру всё равно никто не будет играть - это первое, логику на сервере ты не осилишь - это второе, но лучше сидеть с игрой в которую никто не играет чем быть безыгорным.
Палю самый простой и эффективный вариант. Делай всё на клиенте, и не запаривайся насчёт защиты.
Как только ты сделаешь что-то похожее на игру, что можно будет тестово запустить в несколько окон и протестить, только тогда ты поймёшь какие значения и данные следует прятать и не показывать игроку. Потом просто переносишь все связанные с этим вычисления на сервер и всё. Ну и авто логи которые чекают значения в пределах нормы, если нет дисконект.
В приведенном коде атака выполняется следующим образом - противник начинает двигаться в сторону игрока и у него активируется триггер, который наносит урон противнику, но если прервать корутину - коллайдер обратно не включится и получится баг.
Я исправил это тем, что копировал финальную часть кода (не выполняемую из-за прерывания корутины) и вставлял её в кусок кода, который прерывал корутину. Какое есть лучшее решение этой проблемы? Может как-то можно указать корутине, что определенный кусок кода должен обязательно исполниться
Сделай в цикле корутины проверку на переменную bool stopped какую-нибудь, while(!stopped && time < AttackDashTime), когда надо закончить корутину делаешь stopped = true.
нужна помощь скачал ассет карты
добавил игрока
игрока
контролер
прописал скрипт
в результате игрок проваливается и падает
что делать
Давай погадаем.
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"));
md = Vector2.Scale(md, new Vector2(sensitivity smoothing, sensitivity smoothing));
smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
mouseLook += smoothV;
mouseLook.y = Mathf.Clamp(mouseLook.y, -90f, 90f);
transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
}
При движении строго влево-вправо или строго прямо-назад все вроде нормально.
При движении по двум осям сразу, да если еще и крутить камеру пытаясь удержать объект, вокруг которого ты идешь, в центре экрана - получается вырвиглазный пиздец с дерганьем камеры/геометрии и остаточными контурами (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"));
md = Vector2.Scale(md, new Vector2(sensitivity smoothing, sensitivity smoothing));
smoothV.x = Mathf.Lerp(smoothV.x, md.x, 1f / smoothing);
smoothV.y = Mathf.Lerp(smoothV.y, md.y, 1f / smoothing);
mouseLook += smoothV;
mouseLook.y = Mathf.Clamp(mouseLook.y, -90f, 90f);
transform.localRotation = Quaternion.AngleAxis(-mouseLook.y, Vector3.right);
character.transform.localRotation = Quaternion.AngleAxis(mouseLook.x, character.transform.up);
}
Что-то не то ищешь, джуном не требуется опыт. 1-2 года кек, "джун с опытом" - оксюморон какой-то. Таких надо стороной обходить.
Сроки опыта пишут для отпугивания бесхребетных чуханов, просто в резюме кидаешь ссылки на свои игори (пару демок надо иметь в портфолио) и ты принят.
Примерно так и думал. А по сайтам поиска подсказать не можешь?
Ищу вакансии на удалёнке, но их очень мало. Всё-таки нужно в ДС-ы перекатываться для начала?
в один
нашел только это
http://gamesetup.ru/topic/259.html
но по мне это какойто костыль
>и программное ограничение кол-ва кадров. Последнее, к слову говоря, можно смело ставить на 30-40, человеческий глаз все равно больше не увидит
Статью годотя писала? Дальше не читал.
это невозможно
ридер
10 вкладок хрома
и юнити
и все вылетает лагает
где мои 8 гигов оперативки fx 6100
надо сносить винду
У меня на ноуте 4гб, и работать в юнити боль. 8 конечно лучше, но минимум сейчас надо 16 для комфорта, чтоб и музычку слушать и двачик скроллить во время разработки.
Как же так, Blasphemous не упомянут в шапке.
Всем привет. Хотел бы задать простой вопрос.
Как вы двигаете transform если объект должен двигаться только когда он активирован?
Мой вариант примерно такой
void FixedUpdate()
{
if(!isActive)
return;
transform.position += moveDirectiorn * speed;
}
И все отлично. Но проблема если таких предметов много ( >1000). И я уже начинаю думать что надо было использовать корутины при активации.
>Но проблема если таких предметов много ( >1000)
В чём проблема? И почему ты юзаешь FixedUpdate?
Как сделать лучше?
Вначале мне было его удобнее использовать чтобы двигался объект в независимости от фпс
Ну будет у тебя тысяча ифов чекаться, дальше что? Тормозит что ли? Ну при активации стартуй корутину тогда
Не стоит думать об оптимизации того, что оптимизировать не надо и обусловлено самим движком. Не засовый в апдейт кучу кода и всё. Нужные вещи вызываются одноразово. В апдейте только всякое говно с вычислением при необходимости которое выключается когда не надо.
>тысяча ифов чекаться
Блин, сделал три миллиона ифов в скрипте, райдер завис. Вырубил. Юнити при запуске упал нахуй, слабаки
Мне райдер больше нравится. Но я не профи, не знаю всех тонкостей. Для себя пришлось немного цвета в теме менять, плагин скачал для скролла средней кнопкой мыши, всё заебись, он за меня код пишет, я просто наблюдаю и радуюсь
Проблемы с установкой, или во время работы не возникало из-за отсутствия лицензии? Всякие там вылезающие окошки с регой и т.п?
Не было проблем, но окошко немного бесит, когда включаешь, оно вылазит и нужно три клика сделать, невыносимо, знают на что давить.
Мда, как раз бесит такое, особенно если во время написания внезапно какое нибудь говно вылезет.
Наверное тогда всё таки попробую его завтра поставить, слишком уж его хвалят все, что он удобнее и быстрее студии, пора трайнуть.
Оно вылазит только при старте один раз
Кстати про него забыл, как то давно ставил, и что то он не хотел доки с юньки подтягивать и я забил.
Ща поставил, вроде шустро, единственное комменты кирилики не отображает.
В райдере редактор вин формочек багнутый. В остальном райдер лучше студии при наличии волшебного батника конечно
Да уже гуглил, переставлял, даже установил русский пак, старые комменты вопросики, но если новые писать на ру то ок, думаю чито поделать.
Зачем я на ночь глядя решил заняться этим, мде... Теперь ебаться и вспоминать что где было.
Вообще райдер автоматом конвертирует кракозябры в UTF-8 когда открываешь файл, так что это ты сам что-то сломал.
Какое демо? Если там пропсы обычные, меш и текстуры
А если ты нахуячил где-то 100500 тыщ полигонов в скрытой геометрии, из-за которой сцена с твоим ассетом будет выдавать 5 фпс? Это же нужно проверить. Ну и сделай презентабельно, чтобы купить захотели и проблем подобной выше не было. Или иди на цгтрейдер какой-нибудь.
А чем тебе так цгтрейдер презрителен. Треш ты конечно можешь там выставить, но его никто не купит. Юнити куча правил, ничего не объясняет,комментарии не дают хотя там исправить пару кликов, ждешь месяцами.
Вместо "space" надо KeyCode.Space
Если у тебя визуал студия то она должна была подсказать автокомплитом что вводить.
Допустим есть класс, BeizerMover, он перемещает годаунов по кривой безье, но в моём проекте разные типы годаунов, одни сосут хуй Хуанатм (SimpleMover), другие на нём прыгают (SimplePhysicMover), и чтобы не было конфликтов, то все годауны которых можно двигать реализуют интерфейс IMove, что гарантирует что они все будут идти по кривой безье к хую Хуанатм.
Но встаёт проблема, как вызывать движение годаунов через интерфейс, ведь я же не стану проверять каждого годотю через какой скрипт его нужно двигать, заражусь ещё. Если просто объявить поле с типом IMover в качестве годоти, то его не видно в редакторе, и вообще ему не присваивается значение, что приводит к ошибке.
Как же Даше-Путешественнице заставить годоть присесть на хуй Хуанатм и при этом не зашквариться?
Создаешь все объекты IMover через манагер который сохраняет созданные объекты в список и он же Move у IMoveров будет вызывать в цикле. Интерфейс через sozdanniyImover.GetComponent<IMover> можно достать.
Та же херня. Без ...&& Input.GetKeyDown(KeyCode.Space) работает , с ней нет. Где проебываюсь?
Спасибо, через getComponent<IMover>().Move() работает, но всё равно не могу понять, почему я могу присвоить значение полю с типом GameObject, из которого потом достать интерфейс, а присвоить значению полю с типом интерфейса - нет, с остальными компонентами же всё так и работает, интерфейс что, особенный? Хотя вроде догадываюсь, интерфейс же нельзя инстанировать, хотя по идее присвоение значения полю это не создание нового интерфейса, или всё таки создание?
Проще говоря, почему пик1 работает, а пик2 даже не отображает IMover, а если через костыли и отображает, то не работает?
OnTriggerEnter срабатывет в момент когда объект залезает в триггер. У тебя код "если в момент захода в триггер надавить на пробел..." - ты никогда не сможешь тыкнуть пробел именно в момент срабатывания триггера. Юзай OnTriggerStay, он вызывается пока объект находится в триггере.
так я не понял использовать в комерции можно или нет
Я уже начал c# учить по курсам с ютуба, с нуля буквально, стоит закончить обучение хотя бы базовым вещам языка или можно сразу переходить к практике с юнити?
Можно, разрешаю
Купил ассет, не можешь его выложить в маркет от своего имени. Но можешь вставить ассет в проект и зарелизить, получая с проекта денежный профит.
>могут быть использованы в ваших коммерческих проектах несколько раз после оплаты только один раз.
Основу посмотри от самих юников на ютабе, это около 2 часов ирл времени, и далее только практиковаться в юньку, не надо тратить время и силы на чтения всякое устаревшей залупы, главное опыт.
Ну и второе по значимости, если что-то не получается реализовать, идёшь в гугл гуглишь примерно что представляешь на инглише, также ошибки сразу туда же гуглить.
Спасибо за ответ.
То есть что бы при определенном условии анимация начинала проигрываться и останавливалась на последнем фрейме?
>Чтобы не прилипал к стенам
???
>поднимался по ступенькам
Делаются просто пологими.
>пинал ящики
Отдельно в скрипте.
>отскакивал от прилетевших ящиков
Отдельно скрипт.
>переносился и вращался движущимися платформами
Отдельно скриптом.
Там вроде как есть Rigbody для физики. Хотя при попытке использовать его в качестве контроллера он начинает вести себя как говно, и всё равно приходится писать куту скриптов.
Наверняка существует, но ты можешь сам найти на гитхабе сорсы квейка и посмотреть, как там это сделано, и сделать так же.
Как раз сейчас и копаюсь в них. Но почему так? Я же использую целый движок! Почему там нет готовых встроенных решений?!?!
Есть шаблон проекта FPS Microgame, можешь оттуда контроллер вытащить.
Еще проблема в том, что отдельным тайлам нельзя настроить собственную логику, они не инстансы, а ссылки на один и тот же библиотечный объект в палитре. Начал смотреть в сторону объектовых тайлов, чтобы каждый тайл был объектом и ему можно было в инспекторе накидать логику - в каких направлениях дороги, какого качества, и какой вид он в связи с этим должен принять, но это надо в 3д вкатываться, в блендеры хуендеры, я в этом вообще не шарю. Помогите советом, братва.
Пчел, не надо не каких тысяч разных объектов, реализовывай логику которая позволит смешивать и изменять графику. В твоей же случаи точно стоит это делать по другому, никаких сотен вариаций, всё намного проще.
Первый слой это графика лес/луг и т.д.
Второй слой это дорога, и в него же входит улучшение по средством уровня.
Еще раз напишу, что всё намного проще, не надо мудрить.
Да, я это понимаю, было бы здорово рисовать на тайле в несколько уровней. Нижний - нетронутая природа, средний (или несколько их) - уровень дорог, верхний - природа со стертыми по маске линиями под дороги. Но только готового решения под такую задачу нет, а я уже говорил, я не так силен в графике, чтобы запилить собственный компонент.
>>71132 (Del)
Начал сейчас считать и понял, что их даже больше, чем 40. Я не посчитал все тройные дороги.
На каждом тайле могут быть следующие варианты конфигураций дорог. Дорогой я называю путь от края до центра тайла. Итак. 1 - нет дорог, 1 - все дороги, 6 - одна дорога с каждого направления с тупиком в центре, 6 - две дороги под 45 градусов, 6 - две дороги под 60 градусов, 3 - две дороги под 180 градусов (напрямую), 6 - три дороги под 45, 12 - три дороги (из них 2 под 45 и одна под 60), 2 - три дороги под 60 (трехконечная звезда), 6 - четыре дороги под 45 градусов, 6 - 5 дорог под 45 градусов. Итого - 55. На один вариант тайла. Короче, это точно не вариант так ебаться.
Не так, дели на два. Или даже четыре, лень думать. Потому что половина случаев - просто зеркальное отображение другой половины.
Да, это шесть вариантов, если рисовать дороги отдельным слоем. Если ты знаешь, как это сделать, то я рад буду послушать.
ЧЗХ, как мне заставить, что луч пролетал мимо layer 2
Возьми бесплатный ассет, попробуй с ним поработать. Понравиться поменяешь на более красивое.
Разобрался.
Проблема уже несколько лет существует (https://forum.unity.com/threads/raycast-on-child-gives-parent-name-in-hit-transform-name.57172/), а юнитя не может добавить пофиксить это, или добавить разъяснение в документацию, что, если луч ударил в дочерний обжект, то raycastHit.transform ссылается на родителя. Поэтому, если нужно получить именно тот обжект, куда реально стукнул луч, надо писать raycastHit.collider.transform.
Пиздец, как же я блять до того не додумался-то, это же блять так очевидно. Вот из-за таких странных багов, на которые тратишь по пол дня, мне прям очень хочется дропнуть юнити. Но потом осознаю, что в других движках тоже могут быть проблемы, да и изучать что-то новое времени нет, поэтому продолжаю страдать
>Вот из-за таких странных багов,
Это не баг, а особенность, у меня тоже несколько таких случаев было. Юнити хорош тем, что уже всё сто раз обсосано, нужно усиленно гуглировать
Физоний в юнити от нвидии, так что это не проблема юнити и пофиксить они её вряд ли могут. Если вообще хотят, сейчас-то на подходе два новых физона, все силы туда кинуты. Я надеюсь.
>очень хочется дропнуть юнити
Если тебе хочется дропнуть юнити из-за проблем, которые решаются за полминуты, то лучше дропай.
>решаются за полминуты
хм, и как бы ты за полминуты решил этот вопрос, не зная, что hit.transform.gamoeobject это не всегда hit.collider.transform.gamoeobject
Разве что на форум пошел спросить, где мне и помогли
Во всех туторах и примерах по рейкасту юзают hit.collider.transform а не hit.transform. Это уже ты навыдумывал что-то.
В гугл вбиваешь и читаешь десятки постов. На ансверхабе таких, как ты, очень много. Буквально с такой же "проблемой".
Хотя сначала я думал, что ты долбоёб из-за длины луча.
Ну, если работает нормально, то лучше не трогать. Если визуально, я бы вместо построчного повторения перменных, сделал бы всё в одну строку, соответствуя типу. Например:
public Vector3 Up, Down, Left, Right;
Код будет более компактным, а работать будет так же.
гуглил, у всех проблема - неправильно маску прописали или типо того. я все делал по их коду тем не менее, не получалось. ах да, писали везде raycastHit.transform а не raycastHit.collider. Но я на это особо и не предавал этому значения. С чего бы? Я же не знал, что проблема именно в этом. знал бы - тогда и проблемы бы не было.
у меня же была проблема:
есть parent с layer Raycast Ignore, и есть дочерний объект, который мне и нужно ловить лучом, минуя родителя. Но ловился всегда родитель
гуглил, у всех проблема - неправильно маску прописали или типо того. я все делал по их коду тем не менее, не получалось. ах да, писали везде raycastHit.transform а не raycastHit.collider. Но я на это особо и не предавал этому значения. С чего бы? Я же не знал, что проблема именно в этом. знал бы - тогда и проблемы бы не было.
у меня же была проблема:
есть parent с layer Raycast Ignore, и есть дочерний объект, который мне и нужно ловить лучом, минуя родителя. Но ловился всегда родитель
Котятки, я уже давно задался идеей реализовать управление через систему событий в юнити. Идея такая: есть скрипт, который отслеживает определённый ввод по нажатию кнопки/движению стика/етц, а затем запускает определённое событие, на которое подписаны объекты. Цель данной затеи в том, чтобы не отслеживать нажатие кнопок в апдейте для каждого объекта, как учат во всех туторах по юнити. В общем, мне такой подход кажется более целесообразным и красивым, но я не надеюсь на какой-то большой прирост производительности, а просто хочу повыёбываться. Подскажите пж, как это можно грамотно реализовать/что почитать/готовые решения, а то я новичок и лох. Заранее спасибо.
Грамотнее всего это реализовывается так.
Жмёшь Window, там выбираешь Package Manager. Там жмёшь import from git url. Туда вводишь com.unity.inputsystem.
public enum KeyType { A, B, C, ... и т.п. }
...
public event Action<KeyType> OnKeyDown;
public event Action<KeyType> OnKeyUp;
...
void Update()
{
if(Input.GetKeyDown(KeyCode.A)) OnKeyDown?.Invoke(KeyType .A);
... и т.д.
}
Запятые не нужны, бтв)
Ну ты предлагаешь всё равно через апдейт отслеживать нажатие клавиш, а я как раз хотел бы уйти от этого. Хотя я не представляю, как это можно сделать и можно ли вообще.
В одном скрипте будешь отслеживать, во всех остальных скриптах будешь подписываться на эвенты этого скрипта.
Есть Input Manager и Input System, никакой "новой" нет. Новой была input package, но сейчас она уже просто актуальная.
>Жмёшь Window, там выбираешь Package Manager
Жмешь Project Settings, там выбираешь Other Settings
Там дальше ещё схемы создавать и т.д. Не буду же я всё разжовывать, когда всё и так понятно.
Можно что угодно, можно хоть массив в массив и на массив, всё зависит от потребностей, скилла кодера который всё это пропишет и сам себя не наебёт где-то при передачи ссылки, и не создаст парадигму феллера.
Окей, спасибочки. На ютабе уже нашёл туторы. Цмок в пупок
Ты чего разверещался то, пердикс?
Даже если на сцене нет ни одной модели которая бы использовала / ссылалась на материал.
Создаю новый материал (не в папке Resources) получаю + 3мб к расходу памяти (графа Textures).
Так же не должно быть, чяднт?
https://blog.unity.com/technology/speed-up-your-programmer-workflows
Я не ньюфаг, но некоторых вещей не знал..
К сожалению ничего нового или интересного не увидел. Ньюфагам да, будет пара вещей полезна, особенно взять за привычку делать кастомный юи.
Как сказали выше - InputSystem.
С одной стороны удобно что оно за ьебя разруливает штуки типо "удерживай Е 5 секунд чтоб открыть ящик". С другой - GodObject 99% гаррантирован. И всё равно половину инпута прихлдится получать в апдэйте.
Ньюфани досихпор не научились в менеджеры? В чём сложность сделать уникальную обработку нажатий всего лишь в одном скрипте, не разнося это дело по миллионам других?
Это я если что про старый импут, новый адская параша.
На ютубе был урок по сабвей серферсу там шейдером легко гнулись дороги
OnTriggerEnter2D не работает без RigidBody на одном из них а в OnCollisionEnter2D не работают теги объектов
Каким ассетом?
Может я неверно выразился. Вобщем. Есть некий объект(без Rigidbody) который должен дойти до определенной точки и повернуть обратно. Пытался реализовать это через ОnTrigger и через OnCollision. Оба одинаково не работают. Что я делаю не так?
Вариант с заменой родителя игрока не работает.
Делается скриптом, отдельно.
А с русских уроках с ютуба во мне как-то очень плохо все усваивается, и четкой картины не составляется.
Подскажите какие-то русские книги мб или уроки, чтобы прям даже тугой понял
Звучит как нормальный костыль, попробую.
Делай, как отцы делали. Перемещай не игрока, а весь уровень.
не ну че юнити три дэ меня породило а убьет распутный образ жизни который я виду на деньги с треша в стиме
https://store.steampowered.com/app/1588160/Putin_VS_Zombies/
шо думаете достойно таким заниматься или надо идти на завод?
Данный шедевр игровой индустрии помог мне вылечить артрит, склероз и геморрой. Всем очень. Сюжет захватывающий, дизайн сногсшибательный, геймплей мощный.
Чел, если ты сумел не то что сделать игру, а её еще и выпустить в стим, поздравляю, ты успешнее 99% разработчиков из гэдэ, моё почтение, продолжай.
Только через главный менеджер на который у каждого обьекта X и Y появляется ссылка при спавне. Не вздумай дрочить апдейт в каждом из этих обьектов.
Сложнее или проще через него кириллить и можно ли им полностью заменить погромирование?
*отклеилось
Скачал блендер и сделал модельку (пик 1)
Закинул в юнити и сколько я не ебался то выходит пик 2, какого блять хуя, как эту хуету убрать, у меня жопа горит, работы на 5 минут что бы минимально блендер узнать и простую модель сделать, а я мозги себе ебу всю ночь
Выложи модельку
Юзай пробилдер и прогрид, блендер не нужон
Ты каждый мизерный вопрос будешь в треде писать и ждать ответа? Тысячи человек импортит из блендера в юнити, может кто-то уже задавал такой вопрос, гугли
>Сделал в блендере гекс, а он подтягивается со своим светом и камерой
Так в блендере на сцене удали источник света и камеры, омг.
>Камеру я убрал, а вот если без света в блендере пересохранить, то происходит пик 2 - моделька какого-то хуя поворачивается на 90.
Во первых после изменения модели делай апплай в блендере.
Во вторых, у блендера по другому ось идёт, нежели чем в юнити, и ты эту траблу решаешь либо питоновским скриптом при импорте, либо же сменой в конце координаты(Гугли, там 30 сек делов). Так-же влияет формат импорта фбх или сам бленд.
>Что за хуйня?
Первое что пробуй это всегда самому гуглить, смотреть туторы а ютубе, и лишь если не помогло беги на двачик спрашивать.
Спасибо, анон, сорян за тупость, я блендер открыл третий с половиной раз. Обещаю что тоже объясню все по порядку следующему такому как я.
Страшный секрет, только никому! Работать надо в инструменте удобным для тебя. Скачиваешь тройку самых популярных, юзаешь и думаешь
Асерспрайт для пиксельарта, крита для попыток в нормальнвй арт, гимп для пережемания фоток в текстуры.
Фотошоп. Для иконок иллюстратор
Фигма ван лав
Триангулируй полигоны в плендере
Через код реализуй анимацию, а эту паутину в помойку выкинь
Галочку looping убрать?
И не делать никаких переходов после анимации.
Должна просто зависнуть на последнем фрейме.
Рофлишь? Как только заканчивается анимация, происходит стандартный переход на самую первую от входа, если её нет, то ставится начальное состояние модели. Заморозить на последнем фрейме анимацию в юнити нельзя.
Забавно, это именно то, что нужно. Хорошо, что такая штука есть.
Берешь и создаешь. Канвас таскать не обязательно, но помни, что любой объект, который таскает на себе CanvasRenderer не будет рисоваться, если на каком-нибудь из парентов не висит канвас. То бишь, ты можешь сделать 100500 префабов кнопок с текстом/спрайтами, но обязан их всех спавнить в любом из чилдов канваса.
я сейчас делаю игру по вот этому туториалу в рамках освоения юнити:https://noobtuts.com/unity/2d-pong-game
Я сделал функционал описанный в туториале и помимо этого я хочу добавить следующее:
-главное меню
-счет
-возвращение положения ракеток и мячика в исходную позицию после того как кто-то из игроков забьет мяч.
у меня есть несколько вопросов по этим пунктам.
1.Правильно ли я понимаю что главное меню реализуется отдельной сценой/набором сцен?
2.Счет можно реализовать при помощи объекта UI а шрифт добавить при помощи Text Mesh?
3.Как реализовать третий пункт? Я пробовал менять позицию мяча и ракеток через присвоение значения полям position в классе Transform (возможно немного криво пишу, извините.) но visual studio ругается и говорит что "Не удалось изменить возвращаемое значение Transform.position так как оно не явлется переменной.
Заранее спасибо за помощь.
>Unity 2018.3.14f1
Едрать ты откопал тутор древнее чем чьято мамка! Чем тебя современные видео туторы от самих юников не устраивают? Куча всего меняется и используется по другому, лишь засоряешь голосу сторой не нужной инфой.
не слушай больного, в 2018 все тоже самое
делал спокойно офф тутор для 2020 сидя на 2018, все было идентично
Вот тут https://learn.unity.com/, самые актуальные туториалы. Смотришь видосик, делаешь по аналогии, всё расписано и понятно. И что главное от самих юников.
>но старые типа вообще бесполезны
Конечно нет, но смысл от затраченного времени почти нулевой. Но главная трабла может какая нибудь старая херня реализовываться которая в новой уже нету, или же не используется и есть более новые решения.
Актуальная версия юнити сейчас чтоб ты понимал Unity 2021.1.23. Думаю улавливаешь на сколько большая разница уже.
так, у меня сейчас стоит 2020.1.5f1f. как обновиться до актуальной версии? в хабе удалить текущую и установить последнюю (2021.1.23f1)?
последняя LTS - это 2020.1.5f1 которая у меня и стоит. получается это самая стабильная версия на данный момент?
я правильно в итоге понимаю что в Юнити все строится на сценах?
главное меню - это отдельная сцена, первый уровень - это отдельная сцена и т.д., так?
Я те говорю что в 2020 ничего существенного по сравнению с 2018 не заметил. (на черную тему похуй)
А, ну 2020 запускается медленнее и тормозит, да.
Чел ты ради прикола пробывал читать чейндж логи? Там туеву кучу всего фиксят каждый мини патч, а теперь подумай.
>Я пробовал менять позицию мяча и ракеток через присвоение значения полям position в классе Transform
Как ты это делаешь?
Один стоит на втором.
Если удалить нижний ящик через Destroy(); то верхний будет висеть в воздухе пока его чем-нибудь не стукнуть.
Как заставить верхний ящик падать после удаления нижнего без изменения метода коллизии на Continuous?
вот весь код скрипта для мячика. подчеркнут тот код, которым я пытаюсь реализовать возвращение мяча в изначальную позицию.
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;
}
static float hitFactor(Vector2 ballPos, Vector2 racketPos,float RacketHeight)
{
return (ballPos.y - racketPos.y) / RacketHeight;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.name == "RacketLeft")
{
Sound.Play();
//Calculate hit factor
float y = hitFactor(transform.position, collision.transform.position, collision.collider.bounds.size.y);
Vector2 dir = new Vector2(1, y).normalized;
GetComponent<Rigidbody2D>().velocity = dir speed;
}
if (collision.gameObject.name == "RacketRight")
{
Sound.Play();
float y = hitFactor(transform.position, collision.transform.position, collision.collider.bounds.size.y);
Vector2 dir = new Vector2(-1, y).normalized;
GetComponent<Rigidbody2D>().velocity = dir * speed;
}
if (collision.gameObject.name == "WallLeft" || collision.gameObject.name == "WallRight")
{
positon.position.y = 0.0429;
positon.position.x = -2.6;
}
}
}
вот весь код скрипта для мячика. подчеркнут тот код, которым я пытаюсь реализовать возвращение мяча в изначальную позицию.
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;
}
static float hitFactor(Vector2 ballPos, Vector2 racketPos,float RacketHeight)
{
return (ballPos.y - racketPos.y) / RacketHeight;
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.name == "RacketLeft")
{
Sound.Play();
//Calculate hit factor
float y = hitFactor(transform.position, collision.transform.position, collision.collider.bounds.size.y);
Vector2 dir = new Vector2(1, y).normalized;
GetComponent<Rigidbody2D>().velocity = dir speed;
}
if (collision.gameObject.name == "RacketRight")
{
Sound.Play();
float y = hitFactor(transform.position, collision.transform.position, collision.collider.bounds.size.y);
Vector2 dir = new Vector2(-1, y).normalized;
GetComponent<Rigidbody2D>().velocity = dir * speed;
}
if (collision.gameObject.name == "WallLeft" || collision.gameObject.name == "WallRight")
{
positon.position.y = 0.0429;
positon.position.x = -2.6;
}
}
}
Лям баксов точно стоил, может и десять, подписчики уплатят за всё
Важными делами занимаются.
>"Не удалось изменить возвращаемое значение 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" выдаёт максимум туторы по анимациям.
Под анимацией ты понимаешь методы Move или Interpolate?Обработай каждый элемент списка по отдельности в цикле. Вообще не понял проблему твою.
Под анимациями имею ввиду компонент Animation. Он просто физически не даёт анимировать списки.
Приделай Animation всем элементам списка по отдельности. Вообще опиши задачу нормально, что ты хочешь анимировать и зачем.
Ни насколько, болт это то же самое программирование, только с лапшой дрочиться неудобно и поэтому все кто юзает болт сосут болт
> Вообще опиши задачу нормально, что ты хочешь анимировать
Постараюсь описать понятнее
Абстрактно:
Есть List<GameObject>, задача изменять его содержимое во время катсцен, удалять, добавлять элементы по заранее заготовленному шаблону.
Изначально планировалось делать это через компонент Animation, но он не позволяет анимировать List<>, поэтому требуется найти другой метод это делать, не уступающий по простоте использования компоненту Animation.
Более конкретный пример использования:
Есть объект "группа рабов 1", на нём висит скрипт "управление рабами", с полем типа List<GameObject>, содержащем ссылки на каждого раба, формально принадлежащего этой группе.
Задача: "освободить" половину рабов из группы, то есть удалить из списка, причём "освобождение" является частью катсцены, то есть должно быть заранее заготовлено и вызываться анимацией.
Ограничения: тк групп рабов будет много, катсцен будет много, прописывать каждое изменение List<> вручную непрактично, нужно упростить процесс.
Надеюсь понятно расписал, если нужно, могу скинуть скрипты
> и зачем.
На днях Аллах явился ко мне (он тоже использует юнити) и сказал что я должен написать ему продвинутую систему управления муслимами, он хочет чтоб можно было в два клика мышкой создавать их группы, разделять их, автоматизировать, анимировать всё это и не париться с каждым муслимом вручную.
Не хочется писать скрипт рефлекта через Vector3.Reflect, есть какой-то способ это пофиксить через параметры физики или как-то ещё?
пик1 - рефлект в 2Д проекте (как должно работать)
пик 2 - рефлект в 3Д проекте (как НЕ должно работать)
пик 3, 4 - параметры Physic Material для 2D и 3D соответственно, которые применялись для объектов
Если что рефлект в 2D делал просто через Physics Material 2D, игроку давал скорость через rigidbody.velocity, тоже самое делал и в 3D, только использовал обычный Physics Material
А так можно? Использовать 2D компоненты в 3D рендер пайплайне? Не знал что так можно, спасибо
Конечно, можно - берёшь и вешаешь 2Д компонент, только убедись, что всё в правильной плоскости. 2Д физике нельзя оси повернуть.
Хочу запилить кликер на юнити
да, да, я знаю, иди нахуй
В общем суть - хочу иметь панель вкладок (порядка 10), если видели в глаза хоть раз idle игру для десктопа, то понимаете о чем речь.
И не совсем врубаюсь как его реализовать чтобы пооптимальнее.
Туториалы везде опираются на меню из 3х кнопок, и там ссылки на сцены, как то слишком ресурсоемко, имхо
Думал о чем то вроде 10 панелей и панель с кнопками, каждая из которых делает setVisible (не нашёл кстати в unity мда) определенную панель(или поднимает её поверх остальных)
setActive не подходит если что.
Какие будут идеи, как лучше это реализовать?
Пофиксил, спасибо, но все равно нихуя не работает. Как советовали в одном из гайдов - поставил пик 2. Перезапустил юнити и VSC. В визуалке появились две страницы с кодом, на несколько кусков которых ругалась визуалка. Я попробовал их удалить, В VSC ошибки пропали, но теперь вылезло говно как на пике 1.
Напиши сверху скрипта
using UnityEngine.UI;
А лучше выдели пару неделек на изучение C#, поймешь основы, и такие вопросы отпадут сразу.
>using UnityEngine.UI;
Написал, один хуй.
>выдели пару неделек на изучение C#
А каким образом лучше учить по твоему? Я когда курс по юнити на тытруба искал, так там все друг друга хуесосят и обвиняют в криворукости.
Блять, я рот ебал этого юнити. Оказывается, не надо было ебаться в каком-то стороннем файле с библиотеками, качать ассеты, етс, надо было тупо делитнуть старый проект и создать новый.
Если на канвасе, то
Через енейбл/дисэйбл компонент Canvasrenderer-a
Если у тебя панели не в УИ, то через енейбл/дисейбл мешрендерера. Это с т.з. производительности дешевле, чем сетактив.
Нахуй вы лезете в макакинг игр, когда не знаете основ макакинга общего назначения? Твоя задача решается через стек корутин которые задают сценарии поведения объектов заданного типа.
Вот есть у тебя лист рабов. Ты создаешь клас раьменеджер, пишешь в нем корутину, в которую передаешь массив ссылок/индексов на рабов из листа и сам лист. Корутина представляет собой сценарий событий, например запускает анимацию плюс выводит рабов из листа который ты в нее передал. Эта корутина универсальна для любых листов с объектами типа "раб".
Это в или чисио в редакторе потому, или у тебя в каком-то объекте есть скрип со ссылкой на материал, даже в эмпти.
Да, оказывается я сначала делал
gameObject.GetComponent<Renderer>().enabled = false;
gameObject.GetComponent<Rigidbody>().isKinematic = true;
gameObject.GetComponent<BoxCollider>().enabled = false;
И только потом дестроил, в другой функции. Похоже на какой-то баг.
А есть простой понятный гайд как точно профайлить без помех от редактора?
Не, нахуй, делать "правильно" физически больно. И очень большие проблемы в прикручивании контроллера к отображению.
в месте где я работаю юзают его, я хочу научиться, чел
Рекомендую посмотреть сливы курсов на рутрекере.
Jason Weimann, Максим Крюков. Если полный ноль - Brackeys. Но нет никакого смысла смотреть всё подряд, ищи то, что интересует и не понятно. Для развлечения и вдохновения - Sebastian Lague. Все остальные - только во вред или нудные, за редким исключением.
1)Какого-то хуя у генерируемого объекта не работает физика. Риджибоди подключен.
2)Без цикла после создания объекта сцена вылетает. С циклом происходит пикрил 2. Чому так? Ведь при каждом нажатии должен создаваться всего один объект.
Я вообщем-то нахуй в цикл полез - писал генерацию объекта по гайду с ютуба, написал слово в слово, но у меня нихуя не работает. Создает один куб и вылетает из сцены. Для примера поставил сферу, которая с тем же реджибади падает
Где я проебался и как это можно пофиксить?
>как ты умудрился в такой простоте запутаться
Тут скорее интересно, как один и тот же код умудряется работать на одной системе и не работать на второй.
По своему опыту скажу, накосячил ты. Я уже тыщу раз проклинал юнити в разных затыках, и всегда оказывалось что тупанул я или просто не знал как устроено. Судя по тому куда ты цикл воткнул ты вообще нулевый. Попробуй еще раз повторить урок
>Тут скорее интересно, как один и тот же код умудряется работать на одной системе и не работать на второй.
На всякий напомню, что код исполняется одинаково где угодно, на то он и код, а не что-то выдуманное или мысленное.
Если что-то не работает, или не то что ты ожидаешь, то единственный вывод - ты говнокодишь не понимая что делать. Есть супер редкие случаи багов самой юньки, но с вероятностью 99.9% ты их никогда не встретишь.
И что ты хочешь? Спавнить обьект? Ты его спавнишь. Хочешь свойства обьекта? Меняешь свойства. Что сложного? Я в душе не чаю чего ты хочешь, и что в твоём гайде. Может он старое гавно на старой версии и уже не работает.
Единственный путь это понять что ты хочешь, следом понять какой код написать.
>И что ты хочешь?
Хочу по нажатию кнопки спавнить объект N раз, и чтобы после спавна он падал.
Ща катка закончится, зайду в юньку и скажу точно где ты проёбываешься.
Только что зашёл, потратил минуту, всё работает, что у тебя не так?
https://www.youtube.com/watch?v=N-8jkDqR58U
Во долбаёб! У тебя ГетКейДаун обновляется кадый кадр и в каждом таком кадре спавнится физический хуй. Сколько кадров выдаёт легаси сцена? Ну скажем тыщу, на кнопку ты допустим нажимаешь пол секунды, то есть у тебя друг в друге создастся 1000/2=500 кубов. А теперь умножь это число на свой цикл for, и получишь 50000 полностью физических объектов в один тык. Сколько миллионов лет потребуется чтобы посчитать все коллизии между твоими кубами? А потом этот долбаёб спрашивает почему у него юнька вылетает. Съеби нахуй из треда учить матчасть.
>А теперь умножь это число на свой цикл for
Я цикл попробовал написать, потому что спавнился всего один куб
А хули у него миллиард кубов не спавниться? Он так же в юпдате пишет
https://www.youtube.com/watch?v=YuahY7ZSXJA&ab_channel=Zemlia
>почему у него юнька вылетает
А где я, блять, говорил, что у меня сам юнити вылетает? Я про сцену говорил.
Где воровать платные ассеты?
Меня больше шаблоны интересуют, посмотреть как там что сделано, чисто для примера.
Спасибо
1. Убери цикл в апдейте.
2. Проверь что в ригидбоди префаба стоит галка на юзгравити и снята с кинематик. Либо ресетни компонент
Нужно хоть изредко проявлять активность, написать хоть пару комментов, лайки ставить
Я просто предупредил анона, что если ему что-то надо - пусть скачивает сразу и не рассчитывает на свой аккаунт.
>изредко проявлять активность
А смысл заходить на эту помойку, если всё равно аккаунты стабильно стираются? Зарегался, взял что надо и забыл, что они вообще существуют. А ещё лучше - нагуглил что надо на любом другом сайте. Абсолютно теряется смысл заводить аккаунт, когда чуть что и его удаляют. Тем более этот сайт не несёт какой-то ценности, просто помойка, каких много.
Двачую вопрос. Неужели кроме каких-то древних форумов нет больше мест где люди обмениваются взломанным\ворованными ассетами?
Сообщества в тг\дискорде какие?
Не преувеличивай, я туда один раз год не заходил, аккаунт целый. Может нулевых без сообщений удалили и все
Да таких помоек тысячи. Вбиваешь в гугл Unity Asset Collection и вот уже одна. В тг тоже скорее всего есть, но в тг в принципе крайне неудобная навигация, хуй найдёшь что.
>>72512
Ну повезло значит. Проверь ещё раз, вдруг удалили, пока ты пост писал. У меня до бреда доходило, когда я раздаю, а аккаунт уже удалён. Так на эту парашу и забил.
>Проверь ещё раз, вдруг удалили, пока ты пост писал
Нет, всё хорошо. И cgpeers.to тоже цел, хотя там вообще ни разу не писал
1920x1080, 0:42
С чем это может быть связано?
У тебя в 2д офсеты детей относительно родителя 0 равны, в 3д нет, поэтому когда ты вращаешь родителя ты вращаешь и вектор офсета в 3д
Больше смотри таких же дегенератов на ютубе. Пиздец, хуею. Не разбираются и смотрят каких-то придурков, чтобы ещё тупее становиться.
Гугли Jason Unity и нахуй год не вылазь с его канала, ни дай бог что-то другое посмотришь - анус отвалится, и разумеется после этого уже никогда не будешь разработчиком.
Спасибо!
>Не смотри этих дегенератов в ютубе
>Смотри другого дегенерата в ютубе
Серьёзно? И это при наличии пачки официальных-то уроков.
Ещё одна нюфаня? Официальные уроки такое же дерьмо, в них очень много плохого кода. И они безумно затянутые к тому же. Не знаю как можно было так обосраться. Если смотреть что-то от Юнити, то только презентации, но это уже не начальный уровень.
А Джейсон профессионал с многолетним стажем, всегда отмечает, что этот кусок кода нежелателен и как его можно оптимизировать, если показывает какой-то быстрый пример. Человек отлично понимает как Юнити, так и программирование в целом.
Если человек пилит видосы про программирование это автоматически значит, что он вообще не шарит. Так что смысла его смотреть никакого.
Слова гения. Те, кто шарят, кидают ассеты и молча воруют код со стаковерфлоу и видосов на ютубе. Как ты. Потому что не в состоянии отличить хорошего программиста от плохого.
Вот, у тебя в голове не сказать, чтобы дельные мысли, но проблески бывают. Стаковерфлоу, там есть код. Заметь, тебе на ум пришел не ютуб. Потому что уроки в целом не должны быть видосами, это должен быть текст, а не бесконечно экание и бэкание на фоне пустого экрана. Видос про кодинг это автоматически сблёв, который не стоит смотреть. Да, я знаю, что большинство юнити-уроков это видосы, но они прилагают ещё и код, который можно почитать. Не то, чтобы я его читал. Можешь бесконечно защищать бесталанного ноунейма с ютабчика, но это ничего не меняет. Спасибо, хоть не с твича. Но я его даже загуглил, какая-то реклама unity3d.college с патреона. Мда. Ну ладно, никто не говорил, что уроки должны быть бесплатными. И вишенка на торте, я открыл его рандомный видос с ютуба. Во-первых, while в апдейте. Никогда так не делайте, потому что это может вызвать краш юнити. Во-вторых, геткомпонент в апдейте. Геткомпонент это довольно дорогая операция и делать его в апдейте не рекомендовано. Кешируйте ссылку на компонент.
https://youtu.be/YdERlPfwUb0?t=396
Как и говорю, всегда отмечает такие моменты. Но мне тоже не нравится, что он в принципе так оставляет, не понимающие люди всё равно начнут втупую копировать. В целом, хорошо описывает паттерны и другие штуки, когда нужно быстро вникнуть в тебе и дальше самому разобраться какое решение применить.
Но все объекты с rigidbody начинают перемещаться рывками.
Решается это через установку им интерполяции в окне настроек rigidbody.
Но юнити пишет про такую практику:
>It is recommended to turn on interpolation for the main character but disable it for everything else.
Какие подводные камни если на сцене будет сотня или больше rigidbody?
Ну и зачем делать заведомо неверно, чтобы другие копировали?
Хотя я тоже его смотрю, чего уж там.
Пытался слепить что то с ютуба но там все из разряда "5 роликов пишем тонны кода, вот наш инвентарь, можно в нем вещи перетаскивать и стакать" . При этом так и не понятно как в такой инвентарь пихать вещи из сторонних контейнеров. Кирилл удручен и просит о помощи
Потому что привычка. Он сам привык так делать и тебя учить делать неправильно. А как правильно он уже и сам не помнит, если знал вообще.
Отталкивайся от задач, Кирилушка. Универсальный инвентарь, возможно и существует но это будет платный ассет за 100 баксов предусматривающий все случаи жизни и ты такой никогда не напишешь.
Определись с тем что тебе нужно. В просто случае это информация которую ты хранишь в какой-то структуре данных состоящая из айди и класса вещи например, и рисование окошка.
>как в такой инвентарь пихать вещи из сторонних контейнеров
У тебя же есть драг-н-дроп, в функции стопа драга проверяй, над чем был стоп. Если это условный другой контейнер - перемещай предмет из одного инвентаря в другой.
Но вообще я пришёл к выводу, что инвентарь невозможно написать "правильно", в нём в любом случае будет куча каких-то ебанутых хаков. Вот берём мы перетаскиваем окошко, а юнити рисует все окна с соблюдением иерархии, что в югуи, что в юиэлементс. То есть нам надо перетащить это окно поверх всего, что уже как бы некрасиво.
А ещё асмдефы. Решил такой писать код "как положено". Есть "сборка" персонаж, есть "сборка" инвентарь, есть "сборка" гуи. Окей. Персонаж создаёт инвентарь, инвентарь создаёт гуи. Звучит логично. А теперь берём в гуи и взаимодействуем с инвентарём. Только вот гуи не может ничего знать про инвентарь и про персонажа. В общем, не советую асмдеф использовать.
Джейсон хорошие видео снимает, но ты какая-то его оголтелая фандырка походу. Помимо него есть заеюись и кэтдайк.кодинг и кодманки.
Нет, мне похуй на него, но пока один из самых адекватный из всех, кто делает ролики на все темы, поэтому последнее время стал включать его видео в поисковой выдаче. Несколько месяцев назад попал на какое-то очередное видео Кодманки и окончательно закрепилось мнение, что они - это что-то вроде зарубежного фламинго или как там его. Максимально уебанский код и ентри-левел туториалы.
Проверил на 200 коробках, стоящих друг на друге в ряд по 10 штук и падающих. Лок в 250 фпс держался, но сцена была пустая. Поэтому и не понимаю что не так.
Вопрос: не слишком ли сильно отобразится это на производительности? У него 1244 вершин/1939 граней/660 плоскостей.
И еще вопрос: как можно определить, что производительность хромает, если у меня железо хорошее? Вот я бы хотел узнать, например, сколько будет fps в i3 8100 +1050.
зы делаю на pc, но потом планирую на ведро, хотелось бы, чтобы можно было играть на мобилках от 13К рублей хотя бы, так что производительность да, важна
Я конечно нуб, но с дивана мне кажется что куча квадратных примитивов в качестве коллайдеров будет лучше чем один здоровенный дом.
Подкрепить фактами не могу.
Курс 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. Ивенты, воронки.
Курс 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. Ивенты, воронки.
Во-первых, твой "каркас" обычно делается из небольших примитивов, это буквально называется грейбоксинг. Мне кажется, так проще и тебе, и движку. Теперь к вопросу о коллайдерах. Большой коллайдер это плоховато, но ты вряд ли заметишь разницу. Просто если у тебя в одной из комнат дома будет падать условная чашка на пол, физика будет просчитывать, не может ли эта чашка контактировать с любым объектом в любой из комнат, ну и не только, захватится ещё лишнее пространство вокруг всего дома. Ну и по классике - меш коллайдер это дорого, используй составной из примитивов. Хотя разницы в 90% случаев ты просто не увидишь.
>Персонаж создаёт инвентарь, инвентарь создаёт гуи. Звучит логично.
Блин, тут подумал, что если заюзать MVC из вебмакакинга? Каждый объект состоит из трёх частей, модель, отображение и контроллер. Так я смогу связать логику и отображение объекта вместе. А условная сборка "гуи" будет содержать в себе только примитивные типы и сама гуй создавать не будет. Вообще заметил, что в гдаче по вопросам архитектуры даже срачей нет.
>половина начнет доказывать что надо делать на ООП+лапше.
В споре как-то проще добраться до нужных решений. Даже если не принимаешь точку зрения оппонента, всё равно как-то задумываешься над разными вещами. Как там с ецс-то дела, скинмеши прикрутили уже?
>менеджера уровнем выше.
Менеджеры это в принципе идея так себе. Но допустим. Есть какой-то менеджер, который создаёт персонажа, инвентарь и гуи к нему. И это ведь тот же mvc, только с прикрученным сбоку менеджером-фабрикой. В этот момент пытаемся взаимодействовать с инвентарём. Гуи инвентаря как это должен обрабатывать? Обращаться в менеджер он не может. Допустим, гуи может обратиться в сам инвентарь. А теперь гуи нужно перерисовать. И из инвентаря мы его перерисовать не можем, только из менеджера. Мне тут два момента не нравится, что персонажи со своими инвентарями не связаны и что менеджер получает очень большую зону ответственности. Наверное, переделаю сейчас на этот подход, а то из предыдущего невозможно передать ссылку на инвентарь персонажа в глобальном "гуи-менеджере", который рисует панели быстрого доступа.
Пройди по ссылке там группа под названием "Unreal Еngine на Русском"
Кто как решил эту проблему?
Нашел вот https://github.com/Anatta336/driven-decals.git
Но хз что там в теории с производительностью.
Поподробней можешь рассказать?
Просто plane/quad с текстурой?
Тогда на неровных поверхностях хуита получится.
Как кстати дырки на подвижные неровные модели лепить?
На персонажей и все такое.
>Тогда на неровных поверхностях хуита получится.
Ну и что, всем похуй на эти дырки, инди простят
Объект создается через GameObject.Instantiate под объектом, который задизебленен.
Таким образом. Start и Awake не будут дернуты для созданного объекта, пока его родитель (и он сам) не буду раздизейбленыны. Есть какой-то способ (или другие методы), которые можно использовать в данной ситуации?
Да, чайлдом. В GameObject.Instantiate в здается transform объекта
Ага. Пишешь нужный код в свой кастомный метод и дёргаешь его после инстансирования.
проблема в том, что это ряд компонентов, который может быть, а может не быть у игрового объекта.
Т.к. компоненты нельзя получать по интерфейсу, придется для каждого отдельное условие писать, если у каждого свой базовый класс уже есть.
посмотрел гайд и озадачен
почему нельзя сразу написать ghost.transform.position = ghost.home.inside.position?
автор что-то про это сказал но я не могу разобрать что именно на ангельском + съел окончания
Собственно, проблема, моб может ходить с переменной скоростью, от точки А до Б скорость может варьироваться от 1 до 2, например, если он хромает. Если использоваться скорость как константу, то местами он будет скользить, или на месте топтаться.
Поэтому анимация сама должна толкать моба.
Сейчас решил убрать нахуй компонент navmeshagent, и использовать только статичную функцию calculatepath. Еще не использовал, но, думаю, сделаю так. Получаю все углы, и просто поворачиваю объект от одного угла к другому по мере достижения. А анимация сама его будет двигать, то есть, позицию мне обновлять не надо.
С какими подводными могу столкнуться?
>С какими подводными могу столкнуться?
Анимация двигает трансформом. Если ты двигаешь трансформом - значит что объект будет проходить сквозь коллайдеры, стены и т.п. Двигай через rigidbody.addforce или character controller.
> значит что объект будет проходить сквозь коллайдеры
В основном у моба анимации ходьбы и бега - при запуске моб тупо бежит вперед, куда повернут его rotation.
Поэтому, все, что мне нужно, это изменять его rotation от одного угла к другому
На форуме юнити говорили.
при этом надо чтобы была навигационная сетка была запечена.
То есть, чтобы заставить двигаться анимированного персонажа, я должен его повернуть к ближайшей такой точки. анимация сама доведет его до нее. Когда он до нее дойдет - повернуть к следующей и тд, пока не дойдет конечную точку.
Потом его можно будет стопарнуть анимацией идлинга.
Сделай змейку, три в ряд, тетрис.
Можешь сам попытаться, можешь по туторам.
Как сделаешь поймешь, надо ли оно.
С инженерной вакансии вдруг прислали задание реализовать в Unity3d емкость с жидкостью и изменение уровня жидкости.
Это сложно для человека, который Unity и ему подобные среды разработки в глаза не видел?
Делаю игры на юнити около 5 лет, 2 последних года как главный. Очень доволен.
На дворе 2022 год почти а в шапке до сих пор втирают про unityscript
Да, 3Д. По ютубу сделал емкость через ProBuilder и скачал плагин Zibra liquids.
Ну, вода льется, только вот за границы выходит и если куб вращать на месте стоит.
прописывай объекту в Старте FindObjectOfAType<Нужный Тип>();
Вид меняется, но не физические свойства. Как сделать так, чтобы физическая высота поврехности соответствовала визуальной? Хочу чтобы объекты пиздячили вверх-вниз по волнам поверхности, а пока они игнорируют ее, им похуй. Как это сделать?
я из webgl пришел, мимоахуеваю
бля неужели я должен каждый раз рисовать HeightMap?
спасибо. тема топчик
Как лучше ее сделать? Я пытался в LateUpdate transform.rotation = nextCorner. Не помогло, пытался залочить всю спину - спина-то залочилась, а вот руки, и все остальное по-прежнему крутились, несмотря на то, что спина - их родительский элемент.
Шейдером никак.
Какой то велосипед - велосипедов делаешь, до тебя уже миллион раз делали. Загугли примерное решение и посмотри, всё делается намного проще и быстрее.
Этот способ требует несколько строчек код, и он простой, никакого агента. Он отлично работает, тут чисто косметику навести надо. А именно чтобы телом не вилял в определенных местах. Например, при приближении к углу.
Все решения в инете, где нужно подружить агента с навигацией, были сложнее, и требовали допила, чтобы корректно работали. Или вообще предлагали новые библиотеки.
Ну, в любом случае может возникнуть такая ситуация, что анимацию нужно подкорректировать с учетом местности. Не делать же мне отдельную анимацию "RunInCorner". Хотя уже думаю, что просто скачаю другую анимацию, где чел при беге не виляет, а прямо бежит.
Хотя и там могут молчать. Со вчерашнего дня оба моих треда без ответа
А ты чего ждал? У тебя крайне специфический случай, никто рутмоушном не пользуется, так у тебя ещё и гоняешь персонажа непонятно как.
>У тебя крайне специфический случай, никто рутмоушном не пользуется
Ну ладно. Пусть чела гоняет навмешагент. Но это значит, у персонажа будет постоянная скорость. А есть анимации с переменной, например хромота. В итоге чел скользит по полу
Не приходилось этого делать, но думаю в скрипте, который отвечает у тебя за ии моба можешь в апдейт закинуть условие, изменяющее velocity агента при условии хромоты.
https://docs.unity3d.com/540/Documentation/ScriptReference/NavMeshAgent-velocity.html
При повороте скользит
тя ебёт?
недавно
В чем проблема? Анимации есть на mixamo, бесплатные базовые модели тоже можно найти, если нет, то сделать лоуполи. Даже скрипты и тех куча.
создатель 3Д игры только из кубов
Воруй и переделывай.
Никаких. Проблема появится на моделях сложнее куба, которым надо будет делать развёртку, рисовать текстуры, и анимировать.
Недавно начал искать работу джуном, вакансий норм очень мало (без опыта чтобы и без сверх. скиллов). Написал один челик, ищут типа джунов и готовы меня рассмотреть после тестового. Тестовое я сделал, после оценки сказали хорошее и готовы (внезапно) давать пробовать пилить прототипы ГК. Собеса даже и не было. Но то хуй с ним. Но вот цена это пиздец. Начальная ставка аж 2$ в час.
Я конечно понимаю что геймдев это не ВЕБ какой-то, да и я зеленый джун. Но блять, это же крохи пиздец.
Вот и думаю соглашаться или нет. С одной стороны я готов пойти чтобы опыт капал какой-то. Но с другой, это же ебаные прототипы ГК (даже не фул игры), и ебаная галера раз платят так мало. Там не ревью, не менторства не будет. Так какой опыт я там заработаю я хз. Проще уже самому идею взять с ютуба и пилить ее периодически подсматривая решения. И в спину никто не давит дедлайнами.
В общем, хз как поступить. Есть тут братья работающие?
Во-первых, делать гиперказуалки на самом деле труднее, чем сидеть месяцами на большом проекте. Поэтому опыта будет нового предостаточно.
Во-вторых 350$ / мес для зеленого джуна, вполне норм.
Но ты, скорее всего быстро выгоришь (а.к.а. заебешься), потому что, опять таки, делать гиперказуалки это на самом деле трудно, а тебе придется выпускать примерно одну в неделю.
Если хочешь больше, сделай себе красивой портфолио в виде дев. аккаунта на гугл плей и/или гит.
Я не говорю что их делать легко, они разные бывают. Некоторые механики вообще хуй пойми как сделаны. Я говорю про то, что меня будут заставлять делать прототипы ГК на отъебись, без ревью и прочего. И вот стоит оно того или можно еще работу поискать а пока ищу, самому пилить прототипы и без переработок и заебок свыше.
Вообще, я в ахуе видеть что в айти 350 норм. Даже джуну. Ну правда, смешно. Или это геймдев такой где нет норм зп. Пока не понял.
>>74410
Гит есть, нахуй никому не нужен. Ну судя по игнору от хрюшек. В плей маркет хз че лить. Точно не прототипы недоигр. А заканчивать такое это не один месяц может уйти. И опять же, вдруг похуй будет и снова не кто не глянет.
Блять, в шапке надо еще писать, что хуй устроишься на работу если вдруг решили сюда вкатываться.
>Вообще, я в ахуе видеть что в айти 350 норм. Даже джуну. Ну правда, смешно. Или это геймдев такой где нет норм зп. Пока не понял.
А ты поверил в сказки про 300к / сек? На самом деле это не сказки, просто нужно годик - два поРАБотать за "копейки"
>делать прототипы ГК на отъебись
Ну так-то ты на ревшару обычно претендуешь, нет смысла делать на отъебись. Так-то если есть возможность не работать то делай сам, можешь даже в издательство отсылать на тесты.
например gameObject.transform
Где удобнее, и что понятнее там и делай. Разницы в этих двух движках давно уже почти нет. Что-то лучше там, где-то проще там. Вкусовщина.
Сам юзаю юньку около 5 лет, и паралельно анрил 2 года.
Потому что камера мейн это поиск по тегу MainCamera. Проверяй тег.
Олсо, аноны, а кто как раелизует базу данных? Я пока что придумал только создавать под каждый объект скриптейбл и плюс-минус организовывать через другие скриптейблы. Но выглядит не слишком гибко.
Пиздец. Везде всё прокликал и не заметил этой очевидной штуки, выручил
Мне не нравится sqlite. Чтобы использовать пароль нужно отдать два вечнозелёных килорубля. Это много. Можно запаковать базу, а не хранить её в streaming assets, но тогда нужно будет её всю загружать в память. Это плохо. Меня не интересует какая-то серьёзная защита, но когда база лежит в открытом виде и редактируется за полсекунды это как-то хуёво.
Предметы хранить, параметры, вот это всё. Для рпг-лайк игры. Сейчас пилю расширение редактора, чтобы не утонуть в файлах и никогда не заглядывать в папку с ними. Получается не слишком гибко, но лучше, чем ничего.
Может тебе монга сгодится? https://www.mongodb.com/developer/how-to/sending-requesting-data-mongodb-unity-game/
Не знаю, если нормально организовать данные это буквально пару словарей. Не могу представить ни одной ситуации, когда нужно подкручивать полноценную бд.
>IQ Dev
Подпекает с таких названий, ну типа iq, ну вы поняли, мы тута умные все сидим, интеллектуалы короче.
Как убрать этот пиздец, как на пике? (хотя в боевых условиях работает он все же хорошо)
Я слыхал про blendrtee, но он годится для объединения одного типа анимации (бег влево, бег вправо и тд).
Ну, допустим я могу запихать в blendtree анимации:
1) стоять (x=0)
2) оглядываться (x=0.5)
3) бежать (x=1)
Допустим, чел стоит, я и хочу чтобы бежал.
Я могу с 0 поменять до 1, он побежит, но это будет без плавного перехода от анимации "стоять" до "бежать".
А если я буду плавно менять 0, 0.05, 0.1,0.15 .... 1, то это коснется и анимации "оглядываться ". В итоге весь этот переход будет выглядеть странно.
>finding yourself needing to make use of a database in the cloud?
Явно не то, что мне нужно. Хотя традиционную sql базу делать всё равно надо, но там уже просто парсинг файлов и заливка куда-то в постгрес.
>>74499
БД это в принципе удобно. Тем более дальше я захочу добавить квесты, ещё какие-то параметры, так бы создал таблицу и погнал. Скриптейблы не слишком удобны, делать свою бд на основе жсона или xml это шиза. Адекватная поддержка mysql была бы кстати.
>буквально пару словарей
Да пока списками обошёлся, номер списка в качестве ключа сгодится.На сколько я помню, юнити не умеет сериализовать словари. Но всё равно не нравится создавать по файлу на каждый предмет, надо как-то оптимизировать. Либо делать массивы в скриптебле, который играет роль таблицы, но тут меня пугает добавление новых полей, не проебётся ли вся старая информация.
Там чето типа ноды энистейт надо исполтзовать, а на транзишены от нее ставить условия перезода от этого энистейта в анимацию.
в vmware заблочена возможность установки макоси, но есть кряк под 15 версию (вроде)
но учти что и 15 версия уязвима и есть способ заражения зондами основную ОС
>есть способ заражения зондами
Какая разница если использовать только для билда?
Эпл стор пропустит?
спасибо за наводочку, то что мне нужно
вот как оно в жизни бывает.
Пишешь код абы как. Похуй, лишь бы доделать и лишь бы работало. Все равно скачает от силы 5 человек.
А потом тебе становится похуй на свое желание "лишь бы доделать", и появляется чувство прекрасного, и ты начинаешь править свой код, шоб было красиво и правильно.
А потом, уставши, осознаешь свою никчемность, и снова пишешь код абы как.
колесо сансары
Настройки запекания Occlusion culling такие:
Smallest occluder - 0.5
Smallest hole - 0.4
Backface - 20
Использую Юнити 2018 LTS.
спасибо, анон, сейчас выглядит более-менее, как на скриншотах от других челиков. давно терзался этой проблемой
Сап аноны, такое дело пилю АИ противника на навмеше всё ничего, быстро, дёшево и сердито, но один косяк, КАК УПРАВЛЯТЬ МОДЕЛЬЮ В НАВМЕШЕ? Короче когда охранник теряет игрока то возвращается на стартовую точку, но стоит при это условно лицом к двери, а мне нужно чтобы это даун стоял спиной к двери.
Как обычно, вытягивают информацию о положении модели из навмеша АИ, чтобы я мог её развернуть?
Насколько я помню, навмешагенты можно поворачивать через transform.rotation без подводных камней.
ну нахуй, она же в альфе
пишет что он снаружи проекта
Отслеживай дистанцию до двери или состояние охранника двигается-стоит и как только он подходит к двери или останавливается, пусть отворачивает хлебальник.
Спасибо за ответ, я уже на бугорном ютубе нашел немного другой ассет. Слушай, а как минимально по времени перебить ассетные анимации на свои?
1 - кольцо
2 - каждый джоинт в нём
3 - физика.
Посоветуйте годных слитых курсов на русском в фоне послушать.
Желательно с более углубленным разбором физики и/или шейдеров, да и вообще нормальный разбор рендер-пайплайна и что мне из него нужно знать, а что ни в коем случае не трогать.
Уже полгода пытаюсь сделать свою игру, но вечно упираюсь в одну проблему Я НИЧЕРТА НЕ ПОНИМАЮ! Смотришь гайд, где вроде как все понятно объяснят, так в коментах его засрут и скажут, что все не так используя кучу непонятных слов и букаф, пытаешься смотреть прокачанных ребят, так они сами говорят какими-то непонятными словами и бууквами. Однако сколько курсов я не смотрел нигде не было видевоурока в котором бы произошел этот момент перехода с базы, на сложные буквы и слова. Кароч я в отчаянии анонче, кажется что я мегатупой валенок который ничерта не способен понять в этой жизни(
1280x692, 0:01
Делай базу, потом преисполнишься в познании и перейдешь на сложные буквы.
Сделаешь как в туториале
@
Обнаружишь, что чего-то не хватает (универсальности/производительности/фичи, которая задумана в твоем проекте и тд)
@
Бля, а как сделать получше
@
Так вот зачем эти сложные буквы
Короче практикуй и всё получится.
>засрут и скажут, что все не так используя кучу непонятных слов и букаф
Это дрочеры на корпоративные стандарты. Им необходимо, чтобы каждый использовал KISS, SOLID, синглтоны и прочую херню. Потому что их на работе заставляет это делать менеджер, который даже не знает, что все эти слова значат. По факту ты можешь уже использовать все эти буквы, не зная, что они на самом деле значат. Сделал статик класс? СИНГЛТОН. Сделал класс, который спавнит кубы? ФАБРИКА. Разделил гуи и данные? MVC. Не совсем так разделил? MCVV или MVCC или хуй моржа. Можешь загуглить все эти буквы, короче. Сейчас тренд один, архитектура, ориентированная на данные, это единственное, что тебе не мешало бы знать и использовать.
Любая информация - информация, лол. То что тебе печет с инфоцыган не значит, что там не рассказывают полезные нюансы.
Признаю долбоеб, немного поебал шары и понял.
>>75055
>>75114 - этот правду рубит, без визуала, аудио в чистом виде больше запутает чем научит, как ты собираешься запоминать всякие графики и остальные хитросплетения?
>>75164
Изучи вобще тему тему программирования, сначала простое, потом ООП и забудь (судя по специфике кодинга на юни), но все равное пойдет понимание как гуглить и что тебе надо.
>>75184
А вобще этот говорит правду. У тебя есть в голове игра делай любыми способами, главное чтоб фпс не падал и проект не весил терабайт за 2 минуты гейплея
В принципе можно, но я бы не советовал. Чем больше Go в сцене, тем больше мс займёт сортировка окклюжн куллинга. Лучше посмотри в сторону аддитивной загрузки сцен в рантайме.
Как понять, что ты конченный? Написать около 2к строк кода, которые ничего не делают. Упоролся в эту ёбаную базу данных, в какой-то момент решил, что ну всё равно же связывать это с инвентарём. Так что создавать автоматически атласы и класть туда спрайты для инвентаря это хорошая идея. А ещё все ГО можно паковать в адресейбл ассеты.
>Скоро 2022, а в юнити все еще нет стандартного средства для декалей от выстрелов.
Декали улучшены и теперь доступны как для URP, так и для HDRP.
В URP были добавлены декали с двумя режимами: экранное пространство или использование DBuffer. Последняя версия менее адаптирована к архитектуре мобильных графических процессоров, но дает доступ к свойствам поверхности для более продвинутого смешивания.
UX также был улучшен для размещения декалей проектора с помощью инструментов преобразования точки поворота и масштаба, поддержки Prefab и возможности множественного выбора.
В HDRP был добавлен параметр обычного смешивания, улучшающий смешивание неплоских форм, а полный шейдер декалей HDRP теперь доступен из графика визуальных эффектов.
Зайди в проджект сеттингс, там найди Quality и выбери Ultra. Ещё проверь, чтобы там же в Texture Quality было выбрано Full Res
>Это откуда такие картинки интересные?
>Особенно первая.
Как вы геймдевом занимаетесь, не следя за новостями и обновлениями своего движка. Тебе сложно что ли на сайт захаживать или на юнити твиттер подписаться? Лучше в тиктоке сидеть
https://blog.unity.com/technology/whats-new-for-artists-and-designers-in-unity-20212-0
>October 29, 2021 in
Ты хочешь чтобы я юнитековские новости рефрешил каждый день?
Следить за обновлениями на продакшене смысла мало, больше вероятность похерить все при перекате на новую версию.
спасибо, но там все нормально включено было. Когда строишь локацию, все текстурки хорошие если приблизить, как надо (пик 2). А как загрузишь в игру там если приблизить то хуево (пик 3).
думаю это как-то с настройками камеры мб связано?
Во-первых, у тебя не назначен рендер пайплайн ассет. Если не импортировать SRP, то поля вообще не должно быть, а если импортировать и не назначить, то он не работает. Во-вторых, а как ты приближаешь? Если через перемещение камеры и\или FOV и текстуры бесоёбит, то переключи разрешение гейм окна на фиксированное, я обычно всё проверяю на Full HD. Если это не помогает, то проблема в фильтрации текстур. Билинейная фильтрация ок. А вот если ты "приближаешь" через ползунок скейл, то всё так и должно быть.
да, приближал через ползунок. Про остальное вообще не шарю, но попробую разобраться
Когда ты в режиме сцены крутишь колёсико, то фактически "камера эдитор мода" перемещается. Когда ты таскаешь скейл, то у тебя просто итоговая картинка растягивается. То есть как бы очевидно, что будет пикселизация, если пикчу растянуть в пять раз. Тебе нужно двигать камеру.
теперь понял, не догонял что это так работает
R S S
S
S
Попробуй еще захочешь, технология старая как говно мамонта. Все ей пользуются, нахуя еще что-то?
Так я о ней и писал. В хроме из коробке нет поддержки rss фидов, у меня они открываются, как xml просто. В строке адреса нет кнопки rss, нужно долго и нужно искать ссылки на фиды. Короче rss почти умер, все забыли.
> нахуя еще что-то?
Есть ещё Atom.
Один объект можно "сконтачить" с другим множеством способов, к примеру :
Кирилл = GameObject.Find("Кирилл");
Как можно "сконтачиться" с компонентами объекта?
К примеру
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
///выключить/включить/передать значение аниматору кирилла///
}
}
кирилл.гетКомпонет.аниматор, и дальше что хочешь делай с аниматором кирилла
Блядь, как обычно спросил и понял. Exit Time криво стояла
Например, есть компонент карта. Все методы и переменные, которые в ней есть, относятся именно к карте. Так что этот компонент можно легко переносить из одной игры в другую.
И еще, например, есть компонент "дверь" и есть "ключ". Ключ не должен знать, что он может открыть конкретную дверь, а дверь не может отслеживать, какой именно ключ к нему применили. Компонент "ключ", возможно, вообще может не содержать никакого кода, а дверь может лишь иметь методы Open() и Close(). Вся это логика открывания-закрывания должна лежать именно в отдельном классе. Например, в нем можно указать ссылку на дверь и на ключ, и этот же компонент проверяет, что, если у игрока есть ключ, то он может открыть такую-то дверь.
Хуй знает как пишут всякие студии, но ты можешь писать как хочешь. Вообще твой вариант выглядит логичным и удобным
Я бы делал по-другому. В двери есть инт айдишника ключа, в ключе есть свой айдишник. Применяешь ключ на дверь, дверь проверяет айдишники и открывается. В отдельном классе заебёшься, тебе придётся создавать списки дверей, ключей и т.д. А если окажется, что один ключ может открыть две двери либо одна дверь может быть открыта двумя-тремя ключами, то можно пиздануться.
Ну в целом да, это же принцип SOLID и прочих взрослых букаф.
Но жаль что не всегда так получается писать. По крайней мере у меня. С точки зрения архитектуры проекта это крута. Разделенная логика и т.п. Но когда ты делаешь проект в соло, у тебя таких абстрактных классов не знающих друг о друге может переваливать за еба кол-во в n степени.
Мне вот дают задания делать вонючие ГК и я не могу туда впихнуть эту парашу с единой ответственностью. Поэтому пишу иногда как жмыхи-бородачи с ютуба. Типа, есть мелкий скрипт (объект) который нихуя не знает, а этот мелкий скрипт в свою очередь держит в себе скрипт по крупнее. И т.д. Компонентный подход короче. Хуй знает, правильно или нет, но прототипы делаются.
Ну смотря какой. Они разные бывают. Но в целом, у меня 2 недели примерно уходит до создания прототипа. В прототипе у нас обычно 1-2 уровня, ну и вся механика игры работает. А потом если тесты проходит, то полировкой и доводкой занимаются уже другие челы еще недели 3-4.
Я бы сделал так наверное:
есть ключ у которого есть только идентификатор, который задается в инспекторе, либо в другом классе
есть дверь, у которой тоже также есть идентификатор. И метод который берет идентификатор ключа и сравнивает с ключом, если они совпадают, то дверь открывается
Хуй знает, может я долбаеб, но в моей голове выглядит норм
Как стать таким как ты? Запилить себе партфолио из пары игр на гугл плей и стучаться в издательства?
Неудачником делающим прототипы ГК за 50к в месяц? Блять, да лучше не надо. Я то на свою шарагу устроился даже без собесов и прочего. Просто в чате пиздел в телеге и написали.
На ХХ было несколько собесов, но там такие кабанчики, думащие что я буду делать их тестовое на 3 дня рассчитанное. Но если у тебя с этим проблем нет, то можешь попробовать.
А вообще, просто сделай резюмехи везде где только можно, социализируйся в деве и думаю найдешь работу. А пока ищешь сделай пару простых ГК игр, подключи сдк и рекламу типа ты еба крут. Думаю ты уже сделаешь больше чем 90% соискателей.
1280x720, 0:20
спасибо, получилось
Я перса с анимациями с блендера закидываю в юньку и кости предплечий немного сжатыми получаются, подскажи почему так?
Я хуй знает, почему ты мне вопрос задаёшь? Я сам в ахуе с того что у меня не получается
Потому что хуйню какую-то спрашиваешь, тут экстрасенсов нет
В каком смысле своровать? В ассет сторе не нашёл, скачал через покет менеджер и всё вроде работает. Или это обрезанная версия?
Спасибо, пробилдер то что и было нужно
У нас есть GameObject Кирилл с прописанной в скрипте
public float speed=0;
Есть триггер-активатор Кирилла который по идее должен заставить кирилла двигаться в сторону компа и таки сделать игру мечты
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "Player")
{
///speed Кирилла меняется с 0 на 1///
}
}
что нужно дописать в триггер что бы в скрипте Кирилла поменять переменную speed?
Типа триггер находится в другом скрипте и ты не знаешь как поменять переменную из другого скрипта или что?
Если да, то просто берешь ссылку на скрипт кирилла, либо через инспектор, либо через:
"hyinya = gameobjectКрилилл.GetComponent(scriptКирилл);"
и потом "hyinya.speed = 1;"
Короче, если запустить StartCoroutine(f1) впервые, то в дебаге выдаст "f1 start".
А если я потом остановлю корутину StopCoroutine(f1), и запущу снова, то этот дебаг больше не выдаст, то есть, код, который вне while, выполняться не будет. Отныне всегда будет выполняться только тот код, который в while.
Можно фиксануть?
Блять, три часа думал, почему все так хуево работает. А оно вон оно как оказалось.
Гугли как запускать корутины, чтобы можно было надежно останавливать, вообще почитай про корутины, чтобы не быть батхертом
А в чем была цель такие приколы писать
Переменная HorseScript должна быть типа того скрипта, которого ты пытаешься в нее засунуть HorseMove как я понял, а она у тебя GameObject
>Что делаю не так?
Вообще всё, если по туториалу делаешь глаза из жопы высунь и нормально будет
https://assetstore.unity.com/publisher-sale
Только что купил все 3, все работает
На первом видео - неправильная анимация(без WaitForFixedUpdate)
На втором - правильная анимация (с WaitForFixedUpdate)
А почему для этого не использовать аниматор без всяких доттвинов? Что тут такого что нельзя сделать без этого?
Вообще просто не пробовал, но думал об этом. У меня эффект получения урона может происходить во время любой анимации, а разве можно запустить например поверх анимации атаки анимацию изменения цвета?
У меня несколько типов врагов, у всех разные геймобджекты и разная иерархия объектов. Тела, которые должны меняться находятся в разных местах. Мне же придётся создавать отдельную анимацию изменения цвета тела на каждого врага, потому что одну анимацию можно привязать только к одному геймобджекту?
Я тут захотел поиграться с этим вашим юнити, скачал, поставилось, но первый же пример из встроенного в эдитор туториала начал работать всрато - в туториал лейауте написано "выбери объект во вкладке "иерархия"", а этой вкладки нигде нет, лол.
Я так понял, что это лейаут какой-то всратый, потому что при переключении на Layout->Default всё появляется и на первый взгляд работает.
Ты поехавший совсем что ли? Одни гдшники свои движки пилят, а ты не можешь окно иерархия открыть?
Ещё раз, в лейауте "туториал" такого окна вообще нет. Даже если я сделаю View->Panel->Hierarchy, то оно ничего не показывает.
Ещё пример: в туториале говорят "нажми play" чтобы начать играть. Я нажимаю, начинается музыка, но играть нигде нельзя, потому что кроме туториала ничего перед глазами не видно. При этом если я переключу лейаут в default, то увижу окошко со сценой и при нажатии на play смогу там что-то потыкать.
Я считаю, что "туториал" забагованный на линуксах.
Чтобы добавить новый язык, достаточно открыть файл, и добавить новый столбец, и даже игру заново собирать не нужно. Этот новый язык (берется из первого ряда) появится в dropdown списке.
им и пользовался сначала. но мой метод лучше, проще и гибче. а с этим пакетом пердолинга больше.
У тебя не метод, а просто описание где хранится локализованный текст. Как он подставляется куда нужно? Как локализуются не текстовые штуки, спрайты например? Как в текст добавить переменную, например Привет {player_name}? И тд и тп.
Мускулы у шестиногого домика? Ты совсем ёбу дал?
В данный момент выбираю нишу для развития в сфере геймдева (всегда нравилась эта индустрия). И вот у меня выбор стоит между изучением Unity и изучением Blendera.
Понимаю, что это разное но всё же. Насколько востребованны те же джуны в юнити ? Сколько времени требуется на вкат при хардкор обучении ?
Буду рад каждому ответу.
Не знаю, как там у тридешников, но для вката в юнити джуны тебе потребуется портфолио с готовыми проектами. Так что готовь три в ряд
Короче эта хрень следует за камерой, а не стоит на месте с физическим интерфейсом, не смертельно, но гемор конечно прибавился в редактирование. Надеюсь пофиксят.
Но сам сижу и думаю, насколько целесообразен такой переход в каждом отдельном случае. То, что я делаю через описания состояний, могу также прикрутить парой иф элс и созданием чаилда для своего объекта. Это костыль? Следует себя во всем дисциплинировать или для простых вещей забить?
Или вот еще момент. Будет у объекта скажем несколько состояний. Но есть поведение на апдейте, которое останется единым для них всех. Как с этим быть? Вынести его в объект-контроллер? Тогда нафига создавать все эти классы состояний, раз по мимо них все равно отдельный привязанный к объекту скрипт понадобится. Прописать поведение во все состояния? Выглядит излишне. Дайте советов хороших.
https://www.youtube.com/watch?v=Vt8aZDPzRjI
Я вообще так понял, это в любом случае понадобиться для пришивания большого количества анимаций. Насколько метод необходим глобально?
нахуй ты кому нужен в юнити без навыков в блендере, это в принципе созависимые вещи. Либо можешь пиздовать за 40к/месяц работать над проектом пердящей тёлки сплошь из купленных ассетов
В принципе сам себе уже ответил. То, что обновляло четыре ифа изначально с помощью этих состояний теперь обновляет один иф. Получается обязательная хуйня для объектов с хотя бы двумя разными состояниями.
>Нужен совет умелого проггера
Программирую 2 месяца, но даже я тебе скажу, что ты какую-то хуйню написал, какие у тебя поведения в апдейте?
Паттерн поведения используется для создания, как это не странно, поведения
Если ты хочешь в игру добавить в будущем, допустим, выбор расы или класса, какие-нибудь приколы с idle в афк, берсерк-мод и прочее, то закладывай поведения, а если у тебя линейность во всём, то нахуй надо
>Создают пустой абстрактный класс
насколько я знаю, к состояниям подходят через интерфейсы, а твоё описание больше похоже на дженерик, это другая тема, смотри нормальные уроки, а не майнкрафтеров всяких
https://www.youtube.com/watch?v=tSQq-s6dvxE
я про подобных миллиардеров
А блендер в любом случае нужно осваивать, банально для IK даже, в юнити охуеешь нормальную анимацию делать
Зачем он такой прыщавый
У тебя ифы рано или поздно разрастутся до просто невъебенной херни. Так что стейт машина это мастхев.
Глянул, он делает состояние, да, но делать его через абстрактный класс - хреновая затея в данном случае, так как C# не поддерживает множественное наследование, в отличие от других языков. Представь, что у тебя есть транспорт в игре, ты создаешь дженерик (абстрактный класс) Vechicle от которого наследуются разные типы: авто, самолет, ракета, инвалидная коляска и т.д, и потом ты захочешь ещё добавить поведение: транспорт сломан, нет бензина, улучшен...тогда ты начнешь ебаться через костыли и дубли, а нормальный пацан бы сделал состояние через интерфейсы, а потом добавлял их ещё сколько угодно
Я туго соображаю. А задача с видами транспорта и состояниями транспорта не решается двумя дженериками vehiclebasetype и vehiclebasestate?
Я только начал, не знаю, что за интерфейсы.
Интерфейс это такой базовый класс, который содержит в себе только информацию о непосредственно классе. Делаешь ты персонажа, начинаешь с интерфейса ICharacter. Персонаж может ходить, стоять и срать. Значит, в интерфейсе должны быть функции Walk, Stand и Shit. Но это пустые объявления функций, без реализации, интерфейс не может содержать реализацию. И если ты унаследуешь от интерфейса класс Character, то среда разработки тебе выбросит ошибку, что у тебя нет явной реализации заявленных функций ходьбы, стояния и сранья. Сам я агитирую за то, что интерфейсы не нужны. Не тот, кто писал тебе до этого.
>интерфейс не может содержать реализацию
Нудное напоминание, что с недавних пор может https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods
Нихуя не понял, ICharacter имеет функции Walk, Stand и Shit, но они пустые? Допустим я создаю еще два класса и наследуюсь от ICharacter - IErohin и ISychev. В них я переопределяю функции Walk, Stand и Shit? Нахуя тогда нужны пустые интерфейсы в ICharacter если мне один хуй их прописывать у ерохина и сычева отдельно?
мимодругойвкатывальщик
Погуглил. Я правильно понял, что если у абстрактного класса не описан ни один из методов, только объявлены. То это и есть интерфейс?
Даа, но нет. Восьмой шарп? В юнити?
>>76969
>я переопределяю
Нет, не переопределяешь, просто реализуешь.
>один хуй их прописывать
Потому что тогда ты будешь обязан закодить их реализацию. Да, можешь просто сделать пустой войд или выбрасывать исключение. Интерфейс это своего рода обязательство, что такие-то функции будут реализованы. Не более.
>>76970
Не совсем. Абстрактный класс это же класс, а интерфейс даже объявляется не так.
два дженерика невозможны, так как
> C# не поддерживает множественное наследование
Интерфейсы - это другой уровень абстракции, их может быть много
> Я туго соображаю
На каких-то рандомных туториалах давно не уедешь, начни с беглого чтения C# для чайников, потом язык программирования Троелсена зачитывай, потом, если захочешь, Рихтера CRL via C# освой, и, наконец, тонкости Скита, тогда ты, скорее всего, будешь знать язык на уровне мидла
Делаешь миксер
Во всех audiosourc'ах добавляешь реф на него
Двигаешь каким нибудь способом ползунок в миксере
!???
Профит
Пару вопросов по XR Interactor Toolkit'у
как правильно реализовывать хваты
как работать с UI
и пару вопросов по Skinned Mesh Render'у
Оставляй контакты, и время в которое удобно будет поговорить.
Алсо, так-же можно сделать для многих механик не требующих просчёты каждый кадр.
Где и как хранить эти данные?
1) Создать к каждому уровню json, а потом, перед загрузкой уровня, парсить его?
2) Создать каждому уровню scriptable objects, а потом подгружать его через Resources.Load?
3) ???
4) Закешировать 500 переменных с ссылками на на хранящиеся scriptable objects это что-то совсем наркомания
Или я хуйню придумываю и есть более очевидные способы?
Ты спрашиваешь как вывести данные по уровню, но твои примеры относятся к сейвам игровых данных, где связь?
Что именно ты хочешь выводить, приведи пример
640x640, 0:31
1) Говнокод от школьников, которые могут запихнуть цикл в апдейт.
2) И мидл-код, который сложно переваривается и айтем является скриптом.
Про скриптаблобжэктс я разузнал, но не понимаю реализацию допустим экипировки и оружия.
Вкатился в гейдев недавно, сам по большей части 3дшник, кодил крайний раз года два назад на плюсах и чистом и немного ООП на жаве ,но концепцию шарпа по сути уловил.
С меня тонна нихуя, возможно после нг буду постить инфу или заведу тред.Дропать не собираюсь так, как вчера утвердили диплом и буду ебашить до талого
Смотря че ты хочешь делать вообще, гиперказуал или типо 3 в ряд или детализированный 3/2д игрулю.
Если каждый лвл отличается по геймдизайну, то 1лвл = 1 сцена.
Если ты просто хочешь дрочь уровней устроить и на геймдиз тебе похуй, то можно обойтись процедурной генерацией и все.
Я конечно хуй с горы и не разбираюсь, но и ты по сути нихуя не описал какие лвл ты хочешь делать
>но не понимаю реализацию допустим экипировки и оружия.
Тащемта никакого секрета здесь нет - просто без задней мысли делаешь.
Даже небо, даже аллаха. Словари не сериализуются, то есть ты там что-то можешь покрутить, но оно не сохранится. С Go в скриптейблах только одна проблема, когда загружаешь этот скриптейбл - все Го грузятся в память. Тема интересная на самом деле, но как же долго пилить такие системы.
Половину не понял потому что немного прочитал про скриптобжект и я немного дебил, но грубо говоря скриптобжект - это объект БД скрипта (те пишем скрипт с хар-ками, и на основе него создаются скриптобжект) и мы в инвентаре управляем кол-вом и типами этой грубо говоря БД, ссылаясь на скриптобжект и фасуем все в UI. И для условной еды и экипировки надо будет 2 разных скрипта с характеристиками, а в экипе мы ссылаемся на префаб/модельку. И как могу предположить в инвентаре мы ссылаемся на ID шмотки вызываемой из скриптобжект?
Я правильно понял?
>пишем скрипт с хар-ками, и на основе него создаются скриптобжект
Да.
>в инвентаре мы ссылаемся на ID шмотки вызываемой из скриптобжект
Ага, только ссылки на скриптобджекты тебе тоже надо куда-то сохранить. Для этого неплохо подойдёт ещё один скриптейбл обджект с массивом ссылок.
>Я правильно понял?
Да я хуй знает, лол.
>Да я хуй знает, лол.
Ну значит вроде разобрался
>Ага, только ссылки на скриптобджекты тебе тоже надо куда-то сохранить. Для этого неплохо подойдёт ещё один скриптейбл обджект с массивом ссылок.
Ну т.е. мы создаем скрипт с датабазой всех обжектов и их айдишников, и в других скриптах с работой айтемов мы обращаемся к этому скрипту с айдиштками обжэектов ?
Спасибо тебе анон
>мы создаем скрипт
Только не скрипт, а скриптейбл обжект
>public class SomeData: ScriptableObject
Плюс тебе нужен эдитор скрипт, чтобы создать инстанс объекта. Вроде, есть какой-то ещё другой вариант, но я его не помню. Эдитор скрипты работают только из папки эдитора. Ну и потом ещё один скриптейбл с массивом или списком всех Somedata.
Слушай, а гайда нема по этой теме как ты организовал все? Вникнуть то я вникну, просто боюсь въебать пару дней на ошибки, ведь я даун ебался с нерабочей кнопкой в меню паузы, хотя надо было просто в местах поиграться с видимостью курсора и время у меня подгорает я решил запилить все таки в определенные рамки. А вот хотя бы на что ориентироваться было бы полезно
нахуя оверлап? Ты мог просто создать лист коллайдеров, в онтриггеринтер засовывать в лист, в экзит высовывать, а, если лист становится пустым - то выключать кнопку. Очевидное и не жрущее каждый кадр память решение, в отличие от оверлап
Спасибо анон, дошло, что можно stay на enter поменять, чтоб все время не обновляло. А оверлап коллаидер нужен.
Раньше было так:
Мне нужно следить за тем, что на плите объект все еще находится. Для этого использую ontriggerstay. Вот только когда два объекта, например игрок и предмет жмут на плиту вместе, когда игрок сходит с плиты, во время экзита она промаргивается на отжатие и снова нажимается оставшимся объектом. Пофиксил это условием (если колладиеров на кнопке == 0) вырубай. Для этого оверлап коллаидер подошел. Моргать перестало.
Сейчас как раз с этим оверлапом можно поменять stay на enter. Без оверлап коллаидера предмет стоит на кнопке, я с нее сходу, и кнопка ввключается.
Наверни любой васянский ассет на инвентарь и посмотри как сделан, своруй платных ассетов и разбери их. Лучшие примеры же, можешь и использовать их и когда поймешь, что именно тебя в них не устраивает - напишешь на их основе свое решение. Пока же ты слишком упариваешься в мелочи.
мимо
> а гайда нема по этой теме
В гугле всё есть, очевидно же.
>как ты организовал все?
В мой шизокод ты точно не вникнешь. Радактор накидан на похуях, есть пара багов. Игровая часть накидана слишком сложно. Я использую атласы спрайтов, асинхронную рантайм загрузку ресурсов, автоматическое подсасывание лодов, новый гуй. По факту самый главный мой скриптейбл выглядит как-то так, как на первом пике, лол. Это "таблица" предметов. На каждый тип предмета создаётся новая таблица, в которую сохраняются уже сами предметы. Все таблицы хранятся в основном скриптейбле.
>Спасибо анон, дошло
не дошло, видимо. Ты в курсе, что OnTriggerEnter срабатывает вне зависимости от того, есть ли на нём уже кто-то или нет?
1) объявляешь в полях private List<Collider> colliders = new List<Collider>();
2) OnTriggerEnter - colliders.Add(other);
3) OnTriggerExit - colliders.Remove(other);
и здесь же проверка if (colliders.Count == 0) то вырубай, страшна
нахуя оверлап?
Да, ты прав, не дошло. Спасибо еще раз. Как же дохуя элементарных вещей не знаю. Реально что ли пособия по шарпу уже читать.
Я даже не знал про list<t>
Помогите, пожалуйста.
Обнови драйвер и выключи встроенную видеокарту.
>Любой проект на любой версии
Очевидно, проблема с железом или дровами
https://forum.unity.com/threads/blank-unity-editor-assertion-failed-assertion-failed-on-expression-succeeded-hr.523067/
слишком вариативная проблема, попробуй дрова обновить а дальше по ситуации
Ну сам Unity + ЯП (Java или C#) это понятно. Но помимо этого нужно знать ещё какие-то программы. Какие именно стоит учить параллельно ?
гит, аутодаси, блендер из основных, дальше зависит от того куда ты вкатываться собрался
На событиях делать надо.
Просто общее понимание что такое моделька, что такое скелетная анимация, как накладываются текстуры и вот это вот всё. Про анимации еще можно почитать, если совсем упарываться то и шейдеры глянуть.
мимо
Blender - уровень говноконтор которые не могут купить лицуху макса а значит будут платить печеньками и чаем. Лучше брать связку 3ds Max+Maya+сабстанс, теже гайджины в максе делают.
лол
> 3ds Max+Maya+сабстанс
Ага класс. На хуй тогда вообще юнити учить, если тогда проще стать 3d Artistом ?
Я в целом говорю, что блендер - уровень говноконтор и школоты на ютубе, но опять же чем тебе стек как гейдев не угодил? Анон попросил грубо говоря, фул список ПО вката в геймдев, не обозначая чем он именно хочет там заниматься. А вобще вопрос размазан как сопля по столу, как именно он хочет вкатиться в гейдев, в офис или хобби. Если первое, какая позиция его интересует и тд. Если второе, то желательно все начиная от ворда и экселя, заканчивая фл студио и кучки vst которые можно прикрутить если цель стоит сделать свое, а не напиздить ассетов/звуков/идей раскидать на одной сцене и выложить в стим свою страшылку-брадилку
Что за магические числа?
Речь о вкате в геймдев индустрию под ИНДИ студии. Почему-то у многих геймдев это или инди-говно-конторы или ААА студии. Есть вообще-то варианты и посередине.
Senior Blender может тоже ОЧЕНЬ хорошо зарабатывать.
>Речь о вкате в геймдев индустрию под ИНДИ студии.
>чтобы через пол года+ можно было вкатиться в геймдев.
Не хочу разводить срач, но я не гадалка и написал выше, что если анон хочет внятно получить вопросы на свои ответы, то конкретики пусть подвезет, тк ответы - палец в небо.
>Senior Blender может тоже ОЧЕНЬ хорошо зарабатывать
Да понятное дело, что 3д художник на любом софте получает хорошо. Я лишь намекнул, что если рассматривать профессиональный забег на дальнюю дистанцию, профитнее все же стек выше, плюсом подкрепляю мои субъективные размышления и опыт работы в блендере. Каждый дрочит как он хочет
>если рассматривать профессиональный забег
>вкатиться
Сморозил хуйню, теперь оправдывается. Ты долбаёб, зачем новичку юзать пиратский софт и охуевать от кучи вылетов и, если нет опыта, от вирусни, либо покупать за дохулиард лицензии прог, из которых ему нужно просто понять основы?
Алсо перекат профессионалу с блендера на майю и макс дастся проще, чем обратно, но он в любом случае не займет много времени (месяца 2-4 без напряга)
>если рассматривать профессиональный забег на дальнюю дистанцию
Ты давай не вырывай слова из контекста. Никто не мешает взять учебную лицуху, или обновлять триал раз в месяц.
Алсо перекат юзерам макса/майи вобще не грозит перекат.
P.S Свою быдлячесть и маняпроеции лей в бэ
Майка, нужна именно для анимации, маск для полигонального моделирования. По сути инструменты есть что там, что там, но зачем копать граблями, если есть лопата
Около 6т.р в месяц, окупаемость 1 рабочий день 3д-аниматора если не меньше.
С помощью нее я вычленяю item'ы в определенном радиусе. Во первых, гугл не смог мне показать что такое other и как с ними работать полагаю что это коллайдеры???. Меня интересует как можно other передать в другой скрипт и можно ли как то расчленить коллайдеры на массив gameObject'ов? Просто при использовании
>if(other.CompareTag("Item") && Input.GetKeyDown(KeyCode.F))
реагируют сразу два объекта, а мне надо на одно нажатие реагирование 1ого объекта.
Если тебе нужен коллаидер второго объекта в первом, пиши:
поле типа коллаидера = GameObject.Find("Имя объекта, либо для тега вместо фаинд хуярь FindWithTag").GetComponent<Название компонента, например BoxCollider2D>();
Не-не, у меня есть тригерКолайдер персонажа A и 2 объекта с колайдерами обычными B/C и общим тегом "Food". И я задаюсь вопросом что при
>if(other.CompareTag("Item") && Input.GetKeyDown(KeyCode.F))
B/C пропадают почти в один момент, а мне бы на одно нажатие 1ин предмет. И второй вопрос как мне из OnTriggerStay, other отправить в другой скрипт;
Дестрои или чем ты там их убираешь выполняй по имени предмета, а не тега other.name.
По второму вопросу создай поле типа Collider и туда засунь other.
public Collider collider;
OnTriggerExit(Collider2D other){
collider = other;}
В другом скрипте напишешь.
public Collider collider;
collider = GameObject.Find("Имя объекта, где был OnTriggerExit").GetComponent<Collider>().collider;
Со вторым вопросом вроде добился чего хотел, спасибо.
>Дестрои или чем ты там их убираешь выполняй по имени предмета, а не тега other.name.
Так, а че делать если предметов куча и с разными именами?
А какой тебе результат собсно нужен?
Запиши из триггер ентера в поле объект, чей триггер ты запустил. А в апдейте по кеикоду дестрой(поле_с_записанным_объектом). На онтриггер экзит стирай поле, а то можно будет с другого конца уровня подобрать.
Если в одной куче много предметов лежит, то тогда уже массив по результату он триггер энтера создавай и дестрой(массив_предметов[0]). Каждое нажатие кнопки будет из кучи один собирать.
Я выше когда с кнопкой ебался, мне анон посоветовал list<t> как раз для этого.
Думал про ентер, а сейчас до конца допер как это реализовать, спасибо тебе большое Анон!плюсом избавился от Stay который каждый кадр обрабатывался
> if(other.CompareTag("Item") && Input.GetKeyDown(KeyCode.F))
это ещё что? У тебя у контроллера триггер что ли? подход абсолютно ебанутый. Во-первых, там выше было обсуждение по триггерам, тебе лучше на OntriggerEnter добавлять коллайдеры в список и можно ими манипулировать через обращение по порядковому номеру. Во-вторых, не слушай этого уебана >>77411 пользоваться именами, тегами и прочими строковыми значениями, а так же использовать тяжелыми функциями типа GameObject.Find тем более каждый кадр - путь на рынок труда по вакансиям клининг-менеджеров.
В твоём случае лучшим решением будет создать интерфейс для этих объектов, которыми манипулируются на триггере (например IManipulable), и использовать оператор проверки типа (other is IManipulable) вместо тегов и имён.
А вместо OnTriggerStay использовать эвенты через обращение к определённому элементу в листе
Как настроить проект сразу под все VR-платформы (WMR, Rift, Vive, Index)?
Или только бранчить весь код под отдельные случаи?
>В твоём случае лучшим решением будет создать интерфейс для этих объектов, которыми манипулируются на триггере (например IManipulable)
А в чем разница между этим и сравнением обьекта по тегу?
мимопроходил
>это ещё что? У тебя у контроллера триггер что ли? подход абсолютно ебанутый
А что плохого что у меня на игроке есть колайдер с тригером? И почему использование проверки по тегу так плохо?в шарпах и юнити библиотеках я вобще новый.
У меня стоит задача, что вокруг игрока допустим на расстоянии 2 метров была возможность взять предмет, не наводя мышкой на сам айтем, а просто клац по клаве и предмет в инвентаре если он в области.
Я сначала подумал сделать тригер колайдер второй на самих предметах, а потом понял, что если айтемов будет куча, то и лишних колайдеров тоже куча и я решил идти от обратного делать сбор не от айтема, а от персонажа, ведь так у нас будет всего 1ин коллайдер на сбор. Вдобавок как проще реализовать проверку на собираемый айтем-коллайдер, проверить тег строчка же просто смотрит в инспекторе тег и сверяет. Ну а вчера уже под утро решил с подачи анона выше, оптимизировать со Stay в Enter>Exit триггер. Где проеб моей логики или где я проебланил и использую лишнюю память??
В самой проверке по тегу ничего плохого, вот только это добавляет мануального контроля и, как следствие, увеличивает вероятность генерации ошибки. Сперва ты по тегам проверяешь, потом корутины и делегаты запускаешь через строковые значения, но вдруг ты, или кто-то переименовывает метод или тег и весь проект летит по пизде, потому что на этапе компиляции никаких ошибок не возникает. Создать тег вот буквально на 5 секунд быстрее, чем пустой интерфейс
>>77454
> А что плохого что у меня на игроке есть колайдер с тригером?
Ну, если это базовая механика в твоей игре, то, наверное, ничего плохого, вообще сама идея странная. Про ебанутость я о проверках на нажатие клавиши и проверки по тегу одновременно. Ты бы хоть проверку на нажатие первой поставил (читай в чём разница условных операторов от обычных), но в идеале вообще не делать проверок на нажатие в апдейтных методах.
Я так понял, ты хочешь организовать сбор предметов в радиусе? Я бы лучше сделал отдельный метод на оверлапсфер с поднятием одного любого предмета, метод бы запускался по нажатию.
> Ну а вчера уже под утро решил с подачи анона выше
это я и был, то есть тот, который расписывал методику работы с листом
>Не делать проверок на нажатие в апдейте
С этого места по подробнее. Алсо это относится только к нажатиям или к продолжительно нажатой клавише тоже?
По итогу вышло как то так пик1, все работает как мне надо, сейчас думаю прикрутить UI и пойду допиливать остальные части интерфейса.
>В самой проверке по тегу ничего плохого, вот только это добавляет мануального контроля и, как следствие, увеличивает вероятность генерации ошибки.
Конечно, исключать такой возможности не стоит, но так по сути с любой хуйней тут, где то что-то тыкнул и пиздец, благо я в соло работаю и какие то свои ошибки компиляции записываю, чтобы сразу понять как решить хуйню.
> вообще сама идея странная.
Хех, ну я думаю на/gd есть более ебанутые идеи, чем подбор вещей в радиусе.
>Я так понял, ты хочешь организовать сбор предметов в радиусе? Я бы лучше сделал отдельный метод на оверлапсфер с поднятием одного любого предмета, метод бы запускался по нажатию.
Блять я так и знал, что есть аналог RaycastHit, только нагуглить это говно не смог в документации. Но с другой стороны у меня самобытный макакен-код, который я понимаю и не надо даже вектора строить
Это
Скорее всего камень в том, что при нажатии в апдейте условие будет отыгрывать каждый фрейм, а это итераций 30 если не больше
Так условие if getkey в любом случае будет циклиться. Как можно регистрирывать нажатия клавиш вне апдейта?
Это относится ко всему, но тут скорее о читабельности кода, ты просто можешь забыть нахер оно надо вообще, опят же, делаешь отдельный метод с нормальным названием предназначения и запихиваешь его в апдейт. Скачай ассет Invector и смотри как там контролы выполнены, очень хороший пример
https://assetstore.unity.com/packages/tools/game-toolkits/third-person-controller-basic-locomotion-free-82048
>благо я в соло работаю и какие то свои ошибки компиляции записываю
Твоё право, я даже не буду тебе врать, у меня не было опыта такого, но я смотрел на ютубе пару роликов по типу "типичные ошибки новичка" и там сотни комментов о том, что строковые значения сломали их инди-проекты и убили мотивацию, поэтому я теги никогда не использую с тех пор
>Твоё право
Да, буду креститься на то, что уровень моей самоорганизации сопоставим с моим мнением.
>сотни комментов о том, что строковые значения сломали их инди-проекты и убили мотивацию,
Немного рефлексии
Так это же хорошо, нет переизбытка рынка как с музыкантами или дизайнерами или писателями и тд. Порог вождения особенно Инди огромен и тем самым ценнен. Есть же огромная ЦА, которая играет в индюшатину и отплатит тебе по трудам своим рублем. К слову о "убили мотивацию", я могу сказать только одно, что люди часто путают два вида мотивации "TryToWin" и "DoToWin", это же не рулетка в казино, а ремесло, следственно ты должен этим заниматься не по логике:
> Гы-ы-ы, ща сделаю на пирадцких асцетах игру и буду вторым гадзимой или перссоном или диннхоуллл)))
А более методично и структурно, имхо
согласен полностью, понятно, что ты сразу всему не сможешь научиться и через спотыкания осваиваешь ремесло, а хвататься за каждый совет - не менее губительно, чем долбиться самому о каждую стену, только вот простые и довольно очевидные упрощения не стоит игнорировать, ты просто попробуй хоть раз проверку по компоненту, и ты больше никогда к тегам не захочешь возвращаться
всё работает, нр нихуя не понимаю, почему нужно именно так, если я его обнулял, но только в другом месте
если ты его обнуляешь в другом месте, то, видимо, запускаешь корутину в апдейте? В таком случае можешь вообще цикл удалить и оставить только то, что внутри. Видимо, спиздил код и не разбирался как работает?
хз где ты там обнулял, корутина сохраняет все данные до возврата, а так как твой цикл бесконечный, то значения в нём никогда не сбрасываются
точнее не так, корутина сохраняет все данные, а так как это однопоточное выполнение, то данные каждый раз переопределяются на то, что сохранилось внутри цикла, и т.к. он бесконечный, то твой куренттайм не сбрасывается снаружи
Двачую вопрос, есть годные курсы/каналы/книги/стать по ВР в юнити? Особенно интересует окулус как андроид так и пк
Вроде же документация есть по камерам и инпуту у офишал Юнити, чекал там?
Просто пацаны со старших курсов, говорят там чекали
Грубо говоря, есть прямоугольник с партиклами на весь экран и периодически в случайном месте нужно удалять их. Как быть?
За окулус я тебе и сам поясню. https://developer.oculus.com/documentation/unity/book-unity-gsg/
Делал все по этой документации, спокойно сбилдил и апк под ведро и ехе под винду.
А вот за мультиплатформу кто бы рассказал.
Можно через слои, через доп.камеру, или через скрипт удалять, много подходов, но, грубо говоря, из твоего объяснения не понятно что тебе нужно
Короче реквестирую у анона литературы по тому, как структурировать код. Прям для пиздец тупых как я. Кодю за рамками лаб в универе на делфи две недели и даже в принципы ооп вник не до конца еще. Вся эта хрень абстрактная с очень большим трудом усваивается в голове.
Ну и если есть рекомендации, как убрать апдеит и чем заменить, тоже спасибо заранее.
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 не толкаются, а персонаж взбирается. Как пофиксить?
вариант 1: не использовать такую хуйню, как коробочный контроллер
вариант 2: зайти в гугол под чужим аккаунтом, раз твой забанили
https://answers.unity.com/questions/17566/how-can-i-make-my-player-a-charactercontroller-pus.html
Понимаю, как повесить отделение одного объекта. Не понимаю, как задетектить отделение группы произвольного количества объектов. Отлеляется толлко один конкретный объект. При этом состав группы динамический.
стоит URP, шейдеры его поддерживают
Бампую вопрос, это нормально вообще использовать эту штуку на телефонах?
Бля, да как вы не поймёте, что ваши абстрактные примеры вообще не понятные.
Ну, например, создать динамический список (list) твоих объектов и прописать глашатая с эвентом ListChanged
>>77719
в версиях до 2021
Edit -> Render Pipeline -> Universal Render Pipeline -> Upgrade ...
2021 и выше - Windows -> Rendering -> Rendering Pipline Converter -> ставишь галочку и Convert
>Абстрактные
Вот есть источник сигнала 1. Я по триггер ентеру с источником присваиваю единицу другому объекту. Теперь объект выдает единицу. И так по цепочке. Если объект отделился от остальных, снова единица на ноль меняется. Когда по одному их "подключаю", "отключаю", все хорошо. Но если от общей цепи отключить группу, то они друг в друге детектят единицу и остаются активны, пока не разъединишь друг от друга. Даже пикрил в пеинте для этого выше зарисовал.
Вот я и не понимаю, как отследить, что от цепи с источником внутри отделилась группа объектов. Среди них источника нет, надо их единицу на ноль обратно поменять. А они "видят", что у соседей единичка по-прежнему, ну и хули продолжаем тоже показывать значит. Я конечно могу рекурсивно циклы в циклах выписывать проверять массив своих соседей и соседей соседей, но это хуйня. А как вот список всех объектов в сцене на отдельные группы объектов у которых коллаидеры пересекаются проверять, есть среди них источник или нет, не могу допереть.
Бампаю вопрос, так и не нашёл решения. Пример на пике. Раньше при выделение зелёная рамка была на объекте, теперь же всё съехало в сторону.
> 2021 и выше - Windows -> Rendering -> Rendering Pipline Converter -> ставишь галочку и Convert
Я уже не пынямаю, что можно сделать, чтобы всё заработало
Тут телепатов нет
Ааа, то есть разрыв цепи нужно предусмотреть?
Я бы, как простой вариант, сделал у источника опять же лист объектов (или сразу инстанс айдишников) и метод который принимает сигнал от источника, идентифицирует его порядковый номер в листе по айдишнику и выкидывает из цепи всех выше этого номера, включая его самого.
Проблема в том, что порядок предметов меняется. Объект1 подсоединился к Источнику. К Объекту1 - Объект2, Объект 3 и Объект 4, последовательно. При этом игрок может так переместить объекты между собой, что пока они замкнуты Объект3 например сам замкнется Объекту1. А значит порядок подключения уже выдаст ошибку. К примеру, Объект2 вместе с Объектом4 отделятся от подключеных к Источнику Объектов 1 и 3. И по списку отключим Объект2 и все ниже по списку - Объекты 3 и 4. Но Объект3 то еще в цепи. А он отключится.
Я пока единственное, что придумал делать, но не как реализовать - это делить объекты на группы. Соединились больше двух по триггерам - их в список. А дальше проверять каждый из списков на наличие в нем контакта с источником. Но это дохрена циклов в апдейте будет, да и как-то перегруженно все равно, мне не нравится.
Как бы найти способ, чтобы объект узнал, что вся его группа отключилась.
Достаточно глобально?
https://store.steampowered.com/app/1124300/HUMANKIND/
На юнити, как и на анриле ты можешь что угодно запилить
апгрейдить можно только со стандартных шейдеров, там свой какой-то, поэтому только руками, там они достаточно простые, можешь эти поюзать
https://assetstore.unity.com/packages/vfx/shaders/stylized-water-for-urp-162025
https://assetstore.unity.com/packages/vfx/shaders/urp-stylized-water-shader-proto-series-187485
тогда всё зависит от механики твоего случая (количество связей, множественность источников и т.д) для линейного варианта - 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 за ней
а не, нужны 2 булевых на чтение и ещё 1
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
а не, нужны 2 булевых на чтение и ещё 1
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
На каком железе анон разрабатывает свои игры на юнити? Хочу купить себе стационарный пека, чтобы серьезно заняться разработкой, но бюджет ограничен.
Спасибо, анонче! Пришел, сейчас буду разбираться.
https://www.dns-shop.ru/custompc/configuration/bb2ca410668c48fd/
собирал сам, особо не шарю, ориентировался на рейтинг и отзывы, с HDRP справляется отлично
Что-то не понял вот тут.
> isPower - если хотя бы у одного из соседей isActive true
> Источник - объект 1 (true, true, false) - объект 2(true, false, false) и т.д
У объекта 1 isActive false, при этом у объекта 2 isPower true. Я точно правильно понял?
Запутался, но концепция правильная, заново
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
Ага! Сделал:
Источник - объект 1 (true, true, true) - объект 2(true, false, false) и т.д
И заработало как надо.
>>77891
Вовово точно. Я тоже допетрил. Сообщение написал, а отправить не отправил. Огромное спасибо еще раз. Я до вот этой третьей переменной сам не дошел, что нужно ограничить количество связей и сообщать об этом. Очевидно же, что даже в большой куче объектов с только двумя "соседями" объекты просто последовательную цепочку сами выстроят.
Жаль только, что если игрок активно таскает эти объекты в запитанном состоянии, то они рискуют терять уже полученные связи. Провожу цепь объектов со второго по четвертый через запитанный объект1, и каждый из них теряет по связи со своим старым соседом. И когда они уже выходят из зоны объекта1, сосед "объекта1" в очередном объекте удаляется и объектик отключается, потому что до этого стер своего первоначального соседа. Когда проводишь группу через запитанный участок,у них doublePlug (остается только один сосед) отрубается после прохождения участка.
А больше связей им делать нельзя, потому что будут в рекурсии друг друга поддерживать. Боль. Завтра попробую еще в апдейт запихнуть присваивание свободной переменной дополнительного объекта. По идее должно пофиксить эту вот "потерю соседа" после прохождения цепи объектов через запитанный участок.
Так я и написал, что этот вариант для линейного использования.
В динамике ты можешь тогда юзать не массив, а лист, и добавлять соседей через Add, но тогда нужно ограничение ставить на 2 элемента, либо прописать автосортировку массива при удалении (чтобы неnull всегда был под индексом [0])
Буду дальше ковыряться.
Вакансий кот наплакал, а те что есть с требованиями заоблачными и тестовыми недельными. Да и даже на те вакансии по 40 рыл претендует.
Несправедливость бля, что веб мартышки научились за 2 месяца кнопки верстать и уже могут зарабатывать. А тут потеть приходится. Как сложность то сменить на легкую..
так потому что все побежали куда, как им кажется попроще, ты почитай местную ветку, анон не знает что такое листы в c#, а уже инди свою пилит. Поэтому, сейчас требования выше, имей простое портфолио (3 в ряд, раннер и что-то по профилю), изучи хотя бы 1 книгу по языку и джун тебе обеспечен. По-хорошему, этого тоже можно за 2 месяца достичь, если планомерно делать
А все, разобрался, надо было этот параметр подрихтовать
Так я не ради портфолио пилю, я игру хочу сделать. А там уж че освою, то освою в процессе.
ты просто как пример, о том, что многие сейчас идут в геймдев без изучения основ, рынок забит, но забит только на уровне гастеров
И тут я даже видел красивый код - где есть интерфейсы для всего, эти интерфейсы передаются в общий менеджер, сами они абстрактны и не привязаны к юнити (теоретически можно взять код и заюзать на любом другом шарп движке), с юнити работает только один менеджер...
Один вопрос - разве это не гудобжект?
Почему вообще подход юнити с кучей монобехаверов считают неправильным? Разве это лучший пример черного ящика? Вот например у меня есть гоблин - я просто кидаю его префаб на сцену и все работает. Делают ящера - кидаю его префаб на сцену и все работает.
А когда они наследуются от какого-то интерфейса - их же надо руками привязать к менеджеру, то есть уже лишняя работа, теперь недостаточно просто кинуть префаб, теперь надо еще его привязать к менеджеру. А что самое хреновое, если я захочу взять этого гоблина в другой проект, мне придется туда тянуть и менеджер, а ведь в нем может быть дохрена ненужного мусора.
То есть я вижу подход юнити как раз таки более правильным - а сама идея делать какие либо менеджеры - это убого... Но почему-то все другие считают иначе
Да, допустим есть теория что множество Update снижают производительность - но давайте честно - на каких проектах это может стать проблемой? на клонах ангриберда для андроида?
Мне читка шилдта или лекции никаких знаний все равно не дают, как об стенку горох. У меня и в вышке например ООП было, так я нихуя не понимал, че там происходит. А задачи для примеров былы дохрена унылые, потому все лабы мы тупо скатывали.
Другое дело вместо штудирования теории сразу ебашить на практике то, что интересно. Через костыли, ошибки, лапшу и самому уже лезть в справочники, документацию читать по конкретной нужной именно в данный момент тематике. Так хоть какой-то интерес есть. Уже начинаю вникать и понимать по-немногу. Когда игрулька в юнити запускается, я хоть наглядно вижу, че написал, все поля на объекте в паблик вывел и зырю в них. Я не представляю, как эту муть можно изучать в отрыве от интересного практического задания.
Ты о чем блин. У меня уже на гите кучу тестовых с разными механиками. Есть еще свои пет проджекты: простая RTS, Тавер-дефенсе, шутер с разрушаемыми объектами и даже репа с где я пытаюсь в архитектуру.
Но всем похуй похоже. Что не отклик на вакансию - а сделай нам вот это еба-тестовое плиз. И похуй что там неделю делать, ты главное сделай. А, и не забудь плиз показать свои еба навыки плз, похуй что там геймплея на пару скриптов. Ты главное сделай еще 40 скриптов абстракции над ними, чтобы доказать что ты достоин нашей галеры.
А потом пидары ноют в чатах, что сложно найти разраба и приходится переманивать у других и вообще дефицит. Конечно бля, заниматься джунами то никто не хочет.
Хуевая короче ситуация в геймдеве у нас.
Значит единственный вариант, свою студию создавать. Брать туда, кого хочется и учить.
Когда ты пишешь клон ангриберда соло для андроида, можешь делать как тебе удобно.
Если ты гребешь на галере, то это может быть удобнее по тысячи причин. От написании тестов, уже готовой кодовой базы, единообразия и следования принятому код стайлу и т.д.
Тож делал так, потом заебало выебываться перед самим собой без толку и делаю нормально.
Но вообще тенденция конечно забавная - люди не доверяют юните и стараются архитектуру максимально отвязывать, чтобы чуть-что сьебать с тонущего корабля без проблем.
Например в один прекрасный день осознаешь что у тебя c# уеч вместо юнити, со всеми вытекающими.
Короче вскрываю тему. Когда ты создаёшь скрипт - в нём автоматически будет войд старт и войд апдейт. Юнити гарантированно вызовёт эти функции. Ей поебать пустые они или нет. А вызов этих функций гарантированно не бесплатный. Это не причина не использовать апдейты, просто когда их становятся тысячи - это может стать проблемой. Это не миф, но это не так уж и важно.
Менеджеры же повсеместно считаются плохим кодом. Но всегда нужно находить компромиссы, верно? Для меня, например, отвязка от монобеха сработала просто идеально. Потому что все мои "гоблины" собираются из кода на лету, на вход нужен просто ГО и ничего больше. А вот теория о том, что можно просто взять свой код и портировать его на другой движок это абсолютная глупость. Ты всё ещё работаешь с апи, используешь библиотеки движка и встроенные компоненты, портирование этого всего потребует переписывания всего кода. Причём чем дальше ты от монобеха - тем сложнее портирование, лол. Как мне портировать маршаллинг байтов из NativeArray в MeshRenderer внутри JobSystem? А никак, за пределами юнити это всё не существует.
Максимально правильным для меня лично выглядит код с одним-двумя связующими звеньями между монобехом и твоим кодом, в пределах одной сборки. Если ты не используешь разбиение на сборки, то всё ещё проще.
Анон, выручай! Есть у меня кнопка со скриптом прикл1, есть миллион GO под названием слот (i) и скриптом InventorySlot. Каким собачим хуем мне со скрипта InventorySlot пингануть в Кнопку, чтобы присвоить в скрипте Slot нужный GO.
Более простым языком: как мне в коде указать референс другому скрипту EatFood.Slot = gameObject
Либо через менеджер у которого есть доступ и к скрипту и к объекту, или по поиску/месседжу.
Стандартный инвентарь выглядит так -> Есть менеджер который содержит в себе объекты(Клетки) и имеет доступ к ресурсам которые могут быть в этих клетках, и их связывает/развязывает. Сами клетки и объекты друг о друге не знают.
Все, не нужно, сам нашел
Я сделал так: скрипт самого слота я присвоил к рефу кнопки из скрипта слота.
Оказалось так легко, а я дегенерат часа 3 гуглил
>Как на счёт cginclude?
увы нет. в том вычислительном шейдоре симулятор карты с водичкой, землёй, атмосферой и осадками лол. там уже под 40 кернелов. заебись прототип налепил.
и разделить это между собой не так и просто так как всё это между собой взаимодействует в той или иной степени.
сегодня весь день делил это на три куска плюс пара cginclude чтобы это вообще читать можно было, но теперь это совсем спагетти код.
с этим уже физически трудно работать.
У кого-то скачан O'Reilly - Learning Path? Встаньте на раздачу плес, очень хочется себе в поезд первую главу скачать.
Заходим в 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 должны быть сняты. Данные опции пердолят статические переменные, не используйте статические переменные без чёткого понимания, что это такое. Спасибо.
Вот после этого я охуел конечно от скорости запуска сцены, но не понял прикола с статиками, вроде всё ок и у меня там хранятся данные типо денег
В статик классах переменные не сбрасываются между разными сессиями Play.
>И напоследок мастхев, о котором все знают. Edit -> Project Settings -> Editor. Скроллим вниз, ставим галочку на Enter Play Mode Options. Галочки на Reload Domain и Reload Scene должны быть сняты.
Примерно через полчаса работы схватил fatal error, благо привычка спасить ctrl+s/r перед каждым ctrl+p
>Теперь юнити не перекомпилирует скрипты при каждом изменении скрипта, нужно жать контрол+R.
Вроде для меня актуально, надо будет пробывать. Есть сотня скриптов и работаю с ними на автомате всё время проживая ctrl+s, из-за чего юнька вечно всю перегружает.
Они сами перекомпилируются при тестовом запуске в плэй моде? Подводных нету?
>Они сами перекомпилируются при тестовом запуске в плэй моде?
Нет. Я же сразу писал, что нужно прожимать вручную.
Project settings -> quality
но нужно каждый SRP настраивать отдельно, чтобы у тебя минималки в говно не превращались
>Rust
В игре когда сборщик мусора запускается происходит лаг. Разрабы с этим уже несколько лет ничего сделать не могут. Единственное решение это увеличивать размер буффера до максимума и запускать gc вручную перед файтом. Это реально не решаемая проблема заложенная в дизайне движка?
Не в движке дело, если мусор не собирать, то у тебя память закончится. Это проблема в разработчиках, слишком много срут в память и забывают подчистить. Автоматическая подчиска срабатывает когда говна уже многовато, потому возможны лаги.
Все отбой, я ебанулся просто.
джва года такой жду
>И напоследок мастхев, о котором все знают. Edit -> Project Settings -> Editor. Скроллим вниз, ставим галочку на Enter Play Mode Options. Галочки на Reload Domain и Reload Scene должны быть сняты.
Хуйня, короче. Вылетает и крашится редактор по кд, а жаль
Reload Domain, как и сказал анон, сбрасывает статику, тогда как Reload Scene удаляет кэш сцены, поэтому как раз из-за скриптов вероятность вылета минимальная, а вот при работе с геймобжектами и графонием тоби пизда уже после 2-3 запусков без сброса
Не работает
>вот при работе с геймобжектами и графонием
Спавнил тысячи го без деспавна, мутил процедурные меши, террейны, навмеши, вольюмы со спецэффектами. С тех, как фича появилась, короче - с тех пор и пользуюсь. Вылеты крайне редки. Вчера, например, включил кеш сервер, но не забил айпишники - посыпались вылеты. Выключил и сразу всё ок. Не в кешах дело, короче, это у анона или проект битый или пизда чему-то.
Сап аноны, может кто разъяснить, что за байда с таймером в юнити?
Я уже не в первый раз сталкиваюсь с тем что таймер ведёт себя не так, как я привык в С#.
Ниже у меня действие - перезарядка, хочу чтобы на неё тратилось около 5 сек
По логике я
1. нажимаю на перезарядить
2. запускаю таймер
3. он отсчитывает 5 сек
4. запускает код перезарядки
5. возвращаю время перезарядки
И все довольны
Но этот падла вместо запуска таймера, просто останавливается, каждое нажатие на R он просто отсчитывает время нажатия и останавливаемся и так во всём хочу сделать таймер который ограничивает героя от нажатия взаимодействия, на это когда игрок быстро клацает по E берёт не один патрон, а 2-6 и опять таймер не помогает я как то обходил это через булевые переменные, но это звездец как муторно, запускал таймер в апдейте только тогда, когда срабатывал булевая переменная и отключал так же, но это дикие костыли и я думаю, что, что-то не понимаю в апдейте юнити проясните, если не трудно.
Ох ты ж ебаный насрал. Я не думал, что увижу такой хуйни. Ты что-то слышал про корутины и многопоточность? Если нет, то советую отложить пока свою поделку и начать с изучения юнити
>то советую отложить пока свою поделку и начать с изучения юнити
Ты охуел?
Единственное, что я знаю о многопоточности в юнити это метод Invoke, но это опять же предполагает, что в апдейте мне по умолчанию нужно запустить таймер и он будет постоянно там крутится.
Бля анон, тебе бы не юнити подучить, а базовые алгоритмы задрочить, потому що сразу видна логическая ошибка.
Таймер у тебя работает при нажатии соответственно он щитает только нажатие, выведи КД в апдейт.
Примерная логика такая:
start{ coolDawnTimer= 5f;}
Update
{
if(coolDawnTimer < 5f){щитаем таймер КД}
if(coolDawnTimer >=5f && "R"){Твоя перезарядка}
}
Тут собственно и нечего понимать, то что ты настрочил - это перезарядка зажимная: "Ал-я зайжмите на 5секунд R чтобы перезарядиться"мб кому пригодиться, по патрону заряжать . А так, советую обратиться все таки визуализации кода вида блок-схем, потому что ты не догоняешь как ты строишь алгоритм. Плюсом так можно выявлять алгоритмические ошибки в коде
Пчел чего то не работает твой алгоритм
public float = coolDawnTimer; //объявили
start
{
coolDawnTimer= 5f;//инициализировали
}
Update
{
if(coolDawnTimer < 5f) //С какого он будет сравнивать если как было 5 так и осталось , счётчик ты запускаешь после условия ?
{
coolDawnTimer+= Time.deltaTime; //щитаем таймер КД
}
if(coolDawnTimer >=5f && "R") //что здесь вообще происходит, мы должны нажать R и в тоже время таймер должен быть больше 5? Это как вообще? Мне нужно чтобы я нажал на R прошло 5 секунд за которые проигралась анимация и звук и уже после добавились патроны.
{
Твоя перезарядка
}
>>78621
Чувак я ценю твой совет, но уроки по информатики я прошёл ещё 26 лет назад и мне кажется я достаточно логично описал, то что хочу реализовать.
}
Я тебе же примерную логику написал, мог бы допереть че к чему.
Условно кд который я тебе написал, можно еще хуеву тучу прикрутить типо прыжка или кнопки действия
>логично описал
>не смог реализовать
Я бы все таки попробовал вспомнить, тем более 26лет прошло
Мимо.
Это ли не делается отдельным евентом , чтобы потом таймер в апдейте считать?
Типа нажал кнопку, сработал эвент, отсчитал 5 секунд и дестройнулся.
>Сап аноны, может кто разъяснить, что за байда с таймером в юнити?
>Я уже не в первый раз сталкиваюсь с тем что таймер ведёт себя не так, как я привык в С#.
Алсо, тут проблема не в самом таймере, а в его реализации. Если ты сам не понял эту ошибку, то без базы тебе будет ой как трудно. Любой нормальный программист тебе скажет, что кодить без задроченных алгоритмов, пустая трата времени, и ты скорее макак, который чето покусочкам собирает но не понимает, что в итоге у него выходит.
Проблема у тебя была в том что условие требует только нажатой кнопки в апдейте, то получается у тебя не секундомер анимации получается, а дебаг времени нажатия кнопки.
>Любой нормальный программист тебе скажет, что кодить без задроченных алгоритмов, пустая трата времени
Чего?
Перед изучением языков программирования, будьте так добры научиться рисовать логические блок схемы
public class Reloading : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
StartCoroutine("Reload");
}
}
IEnumerator Reload()
{
Debug.Log("Reload started");
yield return new WaitForSecondsRealtime(5);
Debug.Log("Reload completed");
}
}
>то получается у тебя не секундомер анимации получается, а дебаг времени нажатия кнопки.
Пчел, ну чего ты, я же сам об этом написал
>>78597
>этот падла вместо запуска таймера, просто останавливается, каждое нажатие на R он просто отсчитывает время нажатия и останавливаемся
>>78641
Вот это интересно,спасибо
>>78647
Я уже нашёл решение, но ещё раз хочу попробовать твой алгоритм.
>>78648
Вот именно, здесь должно быть что то простое я просто не верю что разрабы не смогли учесть такой элементарный нюанс.
А не запустит ли эта хуйня бесконечное число корутин? Или упадёт с ошибкой, мол, корутина уже бежит. Сам корутины не юзаю, слишком неудобные, просто спрашиваю. Сам бы такую хуйню реализовывал таймпштампами и стейт машиной.
>Я уже нашёл решение, но ещё раз хочу попробовать твой алгоритм.
Там суть в том что таймер который нужен - это первый if. Так ты можешь к нему прикрутить еще действия, помимо перезарядки, по такому же принципу. Как по мне самое простое и логичное решение
Нэ понял, я сам тестил, не ври!!!
Чел ну не работает твой алгоритм, я и в игре запускал и в отдельном скрипте, не работает он, просто считает до пяти и всё. Ты видишь на консоле что он считает время, но на самом деле он просто отсчитывает 5 секунд ты нажимаешь на кнопку он мгновенно совершает действие и опять отсчитывает 5 секунд.
Что бы теоретически он стал работать нужно первый блок засунуть внутрь второго, но вы здесь все меня уже обсосали за это, так что я опять даже пробовать не стану. Без обид, спасибо за попытку помочь.
Это кажется и есть пример много поточности, здесь работает стандартный апдейт и параллельно запускается while.
Что "например"? Юнити так работает. Каждый апдейт берёт каждую корутину в основном потоке и проверяет, прошло ли нужное количество времени. Если прошло - запускает код. Если нет, то нет. Это не многопоточность, это однопоточность.
А почему просто нельзя создать Монобехавиор скрипт, привязать к объекту(это ж в любом случае придется делать), назвать его для металлического предмета Metal, а для деревяшки Wood. В скриптах просто писать GetComponent<Wood>().
Что-то мне подсказывает, я нихуя не понимаю как люди используют эти скриптабл обжекты, определяя игровык объекты по параметрам. По сути мне нужно, чтобы скрипт определил, что мы столкнулись с Metal или наоборот Wood, и тогда начинаем исполнять код.
Скриптейбл это типо базы данных, скрипт, который сохраняет информацию. В твоём случае он не нужен.
То есть, когда я пытаюсь определить, какой например объект вошел в мой коллижнентер, мне нужно просто добавлять к объектам отдельные компаненты. И каждый компонент - пустой монобехавиор. Допустим скрипты Тяжелый : монобехавиор и Проводник : монобехавиор будут пустыми. И нужны только как компоненты с названиями. Из других скриптов буду проверять если геткомпонент<Тяжелый>, то пошла какая-то хуйня. Так? На каждое свойство отдельный скриптик создавать. Или есть альтернатива?
Если бы у тебя был ецс, то я бы сказал "да, охуенно, делай так". Но раз у тебя монобех, боже упаси тебя делать так. Посмотри в сторону енумов, так можно просто парой интов задать все свойства. Type.heavy = 0 и так далее.
>public enum Type { heavy, light, shitty };
Не очень понял, вобще о чем ты говоришь, но попробую высрать свои 5 копеек.
SO - такая абстрактная хуйня, которой ты можешь классифицировать предметы между собой типо: оружие/щиты/еда и тд те у тебя будет 3 типа SO с разными хар-ми и из этих типов ты можешь создать еще отдельные SO с различными хар-ками типо сколько защиты у щита.
К сути. Как я понял ты хочешь описать столкновение или что то в этом духе металлических и деревянных объектов что по сути 3 скрипта минимум. Используя SO ты можешь написать один скрипт, просто в начале скрипта обраещаешься к свойствам SO объектов, берешь их и работаешь. Ну как то так скорее всего я ясности не внес
два чаю анону с енамом
Все круто, но мне ж все равно нужен отдельный монобех, привязанный к объекту. Зачем проверять if (other.gameObject.GetComponent<имя_скрипта>.type.shitty), если я сразу могу написать other.gameObject.GetComponent<shitty>. А к самому шитти объекту приклеить пустой sitty : MonoBehaviour.
>>78736
Не получится написать один скрипт. Потому что Металлические предметы взаимодействуют с одними объектами, магнитами например, а Дерервяшки с источниками огня. То есть уже как минимум будет два отдельных скрипта на притягивание магнитом Металлического и поджигания источником огня Деревянного.
> Потому что Металлические предметы взаимодействуют с одними объектами, магнитами например, а Дерервяшки с источниками огня.
Тем более.
Берешь пишешь скрипт на взаимодействие типов айтемов магнит с металом и тд друг сдругом, и присваиваешь SO в этом скрипте. Далее в скрипте берешь св-ва SO тип/сила че угодно, и по типу айтема проворачиваешь свои действия
>>78641
Если ты хочешь, чтобы при запуске корутина выполнялась заново, то надо в параметр надо передавать строку, а не функцию, вот так
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 ())
// Выдаст сру, хотя хотелось бы, чтобы весь код начал выполняться сначала, то есть, чтоб выпадало "перезаряжаю".
Впрочем, иногда реально нужно, чтобы код продолжался, но у меня такой ситуации ещё не было.
Бесит, что вся логика зависит в зависимости от того, что ты передал, строку или функцию. Хуйня, разрабы дебилы. Сделали бы строго, чтобы передавать можно было только что-то одно. А вторым параметрам сделали бы флаг, который отвечает за то, что делать при запуске корутины: продолжать с того места, где она остановилась, или начать выполнять код с нуля.
}
>>78641
Если ты хочешь, чтобы при запуске корутина выполнялась заново, то надо в параметр надо передавать строку, а не функцию, вот так
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 ())
// Выдаст сру, хотя хотелось бы, чтобы весь код начал выполняться сначала, то есть, чтоб выпадало "перезаряжаю".
Впрочем, иногда реально нужно, чтобы код продолжался, но у меня такой ситуации ещё не было.
Бесит, что вся логика зависит в зависимости от того, что ты передал, строку или функцию. Хуйня, разрабы дебилы. Сделали бы строго, чтобы передавать можно было только что-то одно. А вторым параметрам сделали бы флаг, который отвечает за то, что делать при запуске корутины: продолжать с того места, где она остановилась, или начать выполнять код с нуля.
}
Ты мыслишь узко. Мысли шире. Тебе не нужен скрипт, привязанный к геймобъекту, если у тебя будет геймобъект, привязанный к скрипту.
>if (other.gameObject.GetComponent<имя_скрипта>.type.shitty), если я сразу могу написать other.gameObject.GetComponent<shitty>
Потому что ты можешь сделать сразу
> switch (type)
> {
> case type.wood:
> burn();
> case type.metal:
> NotBurn()
> break;
>}
У меня та же история с Объект.SetActive(true) для объектов и Компонент.enabled = true для компонента.
А как мне вызывать сам burn()? Есть способ следить за коллаидерами вне монобехавиор, которые к объектам прикручены?
Не понял, что за история? В чем тут трабла? Только не говори, что если установить setActive(false) то все его компоненты все равно рабочие, в смысле, выполняются
История в том, что в одном случае это метод, а в другом случае свойство компанента. Я постоянно путаю, че в каком случае писать. Почему нельзя было сделать активацию и деактивацию компанентов тоже методом, как с геимобжектами? Ну или свойство enabled геимобжектам запилить. В инспекторе они и те и те галочками включаются.
Или я дурашка и то, что я навешиваю скрипт на объект - это как бы уже есть экземпляр этого класса? Тогда нихуя не понятно как работает статика, если мне надо для её использования навесить на объект, что уже не будет статикой.
Я тоже зеленый и делаю так. В скрипте класса monobehaviour, что в объекте привязан создаю объект класса, в котором содержится нужный мне метод. И через на объект класса вызываю. Но если надо по-другому, аноны отпишут.
Ты вопроса немного не понял. Например создаёт дефолт скрипт. В нём есть стандартный не статический класс и не статический метод Start. Пишем в Start Debug.Log("Test"). Навешиваем на объект. Какого хуя мы увидим текст, если у нас не статический метод, который нигде не вызывается нами?
>А как мне вызывать сам burn()
Так я код написал, алло.
>Есть способ следить за коллаидерами
Магические методы типа OnCollisionEnter можно ловить только через монобех.
>>78785
>Юнити сама создаёт экземпляры класса
Какие, в пизду, экземпляры? Ты класс создал, который скрипт-монобех. Юнити, по сути, рефлексией ебошит, находит все функции по имени и составляет списки.
>как работает статика, если мне надо для её использования навесить на объект
Так не нужно же. Или ты про статические переменные? Это другое. А статик класс просто создал и никуда не навешиваешь.
Если все равно монобехи нужны, не проще ли прямо в них писать burn(), notburn() и другие методы. Я просто тупой и никак не могу понять преимущество перечислений.
Вот у меня есть условный wood : monobehaviour
В нем метод горения описан, а вызывается на коллижн ентер, если other имеет компонент firesetter допустим. Так вот этот firesetter просто пустой монобех, который как свойство прикреплен к геим обжекту источнику огня. Что нужно сделать, чтобы заменить это на перечисления? Каким образом я могу навесить на источники огня (разные объекты) свойство firesetter, хранящееся в качестве элемента перечисления? Если определять источник огня будет wood : monobehaviour через геткомпонент монобеха источника огня во время коллижена. В каком месте источника огня будет храниться значение перечисления type.firesetter? Раз уж заменить обычный firesetter : monobehaviour на элемент перечисления?
Дохуя компонентов это неудобно, это медленно, это хуёво кодировать, сам геткомпонент работает относительно медленно, ты хуй когда сможешь предсказать в каком порядке вызовется апдейт на одном из тысячи твоих компонентов. Короче, залупа.
Да я согласен, что залупа, а как делоть то? Вот нужно отследить, что два объекта с определенными свойствами пересеклись коллаидерами. Как это детектить, кроме как в их внутренних монобехэвиорах?
Один компонент вместо тысячи. Сам бы я делал через не-монобех с монобех прокси, но это путь ебаната, ты не поймёшь.
Я правильно понял, что абсолютно у всех объектов (в том числе управляемого игроком) должен быть ОДИН одинаковый монобех, который выполняет стандартные старт, апдеит, колижн/триггер-ентер/екзит и прочий стаф? А расписывать все поведение нужно в куче других скриптов и интерфейсов, которые будут подменять значение каждого конкретного метода(старт апдеит и т д) в зависимости от владельца монобеха и других владельцев этого монобеха при взаимодействии объект-объект или объект-игрок.
Ты какую-то хуйню расписал, которую я хуй понял. Пиши код, короче, чтоб был заебись. Нормально всё сделаешь - нормально будет.
В основном шишки своей головой бью. Мозгов не хватает во все сразу вникать.
По всему /gd. Если приползёт мочухан с глобальной мочеркой, то и всему 2ch. Рекомендую общаться на тему годота в движкосрачетреде.
>Это не многопоточность, это однопоточность.
А как многопоточность сделать? И нужно ли вообще?
мимопроходил
DragonBones юзай
Да, нужно. Однопоточные игры из 90х до сих пор тормозят на разных 90000000999990000kkk. Гугли Job system, для их использования не требуется ецс, ты можешь работать с обычными gameobject. При этом многое джобсы выполняются в мейн треде, лол. И если будешь юзать джобсы, забудь про группировку трансформов по родителям, вываливай всё в разных родителей, так работает быстрее.
async await
>Типа один поток ищет пути, другой двигает объекты?
да, но не так тупо, 1 поток загружает тяжёлый объект (след.уровень или кат.сцену), а второй позволяет продолжать игру. Деление взаимосвязанных вещей по потокам (путь зависит от положения объектов) приведёт к ошибкам, так как значения переменных не будут совпадать
А как интересно в каком-нибудь факторио реализовано. Там одна гигантская сцена, в которой все работает одновременно.
Ну и норм хуле, 10к спм и в монопотоке прекрасно себя чувствуют.
Факторио грузит процессор на 20% и показывает 30 кадров в лучшем случае. Отличный пример того, что однопоточные игры должны умереть.
нихуя ты пизданул
Знаю только одну игру, которая нормально может в потоки - это Arma 3. Но зачем это инди даунам с их инди говном?
Так инди говно тормозит же. Конечно, инди даунам похуй, а вот игроки страдают. Хотя в арме тоже лоу фпс, не знал, что она умеет в мультитрединг.
Это единственный способ. Можешь поставить рядом свое лого или взять и скомпилировать из исходников юнити 5.x, вырезав вызов заставки.
Хочу сменить профессию и вроде даётся всё легко-понятно и душа лежит, но я продаю табуретки и пержу в них за 120-180 к/мес, можно ли надеяться на дроп в ближайшем будущем?
да в том то и дело, что заебало. В принципе, есть бюджет чтобы полгода-год сидеть дома и заниматься только разработкой, поэтому хочу уволиться с расчетом трудоустройства хотя бы джуном до наступления голодной смерти, мне бы понять на что надеяться в ДС2, потому что разброс от 40 до 200 т.р по hh.ru
Устраивался ли кто-то недавно, или шерстил рынок?
Пять секунд в гугле: https://zen.yandex.ru/media/id/5e5693545a0acf593cd9b7bc/nastroiki-proekta-v-unity-nastroiki-ekrana-zastavki-5e80e6f096544a69b3c4f06d
На бесплатной версии нельзя снизить прозрачности меньше 0.5 и убрать лого, больше никаких ограничений. Логотипов можешь ебашить сколько хочешь, после юнитековского.
Попрозили по ТЗ сделать 2д-проект типа флэппи бёрд. Считается ли 2.5D-игра за 2D? И стоит ли такое делать? Или запилить хуйню с примитивами - и меня возьмут?
Никуда ты на такую зарплату не устроишься, сиди на жопе ровно
В начале скорее всего будешь джуном за - от 0руб до 20к. Далее как повезёт, но первое время доход будет около 0, пол года-год. При условии что будешь ебашить чуть ли не 24/7.
>от 0руб до 20к
может спросил не так, но я не вкатываться собираюсь, вполне шарю по паттернам и архитектуре, хочу через месяц ЕЦС начать осваивать. Мне просто интересен уровень ЗП, потому что пиздец скачет. Бывает ли реально у мидла 150к или там максимум 60?
Так сразу бы написал. Конечно если шаришь можешь изи делать под сотку, до 200 уже сложнее т.к вакантные места заняты и с улицы без портфеля не берут, ну и выше 300 уже сам понимаешь сеньёры помидоры проекта, ну там больше командование чем писяконье кода.
Если предоставишь пруф авторства то конечно
2560x1440, 0:18
На видео пытался показать, что при ресайзе окна по ширине у камеры расширяется..назовем это область видимости, НО при увеличении окна по высоте приводит к тому, что все объекты как бы приближаются, а при уменьшении отдаляются.
Как сделать так, чтобы камера при ресайзе по высоте вела себя так же, как и при ресайзе по ширине? Ищу такое, чтобы можно было настраивать размер камеры как по ширине, так и по высоте. В юнити это настраивается одной переменной orthographicSize, а я хочу, шобы не одна переменная, а две...
Помогите...
Нет конечно. Декомпиляция игры же запрещена, а доказательства, полученные незаконным путём - суд не учитывает.
960x528, 0:07
держи хороший канал, лист про адаптивный UI как раз для тебя
https://www.youtube.com/watch?v=WWkJ1-hlGZc
Анон, подскажи, как можно в if проверить, что у меня UI-кнопка в сцене нажимается непосредственно перед вызовом метода? Хочу сделать так, чтобы игру можно было начинать как с пробела, так и с кнопки этой, а она ничего не делает, кроме того что выводит лог в консоль.
Мне кажется мне как раз не нужна адаптивность, я хочу чтобы любой объект в окне оставался одного размера, в случае с юнити при смене размера камера приближает/отдаляет, я не хочу этого...
а, я сразу не прочитал что ты написал, подумал, ты страдаешь от того, что объекты в камеру не влезают, хз как полностью решить задачу, ты можешь сделать камеру физической и в настройках Gate Fit указать Fill, отдаление будет, но не такое
>>79292
эм, вынести прыжок в отдельный метод и указать кнопке его выполнение
в смысле, точка останова тебе говорит о чем-то? именно так значения по полям смотрят, дебагам обычно только пингуют работоспособность
Ну так ты на код посмотри. Всё он вынес. Кнопке тоже всё указано, она в инспекторе игрока выбрана.
а ты сам смотрел? он при нажатии прыжка вызывает метод на кнопке и отдельно задаёт какие-то параметры, тогда как это должны быть ВСЁ 1 метод и в Update должно стоять if (..."Jump") {JumpYoba();}, точно так же как и на кнопке отдельно указан JumpYoba, а тут какая-то хуй пойми солянка
Это ебля какая-то, постоянно паузу тыкать, лучше уж в монобех ссылками насрать и в окне юнити уже следить.
Теперь вопрос - это нормально, что, допустим, оюъект игрока будет дочерним канваса?
Не городи велосипеды, не можешь сам нормально камерой управлять как хочешь - делай через ассеты, как и все юнити разработчиикc (например Cinemachine).
Еще в этом видео можешь посмотреть https://youtu.be/-Ii3MrJFBkQ и это https://youtu.be/aLpixrPvlB8
Первое с 17:40, чет ошибся со временем.
Нахуя?
Да, для каждой строчки отдельный объект текст, просто юнити не для этого.
В настройках проекта ставь вырезку и желательно оптимизатор с++, и сверху бустер по полной. В конечном билде не будет ничего что не используется в игре.
Самый простой вариант это скачать чужую игру и посмотреть как там реалтзовано.
640x364, 0:20
>Ага, пиздец простой вариант в чужом говнокоде копаться
Там был вопрос о структуре и её выстраивание, а не о говнокоде. О картине в целом так сказать, и для этого как нельзя лучше подходит просмотр уже готовой игры, а именно её проекта. Если не понимаешь о чём речь, не встревай.
подскажешь где взять?
Насколько обычно тебя хватает?
Пытаюсь сделать что-то ВР-ориентированное. Сделал стандартный гуманойдный риг с инверсивной кинематикой. Руки вроде трекаются без особых проблем (хотя хз что делать с длиной, как подгонять модель под длину рук разных игроков).
А вот с головой и туловищем проблемы, как быть с приседанием?Блендить переход в анимацию сидения на кортах, когда HMD опустится ниже установленной высоты или есть более элегантные и реалистичные решения?
656x320, 0:20
Так-то это всё бесплатные ассеты из интернетов. И даже анимации. Уже 15 строк в файле кредитсов, лол. Деваха только, походу, пизженная из какой-то игры и выложена на сток, но я потом переделаю. Может быть.
>>79519
Потому что анимация ног от какого-то спецназера была, а слой анимации рук отключён. Потому я и проигрывал. Сейчас вот охуеваю с ротейшонов, хуй поймёшь, как пистолет ориентировать, чтобы он был, как надо. Как не надо получается, а как надо - не получается.
Пытался на паре популярных фреймворках, слишком муторно и сложно когда становится много зависимостей и механик.
Как в одиночной игре, но помноженной на х* сложность. Но я делал рпг+один сервер.
Если делать кооп например через облако по типу локальных комнат, и простую по механикам игру, думаю не сложно.
лол ну собери их в один массив в начале, присвой им индекс например исходя из их позиции в мире и веди список собранных.
но лично я бы просто сделал в юнити редактор который бы на указанных в этом редакторе точках сам размещал хуйню и вёл учёт этих индексов чтобы ничто никогда не перепуталось.
Когда делал стимовские ачивки и карточки, то чекал все доки, и разницы между другими фраемворками не заметил, везде либо предоставляется хостинг с комнатами, или же сам ебёшься серверами.
>Ты что-то слышал про корутины и многопоточность?
Пиши внятней тогда, хлебушек. Я лично тут вижу очевидную связь в том как ты построил предложение и браваду ньюфага который советует другому ньюфагу выстрелить себе в ногу. Многопоточность это настолько глубокая жопа, что лезть туда без большой необходимости не надо и не стоит даже думать и упоминать о ней.
Хочу запилить что-то вроде гостраннера, только быстрее чем та ебаная черепаха. На графоуни не дрочу, но насколько хуже графон юнити хуже уе4 в котором и был сделан раннер, и насколько сильно с ним придется ебаться в юнити?
На уе я нихуя не делал и даже лезть в это очко не хочу. Я говорил про https://store.steampowered.com/app/1139900/Ghostrunner/
>но насколько хуже графон юнити хуже уе4
Ни на сколько, на юнити много чего графонистого сделано
Графон как в гостраннере юнити без проблем должен осилить.
>насколько хуже графон юнити хуже уе4
Графон уе4 намного хуже графона юнити с 2018 года.
https://www.youtube.com/watch?v=DDsRfbfnC_A
>Пиши внятней тогда, хлебушек.
Сорян, я не обязан за твою глупость отвечать.Если бы я написал про "синие и чёрные джинсы", то ты бы за полосатыми полез в интернет? Если бы я написал "асинхронность и многопоточность", то ты бы вообще умом тронулся?
>Многопоточность это настолько глубокая жопа
Ясно, для тебя многопоточность это уже сложно. Понял. Удачи тебе, хуле
>для тебя многопоточность это уже сложно
Ну да, как только вылазишь из тестовых проектов и пытаешься построить нормальную архитектуру для полноценной игры, все превращается в ад. При чем не всегда и не для всех случаев дающий хоть какую-то пользу, а не просто кучу геморроя. В 95% инди проектов это оверхед.
С тобой тоже все ясно, восторженный вкатывальщик. Попробуй релизнуть хоть одну игру для начала.
В гугле забанили? Ищешь нужный ассет и ищешь его со словом "скачать".
Еще можешь по гитхабу искать, многие не заморачиваются и не прописывают плагины в .гитигнор, оно попадает на гит - его удаляют, но оно остается в истории коммитов.
Чего? Ты хоть обьясни, что такое вырезка или как это загуглить? По твоему посту только настройки для графония нашёл, а мне бы скрипты убирать
При использовании кода с первого пика после нажатия перса разворачивает левее, потом почти не реагирует на нажатия.
Скрипт привязан к выделенному чару на втором пике.
Обязательно нужно юзать raycast?
Если ты миллионы начал зарабатывать, твою игру могут декомпилировать и найти доказательство того что ты спиздил часть кодой базы и у тебя нет на нее нужной лицензии. В любом остальном случае всем похуй.
Но мы же знаем, что шанс этого крайне мал.
1680x1050, 0:45
Гм а есть принципиальная разница между аддфорсом2д и обычным? В 2д нет режимов ускорения и скорости. Но я ж могу просто 0 по зету вписать и обычный использовать.
Выглядит шикарно. Если бы скринсейверы в 2kXXI году еще использовались, то посоветовал бы тебе его сделать
Уже перемещаю через addforce, на компе все плавно. Ставлю лок 60, плавно. На планшете плавности нет, хотя фпс мониторы показывают 60 кадров. От чего так может быть.
Аноны, пытаюсь затекстурировать Terrain
Мужик на видео добавляет слой с текстурой и он сразу может рисовать кистью с этой текстурой
таймкод https://youtu.be/MWQv2Bagwgk?t=676
Но когда я выбрал слой и выбрал кисть - я нихуя не могу рисовать. Курсор просто не меняется на кисть. Почему? Куда нажать?
Не может такого быть, если физических объектов не слишком много. Скорее накрутил с эффектами и поспроцессингом так, что не вывозит. Попробуй в чистом проекте реализовать и тоже количество физичных объектов и затести перемещение.
Пост-процессинг вообще не делал, там голый прототип игромеха. Есть какие-то дефолтные нагружные настройки? В Quality поставил медиум, Физических объектов тоже неособо, 5-10 коллаидеров и ригидбоди на сцене. Velocity Iterations с 8 до 4 снизил. Стало лучше, но какие-то микрофризы проскакивают по ощущению. Где еще подкрутить?
А то вот были деревья, я отъехал и их уже нет
Да там один скам с левыми ссылками, 10 переходами по рекламным банерам где нужно решать капчу 3-4 раза, ждать 20-120 секунд на каждой.
А по итогу попадаешь на платный файлообменник с которого скачать можно только заплатив за прем.акк.
Нашел только один сайт где была бесплатная опция скачивания. Но после всего этого ада с порнобанерами и скачки 140 мегабайт на черепашьей скорости за 2 часа .unitypackage оказался битым и не распознается даже унпакером.
Если знаешь парочку годных напиши.
У тебя на скрине открыт демо-уровень.
Если изменял его, а он откатился, то рип.
Если делал на другой сцене - открой ее.
Убрал fixed dpi, выставил ультра пресет, стандартную физику, все равно все летает... Я ж пришел к тому, с чего начинал. Хуле оно лагало то тогда...
Один на гите нашел когда захотел посмотреть, что он может. А так, мне это не нужно было никогда особо, хватает бесплатных.
Что-то сломалось и теперь при приближении и удалении камеры я нихуя не вижу
Самый простой способ это профайлером посмотреть что кушает, и от этого отталкиваться. Если голая меха, то либо где-то лупы, или же тяжёлые вычисления каждый кадр.
>>79853
В настройках террэйна есть строчка дальности видимости травы/деревьев/объектов, по умолчанию вроде там 300 или 100, вот пока в редакторе выкручиваешь на макс 5к.
>>79856
Если сохранил сцену ctrl+S, то всё должно остаться независимо от того что эта за сцена. Посмотри по самим сценам, скорее всего открыл не ту.
>>79879
Дальность у террэйна травы, либо же качество травы, при постановки в 0 трава не будет отображаться, но она есть.
>>79881
Клиппинг камеры, смотри в настройках верху сцены там кнопка, по умолчанию 0.3 или около того. Второй вариант клиппинг в самой камере, в её нстройках филд ов вью.
дважды кликни на свою землю в окошке иерархии
>Профайлером
Так в том то и дело, что нихуя не поменял. В настройках поставил fixed dpi и заработало, убрал. Все еще работает. А профайлером я только скачки сборщика мусора увидел, больше ничего не просаживает. Рандом какой-то. Вроде нихуя не сделал, а фпс сам ровным стал в итоге.
я ебал в жопу, нужнен был ещё System
спасибо
Поднял на 50 вверх, но эта хуйня все-равно во что-то упирается
>Рандом какой-то
Запомни, в программирование нету рандома, это не магия, всё работает строго по алгоритмам. Сложность заключается лишь в понимание и держание в голове всех возможных связей что, на что влияет.
>>79893
Чтобы делать горы и впадины в юнити есть несколько способов. Самый простой - Это Дефолтную высоту ставить высокую, и от неё плясать. По сложнее - Комбинировать несколько террэйнов с высотами и кастом смежей.
>Самый простой - Это Дефолтную высоту ставить высокую, и от неё плясать.
Как это сделать? Я поднял террейн на 50 и этого недостаточно
Проиграл. На самом деле нет, ты не поднял ничего. Ты поднял геймобъект, но твоя карта высот не поменяла свои значения.
Ничего, что я с позволения "напрограммировал" на производительность не влияет, экспериментально подтверждено уже. А что там в внутри у юньки происходит, мне все равно не узнать. Но сам факт. По какой-то причине фпс перестал быть рваным в один прекрасный момент.
Ставишь нужную высоту, она идёт от 1 до твоих значений. В зависимости от предпочтений делаешь плато, как основу, к примеру от 500 это 250 в обе стороны.
>>79902
Я тебя уверяю, нету не магии, не волшебных свойств юнити. Причины могут быть там куда ты даже не заглядывал, или не знаешь. Если так уверен в своей правоте, просто отдай проект на аутсорс, и тебе буквально за пару тысяч деревянных найдут косяк.
Еще раз - Программирование не магия, всё строго по алгоритмам, но из-за не знания или не опытности ты просто физически можешь всё не знать или не понимать.
>Ставишь нужную высоту, она идёт от 1 до твоих значений. В зависимости от предпочтений делаешь плато, как основу, к примеру от 500 это 250 в обе стороны.
У меня уже есть terrain и мне надо как-то его продавить.
Я уже менял height для террейна и это нихера не помогло.
В любом случае, мой проект крашнулся и теперь не открывается. И тут я узнал, что юнити не делает автоматические бекапные сейвы. Охуенно.
Посмотрел.
Как менять карту высот для существующего террейна - не нашел, если не считать загружаемых из raw-картинок карт высот (что для меня нерелейтед).
Блин, ну плохо смотрел значит. Эх.
Смотри. Если тебе надо допустим поднять текущий террэйн, но не изменяя его, просто добавить высоты, ты пользуешь стампом. Зажимая shift ты выделенную область поднимаешь, тем самым как бы копируя её. Посмотри видео по этой теме, куда проще и понятнее будет.
Ну кистью работать я умею. Я думал, что есть какой-то параметр, который можно изменить в настройках, а не просто кисточкой поводить, создав возвышенность на всем террейне.
Например хочу Gaia, Vegetation Studio Pro и River Auto Material
Либо в телеги по группам ссылки ищи, либо же в приватках. В бесплатном это только по помойкам лазить.
Ну напиши скрипт, который в цикле пройдётся по твоей карте высот и поменяет значения, я хуй знает. А лучше в программе, откуда равку экспортируешь, всё настрой, как надо.
>>79896
лол что ты делаешь карта высот локальная для земели.
я даже не уверен есть ли в текущей земле кнопка для поднимания или опускания её целиком.
https://pastebin.com/7StAVVU8 на сделай себе C# скрипт TerrainManipulator, скопипасти туда это, повесь его на землю тогда сможешь вводить значение (желательно в пределах единицы) и жать кнопку чтобы прибавить или убавить эту высоту с земли.
э забыл убрать CanEditMultipleObjects. надо было функционал для этого сделать, или убрать. и ограничить инпут. и может проверять максимальные границы инпута чтобы не поднимал землю слишком высоко. и Ctrl+Z добавить. ну и хуй с этим. и так сойдёт.
>тыкал свой солвер для жидкостей/газов с давлением.
Хуя ты мутишь. Только хули такая запись стремная, абсом пиши и не сжимай так сильно, не видно нихуя, всю красоту похерил
Нихуя не понимаю, я гуглил её, нужно было дописывать протокол, но он уже дописан
да там если битрейт выставить побольше то всего происходящего на экране оно либо в кашу превращается, либо занимает много. нука где мой ffmpeg попробую перекодировать так чтобы чуть получше было видно, а то и правда шакалов многовато.
такого сорта симуляции иногда всякую интересную хуйню показывают при тех или иных значениях. обычно оно просто взорвётся, или не работает как надо, но иногда интересно!
а вообще это я откопал свой старый проект симуляции земли и стал работать над ним с новыми идеями. получше подумал над тем как мне симулировать атмосферу.
недавно занимался рефакторингом вычислительного шейдора, делил его на куски. а то работать с шейдором на полторы тыщи строк уже было физически трудно.
Случайно сдвинул камеру и всё, пизда, теперь юнити в бесконечном цикле гоняет эту хуйню
>Так убери авто компиляцию
Я ничего не включал.
Более того, совершенно внезапно начинается такая хуйня и все начинает лагать
Делаю учебный ранер и дошел до того, чтобы ввести чанк (3х3 блока), каждый блок будет превращаться при инициализации в один из префабов забитых в него (препятствие, монетка, ресурс, буст), у каждого из префабов свой шанс, ну и учитывая кривую интереса для всего уровня. Как вам идея? Изобретаю может велосипед и есть решение лучше?
Без разницы тащемта, мне подсмотреть идеи и реализации. Хочется разобраться.
Ну же, я знаю, что ты знаешь, как это пофиксить
Оно кстати сопровождается ошибкой:
Look rotation viewing vector is zero
UnityEngine.Quaternion:LookRotation (UnityEngine.Vector3,UnityEngine.Vector3)
Cinemachine.Cinemachine3rdPersonFollow:GetHeading (UnityEngine.Vector3,UnityEngine.Vector3) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:251)
Cinemachine.Cinemachine3rdPersonFollow:PositionCamera (Cinemachine.CameraState&,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:189)
Cinemachine.Cinemachine3rdPersonFollow:MutateCameraState (Cinemachine.CameraState&,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:165)
Cinemachine.CinemachineVirtualCamera:CalculateNewState (UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineVirtualCamera.cs:523)
Cinemachine.CinemachineVirtualCamera:InternalUpdateCameraState (UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineVirtualCamera.cs:155)
Cinemachine.CinemachineCore:UpdateVirtualCamera (Cinemachine.CinemachineVirtualCameraBase,UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Core/CinemachineCore.cs:355)
Cinemachine.CinemachineCore:UpdateAllActiveVirtualCameras (int,UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Core/CinemachineCore.cs:275)
Cinemachine.CinemachineBrain:UpdateVirtualCameras (Cinemachine.CinemachineCore/UpdateFilter,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineBrain.cs:427)
Cinemachine.CinemachineBrain:ManualUpdate () (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineBrain.cs:376)
Cinemachine.CinemachineBrain:LateUpdate () (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineBrain.cs:336)
При этом я ничего не трогал вообще, просто импортнул ассет с 1st person
Ну же, я знаю, что ты знаешь, как это пофиксить
Оно кстати сопровождается ошибкой:
Look rotation viewing vector is zero
UnityEngine.Quaternion:LookRotation (UnityEngine.Vector3,UnityEngine.Vector3)
Cinemachine.Cinemachine3rdPersonFollow:GetHeading (UnityEngine.Vector3,UnityEngine.Vector3) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:251)
Cinemachine.Cinemachine3rdPersonFollow:PositionCamera (Cinemachine.CameraState&,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:189)
Cinemachine.Cinemachine3rdPersonFollow:MutateCameraState (Cinemachine.CameraState&,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:165)
Cinemachine.CinemachineVirtualCamera:CalculateNewState (UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineVirtualCamera.cs:523)
Cinemachine.CinemachineVirtualCamera:InternalUpdateCameraState (UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineVirtualCamera.cs:155)
Cinemachine.CinemachineCore:UpdateVirtualCamera (Cinemachine.CinemachineVirtualCameraBase,UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Core/CinemachineCore.cs:355)
Cinemachine.CinemachineCore:UpdateAllActiveVirtualCameras (int,UnityEngine.Vector3,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Core/CinemachineCore.cs:275)
Cinemachine.CinemachineBrain:UpdateVirtualCameras (Cinemachine.CinemachineCore/UpdateFilter,single) (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineBrain.cs:427)
Cinemachine.CinemachineBrain:ManualUpdate () (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineBrain.cs:376)
Cinemachine.CinemachineBrain:LateUpdate () (at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Behaviours/CinemachineBrain.cs:336)
При этом я ничего не трогал вообще, просто импортнул ассет с 1st person
Что значит "дефолтный"? Говно бесплатное от Васяна?
>Cinemachine
Посмотри настройки тут, или вообще удали.
>Говно бесплатное от Васяна?
Ну да, примерно. Говно бесплатное от Unity.
https://assetstore.unity.com/packages/essentials/starter-assets-first-person-character-controller-196525
void Method(<T> a) { }
<T> i = значение;
Button.OnClick.AddListener(() => Method(i))'
>at Library/PackageCache/com.unity.cinemachine@2.8.3/Runtime/Components/Cinemachine3rdPersonFollow.cs:251
Тыкни блядь, на ошибку.
Он скорее всег оподтягивает синемашину, хочет задать какие-то параметры и не может из-за чего -то. Версии юнити, версии синемашины, небо или Аллаха. Попробуй поставить рекомендованную версию и начать с чистого проекта, обновить синемашину или удалить синемашину, а еще лучше - просто выдрать нужные куски кода с ассета вместо тупого использования.
https://cobertos.com/blog/post/how-to-climb-stairs-unity3d/
Вешаешь character controller доступный по дефолту и там заботливые юнитеки реализовали для тебя поднятие по ступенькам.
По твоей логике все, что не имеет ярлычка LTS. априори бажное?
Oh my sweet child, это только у криворучек из юнити так. Они считают, что лтс это продакшн, а все остальное - альфа-сборки.
Я замоделил модель в блендере, которую мне надо будет заанимировать ну и сценку несложную изобразить.
Мне анимации в блендере пилить и потом экспортить, или анимировать силами юнити?
Нет, просто там когда редактор устанавливаешь - для долбоёбов конченных отметили рекомендованные версии. А ты даже в это не смог.
В блендере конечно
Я вчера обновился до альфы, хотя планировал дождаться беты. Второй день никаких проблем, всё работает, как часы. О чём это говорит? Да ни о чём. Просто ты долбоёб.
>О чём это говорит? Да ни о чём.
Вот именно. Зачем спизданул - загадка.
Но у долбоебов свой путь
Поясняю для особо глупых. То, что у тебя проблемы с юнити значит только то, что у тебя проблемы. Уже не первый год вижу, что проблемы бывают только у жопоруков, которые начинают гореть и носиться по всему интернету с горящей сракой. Десятки тысяч людей с этой юнити, я сам этой версией пользовался. И никаких проблем. А кто-то напишет while(true) в Awake и горит, что юнити падает.
>Уже не первый год вижу, что проблемы бывают только у жопоруков, которые начинают гореть и носиться по всему интернету с горящей сракой
Твоя выборка, несомненно, репрезентативна
Что характерно - ведь у долбоеба иначе быть и не может.
Ху там плавал. Он создает невидимую хуйню на которой спавнится персонаж, а со ступенями все так же плохо.
Да не отвечай ты троллю, он чисто срач разводит, да хейтит юнити.
Тут по фактам так - У юнити случаются и баги и глюки? Да, но редко, как и в любом движке или программе. В юнити есть какие-то не понятные конечному юзеру механики? Нет, есть лишь куча подводных которые постигаются опытом и чтением форумов. Юнити ограничивает как то своих пользователей в создании контента или игр? Нет, делай как хочешь, что хочешь, зависит лишь от рук.
По своему опыту использованию Юнити могу сказать что за 3 года, у меня случалось максимум пару десятков крашей, десяток утечек памяти, и так-же пару десятков ошибок библиотек. Но все эти проблемы решались тупой перезагрузкой проекта. Были ли какие-то уникальные ошибки и баги? Нет, кроме чужого говнокода и сломанных библиотек не встречал.
В доке написано 5 строчек, типа рендер отличается, тени, чето еще. Мне это ни о чем не говорит.
При этом, какой-то чувак на реддите грит, мол, новичкам надо вкатываться именно в urp.
Поясните за дефолтные шаблоны, анонсы.
Типа новый рендер. Теперь он "скриптуемый". По факту особо ничего не меняется, разве что постпроцессинг встроенный и ты получаешь визуальный редактор шейдеров. Можешь посмотреть семпл сцену, там, в принципе, всё понятно. Ну и из нововведений, у тебя будут разные файлы с настройками UniversalRenderPipelineGlobalSettings плюс постэффекты привязаны к волюмам, а те, в свою очередь, к ГО. Старый рендеринг ещё не депрекейтед, но он точно будет, так что вкатываться в urp\hdrp смысл есть.
Если планируешь мобилки делать, стоит использовать? Сам по себе он не ухудшает производительность? Так то интересуешь шейдер граф.
Юнитеки говорят, должен быть паритет между urp и старым рендером. Я не сравнивал, сравнивал hdrp и urp, hdrp пиздец, какой тяжёлый. А, ещё в hdrp пару ограничений захардкодили для ретроговна с gles 2.0, типа 8 источников света на объект.
>>80024 (Del)
Иди жирнить в движкосраче тред, пидорас.
люблю обмазываться оптимизацией
Небольшая проблема: бэкграунд при движении персонажа двигается дерганно, как фиксить?
Нюансы(как в анекдоте про нюансы):
Бэкграунд представляет из себя спрайт который летит за камерой а не канвас
Персонаж двигается с помощью rb.velocity а не transform(пилил по гайду и понравилось что в таком случае персонаж останавливается не сразу, допроигрывая анимацию ходьбы).
Может ли является проблемой что то из перечисленного?
Накати новый инпут систем, хуле ты как этот.
Мне тут объяснили, что передвигать надо через аддфорс. От себя посоветую это еще в фиксед апдейте делать. Но только мувмент, нажатие кнопок в обычном апдейте. Если движение на клаве, нормализуй итоговый вектор, а то сумма двух осей даст скорость выше, чем на осях по отдельности как в старом думе.
мимо месяц кириллствую
создаю объект, он появляется вроде бы по центру, перехожу из фул скрина в микро окно, то он улетает нахуй аж сюда (960.00, 458.00, 0.00)
в билде надеюсь такой хуйни не будет?
Насколько я понимаю, так делают ради игроков с железом 10-летней давности и ноутбучников.
Или верстать под FullHD и не париться?
>>80116
А хули ты создаешь новый объект, или это так теперь принято в новых версиях? Я всегда всегда так делал:
GameObject hui = Instantiate(parent)
Тем временем я планирую ваять скрипт, который список уровней в табличку расставит взависимости от аспекта. Overthinking?
Вангую, что у тебя эта залупа в апдейте, потому работает через анусай. У меня буквально такой же код используется без проблем.
>>80122
Я под минимальное пилю, почему бы и нет? Ты готов игрока нахуй посылать только из-за его монитора? Это попахивает сегрегацией по мониторам. Ты там что, в гитлероподобных записался?
Не понял вопроса. Если канвасу поставить scale with screen size, match mode shrink, в любом разрешении и аспекте будет скеилиться как надо. Я че-то упускаю?
Я под минимальное пилю, почему бы и нет? Ты готов игрока нахуй посылать только из-за его монитора? Это попахивает сегрегацией по мониторам.
У многих сейчас уже 2к или даже 4к мониторы.
Если не считать Steam Deck, то игроков с микро-мониторами очень мало.
>>80128
В общем да, но с оговорками. Например, сверстал под старый 800*600 квадрат, а все играют в ФуллХД сейчас, соотношение сторон другое. Может какое-нибудь говно криво растянуться если ты элемент неправильно настроил.
Как-то с интерфейсом было просто. Вот камеру (вид сверху) настроить так, чтобы с любым аспектом она показывала одинаковый масштаб картинки было труднее. Высчитывать ортографик саиз через соотношение сторон.
>У многих сейчас уже 2к или даже 4к мониторы.
Ну и нахуй этот 0.1% долбоёбов нужен? Фулл ашди работает? WXGA читабелен? Всё заебись.
Где и как хранить данные о состояниях? Сделал к каждой комнате сктиптаблобжект, где хранятся картинки к каждому состоянию. Но как их потом сохранять и загружать? Делать 100 json'ов? А как потом эту сотню json'ов через гугл плей сервисы сохранять?
Лучше всего иметь просто один файл сохранения, который записывается/читается при загрузке/выходе из игры.
короче щас сделал вот так, у меня к этой точке летят спрайты на экране и если в редакторе перейти из фул скрина в микро окно блядское, то эти блядские спрайты начинают лететь совсем не в центр экрана
походу баг а не фича
>походу баг а не фича
Ты вычислил центр экрана, а потом поменял размер экрана. Понимаешь, что это значит?
Просто ставишь скейлер чтобы на высоту экрана умножалось и все отлично скейлится хоть на андроед 1280х720, хоть на 8к телевизор.
>сверстал под старый 800*600 квадрат, а все играют в ФуллХД сейчас
А это вообще вопрос не про разрешения а соотношения сторон. Чтоб ничего не разъебывало раскидываешь свой интерфейс по углам или по сторонам экрана, так чтоб при любой форме элементы крепились к краям и двигались соответсвенно.
так ты объясни ЧЯДНТ? по моей логике я просто получаю точку в центре экрана, причём всё работает, но недостаточно корректно
Первое что тебе стоит понять это то, что если ты просишь помощь, не вести себя как наглое быдло. Это не бэ
Второе же, взять на истину то, что ты можешь быть не прав, или заблуждаешься.
>по моей логике я просто получаю точку в центре экрана
Смотри сюда. Твоя точка это высота экрана и ширина экрана делённая на два. Берём 4к, прикинем чисто по ширине, как оно примерно. Это 3840\2, итого 1 920. Переключаемся "в микроокно", где по ширине 800 пикселей, например. А у тебя "центр" в точке 1920 нахуй. А ещё лучше, стартуй в микроокне, а потом растягивай свой анус и экран. То есть всё работает абсолютно корректно, просто так вышло, что ты долбоёб.
А как грамотно организовать? Если за каждый предмет в комната своя переменная будет отвечать, то получится 1000 переменных, это нормально вообще? Так и делают?
>Так и делают?
В киберпанке ещё интереснее поступили, они каждую покупку\продажу тоже записывают в сохранение. Крафт тоже записывается, даже если предмета у тебя уже нет. Скрафтил предмет? Сохранили эти данные. Продал? Это тоже сохранили.
Правда, потом оказалось, что сохранения больше 8 мегабайт корраптятся навсегда и больше не работают. Потом пофиксили коррапт, но осадочек остался.
Но тогда как лучше сделать сохранение этой кучи переменных? Делать каждой комнате отдельный скрипт с методом сохранения - наркомания. Сделать один метод с 100 вариантов switch (roomName) тоже наркомания.
Сделать словарь с ключами к "комнатаПредметОдин" + "состояниеПредмета" и сохранять все в словарь нормальная идея?
но зачем switch и зачем каждой комнате свою хуйню. просто сделай формат контента комнат таким чтобы было поебать из какой комнаты куда ты чё сохраняешь
Возможно я тупой, но как? Предположим что каждая комната это отельная сцена, на каждой цене 10 предметов. За их расположение отвечает один и тот же скрипт. Как этот скрипт будет передавать разные переменные?
Идеальный мир - в момент взаимодействия с объектом это взаимодействие с объектом сохраняется в буфер, который при сохранении записывается. Естественно, нужно учитывать, есть уже этот объект в сохранении или нет.
Говнокод - при нажатии "схоронить" цикл for each transform, который просто в лоб сохраняет позицию трансформов + их имена. На загрузке пробегаешь по всем сохранённым данным, находишь трансформы в сцене по имени и заливаешь позиции. Точно то же самое с любым другим компонентом.
Это понятно, я не понимаю другое. Смотри, у меня 100 комнат, у каждой комнаты один скрипт в котором есть переменные: состояниеПредметаОдин, состояниеПредметаДва и тд. Как этому скрипту передать данные в файл сохранения с другим названием переменных. В файле сохранение должно быть комнатаОдинСостояниеПредметаОдин и тд? Как в файле сохранения разделить состояния предметов по комнатам?
гхм. а не похуй ли что отдельная сцена? что меняет разделение на сцены? что мешает скрипту передавать разные переменные то? ты хардкодишь их чтоли?
у тебя там проблемы с головой чтоли. вот есть у тебя например три типа предметов, да? например картошка, банан, апельсин. ты говоришь ну короче картошка это 0, банан это 1, а апельсин это 3. и комнаты такой нумеруешь. и короче вот у тебя на каждую комнату отведён кусок массива по 10 индексов. какое число в индексе тот предмет там находится. а потом ты такой рядом ложишь ДРУГОЙ массив и сохраняешь там на тех-же самых индексах например позицию предмета. или его состояние. и вот хуяк у тебя сохранён тип предмета, его позиция, его комната (хули позицию в массиве можно на 10 поделить) и любая другая хуйня. например массив с булеанами да, если тру то нормас, а если фалс то гнилой. или что у тебя там предметы какие-то особенные? что у тебя предмет? что он должен собой представлять? что объединяет эти предметы? всегда можно нормальные методы сериализации ебануть
>что мешает скрипту передавать разные переменные то?
Либо я тупой что пиздец, либо я хуево обьясняю. Скрипт сохранения принимает переменные из комнаты, а как передать из раздельно потом в общий файл?
>>80230
Я думал сделать так: в файле сохранения есть словарь, ключ к нему - название комнаты и предмета, в скриптаблобжекте комнаты прописаны ключи. Беру ключ и сохраняю по нему состояние предмета
>Как в файле сохранения разделить состояния предметов по комнатам?
Так разработай свой формат, ёпта.
>4 байта длина всех полезных данных
>4 байта количество комнат
>4 байта длина данных комнаты 1 //предположим, это число N
>N байт данных
>4 байта данных комнаты 2
>X байт данных
Я так по сети данные гоняю, только вместо 4 байт заголовки по 2, экономнее получается.
Хотя, блядь, вроде проще все сохранять в один массив. Если в каждой комнате по 10 предметов, то с 1 по 10 это первая комната, с 11 по 21 вторая и тд. Так вроде проще будет. Спасибо, антоны, лол
структурируй то как ты это сохраняешь ололо. хоть в массив с массивами сохрани. не похуй ли?
зачем тебе вообще названиями комнат оперировать. переименуешь комнату и хули теперь. тебе только индекс комнаты знать надо. они же у тебя пронумерованны.
>>80233
да ты можешь и в линкед лист нахуячить, в один большой массив, хули. например если у тебя 100 комнат, то ты знаешь что на первые 100 индексов можно положить индексы начала цепочки. а конец цепочки например указывается -1. тогда у тебя данные первой комнаты будут размещены как [0] = 101, [101] = 102, [102] = 103, [103] = 104, [104] = -1 где -1 на последнем 104 индексе в цепочке. а второй например [1] = 106, [106] = 107, [107] = -1. тогда можно ещё и компактно хранить всю эту хуергу и иметь произвольное количество предметов в комнате. а на указанных индексах ты хранишь уже актуальную информацию по предметам.
>зачем тебе вообще названиями комнат оперировать. переименуешь комнату и хули теперь. тебе только индекс комнаты знать надо. они же у тебя пронумерованны.
Да это понятно, под названием я имел в виду какое-то условное известное обозначение.
Вот с массивами что-то я не мог допереть сам, почему-то
Аноны, есть тут добрые самаритяне, которые могут мне заанимировать готовую модельку в юнити?
Либо за просто так, либо за пиво.
Работа вроде несложная - нужно при нажатии разных кнопок на клаве, делать вид будто нажимаются элементы управления на модельке. И чтобы еще можно было от первого лица интерачить с моделью.
тг на пике
Почекай новую инпут систему и OneWheelStudio на ютабе
Это копия, сохраненная 16 марта 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.