
Документация: https://docs.unity3d.com/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com
Магазин ассетов: https://assetstore.unity.com
На Unity сделано много замечательных игр: Zenless Zone Zero, V Rising, Hearthstone, VRChat, Escape from Tarkov, Valheim, Pathfinder, Cuphead, Genshin Impact, Subnautica, Albion Online, Endless Space, Beat Saber, Boneworks, Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие.
Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
Какие у Unity сильные стороны?
Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
Какие у Unity слабые стороны?
Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
На каких языках я могу писать скрипты для Unity?
Поддерживается написание скриптов на C# 9.0
https://docs.unity3d.com/Manual/CSharpCompiler.html
Какие есть готовые решения для создания мультиплеерной игры?
https://www.photonengine.com
https://mirror-networking.com
https://playfab.com
На каких платформах работают созданные с помощью Unity игры?
Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
Часто вижу скриншоты с красивой природой на Unity. Как такое создать?
Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки?
Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
Бесплатен ли Unity?
Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
Обучение по книгам (печатные издания, актуальные электронные версии книг можно скачать на официальных сайтах издателей)
Обучение языку C# книги на русском языке:
1. C# для чайников Автор книги – Джон Пол Мюллер
2. Программирование на C# для начинающих 2е части Автор: Алексей Васильев
3. Head First. Изучаем C# 4е издание Авторы: Эндрю Стиллмен, Дженнифер Грин
4. Unity и C#. Геймдев от идеи до реализации Автор: Джереми Гибсон Бонд
5. Язык программирования C# 7 и платформы .NET и .NET Core Авторы: Филипп Джепикс, Эндрю Троелсен
Для людей абсолютно не знакомых с движком есть 3и основные книги на русском языке:
1. Разработка игр на Unity 2018 за 24 часа Майка Гейга
(Знакомство с движком, изучение редактора, создание 4х простых игр практически без кода, отличное пособие для полных новичков).
2. Изучаем C# через разработку игр на Unity. 5-е издание Харрисон Ферроне
(Пошаговое освоение всех базовых знаний по программированию на языке С# в редакторе юнити, создание одной игры стрелялки от первого лица, написание искусственного интеллекта врага, книга переведена не совсем корректно и порой встречаются не просто опечатки, а серьёзные неточности перевода.)
3. Unity в действии. Мультиплатформенная разработка на C#. 3-е межд. издание Хокинг Джозеф
(Правильное построение архитектуры кода для сложных проектов, углублённое изучение программированию на C#, создание 4х полноценных игр на движке, обязательно нужно скачать код проектов, так как в книге он местами уже устарел.)
Шапка: https://pastebin.com/JGUAcbwj
Прошлый тред: >>980548 (OP)
спросонья проебался немного

720x480, 1:30
что-то не нравится?

>Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity"
Уже не актуально

720x1280, 0:59
Ожидание в секундах можно сделать через WaitForSeconds, щелчок мыши тоже можно отловить.
Но не могу понять а как это совместить, чтобы еще щелчок мыши, отменял корутину которая ждет секунды
coroutine = StartCoroutine(...)
StopCoroutine(coroutine)
Также это реализуемо через async await, в том числе с помощью UniTask.
И в целом у тебя должно бвть понимание, что это можно реализовать и без каких-либо корутин и асинк авейта, а чисто апдейтом переменной таймера в Update, но такое решение разумеется будет не очень годным.

Скинь скрин, что за UiImage?
> Теперь вся игра это как один гигантский интерфейс с дохулионом UI Image в нем. каких-то проблем с производительностью нет, но может она была бы раз в 10 лучше если бы делал все в Image?
Когда любой элемент в канвасе меняется - весь канвас перерисовывается. Поэтому с целью производительности есть смысл по разным канвасам всё распиливать.
А с точки зрения юзабельности и удобства - ещё и по разным префабам всё раскидать, возможно даже по разным сценам
Можешь хоть через инвок сделать.
У тебя есть номер текущего текста, допустим он сразу
int t = 124;
И контрольная переменная которая изначально равна 0.
int t_control;
В апдейте:
If (t_control != t)
{ t_control = t; Invoke("ChangePage", 10f); }
ChangePage()
{
If (t_control == t)
{
t += 1;
... // тут активируй следующий текст, и т.к. теперь t_control != t , то в апдейте будет запущен ивок для следующей смены текста
}
else
{
// тут нихуя нет, просто ничего не делаешь, т.к. t_control стал неравен t из-за нажатия мышкой. она поменяла страницу и инициировала очередной инвок в апдейте
}
}
// это метод для мышки
PickMouse()
{
t += 1;
... // тут активируй следующий текст
}
Можешь хоть через инвок сделать.
У тебя есть номер текущего текста, допустим он сразу
int t = 124;
И контрольная переменная которая изначально равна 0.
int t_control;
В апдейте:
If (t_control != t)
{ t_control = t; Invoke("ChangePage", 10f); }
ChangePage()
{
If (t_control == t)
{
t += 1;
... // тут активируй следующий текст, и т.к. теперь t_control != t , то в апдейте будет запущен ивок для следующей смены текста
}
else
{
// тут нихуя нет, просто ничего не делаешь, т.к. t_control стал неравен t из-за нажатия мышкой. она поменяла страницу и инициировала очередной инвок в апдейте
}
}
// это метод для мышки
PickMouse()
{
t += 1;
... // тут активируй следующий текст
}
Не надо так делать.
Если ты с кем-то на проекте заюзаешь инвок, то ебало разобьют сразу.
А если ещё и вот именно так, то ещё и обоссут.
Правой кнопкой в иерархии вызови меню, там есть UI (вторая снизу) и в ней уже Image.
>Не надо так делать.
Что не так, если делать в своем проекте? Кроме того, то это быстро, надежно и предельно понятно?
>на проекте заюзаешь инвок
Если ты на ебаной галере, где прогеры меняются раз в неделю и никто уже нихуя не понимает, откуда что вызывается и зачем проекте, то да. Тогда каротинами, и не забудь пару раз обмазать все это гет-сетами, чтобы кто-нибудь случайно не залез.
Вроде надо было делать игру в 3Д пространстве, просто создав плоские 3Д объекты, наклеить на них текстуры карт и выложив их на одной плоскости. А интерфейс типа только для интерфейса. А я в нем захуячил всю игру, т.к. удобнее было
да, через корутину уже сделал
Появилась другая хрень, что если в коце цикла булево переводить обратно в фалс сразу после окончания, то он переодически два прохода подряд хуярил, пришлось в начале цикла тоже дописать чтобы ставил, хрен знает почему
foreach(GameObject /////////)
{
canContinue = false;
///
yield return new WaitUntil(() => canContinue);
canContinue = false;
}
У инвока?
1. Название текстом(решается через nameof)
2. Нет контроля за лайфтаймом инвока
3. Нулевая расширяемость, более сложная логика требующая большего погружения в контекст
4. Непонятно нахуя его юзать, когда есть
>>996026
> В апдейте:
> If (t_control != t)
> { t_control = t; Invoke("ChangePage", 10f); }
> ChangePage()
> {
> If (t_control == t)
> {
> t += 1;
> ... // тут активируй следующий текст, и т.к. теперь t_control != t , то в апдейте будет запущен ивок для следующей смены текста
> }
> else
> {
> // тут нихуя нет, просто ничего не делаешь, т.к. t_control стал неравен t из-за нажатия мышкой. она поменяла страницу и инициировала очередной инвок в апдейте
> }
> }
> // это метод для мышки
> PickMouse()
> {
> t += 1;
> ... // тут активируй следующий текст
> }
Вот ты написал эту ебанину, надо держать в голове что этот вот _t у нас когда изменится, то по его изменению оно вызовет новый инвок, и этот инвок дальше увеличит _t, и это изменерие подхватится в апдейте дальше, а ещё мы можем его изменить кликом мышкой... Ебать.
Просто, Ебать.
А если я сделаю навигацию по страницам в любую сторону потом? А если добавлю ускорение текста на пробел? А если сделать добавить галочку - включить/выключить автоскролл?
Действительно, над этим кодом можно посидеть, подумать 2 минуты и разобраться что он делает, но нахуя это делать? И какоц пиздец будет, когда решишь это дальше расширять.
Я вот вообще не понимаю прикола сложной логике в угоду скорости, когда даже не видно профита, в своих проектах пишу ровно также как на работе, я хз нахуя писать а, b, _t, if (r+1 < y /5) r+=2 и прочую ебалу.
Почему бы не сделать просто
IEnumerator AutoScrollCoroutuine()
{
yield return Wait ...
SetNextText();
SetNextAutoScroll();
}
private void SetNextAutoScroll()
{
StopCoroutine(_autoScroll);
_autoScroll = StartCoroutine(AutoScrollCoroutine);
}
void Click()
{
SetNextText();
SetNextAutoScroll();
}
И сразу всё понятно, всё на естественном язвке почти, около нулевоц контекст надо в голове держать и 0 вопросов а что если.
У инвока?
1. Название текстом(решается через nameof)
2. Нет контроля за лайфтаймом инвока
3. Нулевая расширяемость, более сложная логика требующая большего погружения в контекст
4. Непонятно нахуя его юзать, когда есть
>>996026
> В апдейте:
> If (t_control != t)
> { t_control = t; Invoke("ChangePage", 10f); }
> ChangePage()
> {
> If (t_control == t)
> {
> t += 1;
> ... // тут активируй следующий текст, и т.к. теперь t_control != t , то в апдейте будет запущен ивок для следующей смены текста
> }
> else
> {
> // тут нихуя нет, просто ничего не делаешь, т.к. t_control стал неравен t из-за нажатия мышкой. она поменяла страницу и инициировала очередной инвок в апдейте
> }
> }
> // это метод для мышки
> PickMouse()
> {
> t += 1;
> ... // тут активируй следующий текст
> }
Вот ты написал эту ебанину, надо держать в голове что этот вот _t у нас когда изменится, то по его изменению оно вызовет новый инвок, и этот инвок дальше увеличит _t, и это изменерие подхватится в апдейте дальше, а ещё мы можем его изменить кликом мышкой... Ебать.
Просто, Ебать.
А если я сделаю навигацию по страницам в любую сторону потом? А если добавлю ускорение текста на пробел? А если сделать добавить галочку - включить/выключить автоскролл?
Действительно, над этим кодом можно посидеть, подумать 2 минуты и разобраться что он делает, но нахуя это делать? И какоц пиздец будет, когда решишь это дальше расширять.
Я вот вообще не понимаю прикола сложной логике в угоду скорости, когда даже не видно профита, в своих проектах пишу ровно также как на работе, я хз нахуя писать а, b, _t, if (r+1 < y /5) r+=2 и прочую ебалу.
Почему бы не сделать просто
IEnumerator AutoScrollCoroutuine()
{
yield return Wait ...
SetNextText();
SetNextAutoScroll();
}
private void SetNextAutoScroll()
{
StopCoroutine(_autoScroll);
_autoScroll = StartCoroutine(AutoScrollCoroutine);
}
void Click()
{
SetNextText();
SetNextAutoScroll();
}
И сразу всё понятно, всё на естественном язвке почти, около нулевоц контекст надо в голове держать и 0 вопросов а что если.
>1
это локальная задача, просто похуй. если опечатка, то не будет работать - сразу найду и поправлю
>2
нахуя в этом конкретном случае лайфтайм? ну, вот просто зачем он может понадобиться, хотя бы в теории?
>3
какой контекст, нахуй? у меня в своем соло-проекте овердохуя работы начиная от контента, заканчивая геймдизайном и поиском рефоф для аутсорс-композитора. и это не считая продвижения.
я ебанусь нахуй, если буду искать где можно еще погрузится в контекст, когда я эти 10 строк кода при надобности (она не возникнет) могу просто переписать
>4
затем что там буквально 3 строки кода, плюс пару строк на активацию текста, которые я быстро написал и попиздовал делать более важные вещи, вроде баланса или алгоритмов ИИ
If (t_control != t) { t_control = t; Invoke("ChangePage", 10f); }
ChangePage() { If (t_control == t) { t += 1; NextText(); } }
PickMouse() { t += 1; NextText();}
>А если я сделаю навигацию по страницам в любую сторону потом? А если добавлю ускорение текста на пробел? А если сделать добавить галочку - включить/выключить автоскролл?
Просто ты задроченная галерная мартыха, которую так часто били палками продакт-манагеры, что она пытается предусмотреть все, даже если это там в принципе не нужно.
А я - челове-творец собственных проектов, который знает, что к нему завтра не прибежит пидарас-манагер, хуево понявший техзадание от забугорного барина, с криком - а, бля, все надопеределать!
Если я делаю так - значит это оптимально и допустимо для меня. если нет, то я сам же себя потом накажу пределками. Но такого практически никогда не бывает. Поскольку я думаю дольше 2х минут прежде чем начать что-то кодить. Если я написал код таким образом, то я точно, блеать знаю, то никакого "ускорения текста на пробел" в этом месте никогда не будет. А если мне будет нужна прокрутка назад, то я добавлю еще две строки где будет присутствовать почти те же самыt строки только с t -=1;
> Просто ты задроченная галерная мартыха, которую так часто били палками продакт-манагеры, что она пытается предусмотреть все, даже если это там в принципе не нужно.
Ну какие продакты? Это чисто адекватный прикид что в игре может понадобится в будущем.
> А я - челове-творец собственных проектов, который знает, что к нему завтра не прибежит пидарас-манагер, хуево понявший техзадание от забугорного барина, с криком - а, бля, все надопеределать!
Хз, я никогда не работал на аутсорсе, только в продукте, а если что-то надо переделать(в связи с фидбеком) - это штатная ситуация, которую ты делаешь не с горелой жопой потому что "должны быть готово вчера", а в нормальном режиме, как обычное итерационное улучшение. И на своем проекте тоже самое.
> Если я написал код таким образом, то я точно, блеать знаю, то никакого "ускорения текста на пробел" в этом месте никогда не будет.
Ну я не знаю, значит это ты слишком спланированный какой-то. Что угодно если делаешь сам, у тебя всегда будет какое-то шатание в плане того что нужно, по мере появления нового фидбека(в том числе от себя)
Ты работаешь в условной команде и такой подход в составе команды правильный, что каждый на своем месте все предусматривает.
Если же ты делаешь проект в одно лицо, то разу должен прикидывать, какие вещи критически важны и могут потребовать изменений в дальнейшем, а какие второстепенны и для них нужен только базовый функционал. Без умения отсекать вторичное, ты никогда не сделаешь соло-проект из-за банальной нехватки времени. Поэтому в соло-проекте предпочтительны 3 работающие строчки кода, вместо 20 "таких как нужно".
Так же нет никаких блокировок доступа к данным, потому-что если ты будешь их писать, то реально ебанешься или во время написания или, когда начнешь что-то править
> Без умения отсекать вторичное, ты никогда не сделаешь соло-проект из-за банальной нехватки времени. Поэтому в соло-проекте предпочтительны 3 работающие строчки кода, вместо 20 "таких как нужно".
Так это ты 20 строчек написал с неочевидной логикой, а у меня 3 и вышло с корутиной и прозрачной работой, кек.
Не знаю как ты, но как по мне любой моло проект это тоже самое, что и не соло проект, если ты делаешь его больше месяца, и потом ты точно также будешь вспоминать где там у тебя что и как работает.
Привет, есть куча опыта как раз с такой частью, т.к сам делал пару новел.
Реализовывал это так:
Есть таймер который запускается при вызове, рядом каждую 0.1 сек печается новая буква, если буквы в переменной закончились, таймер останавливает и при нажатии передается вызов дальше, если же игрок нажал на текст то весь текст переносится в переменую и таймер так-же останавливается.
Все это дело у меня занимало немного апдейта, проблем ноль, работает идеально.
Проверка на null указывает существует ли UI тултипменю или же он был удалён.
В Unity оператор сравнения с null переопределён на уровне UnityEngine.Object. Можешь сам посмотреть.
В доках об этом написано:
https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Object.html
Sometimes an instance of Object can be in a detached state, where there is no underlying native object. This can happen if the instance references an native object that has been destroyed, or a missing Asset or missing type. Detached objects retain their InstanceID, but the object cannot be used to call methods or access properties. An object in this state will appear to be null, because of special implementations of operator ==, operator != and Object.bool. Because the object is not truly null, a call to Object.ReferenceEquals(myobject, null) will return false.
The null-conditional operator (?.) and the null-coalescing operator (??) are not supported with Unity Objects because they cannot be overridden to treat detached objects objects the same as null. It is only safe to use those operators in your scripts if there is certainty that the objects being checked are never in a detached state.
>Проверка на null указывает существует ли UI тултипменю
какое-то странное написание, разве не должно быть:
if (shownTolltip != null)
со стороны выглядит подобно
if ( 0 != x)
пиздец как выглядит в общем
мимокрокодил
> if (shownTolltip != null)
Функционально тоже самое.
А по код стайлу - уж вопрос код стайла, некоторые слева пишут null в проверках на null. Главное чтобы во всем проекте единообразно было.
>Функционально тоже самое.
ебануто выглядит, "проверь не равен ли 0 моему числу" пиздец просто, типа это переменная которая может иметь дохуя значений. не знаю какие дегенераты так пишут, но я бы не взял такого на работу - у него гавно в голове, если он так формирует условия
А вот есть такие, видел какое-то обоснование чем так удобнее, но уже не помню, и судя по тому что я эту практику не взял - оно мне не понравилось.
чем удобнее? тем что первым делом в условии ты видишь константу, значение которой так знаешь и которая нихуя не меняется, т.к. внезапно это константа? охуеть удобно. повторю, что не знаю что в голове у такого человека, но думает он настолько нестандартно, что я бы избегал таких "программистов"
Потому что можно случайно вместо if(a == 0) написать if (a = 0), что присвоит a значение 0 и вернет false, вместо сравнения. А константе/литералу присвоить нельзя. Это очень олдовый способ, наверное еще из Си 80-х.

парни хочу побаловаться с физикой
как все rigid body на сцене в sleep режим ввести?
после блендера скриптовую логику недопираю
>написать if (a = 0)
компилятор сразу подчеркнет, раньше может было удобнее, когда компиляторов не было, но те прогеры уже должны были вымереть к настоящему времени.
Иногда в ифах проскакивает присваивание, но да комп сразу пиздит что что-то не так.
Ни разу не встречал реальных проектов где смогли бы задаваить все варнинги.
Справедливо. Но я за за последний год смутно припоминаю ток 1 раз когда так проебался.
>Если же ты делаешь проект в одно лицо, то разу должен прикидывать, какие вещи критически важны и могут потребовать изменений в дальнейшем, а какие второстепенны и для них нужен только базовый функционал. Без умения отсекать вторичное, ты никогда не сделаешь соло-проект из-за банальной нехватки времени.
Ну вот у меня сейчас проект где мне потребовалось маленько покумекать "а как сделать так вот штобы у меня была возможность конструировать геймплей прямо в конфигурационных файлах, и иметь возможность этот геймплейный юнит множить на много разных сущностей и при этом не охуеть", хотя изначальная задача стоит так - нужно реализовать определённые разные режимы командной игры с поэтапным развитием игровой ситуации. Я бы мог насрать сущностями, монолитно их связать или начать выдумывать какой-то хитровыебаный способ применять цепочку обязанностей который опять таки монолитом будет сидеть по звеньям, и понял что ебана рот, мы тут все свои, а давай я сделаю каждый этап и любой игровой объект как интерактивный, пропишу ему характеристики существования, пропишу дочерние интерактивы, впишу ему конкретно его код в ряд функций, добавлю генерируемые на основе конфига функции, когда объект сможет основываясь на информации из конфига искать целевой интерактив и предписывать ему что-то сделать, а захардкоженые для сложных целей функции буду дергать по имени из конфигурационного файла рефлексией, и в зависимости от того что в данный момент прописано в конфиге - объект себя будет вести так как мне надо. Правда на придумывание этой хуйни ушло полтора дня. Вот и скажи, зря или не зря я изьебнулся, потратил время, но очертил себе в будущем целый пласт упрощения контроля игрового процесса, и заодно для себя обнаружил что я могу неиронично дергать функционал из других режимов что изначально и не задумывалось.
А соло ты можешь делать как тебе удобно, главное на начальном этапе хорошо продумать, где у тебя возможно будет расти и меняться функционал (там желательно все делать по уму). А что не критично и можно будет потом переписать или даже просто выкинуть нахуй (понятно, что в этом месте нет смысла изъебываться и тратить время на разработку супергибкого функционала, достаточно будет и базового).
>Поэтому в соло-проекте предпочтительны 3 работающие строчки кода, вместо 20 "таких как нужно"
Ты потом заебешься дебажить и выковыривать баги этих 3 просто работающих строчек (без задней мысли). Я уж не говорю про то, как ты заебешься делать лазейки-костыли и обходные пути из-за этих 3 просто работающих строчек.
Когда у тебя четко организованный код, когда написанно ТАК КАК НУЖНО, когда это еще дело покрыто тестами, то если что-то отъебывает, то это дело 5 минут исправить, т.к. сразу знаешь что и где ебануло. Точно также в последующем легко модифицировать что-то, расширить. Или же переиспользовать в следующих проектах.
Когда у тебя проект весь состоит из таких вот тяп-ляп, просто и работает, то ты тратишь неделями время на дебаг, тратишь в 2 раза больше времени на разработку, а в следующем проекте охуеваешь и ломаешь голову, что это вообще такое, в итоге пишешь вообще все с нуля и каждый раз думаешь "а ведь мог бы сразу сделать все изначально нормально".
Все эти срезания углов работают в очень исключительных ситуациях. А общее правило неизменно - кроилово ведет к попадалову.
Нет, потому что серьёзную игру делать в соло будет совсем отчаянный, а простые проекты можно и на тяп-ляп
7 бед - один ответ - try catch & log context state
Что мешает наебнуться 20 строчкам? Или сотне абстракций? Они мало того что наебнутся, так ещё и наебнут того кто в них полезет. Я бы вообще нихуя не боялся кроме точек сосредоточения больших обьемов подвижных данных, особенно если это события или лямбды со всеми вытекающими, которые собираются на всяких шинах.
>когда написанно ТАК КАК НУЖНО, когда это еще дело покрыто тестами
Не работает в соло разработке. "ТАК КАК НУЖНО" даст х3 ко времени разработки. Ты просто никогда не закончишь проект или закончишь когда он уже будет нахуй не нужен. Или просто передумаешь его делать и все "ТАК КАК НУЖНО" улетит в мурор. Или через пару лет такой разработке захочешь что-то сильно поменять и опять все это улетит в мусор.
В соло ты должен быть быстрым. И уметь в планирование проекта - уметь видеть финальной результат еще до завершения проекта. Так ты сделаешь архитектуру, которая не потребует кардинальных переделок и не потратишь время на разработку того, что никогда не понадобится.
Большинство успешных соло проектов написаны через жопу. Хуяк-хуяк и в релиз. Пролет? Следующий проект. Успех? Нанял команду прогеров - пусть переписывают код.
>>996507
Это спор ни о чем, каждый сам выдумал какое-то понятие и вложил какой-то смысл и представляет что его оппонент доказывает противоположное на самом деле.
В целом то что вот тут >>996507 написано это очень важное замечание, что слишком сильная экономия на спичках в плане архитектуры и написания кода часто приводит к тому, что время разработки будет дольше.
Но опять же вопрос в том где же там эта грань проходит и в чем конкретно должна заключаться, и этот вопрос не имеет ответа без какой-то конкретики.
Я лично в своем проекте ебашу всё практически также как на работе, просто потому что так быстрее, у меня итоговая цель сделать как можно быстрее и решения принимаю исходя из этого.
Берешь и грузишь, хоть вручную Mesh строй по вертексам, obj это ведь буквально самый простой формат. Уверен в интернетах уже дохуя импортеров написано.
Ну так для моддинга тоже бандлы можно юзать.
Зачем?

Настолько круто? Что за решение, если вкратце?
Ни разу с нейронками в контексте кода не работал, вот думаю, скатываться ли.
Не умеет. Всё совсем неправильно мне написало, даже с моими наводками. Только общую идею даёт, и то не всегда правильную.
мимо изучаю дотс
Нейронка - это ускоренный гугл.
В гугле ты ищешь доки, ищешь ответы на стаковерфлоу, ищешь треды на форумах
Нейронка это автоматизирует, но не всегда актуально и полно, да и с точностью бывают проблемы(иногда дает просто неверные ответы)
В понимании логики кода - очень плохо работает.
В том чтобы быстро сделать какое-то редактирование кода на уровне "Проставь эксепшены", "Раскидай на методы" - справляется если не слишком сложный код.
И неплохо работает для запросов на уровне "напиши мне сериализацию в жсон и асинхронное сохранение на диск", "напиши мне веб реквест", "отсортируц мне элементв по такуому полю а потом по такому", типа для базовых примеров
Скоро Стим будет утопать в вампир-сурвайвал-лайк прям как в пиксельных платформерах.
>Нейронка - это ускоренный гугл
Ну... Отчасти ты прав, но это сильно упрощённый взгляд. Всё-таки нейронка может решить конкретно твою задачу с конкретными пожеланиями/параметрами. Ещё она может улучшить твой код. Я стал использовать нейронку для рефакторинга, но без фанатизма.

начальная проблема: у ЧатГПТ чтобы загружать много файлов за раз нужна подписка, у ДипСик сейчас лимит на 5 файлов в сообщении, у "новомодного" Qwen можно грузить только txt
но если отдельным скриптом (я использовал самописный .bat-ник - https://pastebin.com/FWtDhdqU) собрать код из всех файлов в один большой текст и скормить нейронке - он его прочитает и, вроде как, поймет - например, проект на юнити на ~30 файлов он разобрал, что делает и вроде даже пару дельных советов дал

Спасибо, прикольная идея. Прогнал сейчас весь свой проект через Deepseek R1 32b, действительно пару замечаний по делу получил. Код ревью от понимающего человека не заменит, разумеется, но отлавливать мелкие недочеты в коде, который пишется поздно ночью - самое то!
Не заметил, что это Unity тред. Сорян. Работаю на другом движке
Просто бери и изучай Unity. Не понял в чём твоя проблема. Точнее понял, что ты сидишь и прокрастинируешь, хотя мог бы уже запустить юнити и заставить бегать капсулу, например.
>Точнее понял, что ты сидишь и прокрастинируешь
Не совсем.
>хотя мог бы уже запустить юнити и заставить бегать капсулу, например.
Не мог бы. Комп далеко.
Пока далеко от, компа собираю инфу, чтобы потом как можно эффективнее и продуктивнее с ее помощью начать изучать.

Но разве это практично? Не получится ли так, что те просто отвалятся после обновы?
Не правильней ли искать в префабах их через код?
>чтобы это было кроссплатформенно?
а ему не похуй какие там модели? просто галочку кроссплатформы ставишь при создании сборки и все. инити само их там упакует, разве нет?
Я имею ввиду что-нить подвинул в проекте, переименовал и всё развалилось. Опять ручками перекидывай.
нахуй ты куда-то лезишь что-то разрабатывать если не знаешь о мета файлах и гуидах
>>1000454
>>1000207
Ты всё правильно говоришь.
Если ты ещё начинающий и об этом задумался - ты молодец.
Сами файлы не отвалятся если ты их переименуешь или передвинешь, но их надо переименовывать и двигать вместе с .meta файлами - если ты делаешь это внутри юнити то оно автоматически и для мета файла делает модификацию.
Но подобные вещи как тот массив часто ввносят в конфиги и их отдельно грузят.
Например грузим все картинки из адрессаблов с таким то названием
>ввносят в конфиги и их отдельно грузят.
Ммм, вот это не понял. Что значит вносить в конфиги? И отдельно грузить? Разве не всё сразу подгружается при запуске проекта.
Я вообще думал просто просто поиск по каталогу ассетов делать
используя метод:
Resources.LoadAll<GameObject>(path)
а потом с ссылочками на объекты работать, создав пару ключ/ссылка. Где ключ тупо имя файла объекта. А объект это 2д/3д файлик в каталоге ассетов.
>Например грузим все картинки из адрессаблов с таким то названием
Наверное это и есть то что я описал? Просто с вашим прогерским языком не так хорошо знаком.

заново и по-русски напиши шизик

> обычная перспективная камера с широким углом обзора.
Нет, я помню интервью с александром и он выебнулся что не всё так просто и типа если представить шар, то вот красный квадрат изображает изогнутую плоскость.. и у этого сука название есть, но я ни интервью то найти не могу, ни название этой хуйни.
Похоже у этой фигуры нет названия, кроме spherical rectangle
Хотя может у картографов есть что то.
>а кто знает в ПоЕ как называется хуйня, там будто бы округлая поверхность какая-то.
Мимонеебу. Могу только сказать, что пое кал, как и большинство дьяблоидов. Ебучая изометрическая камера, которую нельзя крутить и из-за которой у тебя на заднем плане обзор больше, чем на переднем. Ну и дальность видимости на 10 метров перед челиком, из-за чего стрелки могут стрелять лишь в упор. Как в такое дерьмо вообще можно играть в 2к25 году?
Это не изометрия, в изометрической проекции расстояния, уходящие в глубину, не сокращаются. А тут сокращаются, да ещё и у края экрана заворачиваются в виде линзы.
проекция панини? Фишай?

Ясен хуй проблема в хёвом пнг файле и чичас для обучения не критично.
Но на будущее - а как удалить то эти пикрил фрагменты из попиленного атласа. Нажимаю просто DEL , а там:
>The operation "SoftDelete" cannot be executed because the selection is a root folder.
Не пикать же каждый пиксель в сплит эдиторе..
3д объекты в 2д проекте всё равно рендерятся как я попробовал. Чем же тогда сборка проектов отличаются?
Это только шаблоны, там немного разные настройки рендера, ты их в любой момент можешь поменять.
По дефолту картинка как спрайт импортируется а не текстура, отрублен свет и всё это - это в 2д так
2д свет. А отрублен 3д свет. Это другое.
Instantiate(prefab, Input.mousePosition, Quaternion.identity);


360x408, 0:06
Разработка игр на Unity за 24 урока. 4-е издание 2023 | Гейг Майк
Нашел только на английском
700 рубасов пдфка лицензионная стоит, тебе жалко что ли? охуел там
Есть ли в юнити реализация pixel depth offset изкаробки, как в уе? Ну или шейдер какой-нибудь, скачиваемый с условного гитхаба. Очень нада для смещения слоев одежды относительно друг друга и тела.
две наносекунды в квене:
Готовые решения на GitHub :
Unity Depth Offset Shader
Unity Parallax Shader
Asset Store :
На Asset Store есть множество шейдеров для работы с глубиной и смещением слоев:
Shader Forge
Amplify Shader Editor
Parallax Shader Pack
Layer Weights :
Если вы используете Unity High Definition Render Pipeline (HDRP), там есть встроенные инструменты для управления слоями материалов, включая смещение по глубине.
вообще, если в будущем родить игроподобный продукт, обмазать это геймплеем, донатом и рекламой, на каких забугорных площадках есть шанс? знаю только про CrazyGames и то, что Гугл Плей разрабам из рф прекратил выплаты, так что он не вариант.
Сдох, не мешает ему выпускать видосы с миллионными просмотрами.
Ты в порядке, анон?
Каким-то образом могут узнать спирачены ассеты или нет
По отпечатку ануса. могут запросить чек на покупку, такое встречал среди звуковых эффектов. то есть если ты используешь популярный ассет и твоя игра выстрелит, то автор может запросить у тебя чек на покупку данного ассета
А к примеру если это не визуальный ассет?
В целом да
Хуякс и проект "actually useful for game development" отправился под нож.
Плюсую.
На реддите предполагают что UI Toolkit следующий.
>все
Кто все, откуда нытье тогда? Штука в том, что когда пошли первые сокращения, обещали сокращать лишних хр-маркетологов и прочую жирушную перхоть и фокусировать ресурсы на технических командах. А на практике режут всех, как видим в том числе востребованных программистов, а полезные технические проекты закрывают целиком. Жирухи закончились?
Я нахожу эту новость хорошей, т.к. НИНУЖНО. Каждый сам себе напишет нужный модуль поведения, универсальный конструктор невозможен.
> Кто все, откуда нытье тогда?
Мы теперь по нытью выводы делаем?
> Штука в том, что когда пошли первые сокращения, обещали сокращать лишних хр-маркетологов и прочую жирушную перхоть и фокусировать ресурсы на технических командах. А на практике режут всех, как видим в том числе востребованных программистов
Та команда что уволена не востребована, они делали велосипед
>велосипед
Почему анрыл тогда имеет эту фичу изкоробки? То, что тебе эта фича нинужна, показывает только уровень твоих проектов. И твой, если ты предлагаешь самому тратить время на проблему, которую можно было бы решить за минуту, подключив готовую фичу.
>есть кастомные решения лучше
Есть заброшенная хуйня которую 4 года не обновляли. Поэтому все городили свои велосипеды. Поэтому было разумно предоставить официальное решение, как в анриле, и на него только-только начали переходить. Но нет, хороших вещей от юньки ждать больше не приходится.
У них много сверхприбылей, всякие госконтракты, они развратились от безнаказанности и ахуели максимально. Когда ввели плату за установки и поднялся кипиш там в твиттере некоторые бывшие сотрудники писали, что могли целыми днями на работе про политику сраться, нихуя не работая. Недавно кто-то шебмку вкидывал как в какой-то прогерской компании манагер хвастался своим рабочим днем за большую зарплатку, пол часа с утра на летучке что-то послушал попиздел, а потом весь день чилит, то в бассейне поплавает, то киношку посмотрит. Прям у них там в рабочем здании. Так, наверное, будут жить все люди будущего, а впахивать будут роботы. В юнити поди все еще хуже, там юнититрапы себе поди и траходром устроили. Даже в треде постоянно интересовались, что делают 7 тысяч сотрудников, если из года в год в движке почти ничего не меняется. То что сейчас идут увольнения это всё мизер, там скорее всего больше половины надо сразу гнать, а потом еще пару тыщ на доп проверках. Власть развращает, а абсолютная власть развращает абсолютно. Так сложилась ситуация, что у них нет конкуренции, сделали большой прочный задел и можно много лет нихуя не делать. Должны появляться конкуренты и оттяпывать пользователей, но как бы не пыжились анриал с прости господи годотом и остальной шелупонью, ничего не меняется, есть существенные недостатки.
Верю в юньку, новый дирек порядок наведет, ожидаются реальные изменения, будем как в масле кататься, главное сейчас сидеть тихо и не суетиться. Никаких митингов, никаких навальных. Просто переждать и всё будет хорошо, там все схвачено.
Очевидная пиздля.
> У них много сверхприбылей, всякие госконтракты
Нахуй им госконтракты? На их движке 90% мобильного рынка сделано, там с рекламы(привет айронсорс) и сервисов для разработчиков(аналитика, сдн и т д) все доходы.
> они развратились от безнаказанности и ахуели максимально. Когда ввели плату за установки и поднялся кипиш
Это называется рынок. Какие наказания, о чем ты?
Они делают то что рынок им позволяет. С платой за установки стало опасно, потому что по тем цифрам что они опубликовали - для компаний разработчиков которые специализируются на мобилках вариант использовать другой движок чтобы не платить юнити стал намного интереснее.
> там в твиттере некоторые бывшие сотрудники писали, что могли целыми днями на работе про политику сраться, нихуя не работая. Недавно кто-то шебмку вкидывал как в какой-то прогерской компании манагер хвастался своим рабочим днем за большую зарплатку, пол часа с утра на летучке что-то послушал попиздел, а потом весь день чилит, то в бассейне поплавает, то киношку посмотрит. Прям у них там в рабочем здании.
Ты думаешь компании выгодно содержать челов которые ниче не делают? Нахуя им это надо лол? Нк проще ли себе деньги оставить?
Тут дело не в этом. На любой нормальной работе тебя не будут заставлять много работать. Знаю дохуя примеров когда кто-то неделями нихуя не делал толком(а то и месяцами), да и я сам тоже.
И это не какой-то заговор или наёб, это просто рынок. Когда компания много зарабатывает на своем продукте, она будет готова предоставить хорошие условия тем, кого будет нанимать, чтобы нанять лучших по своему мнению работников, переманить их из других компаний.
А то может случиться так, что вот ты ставишь менеджера который следит чтобы все по 8 часов кнопки давили, а в итоге все самые крутые челы съебывают туда где им разрешают ебланить и производительность команды только падает.
> там юнититрапы себе поди и траходром устроили
Ну это просто бред, даже трансов нанимают только с целью максимизации прибыли, чтобы выполнить квоты и получить себе профиты за это.
> Даже в треде постоянно интересовались, что делают 7 тысяч сотрудников, если из года в год в движке почти ничего не меняется.
Думаю, ты не до конца понимаешь кто в эти 7к входит и насколько объемную работу юнити делают.
> У них много сверхприбылей, всякие госконтракты
Нахуй им госконтракты? На их движке 90% мобильного рынка сделано, там с рекламы(привет айронсорс) и сервисов для разработчиков(аналитика, сдн и т д) все доходы.
> они развратились от безнаказанности и ахуели максимально. Когда ввели плату за установки и поднялся кипиш
Это называется рынок. Какие наказания, о чем ты?
Они делают то что рынок им позволяет. С платой за установки стало опасно, потому что по тем цифрам что они опубликовали - для компаний разработчиков которые специализируются на мобилках вариант использовать другой движок чтобы не платить юнити стал намного интереснее.
> там в твиттере некоторые бывшие сотрудники писали, что могли целыми днями на работе про политику сраться, нихуя не работая. Недавно кто-то шебмку вкидывал как в какой-то прогерской компании манагер хвастался своим рабочим днем за большую зарплатку, пол часа с утра на летучке что-то послушал попиздел, а потом весь день чилит, то в бассейне поплавает, то киношку посмотрит. Прям у них там в рабочем здании.
Ты думаешь компании выгодно содержать челов которые ниче не делают? Нахуя им это надо лол? Нк проще ли себе деньги оставить?
Тут дело не в этом. На любой нормальной работе тебя не будут заставлять много работать. Знаю дохуя примеров когда кто-то неделями нихуя не делал толком(а то и месяцами), да и я сам тоже.
И это не какой-то заговор или наёб, это просто рынок. Когда компания много зарабатывает на своем продукте, она будет готова предоставить хорошие условия тем, кого будет нанимать, чтобы нанять лучших по своему мнению работников, переманить их из других компаний.
А то может случиться так, что вот ты ставишь менеджера который следит чтобы все по 8 часов кнопки давили, а в итоге все самые крутые челы съебывают туда где им разрешают ебланить и производительность команды только падает.
> там юнититрапы себе поди и траходром устроили
Ну это просто бред, даже трансов нанимают только с целью максимизации прибыли, чтобы выполнить квоты и получить себе профиты за это.
> Даже в треде постоянно интересовались, что делают 7 тысяч сотрудников, если из года в год в движке почти ничего не меняется.
Думаю, ты не до конца понимаешь кто в эти 7к входит и насколько объемную работу юнити делают.
Не думаю, что в тех нишах которые занимает юнити, у него появится хоть сколько то достойный конкурент в ближайшие 10 лет.
Книгу купи, овощ.
А годот? Там есть проблемы с прикручиванием монетизации для всяких мобилок, но на это нужен один единственный фреймворк, который обязательно сделают за 10 лет и юнити соснут хуйца.
На данный момент годоту далеко до юнити.
а я соглашусь, где предлагают?
Неужели все настолько плохо?
Тогда удобно что конкретно вы тут никакую нишу так и не заняли, так что не проблема выбрать любой другой движок.
А с юнити да, ситуация плоха раз даже программистов из востребованных технических проектов стали резать. Это рендеринг игровому движку не нужен? Серьезно?
> Тогда удобно что конкретно вы тут никакую нишу так и не заняли, так что не проблема выбрать любой другой движок.
Конкретно вы - это ты про кого?
Конкретно про меня?
Тогда это ты мимо, я занимаюсь разработкой на юнити тех проектов для которых юнити хорош(безальтернативен).
> А с юнити да, ситуация плоха раз даже программистов из востребованных технических проектов стали резать. Это рендеринг игровому движку не нужен? Серьезно?
Бехавиор это не особо востребованный проект.
По рендерингу и другим направлениям нет конкретики. По факту с юнити 2022 до юнити 6 был очень хороший прогресс по рендерингу и в целом в юнити сейчас около передовой рендер в плане кастомизируемости.

Если Мета купит Юнити, тогда мы станем экстремистами...
Очкнь приятно что ты безыгорник переживаешь за юнити
RIP
И куда перекатываться потом?
> Можно как-то перенести на новую версию?
Обычно переносится без проблем.
>На новой он не открывается вроде как
Так можешь и старую версию скачать и там делать.
лан, значит надо разбираться. Спасибо!
>Обычно переносится без проблем
Только если проект совсем мелкий. Если более-менее серьёзный это выстрел себе в ногу. Переделывать приходится всё.

ЭТО КОНЕЦ!11
Alexandre Mutel (Director C#/.NET Tech Group в Unity, стаж в компании 8 лет и 4 мес) тоже уходит (https://mastodon.social/@xoofx/113997304444307991)
одним дармоедом меньше
он во всех своих проектах обосрался. sharpdx заброшенный, stride (который он делал) - кусок сырого нерабочего говна. юнити так и не перенес на core clr. человек-неудачник
MonoGame там что-то пытается с AOT-компиляцией, но это костыли. Даже если получится как-то запустить нативный код, то 90% стандартной библиотеки просто не будет работать, потому что она зависит от конкретной платформы и вызовов нативных функций платформы.
У юнити есть IL2CPP, которое не использует ни моно, ни core clr. Юнити просто использует компилятор c#, а рантайм у них вообще свой.
Живой и вполне юзабельный
>>1004836
> 8 лет делали никому не нужный burst?
Нихуя себе не нужный. Это буквально киллер фича юнити - берст + джобы + их ецс
Правда функционала не хватает и надо допиливать сторонними решениями, в том числе платными)))) Но типа если тебе надо(а дотс юзать те кому не надо не будут) пару сотен долларов уж достать можно.
>>1004828
Там еще проблемы есть, с тем что юнити был завязан на особенности моно на низком уровне, и им теперь надо переписывать старые штуки.
Есть инфа, что вроде бы какой-то прогресс у них идет, но несколько лет еще ждать придется.
https://www.linkedin.com/posts/peter-roe-85361661_unity-showreel-01-activity-7295594646301220866-f4iR/
>>1004863
Ждем увольнения всех сотрудников работающих с Дотс.
>Ждем увольнения всех сотрудников работающих с Дотс
Ну хз. Им же в любом случае нужно что-то делать с устаревшим API. Чего только стоит переопределение оператора сравнения с null у Object класса.
> Чего только стоит переопределение оператора сравнения с null у Object класса.
В чем проблема? Если ты адекватно пишешь, тебе не нужна будет менеджед часть компонента
>В чем проблема?
В том, что в одних местах используешь "is null", а в других "== null". Получается магическое поведение.
>киллер фича юнити
И сколько процентов игр на юнити используют эту киллер фичу? Почему то мне кажется что немного. Сильно много ресурсов и времени потрачено на 1-10% процентов пользователей.
Юнити никогда не портируют на core clr из-за проблем с кроссплатформеностью. А добавлять core clr только в редактор и билды для ПК - по сути создавать 2 несовместивые версии рантаймов - это будет катастрофа сильнее разделения рендера на 2
>Такими темпами в юнити ничего кроме рекламы не останется.
Ты как гендиректор юнити мыслишь!
Текст электронного письма, отправленного Мэтью Бромбергом сотрудникам Unity, в котором он объявляет об увольнениях и проливает свет на дальнейшую стратегию Unity.
https://80.lv/articles/exclusive-unity-ceo-s-internal-announcement-to-staff-amidst-the-layoffs/
Инвестируйте в промышленность, интерактивные сервисы и искусственный интеллект.
Данные — наше будущее: Нашим клиентам движка нужно лучшее понимание поведения игрока и стабильности Runtime, а нашим клиентам рекламы нужна лучшая окупаемость инвестиций для развития их игр. Runtime должен обеспечивать и то, и другое.
В рамках этого нового подхода мы также объединяем ключевые технические команды, чтобы гарантировать, что все решения по продуктам напрямую поддерживают наши новые принципы. Группа искусственного интеллекта Пьера-Поля Жиру и команда Central Technology Services Амара Мехты присоединяются к организации CTO, при этом и Пьер-Поль, и Амар подчиняются напрямую Стиву.
Рекламная продукция, инжиниринг и доходы
Спустя два года после слияния с ironSource настало время объединить наши команды, технологии и продукты, работающие на рынке, интегрировав их напрямую в экосистему Unity, чтобы наши клиенты могли получить конкурентное преимущество на рынке.
Так это получается что IronSource сожрал Юнити, а не наоборот. Мда. Нахуй я это говно учу вообще.

Загрузчик модов выбрал (BepInEx), поставил, проект плагина создал, хеллоуворлд работает.
Дальше мне нужно как-то получить весь UI-текст отображаемый в данный момент игроку. Не обязательно каждый фрейм, но часто, раз в 2-5 секунд.
Что мне искать в сцене я вроде разобрался - сначала найти все UnityEngine.Canvas в сцене, выбрать из них те что рендерят именно оверлейный интерфейс (renderMode должен быть ScreenSpaceOverlay, может ещё что-то) и у них уже найти всех "потомков" с UnityEngine.UI.Text.
Я не могу понять как мне организовать этот сбор нужных объектов из сцены не используя GetComponentsInChildren() про который везде пишут что он дорогой, если вызывать регулярно то игра будет тормозить. (сам я правда не проверял)
А че не так? Никто у тебя старые версии юнити не отбирает, чтобы делать своё пиксельно хуинди.
>Я не могу понять как мне организовать этот сбор нужных объектов из сцены не используя GetComponentsInChildren()
в апдейт пихаешь FindObjectsOfType<Text>(), один раз пролагает и дальше оно будешь в кэше, на старых версиях движка (до 2021) наверное это не так
а лучше научись пользоваться гармонией для более эффективного моддинга и читинга, вот небольшие примеры:
[HarmonyPatch(typeof(LevelScroller))]
public class PatchLevelScroller
{
[HarmonyPatch(nameof(LevelScroller.ScrollForDistance))]
[HarmonyPrefix]
static void ScrollForDistance(LevelScroller __instance, float distance, ref float time)
{
__instance.CurrentSpeed = 50f;
time = 0.0001f;
}
}
[HarmonyPatch(typeof(PlayerPrivateData))]
public class PatchUserProfile
{
[HarmonyPatch(nameof(PlayerPrivateData.OffDiscordJoined), MethodType.Getter)]
[HarmonyPrefix]
static bool OffDiscordJoined(ref bool __result)
{
__result = true;
return false;
}
}
> И сколько процентов игр на юнити используют эту киллер фичу? Почему то мне кажется что немного. Сильно много ресурсов и времени потрачено на 1-10% процентов пользователей.
Я думаю тут надо смотреть не на проценты, а на доход от таких игр.
Потому что на дотсе как правило делают мультиплееры на мобилки(сессионки, ммо) которые приносят нереальные деньги, либо просто масштабные игры, с какими-то тяжелыми кор механиками, в том числе на пк.
А конкретно джобы косвенно используют все игры, так часть встроенного функционала юнити их юзает
> Юнити никогда не портируют на core clr из-за проблем с кроссплатформеностью. А добавлять core clr только в редактор и билды для ПК - по сути создавать 2 несовместивые версии рантаймов - это будет катастрофа сильнее разделения рендера на 2
Хз, гугли что и зачем они делают.
Хороший вопрос. Если ты что то делаешь, надо четко знать зачем.

Плюс, один раз я столкнулся с багом. Писал систему spectator для наблюдения за действиями игроков от их лица. И там была проверка на null. Я не могу понять, почему она криво срабатывает. Думал шиза уже может, ибо код был идеальный. Но оказалось это юнитеки поднасрали.
Вообще, им надо было просто добавить свойство IsDestroyed, вместо переопределения оператора. Тем более эти ретардосы в своих либах потом добавляли похожий метод для проверки.
Этот легаси-обосрамс нужно удалять нахуй. Ему нет никакого оправдания.

Да, я всё-таки сделаю сбор втупую, а потом уже буду смотреть тормозит или нет. К тому же в целевой игре довольно простые сцены, узлов не так уж много.
Но не через FindObjectsOfType(), может быть оно тоже позволит собрать только активные в текущей сцене, но мне это не очевидно.
А сначала SceneManager.GetActiveScene(), потом scene.GetRootGameObjects(), потом GetComponentsInChildren<Canvas>(), отфильтровать не оверлейные и потом собрать GetComponentsInChildren<Text>() внутри них.
Но эт детали.
>>1005350
Я знаю про рантайм патчинг, но я не смог придумать что и как мне патчить чтобы мою задачу решить.
>гугли
Нагуглил, что ответственный за перенос навострил лыжи из юнити. Это все, что нужно знать.

Джобы это быстрый и сейвовый метод написания многопоточного кода, а не йоба производительность.
Кидать картинки на новости вместо ссылок.
Продвинутые олды так писали, что бы случайно в запарке не написать x = 0 вместо x == 0, то есть даже если обосрешься 0 = x компилятор тебя отшлепает, а x = 0 уплывет похерев всю логику работы на много часов боли.
Работает на говно языках типа С/С++/пихипи/пидонах/жопоскриптах, в нормальных языка в if можно баловаться только булями.
Что кроме жесткого матана можно писать неделями в готовых движках?
> из востребованных технических проектов
Там может дармоеды, которые болты пинали много лет.
В здравом уме локомотивов никто не будет трогать, а вот вагоны отцепить можно, которые потом начинают ныть "за что?", "это конец!". Многие тру кодеры даже соцсети не видут, им плакать некуда.
Как-будто есть альтернатива
Для следующей работы - лучше быстрые лыжи, чем пинок под зад. Так ты ушел в честь протеста, или же тебя спросят почему пинок, а там уже и правда вскроется.

Хмм... на голом OpenGL то же самое... Значит дело не в Unity
Дело в градиентах из графических редакторах. Они добавляют в градиенты dithering, и они сохраняются как 8 бит изображения.
srgb мониторы не умеют показывать настоящие градиенты, потому что там всего 255 градиентов цвета.


ну и кал, я делал как-то так
using System.Collections.Generic;
using UnityEngine;
namespace Game.AI
{
public class StateMachine
{
private IState currentState;
private IState previousState;
private List<IStateObserver> observers = new List<IStateObserver>();
public void Update()
{
if (currentState != null)
{
currentState.Update();
}
}
public void ChangeState(IState newState)
{
if (currentState != null)
{
currentState.Exit();
OnStateChanged(previousState, newState);
previousState = currentState;
}
currentState = newState;
currentState.Enter();
}
public void ChangeToPreviousState()
{
if (currentState != null)
{
currentState.Exit();
}
currentState = previousState;
currentState.Enter();
}
public void RegisterObserver(IStateObserver observer)
{
observers.Add(observer);
Debug.Log($"Registred new observer: {observer}");
}
private void OnStateChanged(IState previousState, IState newState)
{
foreach (var observer in observers)
{
observer.OnStateChanged(previousState, newState);
}
}
}
}
using UnityEngine;
using UnityEngine.AI;
using Game.Utils.Draw;
namespace Game.AI
{
public struct IdleState : IState
{
private EnemyController enemy;
private Animator animator;
private Transform player;
private float idleTimer;
private float detectionRange;
public IdleState(EnemyController enemy, Animator animator, Transform player, float idleTimer = 3f, float detectionRange = 10f)
{
this.enemy = enemy;
this.animator = animator;
this.player = player;
this.idleTimer = idleTimer;
this.detectionRange = detectionRange;
}
public void Update()
{
idleTimer -= Time.deltaTime;
if (idleTimer < 0f)
{
Vector3 randomPoint = FindRandomNavMeshPoint();
enemy.agent.SetDestination(randomPoint);
Debug.DrawLine(enemy.transform.position, randomPoint, Color.cyan, 2.5f);
idleTimer = Random.Range(2f, 6f);
}
if (Vector3.Distance(enemy.transform.position, player.position) < detectionRange)
{
enemy.ChangeState(EnemyState.Chasing);
}
DrawUtils.FOV(enemy.gameObject, Color.green, 60f, detectionRange);
}
public void Enter()
{
animator.SetBool("Idle", true);
}
public void Exit()
{
animator.SetBool("Idle", false);
}
Vector3 FindRandomNavMeshPoint()
{
Vector3 randomPoint = Random.insideUnitSphere * 5;
randomPoint += enemy.transform.position;
if (NavMesh.SamplePosition(randomPoint, out NavMeshHit hit, 5, 1))
{
return hit.position;
}
return FindRandomNavMeshPoint();
}
}
}
ну и кал, я делал как-то так
using System.Collections.Generic;
using UnityEngine;
namespace Game.AI
{
public class StateMachine
{
private IState currentState;
private IState previousState;
private List<IStateObserver> observers = new List<IStateObserver>();
public void Update()
{
if (currentState != null)
{
currentState.Update();
}
}
public void ChangeState(IState newState)
{
if (currentState != null)
{
currentState.Exit();
OnStateChanged(previousState, newState);
previousState = currentState;
}
currentState = newState;
currentState.Enter();
}
public void ChangeToPreviousState()
{
if (currentState != null)
{
currentState.Exit();
}
currentState = previousState;
currentState.Enter();
}
public void RegisterObserver(IStateObserver observer)
{
observers.Add(observer);
Debug.Log($"Registred new observer: {observer}");
}
private void OnStateChanged(IState previousState, IState newState)
{
foreach (var observer in observers)
{
observer.OnStateChanged(previousState, newState);
}
}
}
}
using UnityEngine;
using UnityEngine.AI;
using Game.Utils.Draw;
namespace Game.AI
{
public struct IdleState : IState
{
private EnemyController enemy;
private Animator animator;
private Transform player;
private float idleTimer;
private float detectionRange;
public IdleState(EnemyController enemy, Animator animator, Transform player, float idleTimer = 3f, float detectionRange = 10f)
{
this.enemy = enemy;
this.animator = animator;
this.player = player;
this.idleTimer = idleTimer;
this.detectionRange = detectionRange;
}
public void Update()
{
idleTimer -= Time.deltaTime;
if (idleTimer < 0f)
{
Vector3 randomPoint = FindRandomNavMeshPoint();
enemy.agent.SetDestination(randomPoint);
Debug.DrawLine(enemy.transform.position, randomPoint, Color.cyan, 2.5f);
idleTimer = Random.Range(2f, 6f);
}
if (Vector3.Distance(enemy.transform.position, player.position) < detectionRange)
{
enemy.ChangeState(EnemyState.Chasing);
}
DrawUtils.FOV(enemy.gameObject, Color.green, 60f, detectionRange);
}
public void Enter()
{
animator.SetBool("Idle", true);
}
public void Exit()
{
animator.SetBool("Idle", false);
}
Vector3 FindRandomNavMeshPoint()
{
Vector3 randomPoint = Random.insideUnitSphere * 5;
randomPoint += enemy.transform.position;
if (NavMesh.SamplePosition(randomPoint, out NavMeshHit hit, 5, 1))
{
return hit.position;
}
return FindRandomNavMeshPoint();
}
}
}
>В здравом уме
Будь руководство юньки в здравом уме, мы бы не оказались там, где оказались. Весь твой поинт - инвалид.
Где мы оказались? Что не так?
Монополисты сидят и бабло гонят, что у них не так? То что было много групп разработки и нет результатов, новых технологий - это как раз вопрос к тем дармоедам, которых погнали.

> я не знаю ни шарп
На решётке ты писал раньше.
> мне чёт захотелось мод
А цель какая? Что этот мод делать должен?
Если это перевод текста, то так ли нужно в реалтайме всё получать?
> для одной игры
Постеснялся написать что это Blood of the Killer (2021)?
ты просто безигорка, сам энеми контроллер очень маленький, апдейт только стейт машину и всю логику ИИ можно раскидать по разным скриптам
>ты просто безигорка
Ты сказал?
>всю логику ИИ можно раскидать по разным скриптам
вот поэтому я и говорю, что лапша.
А если я захочу что-то большеечем просто спокойствие и ходьба?
У меня мобы не только ходят, но и стреляют, вступают в рукопашную и бафами кидаются, я уже не говорю о таких мелочах как поведение при критичном уроне или смерти.
все переходы из одного состояния в другое можно спокойно накодить, необязательно всё в одном монструозном чмонябехе делать
Это должно быть для них задачей под пунктом даже не 1, а 0, все силы должны быть брошены на переезд на CoreCLR
Материал для 2д спрайта, хочу сделать подобие подсвечивания при нанесении урона (точнее уже сделал, но через наложение второго спрайта поверх и его изменении цвета. Хоть это и работает, но самому не нравится такая реализация, плюс это ещё и увеличивает колличество лишних движений).
Биоробот ебучий, видно что ей похуй и никаких эмоций, просто воспроизводит типовые действия зная что олени среагируют.

Нашёл ответ сам, может кому пригодиться https://discussions.unity.com/t/modifying-the-shader-properties-of-only-one-object/611833/22

> А цель какая? Что этот мод делать должен?
Я написал - как-то получить весь UI-текст отображаемый в данный момент игроку.
Дальше он куда-то будет отправляться, но на том конце канала будет уже не юнити. Отправляться будет каждый раз когда отображаемый текст меняется.
> Если это перевод текста, то так ли нужно в реалтайме всё получать?
Очевидно да.
> На решётке ты писал раньше.
Нет, не писал.
> Постеснялся написать что это Blood of the Killer (2021)?
Anthology of the Killer (2024) тогда уж.
На стороне юнити я сделал. Осталось сделать перевод и отображение на стриме.
Но уже и не нужно, ибо стрим для которого я это готовил не будет.

Юнити все беднее и беднее! Скоро с фалько по миру пойдет!
САТРАПЫ КАЧАЕМ ДВИГЛО!!! ЮНИТИ НУЖНЫ ДЕНЬГИ!!!
Выручка Unity за четвертый квартал упала на 25% до 457 млн долларов
Unity 6 был загружен 2,8 миллиона раз с момента запуска в октябре 2024 года.
https://www.gamesindustry.biz/unity-q4-revenue-drops-25-to-457m

Сап юнитач
Делаю аи противников в игре жанра рпг сверху и чёт подзапарился, может кто знает решение.
Кароче изначально я для обнаружения противников использовал самописное решение в котором метод пробегал по всей сцене, находил все объекты с тегом игрок, и устанавливал цель на ближайшего.
Всегда работало, но меня парила проблема производительности, так как это всё происходило каждый кадр и если юнитов больше десятка, знатно начинал проседать фпс.
Потом посмотрев умных дядь, решил сделать через триггер, тоже работает, но беда в том что у меня вся система повреждений построена на триггерах(личное предпочтение), удары, магия урон по области и когда игрок просто стреляет в направление моба срабатывало повреждение так как триггер бнаржения игрока висел на мобе, решил проблему тем что опустил триггер нахождения игрока почти до земли, но я опять проебал момент с тем что у меня есть атака по площади и соответственно мне вообще нужно убирать триггер обнаружения игрока с мобов.
Пришёл к райкасту, очень не хотел, так как у меня они всегда глючили и хуй как работали. Конечно нормальный человек скажет сделай выстрелы через райкасты, а обнаружение на тригерах, но это в корне ломает всё что я создал заранее.
Поэтому задаю вопрос. SphereCast можно использовать вместо триггера Sphere? И если я засовываю это гавно в апдейт как сильно будет жрать производительность, если каждый моб будет постоянно запускать райкасты друг в друга?
Просто мне кажется в итоге я опять приду к первому решению и каждый моб будет через секунду постоянно просматриватьь сцену и искать игрока, а мне бы хотелось найти надёжное решение на будущее, этих мобов я планирую впихнуть в ртс, а там минимум 10-20 шт одновремено на экране нужно обрабатывать.
>рпг сверху
Если это стрелялка или протвники не должны видеть через стены, то без рэйкаста никак не обойтись.
Самое универсальное решение, это на мобах висит большая сфера, она триггер и детектит если игрок вошел в радиус, то активируются проверки на разные чеки, типо игрок жив ли, виден ли, можно ли брать его в таргет и прочее.
Сюда же если игрок в радиусе то активируются рэйкасты чекающие его прямую видимость для противника.
Если игрок вышел из сферы то снимается флаг нахождения игрока у моба и он перестает пускать рэйкасты и уходит в афк или что надо.
Такая тема подойдет почти везде и всегда идеально.
Не знаю что у тебя трабла с тригерами, просто чекай компонент или тэг обьекта для того чтобы обрабатывать тригеры какие нужно, и проблем не должно быть хоть 100 тригеров будут тереться друг об друга, обработаются только нужные с нужными.
По производительности, каждый кадр искать игрока это пиздец конечно. Игрок забивается в моба либо при его спавне, либо при первом попадание с область для тригера.
Сюда же рэйкасты, их не надо делать если игрок далеко, или не доступен для выбора цели.
Не искать каждый кадра, а настроить на комфортные 100-200мс. Использовать job если юнитов много.