24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
На Unity сделано много замечательных игр - Valheim, Genshin Impact, Subnautica, Albion Online, Endless Space, Beat Saber, Boneworks, Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
FAQ
- Какие у Unity сильные стороны? - Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
- Какие у Unity слабые стороны? - Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
- На каких языках я могу писать скрипты для Unity? - На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.
- Для каких жанров подходит Unity? - Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.
- На каких платформах работают созданные с помощью Unity игры? - Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
- Часто вижу скриншоты с красивой природой на Unity. Как такое создать? - Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
- Что такое стартер киты? - Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.
- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки? - Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
- Бесплатен ли Unity? - Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
- Движок Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка. http://www.ozon.ru/context/detail/id/34792570/ Также посмотри на видеотуториалы с официального сайта: https://unity3d.com/learn/tutorials Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь: http://catlikecoding.com/unity/tutorials/ Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху: https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов: https://noobtuts.com/unity В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
Для людей абсолютно не знакомых с движком и программированием на C# есть 3и основные книги:
1. Разработка игр на Unity 2018 за 24 часа Майка Гейга (Знакомство с движком, изучение редактора, создание 4х простых игр практически без кода, отличное пособие для полных новичков). 2. Изучаем C# через разработку игр на Unity. 5-е издание Харрисон Ферроне (Пошаговое освоение всех базовых знаний по программированию на языке С# в редакторе юнити, создание одной игры стрелялки от первого лица, написание искусственного интеллекта врага, книга переведена не совсем корректно и порой встречаются не просто опечатки, а серьёзные неточности перевода.) 3. Unity в действии. Мультиплатформенная разработка на C#. 2-е межд. издание Хокинг Джозеф (Правильное построение архитектуры кода для сложных проектов, углублённое изучение программированию на C#, создание 4х полноценных игр на движке, обязательно нужно скачать код проектов, так как в книге он местами уже устарел.)
>>802812 → пчел, твою задачу можно упрощать сколько угодно, но пока ты не воспользуешься своей головой ты не решишь её. у тебя 9 классов образования то уже есть, надеюсь? не забыл ещё что такое синусы, косинусы?
вообще я помню что там можно это сделать нормально и не через жопу чтобы на краях красиво растягивалось, но я не помню как. ну и ладно, может в треде напомнит кто.
>>802837 после кружечки кофе. а хотя лол я и сам конч. нахуй все эти лерпы, что за хуйню я понаписал. пускай инпут от -1 до 1 лучше будет. так красивей и понятней.
Приветствую всех. Есть тут кто понимающий в онлайне ? запустил Fishnet. два проекта в разных окнах. Отлично подключается, но как этот пример запустить на двух отдельных компьютерах? никто не подскажет куда искать , что ковырять и гуглить ?
>>802837 >пчел, твою задачу можно упрощать сколько угодно, но пока ты не воспользуешься своей головой ты не решишь её. у тебя 9 классов образования то уже есть, надеюсь? не забыл ещё что такое синусы, косинусы? А токсичным уебаном быть обязательно? Не все пердолятся с Юнити также долго как ты, это не повод раздувать такое ЧСВ.
Аноны, нужна помощь. Есть платформа, которая должна отталкивать игрока под углом перпендикулярным платформе, то есть, если платформа под углом 45 градусов, то и игрок будет отталкиваться под этим же углом.
Не подскажете куда копать, чтобы понять как это реализовать?
>>802860 Поищи на сцене интернет менеджер у него будет настройка с ip, компы также должны быть в одной локальной сети или хост иметь белый ip. По гайду посмотри официальное от самого фишера. Либо к примеру юнитиковское по интернет обджектам, по сути всё работает +- одинаково.
>>802860 >>802871 благодарю. Вообще идея отдать сервер одному из игроков. Мне тут подсказывают, что нужно сделать переадресацию портов, NAT Traversal или использовать серверы ретрансляции, что звучит логично, но довольно комплексно
>>802877 Есть разные подходы и решения, в том числе бесплатные. Но прежде чем лезть в сетевую игру лучше как минимум посмотреть и разобраться в туторах, и прочитать доки. Лично для себя я сделал сервер арендованный на хостинге, клиенты подключаются, чекаются, у каждого клиента создаётся статик мир, и идёт дальнейшая игра.
>>802865 обязательно. токсичность к месту - способ коммуникации. я плавно перешёл от мистических ротаций к тригонометрии которую ололо в школе проходят и она не требует опыта геймдева. и да, разумеется у меня есть ответы не требующие тригонометрии, но давая их я буду ещё токсичней.
Использую частицы в игре (струю из частиц), у частицы в скрипте количество наносимого урона и функция коллизии с врагом. При столкновении с врагом у него отнимается ХП.
Проблема в том, что при разном ФПС враг убивается с разной скоростью. Есть идеи как работать с частицами "фреймонезависимо" ? Пробовал FixedUpdate и ParticleSystem.Simulate, не помогает.
>>802951 >Использую частицы в игре (струю из частиц), у частицы в скрипте количество наносимого урона и функция коллизии с врагом. Ты там каждую частицу триггрешь на урон? Совсем не умный? Вот представь если у тебя огонь состоит из 1000 частиц при коллизии с противником одновременно может сработать от десятка до сотни частиц и в апдейте возникнут сотни сообщений о попадании, как думаешь фпс в таком намного понизится или не изменится? Делай один триггер с огнём и не выпендривайся.
>>802866 несколько путей, либо ты имеешь подписку во вьюшке игрока OnCollisionStay и в нужный кадр получаешь нормаль коллизии, либо юзаешь систему с SphereCastNonAlloc, с ограничениями по маске, которая запускается по триггеру, находит нужный RaycastHit и берет его нормаль. Второй способ предпочтительнее, так как не аллоцирует
>>802993 По порядку. Ты конвас выбрал? Правильно привязал эти кнопки? Разрешение я надеюсь ты выбрал фиксированное, а не как ёбанный даун со свободным разрешение пилишь UI элементы?!
Пытаюсь сделать что-то похожее на миниигру как на первом видео, думал как это лучше реализовать, в голову пришло только пускать частицы с навешенным скриптом нанесения урона и функцией коллизии.
А как это сделать лучше? Может пускать какую-то кривую из рейкаста или ещё что-то? Хотелось бы конечно чтобы партикли были чисто визуальным эффектом
>>803040 вот это видео. пускать струю желтой жидкости в водолазов пока она не залепит им глаза!!!
лол ну а как ещё кроме как пускания рэйкаста. если хочешь чтобы он был кривой просто пусти несколько подряд. ничего не мешает тебе пустить рэйкаст на небольшую длину, запомнить где он закончился и пустить оттуда следующий в цепочке плюс гравитация.
>>803210 Ответь еще на вопросик, а то чёт гугл хуйню выдаёт. Я не хочу создавать новый вектор, а просто засунуть отсылку к уже существующему вектору в перменную, как это сделать?
>>803212 > Ответь еще на вопросик, а то чёт гугл хуйню выдаёт. Я не хочу создавать новый вектор, а просто засунуть отсылку к уже существующему вектору в перменную, как это сделать? Покажи код, куда ты это хочешь сделать.
>>803212 да собственно никак. структуру можно передать по ссылке в метод через ref кейворд и пожалуй все. если тебе понадобилась ссылка на структуру, то что-то ты таки делаешь не так.
>>803218 Альтернативный вариант создать хэш-таблицу с вектором и дистанцей и остортировать её по дистанциям. Но по-моему это оверкилл? Я просто хотел пройтись циклом по списку, и сохранять отсылку на вектор с минимальной дистанцией.
>>803218 не парсо. "создание" структуры и работа с ней быстрее чем создания объекта и разыменование указателей.
List<Vector3> positions = ...;
positions.Select(i => new { pos = i, sqrDist = i.SqrMagnitude }).Min(i => i.sqrDist).pos;
не помню сходу как SqrMagnitude пишется, уточни. суть в том что корень операция трудоемкая и его желательно избегать, для подобной задачи достаточно квадрата расстояния.
если у тебя там трансформ(ну т.е. задача найти ближайший объект по их позиции) а не просто вектор то делай список трансформов
>>803224 >SqrMagnitude >If you only need to compare magnitudes of some vectors, you can compare squared magnitudes of them using sqrMagnitude (computing squared magnitudes is faster). Всё, нашёл в документации сам
>>803227 >формула расстояния sqrt((a.x - b.x)^2 + (a.y - b.y)^2 + (a.z - b.z)^2) Так вот зачем Ирина Ивановна нам эту хуйню на геометрии преподавала, сука тупая, могла бы и сказал что в разработке игор пригодится
лол, сейчас смотрел видео с конференции по геймдеву. фраза "первое что вбивают в голову - считать квадрат расстояния, а не само расстояние, так как корень очень затратная операция"
>>803224 >sqrDist = (position -i.position).SqrMagnitude На это ругается > cannot assign method group to anonymous type property Как фиксить? Уже дохуя чего перепробовал.
Хочу ебашить адовые видосы, можно ли это делать в юнити (насколько я понял, там всё через синемашину) и не будет ли это попыткой сожрать кактус? Или мне уебывать в другой софт? Допустим, что все нужные ассеты у меня есть, а я хочу из этого сделать "катсцену". Только катсцену, без самой игры.
>>803335 Це свойство. Захакал вот так. Это норм практика? >Select(i => new { transform = i, sqrDist = Vector3.SqrMagnitude(position -i.position) }).Min(i => i.sqrDist).pos
Теперь сижу пержу почему выдаёт флоат значение, расчехлил дебаггер, и пока не вкуриваю, но вернусь к вопросу только вечером. Спасибо.
>>803341 Select формирует последовательность значений анонимного типа трансформ/расстояние Min берет из данной последовательности минимальное значение по указанному параметру(расстоянию) от него ты уже берешь свойство.
Здарова, Кармаки. Так вот вопрос, пикрил на 2021 лтс это старый болт или уже обновлённый? Я просто помню, что они хотели его допилить после того, как купили автора.
система которая считает в какую сторону двигать система которая применяет модификаторы скорости система которая проверяет не дошли ли и "обрезает" вектор если таки да, что бы не перескочить цель. система которая таки двигает объект
не бойтесь создавать "лишние" системы на каждый пук, говорили они, сначала в глазах рябит а потом приходит понимание что можно вклинится в любую точку между системами и добавить новый функционал не трогая старый.
>>803342 Короче кому не насрать, я заебался искать почему то линк выражение мне выдавало хуйню и переписал в пикрил, и так как мне это всё нужно было чисто чтобы протестировать кое-что, я своего добился и иду дальше. В чём я не прав?
небольшой нюанс. не делай ToList() по таргетам. просто убери его - все будет работать так же, но не будет лишнего выделения памяти и итерации по списку. селект создает запрос но не выполняет его. т.е. прохода по списку не происходит. тулист его таки "выполняет". имеет смысл если ты этот отфильтрованный список потом используешь более одного раза, что бы не ходить по полному списку каждый раз.
>>803441 > >тут же юзает Linq Если без тулиста, то ваще поебать же, там нечему много памяти аллоцировать и ебать гц, а сама скорость выполнения вряд станет даже малейшей проблемой на практике.
>>803448 Там тот же массив внутри, при проходе проц также в кеш подгрузит следующие элементы по идее, ну это если у нас не референсные типы само собой.
Стоило юнитидаунам выйти за границы таскания ассетов мышкой, так сразу вылезла тотальная некомпетентность по простейшим вопросам устройства ЯП, никто не знает что как работает, еще игры пытаются с таким багажом "знаний" делать, чтоб потом везде рассказывали какой же юнити тормозной двиг.
>>803529 Я выбрал Юнити именно потому что у него репутация движка, который позволяет не самым сильным программистам типа меня криво, косо, через жопу, но реализовать, пускай и лагающую, но игру, которая даже может выстрелить за счёт уникального геймплея. В чём я не прав?
>>803525 Что то хуйня, что это, стоимость по производительности примерно равна 0. Сделай теперь больше элементов и какие-нибудь реалистичные операции над каждым элементом, чтобы не тупа проход был. Ну или я сам сделаю как освобожусь нах.
>>803574 >Уникальных механик не существует, также не существует уникальной совокупности механик. Долбоёб? Когда впервые появился тот же Портал у него что ли не уникальная механика порталов была?
>>803622 >Фактически та же смена локации, не более А в портале что? Кроме своей жопы еще можно куб протолкнуть? Смена локации куба, гениальная механика, новое слово в жанре.
>>803625 Ну не толсти. Эта механика оказалась настолько плодородной, породила кучу способов применения и множество головоломок, что хватило на 2 серии и несколько фанатских дополнений.
>>803627 Вроде уникальность обсуждали, а не количество серий и дополнений. Давай количество серий кал оф дути подсчитаем, или атсасина. Видимо их механика оказалась гораздо плодороднее тухлых порталов.
>>803578 сделал такое, но всё равно все эти тесты хуйня, потому что нужно рассматривать каждый отдельный случай (предполагается ли динамика, известны ли размеры заранее, будут использоваться ссылочные или значимые типы и т.д)
[Benchmark] public void ListFor() { List<int> list = new List<int>(1000); for (var index = 0; index < list.Capacity; index++) { list.Add(10); list[index] += index; }
int sum = 0; foreach (var i in list) { sum += i; } Console.WriteLine(sum); }
[Benchmark] public void ArrayFor() { int[] array = new int[1000]; int sum = 0; for (var index = 0; index < array.Length; index++) { array[index] = 10; array[index] += index; sum += array[index]; }
Console.WriteLine(sum); }
[Benchmark] public void ListForeach() { List<int> list = new List<int>(1000); for (var index = 0; index < list.Capacity; index++) { list.Add(10); list[index] += index; }
int sum = 0; foreach (var i in list) { sum += i; } Console.WriteLine(sum); }
[Benchmark] public void ArrayForeach() { int[] array = new int[1000]; for (var index = 0; index < array.Length; index++) { array[index] = 10; array[index] += index; }
int sum = 0; foreach (var i in array) { sum += i; } Console.WriteLine(sum); }
public void ListFor() { int sum = 0; List<int> list = new List<int>(1000); for (var index = 0; index < list.Capacity; index++) { list.Add(10); list[index] += index; sum += list[index]; } Console.WriteLine(sum); }
>>803712 Скажем так - глубоко похер пока сложность этой операции О(1). будет иметь смысл если у тебя глубина вложения циклов уходит к земному ядру. Если уж совсем хочешь упоротся в производительность и заодно остаться на екс - переходи на дотс. Они как раз большой апдейт запилили, почти релиз кандидат. И дело не в апдейте а в базовой заточке на многопоточность и низкоуровневую оптимизацию.
>>803740 >глубина вложения циклов Простое правило - если тебе требуется больше двух, то ты скорее всего хуйню делаешь, и даже с двумя хорошенько подумай и полистай существующие алгоритмы, потому что есть шанс того что ты сейчас захуяришь квадратичный алгоритм, когда уже давно придумали логарифмичный для тех же целей.
>>803799 > там екс чтоли на финишную прямую выходит? + убрали зоопарк базовых систем и джобов. оставили только базовые IJobEntity и SystemBase которые могут все, что могли старые по отдельности + добавили "вариадик апдейт" системы, которым можно выставить время апдейта напрямую или до окончания джобов. ну т.е. туда можно загонять долгоиграющие асинхронные задачи. + расширили поддержку редактора. галочка "конверт ту энтити" вместо соответвующего мб, лучшая поддержка префабов, интерфейс где можно смотреть и менять энтити как го в рантайме, дебаг систем с отключением и пофреймовым выполнением, профайлер под дотс и прочая по мелочи. - убрали анимации и звук до версии 0.51 (эта 0.50)
>>803800 спасибо за пересказ. хуёво что не добавили до сих пор анимации и звук, конечно. вот про префабы интересно стало, надо будет глянуть. я раньше своей хуйни городил в скриптабл обжектах для того чтобы связывать префабы и ентити, но теперь оно видимо само как-то умеет это делать?
интересно не добавляли ли больше фич с DynamicBuffer и многопоточностью. мои предыдущие попытки сделать инвентарь на екс работающий в многопотоке превращались в какой-то пидец.
>>803704 > предполагается ли динамика, известны ли размеры заранее, будут использоваться ссылочные или значимые типы и т.д Поебать же вообще, во всех сценариях поведение абсолютно одинаковое будет, вся разница листа только в том, что это тот же массив с оберткой сверху и с подготовленными функциями для удобства, и в случае с фор ич дополнительнач аллокация под иенумератор(так ведь?), но эт хуйня. Как мы видим - оно всё ваще почти ничего не стоит.
>>803899 ну, да, функции для удобства, в том числе увеличение объёма при переполнении, с массивом придётся такое писать самому, плюс существуют IReadOnlyList, которые при доступе к чтению не дают так же и воздействовать на элементы, в отличие от обычного листа и массива, но на этапе рефакторинга проще подставить ридонлилист вместо листа, чем вместо массива
>>803951 > но на этапе рефакторинга проще подставить ридонлилист вместо листа, чем вместо массива Не пон. Ридонли лист же нужен ток для инкапсуляции, и скорее всего ты изначально когда классв проектируешь - понимаешь к чему должен быть доступ извне, а к чему нет
>>803957 по опыту могу сказать, что есть те, кто с опытом 1+ года работы с c# не слышали про ридонли листы вообще и думают, что readonly List<> сам по себе обеспечивает безопасность листа, ну и, бывают разные случаи, не у всех есть опыт сразу что-то на этапе проектирования предусмотреть
>>802780 (OP) Сап юнитач посоветуй годный тутор по созданию, сттатичекского и динамического тумана войны? Яндекс выдаёт или старые туторы со старыми версия юнити или такую дичь за которую личне мне было бы стыдно. https://yandex.ru/search/?clid=2285101&text=Unity+fog+of+war&lr=39 Я смог сделать туман войны только для 2д и выглядит он не совсем.
>>804018 Работаю не забесплатно, но первые пару звуков могу сделать безвозмездно, чтобы у тебя сложилось понимание о том чего от меня ждать. Потом либо договариваемся либо желаем друг другу удачи и интересных проектов
Почему каждый раз при загрузки сцены юнити 2д у меня то пропадают текстуры, то появляются? Вот есть текстура земли, при загрузки текстура персонажа может зайти ЗА текстуры земли и его не видно, если несколько раз перезагрузить открывать другую сцену и переключатся на предыдущую то он может то появляться нормально, то снова проваливаться под землю. Может с камерой что-то не то?
Аноны, помогите с шейдерами, пожалуйста. У меня есть clipping шейдер, как тут: https://www.youtube.com/watch?v=GaNVrRRdqbY Как мне растянуть текстуру, сверху, чтобы была как бы крышка, а то меш виден изнутри
как пофиксить стандартный video player? эта хуйня дёргается на последнем кадре, хотя видео специально я подобрал, где последний кадр заканчивается ровно там же где и первый
Только-только начинаю вкатываться в Юнити, так что вопрос очень тупой. У меня есть объект со скриптом. Если я переменную задаю в скрипте (допустим значение 1), а потом ее же в самом юнити в свойствах объекта (допустим значение 10), то в итоге используется значение 10. Это типа так и нужно? То что руками вбил в свойствах имеет бОльший приоритет? Я думал при запуске должно из скрипта подтягиваться.
>>804177 это значение по-умолчанию. т.е. оно появляется когда ты только вешаешь скрипт на объект. на уже существующем сохраняются те что наменял в инспекторе.
Наконец-то я вырвался из круга прохождения курсиков и вот уже месяц сижу над своим проектом. Понимаю что для многих это хуйня, но я находился в этом ёбаном лимбо ГОДАМИ, так и не приступая к своей игре. Я рад что я хотя бы просто начал.
Анон, если ты в таком же лимбо - просто возьми и начни. Ты охуеешь как бесполезны все эти курсы, если ты не делаешь шаблонное говно. Как только появляются нестандартные задачи сперва теряешься, но потом через упорство и гуглинг, просмтр документации и роликов находишь решение, меняешь его под себя и начинаешь по-настоящему знакомиться с движком. Охуенно, жаль что не начал раньше.
>>804225 Да похуй, я рад что уже хотя бы ставлю сам себе задачи и решу их решения и набиваю опыт в юнитях. Я морально готов к тому что моё виденье окажется говном и я начну делать что-то другое. Но пока за месяц я только убеждался в том что оно верное и самое главное - исполнимое.
За визуал скриптинг - будущее? Или это отмычка для людей с непрограммистким уровнем мышления? Можно ли будет переманить туда человека, которые знает c# и паттерны на уровне бога?
>>804204 отличный язык. очень гибкий и многофункциональный. есть одна маленькая проблема за полвека развития он оброс таким диким количеством костылей, костылей к костылям и странных основанных на давно забытых концепциях решений что выучить и использовать его нормально весьма и весьма проблематично. т.е. вместо разработки 3/4 времени будет уходить на борьбу с синтаксисом, непонятными ошибками и попытками разобраться что нахуеверченно в трехэтажных шаблонах стандартных библиотек.
ах да и синтаксис. в виду того что все новые фичи громоздились сверху старательно сохраняя старые для совместимости, тест программы состоит процентов на 90 из знаков пунктуации, каждый под свою задачу. вот даже банальное взятие поля у классы может выглядить как var.field, var->field, var::field в самых простейших случаях. а если начинаться закапываться в указатели то все ухудшается все быстрее и быстрее
>>804285 >Можно ли будет переманить туда человека, которые знает c# и паттерны на уровне бога? Нельзя, потому что это по сути то же программирование, которое уступает в плотности расположения информации коду, ибо часто то что можно описать одной-двумя строчками там требует йоба-конструкции на весь экран.
Наоборот это потенциальный инструмент для заманивания нюфаков в программирование.
>>804289 >вместо разработки 3/4 времени будет уходить на борьбу с синтаксисом, непонятными ошибками и попытками разобраться что нахуеверченно в трехэтажных шаблонах стандартных библиотек. Это называется знакомство с языком, по первой так в любом языке будет. На за какой язык нельзя сесть и начать хуярить как на родном.
>>804291 ну да. проблемма в том что для крестов этот "период знакомства" затянется на годы, а за это время выйдет еще пара стандартов которые добавят еще костылей на изучение которых понадобится новый "период знакомства"
>>804293 Тебе же не нужно взять весь язык, а только весьма ограниченный набор для разработки твоей игры, узнавать новый будешь по мере появления надобности в новых фичах.
>>804285 >Или это отмычка для людей с непрограммистким уровнем мышления? Таскание лапши отличается от написания кода ручками только визуально, ну и по времени - пока ВИЗУАЛЬНЫЙ ПРОГРАММИСТ ищет в списке нужные операции для вычисления выражения 2 + 2, обычный уже половину игры напишет. Визуал скриптинг удобен когда нужна наглядность - например в редакторах шейдеров, правда из лапши обычно жуткое говно генерируется.
>>804305 Ну то, что нагенерилось и переписать не проблема. Для шейдеров удобна именно визуализация, ибо работаем с визуальной информацией. Можно посмотреть результат на каждом шагу сразу, без чего отладка шейдера довольно муторный процесс. С кодом же этот аргумент не работает.
>>804543 Потому что он теперь стандартный, юнитеки сами советуют им пользоваться. Вообще если планируешь играться с шейдерами, то юрп тебе точно нужен будет.
>>804216 >>804209 Да поебать на указатели, дженерики в крестах - это просто кошмар, если бы они были адекватные, то язык был бы юзабелен.
Ну и бонусом - отсутствие вменяемой документации внутри кода и совершенно конченный стл, который ты должен заучить, чтобы адекватно использовать. А вот в шарпе вообще поебать, ебалом по клаве ударил, и иде тебе сразу варианты подкидывает, все хорошо проименовано, у всего описание написано, вот тебе словарь, вот тебе хешсет...
Ну и что очень важно - в шарпе куча новых удобных фишек, с которыми писать код просто кайф, язык длч людей короче
>>804769 Что-то да, что-то нет. В идеале редактор должен сканировать папку с ассетами и добавлять различные элементы спрайта персонажа автоматически. Чтобы потом безболезненно добавлять новые элементы, аксессуары и тп.
Какие вы знаете мастхев ассеты для полноценной разработки? Например я слышал, что Bakery запекает свет, отражения и прочее, гораздо лучше встроенной в юнити запечки. Какие еще посоветуете?
>>803046 я юнити никогда в жизни не открывал, но может там просто сравнивается направление и координаты аквалангиста, и если они соотносятся (струя попадает) то у аквалангиста просто переменная увеличивается и графон ему очки покрашивает?
Юнити норм для визуальных новелл? Или лучше что попроще юзать? И можно ли в нем генерить фоны для экономии на художнике? Вон, написано что SpeedTree позволяет создавать ландшафты (я так понимюа 3Дшные). Такой ландшафт - это по сути трехмерный фон?
Посоны, такой вопрос: работаю в unity 2022 хочу вять курс по шейдерам - как не обосраться и выбрать нужный? Как я понимаю, есть отличия от того, что было в 2019
>>804810 Смотря что у тебя в новелле будет, но я бы взял rpg maker(в основном на нем делают) или gamemaker(хотя, наверное, нет разница с юнити). Проще всего на первом будет. Если цель - тупо визуальная новелла, мне кажется, нет смысл юнити брать
>>804825 >Как я понимаю, есть отличия от того, что было в 2019 В самих шейдерах отличий нет, возможно есть разница в инструментах типа редактора шейдеров. Тебе надо учить сами шейдеры, их будешь делать ты а не редактор.
>>804829 Спасибо. У меня была такая проблема: в 19 (старше, не помню) студии написал мелкий шейдер. Но когда пытался перенести его в 21, то ничего норм не работало, ибо как-то по-другому юнити начала работать с шейдерами. Что это значит? Может быть такое, что начал использоваться другой(высокоуровневый) язык, который все равно компилится синтаксис, на котором работают шейдеры? (по какоу коррктному названию гуглить?)
>>804832 Ну возможно ты в 2022 создавал проект не на стандартном рендере как в 2019, а в URP или HDRP, там действительно разница есть. У стандартного (Built in) рендера давно ничего не менялось.
>>802780 (OP) История такая: я раньше работал только на game maker studio ну и тыкал pygame. Меня убедили, что это детсад и надо переходить на юнити. Вот сажусь сегодня, смотрю туториалы и меня всё больше накрывает волна непонимания. Почему, чтоб просто передвинуть объект я не могу написать "x+=1", а должен мучаться с transform? Что за монстр этот аниматор? Почему я не могу просто сказать, чтоб объект сменил свой спрайтлист на другой, а должен истыкать 100500 кнопочек и чекбоксов в этом аниматоре? В конце концов, почему я просто не могу нарисовать кодом картинку на экране? Это я тупой и так реально удобне или что? Или мне попадаются такие туториалы?
>>804916 Хз как ты там "работал" на гамаке догадываюсь что ни одной игры не сделал, но если написать transform.Translate(1,0,0) это для тебя мучение, то тебе лучше заняться по жизни чем-то другим.
>>804916 Везде трансформы не только на юнити, это норма. Вообще полноценный движок тем и отличается, что можешь делать очень многое, но придётся и вникать доого.
>>804756 > В крестах нет говнодженериков, в крестах охуенные компайл-тайм темплейты А до компиляции я ебу какие методы в моем классе должны быть, чтобы оно работало? Вот в шарпе все просто - сразу пишешь в дженерике какие интерфейсы класс должен реализовывать или подтипом чего должен быть и заебись! И в свою очередь, юзая чужой дженерик, сразу видишь, какие интерфейсы твой тип должен реализовывать. > В шарпе поприятней апи, но не надо драматизировать. Намного приятнее! > Что за шизу ты пишешь? Какую документацию напишешь такая и будет. Ну вот в том же стле ниче не прописано приходится в убогие онлайн доки лезть. Себе то понятно, что я что угодно могу написать. > Охуеть, поставь современную иде для крестов, например vs code и у тебя будет то же самое. Ага, только проблема со стилем именования, и опять же - некоторые вещи только в компайл тайме покажет.
И да, я не говорю что на С++ ваще нельзя писать - конечно можно, просто поддержка кода и скорость того, как ты разбираешься с чужим кодом(когда юзаешь какую-нибудь новую библиотеку в том числе) - гораздо меньше, чем в том же C#. А знаменитые костыли крестов заставят ещё переодически проебывать немало количество времени - ньюфагам вообще пизда, а олдам просто нужно лишний раз держать их в голове и отвлекаться от основных задач.
Поэтому, ящитаю С++ оправдан только для развития уже имеющихся проектов на С++, либо там где без него никак(и то я не шарю что там со скалой, растом, и че там ещё с хорошей производительностю есть...), либо тогда, когда надо дохуя программистов набрать(потому что С++еров немало)
>>804962 К трансформам то я привынуть могу, но вот действительно нет никакого метода нарисовать изображение кодом? Потому что даже сделать такую простую вещь, как отрисовать инвентарь для меня обернулось целым событием
>>804916 > Почему, чтоб просто передвинуть объект я не могу написать "x+=1", а должен мучаться с transform Разделение объекта на компоненты это более чем логично. Там не только "x" есть но локальное х например, а еще ротация и скейл. А ещё есть RectTransform и там другое.
> В конце концов, почему я просто не могу нарисовать кодом картинку на экране? >>804983 > но вот действительно нет никакого метода нарисовать изображение кодом? Потому что даже сделать такую простую вещь, как отрисовать инвентарь для меня обернулось целым событием Можешь, но рисовать картинки кодом - хуета идея почти всегда, тем более для инвентаря. Почему бы готовый ui не использовать, не повесить кнопки с картинками в лейаут какой-нибудь?
>>804985 Я еще много чего не знаю, потоиу сужу только по тому, с чем столкнулся Мне не нравится работать с UI по нескольким причинам: 1) куча телодвижений в интерфейсе движка. Приходится истыкать кучу кнопочек, вместо пары строк кода. 2) мне пока непонятно каким образом этот интерфейс можно будет динамически изменять. Хочется легко менять внешний вид интерфейса, количество столбцов на одной странице, их масштаб, расположение и т.д 3) становится сложно ориентироваться в интерфейсе движка из-за такого количества всякого хлама.
>>804987 > 1) куча телодвижений в интерфейсе движка. Приходится истыкать кучу кнопочек, вместо пары строк кода. Ну надо покопаться, изучить как оно работает, да > 2) мне пока непонятно каким образом этот интерфейс можно будет динамически изменять. Хочется легко менять внешний вид интерфейса, количество столбцов на одной странице, их масштаб, расположение и т.д Лейауты для этого сделаны. Растягиваешь лейаут - и он растягивает и перемещает все внутренние элементы
Не совсем по теме юньки, но кто в курсах про инфу о требованиях к моделям? К примеру сколько должно быть у ящика точек/треугольников? На текущей сцене в сумме? Примерное понимание есть на уровне: Вот щас фпс упало с 120 до 80 значит плохо. В курсе за кол-во материалов, статику и оклюжен. Может кто знает где такую инфу нарыть? Как раз знакомому 3дшеру подкину. Понимаю что это больше относится к 3д моделированию, но работаю с ним в юньке.
>>804987 >xочется легко менять внешний вид интерфейса >парой строк кода Эм, даже в упрощённом синтаксисе ренпи у меня ушло на полноценный интерфейс 2к строк кода. В юнити потребуется ещё больше, но это и есть цена управляемости каждого элемента ui. Уймы параметров разметок, трансформов, анимации, динамичные блоки, разнообразный функционал - всё это требует понимания и отражения в коде.
Хочу чтобы противник ударял игрока когда подходит к нему достаточно близко, но делать каждый кадр в Update проверку на расстояние стрёмно, есть способ лучше?
>>805095 > но делать каждый кадр в Update проверку на расстояние стрёмно Делай проверку в FixedUpdate. Ничего стрёмного в этом нет. Тем более в юнити уже давно добавили методы проверки, которые не выделяют память.
Как можно реализовать постепенное изменение материала 3д объекта? Например есть белый куб, необходимо чтобы он снизу вверх постепенно становился оранжевым, может как-то через маску можно изменять материал объекта?
>>805136 Пиши шейдер. Если текстурная развертка у куба подходит можно нацепить на куб второй материал с прозрачной текстурой оранжевого цвета и двигать ее оффсетом (это васянский способ), но у стандартного куда развертка не подходящая.
Спиздил с интернета вот такой вот шейдер графчик, работает практически как надо но при вращении нижняя часть также двигается, как можно пофиксить шейдер граф чтобы такого не происходило и даже при вращении нижняя часть не двигалась?
>>805328 не скажу что бы понил, но судя по всему для параметра, который отвечает за наложение надо брать мировые координаты. там есть варианты с текстурными(привязаные к uv), локальными(к отдельному мешу) и мировые(не зависимые) тут походу взяты локальные что бы моделька закрашивалась от ног до головы не смотря на то как повернута.
Анонессы, подскажите, пожалуйста, почему у меня навмеш движется отдельно от префаба? Навмеш находится на пустом дочернем объекте внутри префаба. Если это из-за дочерки, как связать дочерку с родителем, разве они не связаны, если дочка внутри префаба?
After review, we will not be able to ship your game on Steam. While we strive to ship most titles submitted to us, we found that this title features themes, imagery or descriptions that we won’t distribute.
Regardless of a developer's intentions with their product, we will not distribute content that appears, in our judgment, to depict sexual conduct involving a minor.
While every product submitted is unique, if your product features this representation -- even in a subtle way that could be defined as a "grey area" -- it will be rejected by Steam.
For instance, setting your game in a high-school but declaring your characters are of legal age would fall into that category and be banned.
This app has been banned and cannot be reused. Re-submissions of this app, even with modifications, will not be accepted.
>>805328 если я тебя правильно понял, то ты просто убери сабстракт и передавай из позиции в сплит сразу, но тогда будет диапазон от -1 до 1, где 0 - это середина объекта
>>805788 Да не, видимо, не в этом дело. Меня не положение префаба относительно земли волнует, а то, что префаб не движется вместе с навмешем, движется пустой дочерний объект префаба, на котором навмеш стоит
Есть какой-то хоткей или быстрый способ перехода в просмотр канваса? Надоело каждый раз отдалять камеру когда хочу редактировать интерфейс и обратно приблежать когда что-то делаю на сцене
Я попытаюсь объяснить понятнее, насколько мне хватит мозгов. Скрипты управляющие навмешем есть на первых двух скринах, там много не связанного с навмешем, потому решил сделать скрином то, что к нему относится. Закомментированные строки пока что не используются, потому что пытаюсь переделать скрипт. Закомментировал, потому что скрипт предусматривает движение не от навмеша, а от рутмоушена, то есть от встроенного в анимацию движения, навмеш, как я понимаю, только помогает ориентироваться в пространстве, чтобы не идти в стену. У меня нет рутмоушена, я пытаюсь отдать управление префабом полностью на навмеш. На третьем скрине иерархия внутри префаба. Надеюсь вводная часть понятна.
Сейчас у меня в скриптах активно все, что на скринах, плюс это:
// Update is called once per frame void Update() { enemyManager.enemyNavMeshAgent.destination = movingTo.position; }
Так я пытаюсь передать управление на навмеш, тупо одна строка на движение, она работает на простом кубе, но не работает на моем префабе (4 скрин). Видимо что-то конфликтует с новым скриптом.
Я не прописывал этот код внутри срипта на первом скрине, потому что destination жалуется на enemyNavMeshAgent, якобы его нет внутри enemyManager. Он там есть, иначе бы не работало вообще ничего с самого начала. Когда новый скрипт добавил на объект с навмешем и обращался к нему, ошибок не возникало, но движется не префаб, а пустой объект. Если не понятно, попробую объяснить что-то еще раз
>>805801 rigidbody повесь на родителя, я не уверен, лень проверять, вообще странно ставить агента куда-то в чаилды, если это основной компонент сущности, но ригидбоди обозначает, что объект со всеми его вложениями - единый, поэтому должно работать
>>805831 Вчера на собесе сказал, что мне проще вектор на матрицу поворота-переноса-масштаба умножить или попросту вложить перемещаемый объект в пивот вращения и вращать пивот, а не через кватернион.
>>805875 кватернионы воопше довольно ебанутая абстрактная хуйня, которую проблематично "понять". но значительно упрощает все расчеты вращений посему широко используется
>>805870 Что-то я нахуевертил, не понимаю даже что. Переставил навмеш на родителя закомментировал одну строку enemyNavMeshAgent.transform.localPosition = Vector3.zero, которая, как я понимаю, мешает навмешу улететь в ебеня, но сейчас она стала наоборот отправлять префаб в ебеня на координату 0.0.0. Отключил и моб ПОШЕЛ блядь. При том, что я даже не прописал еще за кем ему идти. Он просто пошел по навмешу, как ему положено, избегая препятствия, ища короткий маршрут. Потом я естественно прописал enemyManager.enemyNavMeshAgent.destination = movingTo.position и destination по-прежнему жаловался, что ему надо быть в скрипте на объекте с навмешем, это понятно. Не понятно почему моб идет, если нет скрипта на движение. Очень блядь странно, но работает
Вращение идёт почти как надо, за исключением того что сейчас поворот куба никак не влияет на угол орбиты шарика, мне грубо говоря нужно чтобы центр круга, вокруг которого кружит шарик, всегда смотрел ровно в "ебало" кубу. Пикрил нарисовал как мог.
>>805998 Раз пять прочитал и у меня вопрос, ты сам-то читал че написал? Шарик вращается вокруг куба, нада шобы круг вокруг которого вращается шарик был ебалом к кубу. Пиздец. Тебе че надо то ебаный икебастос, чтобы орбита шара менялась в зависимости от углов наклона куба чтоли? Еще хуйню какую-то нарисовал.
>>806005 Так получай направление куба и клампом со сглаживанием поварачивай. Очень похоже по аналогии с синемашин камерой. Вскрой стандартный 3д контроллер от юников, там в коде глянь, уверен то что ты ищешь.
Подскажите как организовать механизмы переработки ресурсов, например как в печке из майнкрафта. Вот у нее есть 3 слота для предметов, 1 вход 1 под топливо и результат обработки, два слайдера на остаток топливо и прогресс обработки. Все это держится в UI, тупо на кнопках. Я понимаю как все это сделать при условии что эти самые печки будут всегда активны как геймобжект. Проблема появляется когда мне нужно допустим вырубить всю вкладку включая эти самые кнопки печей, и тогда сам процесс в печке не просчитывается. Как это все перетащить в пустой геймобжект который всегда активен я не понимаю. Поэтому мне нужен ваш совет.
>>806194 Пчел что ты делаешь... Это реализуется как и любой другой интерфейс: У тебя есть канвас с этим делом. Он включается когда активируешь предмет, и выключается когда заканчиваешь работу с предметом, всё. Тебе без разницы какие предметы активны, где. У тебя Канвас(UI) отдельный компонент от гейм обжетков. Так же за это всё дело отвечает какой нибудь менджер работы, куда поступает событие что вот игрок попытался использовать предмет, откроем ему UI. Сами же данные по предмету могут храниться как в нём же и тогда ссылка на него получается при взаимодействие, или же в пулле.
>>806203 > Так же за это всё дело отвечает какой нибудь менджер работы, куда поступает событие что вот игрок попытался использовать предмет, откроем ему UI У меня вся игра в UI, нет физических обьектов. Все в канвасе. Типа вкладку с печкой закрыл и все обьекты выключены, просчет работы в печке остановлен. Не понимаю как это все залинковать и вынести в невыключаемый обьект и потом присунуть обратно при открытии печки.
>>806206 Еще раз, в чём проблема иметь отдельный канвас под печку, который будет не зависим от любых других объектов? Ты же в курсе ui и игра это не зависимые друг от друга вещи. Просчёт и логика у тебя идёт в ядре игры, а не на элементах интерфейса.
Анон только изучаю, вопрос тупой, вот у меня куб смаштабирован в прямоугольник, накинут на него материал, и материал так же смаштабирован! Криво тоесть, что надо нажать, чтобы материал накинулся равномерно?
>>806267 А других вариантов нет? В 3д максе помню можно выбирать "тип" Накладывания текстуры, и один из них она просто кидается без привязки к скеллингу тела. Как вы вообще тогда на прямоугольник равномерную кладку кирпичей делаете?
>>806315 >>806317 Т.е. штатно, такая элементарщина, не решается?? Получается там совсем 3д нет, а если мне нужно буквально пиксель подтянуть, то нужно будет в сторонние пакеты лезть и всё заново пересохранять каждый раз, иначе всё текстуры по пизде пойдут в юнитях.
>>806312 >Как вы вообще тогда на прямоугольник равномерную кладку кирпичей делаете? Текстура должна быть seamless и тогда нормас всё натягивается. Погугли как их делать.
>>805998 >>806005 Понял в чём моя проблема была. Суть в том что поворачивал шарик я при помощи мышки, а координаты от мышки брал только X и Y, а ось вокруг которой крутится шарик задаётся координатой Z, а так как она всегда была равна нулю, то и хули я удивлялся что при повороте куба шар продолжал наяривать вокруг той же оси.
Почему я могу обратиться к public class Text — стандартный UI текста юнити, но не могу обратиться к public partial class TextMeshProUGUI — скачиваемый UI текст от юнити?
Работает:
public Text ammoInMag; public Text reservedAmmo;
Не работает, пишет что нет референса к TextMeshProUGUI:
public TextMeshProUGUI ammoInMag; public TextMeshProUGUI reservedAmmo;
Стандартный текст от юнити шакалится как шакал. Мне надо, чтобы скрипт сам циферки писал в две строки, патроны регулировал
>>806350 Компонент текста и текстмешпро это абсолютно разные тексты, не совместимые. Повесь в интерфейсе текстмешовский текст и его уже можно засунуть в поле TextMeshProUGUI, "обычный" текст ты туда не засунешь.
>>806350 Есть два компонента текста, вот их и спользуй. У легаси текста это Text.text="Твой текст"; У текстмешпро это TextMeshProUGUI.text="Твой текст";
Я подался в разработку в первую очередь потому что заебался ждать пока кто-то сделает что-то подобное - хочу проверить сложно ли это сделать и каково в это будет играть, потому что в голове это может казаться охуенным, но на деле быть калом. Естественно в тайне имею манямечты что игра продастся миллионами копий, но понимаю что такой исход маловероятен. А вы?
>>806332 Не знаю>>806415 Я нищий и не хочу работать в техподдержке говна, люблю хорроры, очень не люблю многие теперешние хорроры. Считаю жанр истекает кровью и бьется в припадке, а спрос не падает. Ну а так как я в ужасах люблю упор на атмосферу, думаю лучше вернуть жанр в это направление, но не так, чтобы игрок симулировал ходьбу и смотрел сримеры.
Мое мнение, второй аутласт хорошо балансирует на атмосфере и геймплее, первый как ни странно чуть хуже, но вислблоуер топ по напряжению. Не помню как называлась игра, это было что-то типа браузерного флеша с графоном пс1. Там дядя с гамбургером ехал по лесу на велике куда-то и каждую новую петлю во времени, атмосфера становилась неприятнее в хорошем смысле, а звук так вообще жути нагонял. В бладборне мне очень понравился звук боссов, особенно Паарл — для меня его визги чересчур реальны, мне очень некомфортно от него. Поэтому звук в хорроре играет самую важную роль, визуалом можно пожертвовать, но не в писксель.
Chilla's Art делает хорошие атмосферные хорроры, не сильно геймплейные, как по мне, но на напряжении и саспенсе красиво играет. Развязки вялые, но мне нравятся. Я за агрессию и страх в хоррорах, не только за напряжение.
У меня 40 патронов в обойме, 120 с собой. Когда обойма пустеет, перезаряжаюсь и добавляю 40 патронов в обойму. Запас патронов уменьшается на 40, соответственно. Получается уже 40 и 80.
А если у меня 24 патрона в обойме, 120 с собой, я перезаряжаюсь, у меня выходит 64 патрона в обойме, 80 с собой. Само собой мне не надо, чтобы в обойме было больше 40 патронов, а к 24 добавилось лишь 16. Первым делом пришло на ум:
if (ammoInMagazine > 40) ammoInMagazine = 40;
Но так лишние просто исчезают, а как дать шарпу понять, что у меня есть лишние цифры и мне их надо в другое место — хз. Или может есть что попроще для перезарядки?
>>806626 Какую-то залупу нагородил. У тебя половина условий дублируется. Нахуй тебе отдельный иф на ноль и не ноль патронов, если блок когда 40- остатки обоабатывает обе ситуации?
>>806635 Откуда у тебя появляется отрицательное число, если ты из максимального количество в обойме должен вычесть текущее, откуда у тебя там минус может быть лол, если текущее максимум равно максимальному?
>>806638 Чел ты видимо не понял. У тебя про первый иф спрашиваю и следующий за ним елсе иф. Зачем тебе отдельныц иф для 0 патронов в обойме, если код добавить к лбойме разницу между максимальным значением и текущем обрабатввает оба результата?
>>806638 Вместо этого должен быть код, который сравнивает количество недостающих патронов в магазине, с количеством оставшихся в кармане и если последних меньше прибавлять к магазину это меньшее число и не будет у тебя минусов, а код обработки отрицательных чисел твой немного обкакунькался
>>806672 >код, который сравнивает количество недостающих патронов в магазине, с количеством оставшихся в кармане и если последних меньше прибавлять к магазину это меньшее число и не будет у тебя минусов
Все по канонам, че не так? Патроны в обойме и кармане сравниваются, разница вычитается из кармана в обойму, отрицалова больше нет, нулей нет
>>806666 Брат, братан, братишка.... У тебя 3 переменные. Максимальное количество патронов в магазине, текущее количество патронов в магазине, количество патронов в кармане. Из максимального количества в магазине вычитаешь текущее. Записываешь это число в новую переменную. Затем сравниваешь его с количеством патронов в кармане и если их хватает, то к патронам в магазине плюсуешь это число и вычитаешь из патронов в кармане. Если оно больше чем патронов в кармане, то эту переменная равна оставшимся в кармане, плюсыешь ее к патронам в магазине, а в кармане будет 0. Что ты там нахуевертил больше 40 меньше 40?
>>806714 Если это тонкота то моё почтение. Если ты просто дебил то попробую тебя заверить что по сравнению со всем остальным юнитиговном просирающимся каждый кадр какой-то сраный кламп в функции релоад если что-то и нагружет, то только твою мамашу проститутку дополнительной работой.
>>806727 Я смотрю ты настоящий юнити-разработчик, щедро раскидываешь функции из библиотек словно хлебороб при посеве, ведь хули, тут одна функция ничего не сделает, там ничего не сделает, повторить N раз и игра лагает, ну и хуй с ней, не разбираться же в каждом таком вызове функции, пускай лагает, для юнити это норма.
>>806744 Двачую этого >>806727 господина. Так и быть для тебя разжую. Бог дал тебе юнити и мозг самому затестить, но тебе лень. Ты можешь засунуть всю свою игру в апдейт и даже это не будет её просаживать. Основные траблы которы жрут цп и гцп - Это графика и физика. Твой говно код, если уж совсем не крутит какие то невообразимые создания и чеки массивов в апдейте просаживает общую кпд ну максимум на 5-10%, это прям макс. Конечно если у тебя становится сотни объектов где у них в апдейтах что-то крутится, то да уже надо оптимизировать, но это уже другая история.
>>806744 Я вижу ты настоящий долбоеб, если собрался оптимизировать процедуру которая будет вызываться в худшем случае раз в n секунд, и то если ты клон кримсонленда собрался делать. Кстати вызов Reload() сам по себе ТОРМОЗИТ, так что его надо инлайном делать.
>>806755 Тебя никто ничего не просил и не попросит, так как ты ни один собес с такими познаниями не пройдешь. Вообще хочется представить ебало мамкиного оптимизатора который в юнити на шарпе вычисляет расстояния в квадрате ЧТОБ БЫСТРА БЫЛО. Наверное он в шейдерах тоже меняет клампы на ифы.
>>802780 (OP) Сейчас пошел второй месяц как я изучаю основы движка на примере различных Microgames, иду полностью по обучалке learn unity и как я понимаю, то там второй этап уже будет непосредственно завязан на кодинге C#? Как он там, толковый или же С# нужно будет отдельно на сторонних ресурсах дрочить, на learn unity огрызок будет? Как вообще оцениваете все эти Pathways на unity learn для полных самоучек? Возможно ли с них толково обучиться ремеслу геймдева или же то такое?
>>806868 Я считаю что если не задерживаться и приходить по 2-3 миссии за неделю то вполне неплохой ознакомительный курс. Креатив кор скипать не советую, ибо там рассказывают про юрп, шейдеры, редактор шейдеров, анимации - лучше имхо всё это знать. Как пройдёшь прыгай в разработку своего проекта.
>>806877 Та я так-то и не собираюсь ничего скипать, а хочу полностью со всем обучением ознакомиться, тут вопрос в другом - не проебую ли я в пустую время на обучение в learn unity, может для непосредственно работы в геймдеве в качестве разработчика unity все идут по какому-то другому пути или learn unity - это база?
>>806879 Я довольно дохуя проходил курсов по юнити и pathways считаю очень неплохим для ознакомления, вот только он мог быть сильно короче имхо. Плюс видосы с трансами и неграми где они рассказывают какую-то хуйню про свой опыт я лично нашёл бесполезными.
>>806880 Лол, я на подобных видосах, когда они начинают рассказывать свой "жил-был" агрессивно перематываю и только таким макаром эти видосы осиливаются.
>>806886 Там даётся неплохая база, чтобы ты просто знал куда в случае чего лезть и что гуглить. Сужает вопросы типа "как заставить объект светиться" до конкретного вопроса "как создать светящийся шейдер в юрп" и так далее.
>>806889 >"как заставить объект светиться" Правильный ответ: скачать ассет. Но хуй, теперь у нас есть 500 человек которые могут перетянуть лапшину из одного места в другое, но нет ни одного игродела.
>>806904 >Правильный ответ: скачать ассет. На каждый случай ассетов не наберётся. Если ты не делаешь совсем дженерик парашу то придётся учиться делать что-то самому.
Хочу крутануть объект по полуокружности. В коде реализовал такое: Координата "x" плавно меняется с 1 до -1. Координата "z", рассчитывается по формуле, которую мне скинули пацаны выше: y = sqrt(r^2 - x^2). Радиус у меня 1. Крутится, но почему-то ускоряется ближе к конце. Видео немного fps урезало, поэтому не очень заметно, наверное, но ускорение точно есть. Есть что-то, что я упустил? Вроде ж все четенько, по формуле
>>806915 Написал формулу, которую скинул анон выше (>>806582 y = r * sin( acos( x / r ) );). Она работает, но так же почему то есть ускорение. Хз, в общем
>>806904 Лолблядь, так тут ещё дебил. Лучше бы реально хоть с БАЗОЙ ознакомился для начала прежде чем кукарекать на кого-то в треде, создатель хуев. Даже такой хуйни не знает.
Гипотетическая ситуация - я накачаю из интернета ворованных ассетов, которые продаются в Ассет сторе, сделаю с ними игру и релизну в стиме за деньги. Меня как-нибудь смогут раскрыть? Вообще, есть ли возможность проверить, используется в игре купленный ассет или ворованный?
>>807075 я точно не знаю, можно спалить или нет, но даже если и спалят то что дальше? разрабам ассетов делать нехуй, сидеть мониторить игры и из магазина не выкинут из-за этого
>>807089 >разрабам ассетов делать нехуй Разрабы некоторых ассетов оперативно репортят ссылки на файлопомойки с их ворованными ассетами, так что тут не всё однозначно.
>>807075 >релизну в стиме за деньги Со своих миллиардных прибылей сможешь выделить 20 баксов на покупку спижженых ассетов?
>>802780 (OP) Я наверное тупой, но объясните, как заставить двигаться элементы на платформе как бы. Как бы игрок имеет Rigidbody и платформа тоже, но почему она его не двигает? Уже и материалы с фриквенси поделал, и всё такое, не понимаю
>>807092 > Со своих миллиардных прибылей сможешь выделить 20 баксов на покупку спижженых ассетов? Да я не против, но с российских карт не оплатить. Можно купить через посредников, но у посредников то другие имена и карты, в чём тогда разница между ворованным ассетом с файлопомойки и купленным другим человеком из другой страны, который переслал мне этот ассет?
>>807107 >в чём тогда разница между ворованным ассетом с файлопомойки Тем что ты сможешь доказать факт покупки лицухи. Тут спор ни о чём, у тебя игры то нет и неизвестно когда будет. Ассет он из РФ оплатить не может, а бабло со стима получать может.
Я сделал несколько вертексны и сюрфейсных шейдеров в обычном проекте юнити. Хочу добавить туда URP - как я понимаю, Cg работать не будет, тк используется HLSL. Долго ли и сложно будет переписывать\править свои шейдеры?
>>807135 Недолго, различия больше визуальные по синтаксису (были одни названия функций/типов, стали другие), а по логике практически нет. Переписывал легаси имаге эффект на постпроцессинг, там тоже на HLSL надо перепиливать чтоб работало. Не сказать что было очень сложно.
В принципе, это вся часть кода, которая отвечает за подбор, другое опустил. Технически работает как должен, я жму "E" в зоне тригера, gameObject с патронами пропадет, в кармане +80 патронов. Но по какой-то причине, которую я не осознаю, нажатие "Е" не с первого раза, иной раз и не с десятого, удаляет коробку и дает патроны. Проверял булеву, она меняет true и false как нужно, задержек нет, ошибок с ней нет, а вот if (Input.GetKeyDown("e")) { Interact(); } видимо тупит. В чем может быть проблема?
>>807200 Хотя вроде бы я понял, дело все же в player.canInteract было. Я на входе и выходе из тригера поставил, но по сути булевая никак не влияет на Interact(), ее ведь нет в методе OnTriggerStay даже. Поменял на:
>>807208 Вроде как OnTriggerStay и прочие Stay, а также FIxedUpdate вызывается через физический движок, а он по дефолту 25 раз в секунду отрабатывает а не все 60. То есть ты жмешь кнопку, а в этот момент OnTriggerStay был на кулдауне и нажатие не отработается. Нажатия кнопок надо чекать каждый кадр в методе Update.
Как вы в 3д задаете различные тайлы для поверхностей? Допустим, у меня есть плоскость - частично лес, частично земля, как ее добавить? Отдельный объект для кпждой текмтуры?
>>807304 "классический" тайлмеп делается мешем из квадов и UV координатами тайла в атласе. звучит страшно, но делается элементарно вот древнее видео что нагуглилось. https://www.youtube.com/watch?v=haelMvLyqDQ
древнее - потому что сейчас юзают встроенный грид/тайлмеп который сделает все за тебя. но тут можно делать не плоские тайлмепы а если и повозится с шейдерами то можно и всякого интересного намутить
>>807371 Ну я сделал спрайт/текстуру, которая шатается туда - сюда шейдером, но все равно уебищно. Такое чувство, что просто не могу нарисовать норм траву. Деревья норм выглядят, трава - уебищно
>>807308 накатал вчера, но чет не захотело отправлятся.
добавлю технических подробностей для разьяснения. рисовать все кучей отдельных объектов - ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ плохая идея. современные видеокарты очень мощный инструмент для паралельных вычислений с тысячами "ядер". проблема в том что эти все ядра могут делать одновременно только одну задачу(очень упрощенно, но сойдет). т.е. условно говоря пока ты посылаешь на отрисовку один объект, тот же условный тайл, который квад, т.е. 4 вертекса, ты задействуешь 4 "ядра" для расчета вертексов, потом количество ядер соответствующее количеству пикселей объекта. остальные скучают. посему что отрисовка 1 большого сложного объекта что отрисовка 1 простенького маленького займет одинаковое время при прочих равных условиях(одинаковый материал), посему тыща(а это всего лишь тайлмап 100х100) отдельных объектов займет в тыщу раз больше времени чем одна цельная сложная карта. просто потому, что у тебя видеокарта все это время будет загружена на доли процента. это называется "draw call" - запрос на отрисовку. цель тут - максимально сократить количество этих самых запросов. современные движки стараются максимально это оптимизировать через инстансинг и обьединение мешей с одинаковым материалом. т.е. если в юнити стоит галочка у материала "инстантиэнт" то оно постарается максимально объединить все в один драукол, что обычно работает, но иногда не так как могло бы. ну и ессно требует отдельных расчетов.
>>807385 Ну я вот щас начал разбираться. Для базовых вещей достаточной школьной программы. Для более сложных - нет, но я видел курс на udemy по математике для геймдева, там от векторов до квартенионов, думаю его пройти
Пчелы, курсы всяких гейбоксов вообще годная вещь или денях своих не стоят, т.к. всё есть в интернетах?
Хочу пока как хобби для себя заняться кое чем на юнити, если эт важн в данном контексте.
Может быть эти курсы даже не как полезная по сути, но как мотивирующая хуйня хорошо работает? А то зная себя я всё растяну до максимума без каких-либо поинтов по целям.
написал в старый тред и сижу сутки ждут ответа, пиздец
>>807494 Если не жалко денег, самоё лучше что есть по кпд это заплатить их пчелику который тебе пару вечеров будет рассказывать про юньку. Далее по списку бесплатные курсы от юников. Далее видео плейлисты аля делаем игру с нуля от известных челиков. Ну и на дне как раз платные курсы, инфоцыгани и подобный шлак.
А я месяц назад решил прочитать весь мануал юнити от начала и до конца. Сейчас остановился на https://docs.unity3d.com/2020.3/Documentation/Manual/Layers.html. В таком же духе читаю манул блендера. Ни разу не пожалел. Много чего полезного. И хотя с юнити уже пару лет работаю, я только из ютубчика брал инфу, ну и сам иногда лазил в манул.
>>807494 Мой опыт в разных областях показывает, что курсы как формат скорее не работают, чем работают. Причина - всё слишком завязано на контекст. Поэтому с ходу возникает много проблем которые не описаны в курсах, но которые тем не менее легко гугляться. Как итог ты можешь сэкономить время и деньги, гугля то что нужно в конкретный момент. Лучше вместо курсов прочитать внимательно документацию, это избавляет от множества шишек.
>>807548 Двачую, нужно на конкретных задачах подгугливать решения. Я после универа подал на тестировщика с пометкой "хочу быть разрабом", мне сразу предложили тестовое задание на Юнити, я за 2 недели с гуглом-ютубом сделал (типа, отсюда взял управление, отсюда взял спам и поведение ботов, отсюда взял миникарту), меня взяли. В итоге за год на 40 проектах со всеми возможными ситуациями столкнулся как с точки зрения фич и скриптов, так и с точки зрения плагинов аналитики-рекламы и оптимизации проекта (мсы, бачи, оперативка)
Аноны, в связи со скудными познаниями шарпа не могу понять, как сделать нормальную систему навыков, зависящую от статов. Есть два класса: stat и skill, у обоих есть поле со значением. Как нормально сделать так, чтобы значение skill обновлялось с изменением значения stat? Что-то вроде фоллачевской системы а-ля "Без оружия = 65 % + (1 % x (ЛВ+СЛ)/2)". Конструктор-то я написал, а вот обновление как? Писать доп. метод в skill и хуярить с ним эвент OnStatChange в Update у MonoBehaviour? Уже третий день пытаюсь эту хуйню нагуглить.
>>807594 Задача немного расплывчатая, но попробуй представить skill и stat просто как набор данных. Не класс, а структура данных без логики. И далее у тебя есть уже система/паттер стратегия в виде класса, который производит расчёты на основе текущих значений skill и stat. Если тебе нужно для интерфейса вывести новые значения, то просто вызываешь некий метод Refresh, который означает, что данные изменились.
>>807594 Так тут же всё ясно как божий день. Производишь перерасчёт формулы как только что-то меняется зависимое в ней. Герой перераспределил навыки - Обновляй. Повесили дебаф - Обновляй и т.п. Надел предмет - Обновляй.
>>807594 Класс character, в нем допустим филд dex класса stat и несколько филдов класса skill, зависимых от dex. В классе stat метод add в нем помимо увеличения самого стата прописать вызов метода recalculate из каждого зависимого от dex скилла. Я планировал делать так, но пока нет компа под рукой, чтобы проверить.
В общем, когда я жму "Е" происходит интеракт с патронами, они плюсуются в карман. Проблема с ошибками, которые интеракт спамит в консоль, если "Е" нажата вне радиуса тригера коробки с патронами (см 1 скрин). Если игрок хотя бы раз окажется в зоне тригера коробки, эта самая коробка не будет спамить в консоль никогда, поэтому на скрине одна из ошибок меньше спамилась. Я так понял, что тригер коробки детектит скрипт PlayerMovement на игроке, получает свой референс и перестает срать в консоль, что тригеру не знает кому отдаться. Я правильно понял? Как это поправить, если мне надо на тригер ентер детектить скрипт игрока для интеракта?
>>807744 ну так тут нулом может быть только плаер, который нул потому что ты получаешь его в тригере. или получай его заранее(скрипт на чем висит?) или проверяй на нул if (Input.GetKeyDown("e") && player?.canInteract)
ну и canInteract == true же. каждый раз когда кто-то так пишет умирает котенок
>>807747 Так я вроде бы понял о чем ты. То есть пока у меня null в player, коробка не может достать true или false из canInteract, потому что не от куда доставать. Ок, встает на места. А как совместить player? и && тогда? Пишет, типа несовместимы операторы && и bool?.
А че не так с player?canInteract == true — так работает теперь, когда проверяю на null player. У меня же canInteract по умолчанию false, пока я не в тригере
>>807750 все время забываю что ?. возврашает нулабл бул, который иф не сьедает. а прописанная операция сравнения вызывает преобразование в простой бул.
> А че не так с player.canInteract == true это мерзость настолько, что в данном случае, когда надо приводить нулабл т.е. имеет смысл, я бы все равно написал if(player != null && player.canInteract && input....) суть в том что булы не нужно сравнивать с булевыми константами. это просто бессмыслено. потому что в результате ты получишь туже булеву константу. это как прибавлять 0 или умножать на 1.
зы просто обычно использую ?. для проверки на цепочки нулов типа вместо if(a != null && a.b != null && a.b.c != null) можно написать if(a?.b?.c != null) в теории можно использовать ?? оператор if(player?.canInteract ?? false && ...) но опять тут для наглядности лично я предпочитаю разбить на проверку плайера и кенинтеракт отдельно а ?? использовать больше для чего-то типа дефолтных значений при инициализации типа public class foo { public int bar; public foo(foo other) {bar = other?.bar ?? 0;} }
>>807754 if (player != null && player.canInteract && Input.GetKeyDown("e")) работает, с этой стороны не подумал. Спасибо.
>>807755 Да я не знаю нужно ли, я просто пользуюсь теми способами, которые знаю. Я знаю, что у меня булевая есть в другом скрипте и булевые можно проверять удобно в ифах. Так и вышло. Может потом и другие способы мне начнут больше нравится, пока использую что под рукой.
>>807757 Сразу так и не впитаю, сложные конструкции для меня
>>806749 > Основные траблы которы жрут цп и гцп - Это графика и физика. Этот шарит, причем для ньюфагов уточню - графика в том числе жрёт и ресурсы цп, особенно если пренебрегать дефолтными советами по оптимизации.
И я даже больше скажу - современные компы такие мощные, что даже если ты по полной обосрёшься с физикой и графикой, они всё равно вытянут твой инди проект, поэтому лучше просто игру делать, чем тратить силы на +1% фпсов, да даже на +100% - поебать, если их приемлимоб
Но это на компе, а на мобилках это критично и надо всё настроить сразу адекватно.
>>806755 Смотря сколько тебе их надо каждый кадр. Я пока не видел, чтобы с этим проблема была.
Если так хочешь по-оптимизировать - ебош ецс, раскидывай всю логику по всем потокам. Это хотя бы даст реальный профит, по сравнению с ёбнутыми оптимизациями коллов функции. Да и вообще нахуй тогда си шарп и юнити нужны, надо на С++ ебошить!
Пиздец, я уже полгода пердолюсь в юнити и чёт смотря на свой прогресс слёзы на глаза наворачиваются. С какого момента у вас появилось ощущение уверенности в работе с юнити? Я до сих пор во многих моментах как слепой котёнок.
>>808169 Ты не формочки в студии шлепаешь, которая в конструкторе подправит код когда ты контролу меняшь имя. В юнити такого нет, там уже определено как надо делать - через поля. У объектов свой айдишник и если менять названия или иерархию объектов то ничего не проебется, а если ты пиздец какой умный и решил сэкономить место в окне инспектора юнити, то потом будешь с пробитой жопой бегать дебажить где у тебя там нуллреференс вылез.
>>808103 >появилось ощущение уверенности в работе Я тоже когда-то пытался в юнити, но потом осознал, что она мне не нужна. А с синим роботом появилось ощущение уверенности в работе очень быстро, рекомендую. Всё равно ты за полгода ничего существенного не сделал, правильно понимаю? Нечего терять, так что смело переходи на сторону добра. У нас есть сырки (на гитхабе, ммм).
>>808181 >Всё равно ты за полгода ничего существенного не сделал, правильно понимаю? Да, но ты то со своим роботом за всю жизнь ничего существенного не сделаешь, так что я спокоен.
>>808193 Ответ "всем" тебя не устроит, поэтому начну с простого: юнити лучше годота в производительности. В тред миллион раз кидали годотные пропуки в примитивных 2д играх, буковки проперживающиеся каждая в отдельном дравколе и другие прелести движка от хуана. 2д физику годота можно даже не упоминать.
>>808218 У меня там оказывается слой исчез по которому должен был рэйкаст проходить. Пока я это выяснил успел переписать всё вот так и заработало как надо.
Поясните положняк по нетворкингу, на сайте юнити Netcode, но написано что он в разработке, по нему реально материалы/туториалы найти или в какую-то другую сторону копать?
А вы знаете, я только сейчас понял что интерфейс нужно обновлять в LateUpdate(), чтобы все компоненты успели обновиться. Иначе может быть задержка интерфейса в 1 кадр
>>808291 События плохо сочетаются с циклом обновления игры, когда надо что-то обновить или получить какие-то данные внутри апдейта. События имеют смысл только для отношений нескольких к нескольким объектам. Например, когда у тебя 10 кнопок и чтобы не перебирать все 10 кнопок, лучше сделать событие нажатия кнопки. Когда отношения 1 к 1 типа игрока и HUD для него, то в событиях нет никакого смысла.
>>808297 > плохо сочетаются с циклом обновления игры Эт как? Что конкретно плохо? > когда надо что-то обновить или получить какие-то данные внутри апдейта Кидается событие, все подписчики получают его и обновляют данные.
> События имеют смысл только для отношений нескольких к нескольким объектам. Например, когда у тебя 10 кнопок и чтобы не перебирать все 10 кнопок, лучше сделать событие нажатия кнопки. А если ты захочешь поменять реализацию того или другого? А если захочешь добавить кнопки добавить объекты?
>Когда отношения 1 к 1 типа игрока и HUD для него, то в событиях нет никакого смысла. Есть - они убирают жёсткую зависимость, за счёт этого проще что-то менять и дебажить. Что-то кинуло событие, что-то обработало, сама зависимость делается через какого-нибудь посредника, будь то условный ui manager или eventbus
> по-хорошему класс player сам должен проверять, находится ли он в триггере с каким-нибудь тегом interact
Ну да, вообще так логичнее выглядит. Есть небольшая проблема, если я кучу коробок с патронами сложу в кучу, они за одно поднятие все собираются, потому что все в зоне интеракта. Не то, чтобы меня это так уж огорчало, но представления не имею как реализовать. Мне кажется, как-то связывать с радиусом зрения игрока и показом предмета интеракта (ну типа "нажмите "Е" для взятия") только, когда игрок лицом к предмету. Не по моим мозгам
> Ты можешь написать: shooting.remainingAmmo += 80;
Да, я щас так пишу, да и писал в принципе. В тот момент я затупил как обычно, написал не += / -= как должно быть, а наоборот видимо =+ / =-, поэтому результат был иной, и я переписал как точно должно работать, пусть не коротко.
>>808303 Попробовал изобразить про что я. Слева вид со стороны, справа вид от камеры игрока. Синим указаны предметы, которые игрок видит на экране, но они не взаимодействуют с ним, потому что не в квадрате интеракта. Оранжевым - предмет, с которым можно взаимодействовать, он в квадрате интеракта.
>>808299 >Эт как? Что конкретно плохо? Это как ввод сделан через опрос Input.GetButtonDown() потому что так удобнее внутри Update() проверять ввод Эти гении идиотизма кстати додумались в новой системе ввода сделать ввод событиями. Я так и не смотрел эту новую систему.
>Кидается событие, все подписчики получают его и обновляют данные. Получаешь данные, сохраняешь в переменную, чтобы внутри Update() потом их прочитать и обновить? Так лучше сразу эти данные дернуть откуда надо
Зачем тебе события изменения количества патронов, например, если в компоненте hud можно просто проверять изменились патроны или нет?
>>808305 var c = Camera.main; if (Physics.Raycast(c.transform.position, c.transform.forward, out RaycastHit hit) && Input.GetKeyDown(KeyCode.E)) { Debug.Log($"CHTOTO NASHEL {hit.collider.name}"); }
>>808314 > Эти гении идиотизма кстати додумались в новой системе ввода сделать ввод событиями. Я так и не смотрел эту новую систему. Я смотрел, она норм, но я под телефоны пилю, поэтому мне она не нужна.
> Получаешь данные, сохраняешь в переменную, чтобы внутри Update() потом их прочитать и обновить? Так лучше сразу эти данные дернуть откуда надо Зачем в переменную? Делаем подписку +=UpdateValue;
А сама эта функция и делает обновление void UpdateValue(int value) { //обновляем нах } Не нужно никакие переменные для прошлого значения вводить, не нужно каждый кадр это прокручивать - а только по мере обновления все будет меняться.
> Зачем тебе события изменения количества патронов, например, если в компоненте hud можно просто проверять изменились патроны или нет? Ну так а с другой стороны - зачем оно надо, если с событиями код намного понятнее?
>>808319 >void UpdateValue(int value) >{ >//обновляем нах >} Потому что это самый примитивный сценарий. Не всегда можно что-то просто взять и обновить из обработчика события
>>808321 Поч?? Если ты делаешь в апдейте, то у тебя if(oldValue != GetAmmoSomewhere()) { //обновляем нах } А если в обработчике, то void UpdateValue(int value) { //обновляем нах }
>>808322 Например когда я переключился в альтернативный режим стрельбы, я хочу показывать в этом элементе hud количество альтернативных патронов. Такие вещи удобнее делать в Update() или в корутинах, если надо что-то динамическое и сложное с несколькими состояниями
>>808324 > Например когда я переключился в альтернативный режим стрельбы, я хочу показывать в этом элементе hud количество альтернативных патронов. Ебошится событие переключения оружия, контроллер интерфейса оружий ловит это событие, переключает интерфейс на нужный пресет в соответствии с типом этого оружия, одному текстовому элементу(или любому другому индикатору) пихает подписку на основной тип патронов, второму на альтернативный, и всё, больше абсолютно ничего не надо делать.
Как раз в в сложных ситуациях с событиями же в разы всё проще, не??? В апдейте с корутиными это ж ебануться можно будет всё отслеживать, где ты там что когда поменял и на что.
>>808326 >В апдейте с корутиными это ж ебануться можно будет всё отслеживать, где ты там что когда поменял и на что if (player.alternativnoeOruzhie) patrony.text = player.alternativnyePatrony; else patrony.text = player.patrony;
пишу 2 строчки кода и интерфейс готов, пока ты там 3-х этажную архитектуру имаджинируешь
>>808410 Онли Character Controller. Rigidbody для управления забудь. Исключение можно составить лишь если твой персонаж это объект который управляется только силой по типу шара.
>>808414 Какой тебе материал нужен? Как сделать персонажа? Так это либо смотришь мультики от самих юников, или же если не совсем глупый туториалы от ютуберов индусов. Есть конечно хард уровень почитать доки, но это опустим.
А если я пилю такую игру, которую не надо будет развивать дальше - стоит ли париться из-за кода, ну, типа, чтобы все было гибко, масштабируемо, расширяемо, solid, oop и т.п.? Ну, то есть, выпустил - и все, пилю следующий проект, забыл про него. То есть, код может быть лютым говном. Классы дёргают друг у друга публичные методы и переменные, логики переплетаются. Но - код работает. По сути, это "архитектура для одного конкретного приложения. Я на листочке распишу, что где как работает, и реализую это. Игрок собирает вещи, дохнет, ходит, стреляет? Пилю один класс, а там в update() код передвижения, и отлов нажатии для стрельбы и ходьбы. Вещи складывается в публичный List в его же классе. В этом же классе добавляем в UI иконки подобранных вашей Враг ловит игрока? В Enemy.cs пишем патрулирующий код. Когда поймает - в его же классе (в Enemy.cs) пишу код, который тормозит игрока, показывает окно "вы сдохли", и там же в скрипте Enemy ловим нажатие - нажал ли игрок кнопку "попробовать ещё раз" Есть дверь, которая открывается, если у игрока есть ключ? В OnTriggerEnter двери пишем проверку, если это игрок столкнулся (проверка по наличию скрипта Player.cs) потом в player.Inventory делаем поиск нужного ключа. И т.д. То есть, логика тупая и прямая - что-то надо? Берём и хуярим без задней мысли, не думая о расширяемости, красоте, правильности, ибо нахуй оно надо?
Судя по всему , к такому подходу придирки начинаются со слов: а если тебе надо будет добавить ххххх, а если ты захочешь xxxxx... Так вот , суть в том, что игра конечная, развиваться не будет. То есть, никакого сопровождения не требуется. Тут главное все заранее продумать, что игра должна делать и это и пилить.
>>808477 Ну ты будешь делать другую игру, вспомнишь, что нужна функция уже есть в предыдущей игр. Захочешь взять, а там наговнокожено. Не разобраться и не скопировать, проще щаново слелать. В итоге тратишь время.
Пилю 2д хоррор, там всякие пугалки при взаимодействии с объектами, типа прказывается окно, там появляется голова и экран немного трясется. Все это сделано анимацией, но я хочу доьавит шейдеры ради эффектов.
Есть ли идеи, какие эфыекты можно повеситт? Есть ли примеры из игорянов где за счет графена складыается ощущение ирреальности? Может что-то времен пс1. Или мб шейдеры готовые какие. Или просто ощущения без конкретных примеров?
Только начинаю ковырять юнити. Сейчас разбираюсь с навигацией и ИИ. Подскажите, почему есть две вкладки и в каждой вкладке могут быть разные значения, например на скрине разная высота препятствия. Почему их две разных? Какая в итоге будет использоваться, та которая во вкладке Bake?
>>808477 Поверь если у тебя получится сделать рабочую игру с таким подходом уже всё будет окей, сможешь всем петухам которые кукарекают говорить что ты хотябы игру сделал в то время как они только кукарекают кодом. От себя посоветую разве что выносить какие либо функции в другие скрипты чтобы самому было понятно, а в остальном похуй. Ну и если код где-то повторяется дважды, тоже выносить в отдельную функцию.
>>808477 > То есть, код может быть лютым говном. Классы дёргают друг у друга публичные методы и переменные, логики переплетаются. > Но - код работает. По сути, это "архитектура для одного конкретного приложения. Я на листочке распишу, что где как работает, и реализую это. Крайности это всегда хуйня, надо всего в меру. Большая часть принципов солид - вполне разумная, вне зависимости от того, что ты вообще делаешь и с какой целью, и практически не требует каких-либо особых трудозатрат(опять же - если их использовать в меру). Может не обязательно всё дробить на сотни интерфейсов, но хотя бы зоны ответственности классов надо как-то пытаться соблюдать, ты на листочке если продумывать будешь, то к солиду и адекватному ООП и придёшь скорее всего в плане проектирования классов.
Публичные поля и методы - это просто нарушение инкапсуляции(и то не всегда), но стоит понимать, что инкапсуляция нужна только чтобы проще было понять как классом пользоваться. Если ты сам уверен, что всё будешь держать в голове и помнить - можешь забить и вообще везде публичные переменные делать. Но на практике ты 100% что-то забудешь уже через неделю, поэтому лучше сделать хотя бы удобные функции в каждом классе, чтобы не пришлось извне модифицировать переменные, с учетом какого-то правила, которое ты держишь в голове(не забыть сделать проверку что минимум меньше максимума или подобную хуйню), опять же, если ты на листочке всё продумаешь, то сам к этому и придёшь.
Короче, не важно, отказываешься ли ты категорично от солида или нет, в конечном итоге ты и сам придёшь к нему(к самым важным его частям в рамках соло разработки)...
>>808764 алсо не стоит забывать что в геймдеве кроме собственно ооп с инкапсуляцией вполне себе популярны и другие парадигмы. тот же экс, где хуй ложили на сокрытие данных и в теории любая система может читать и писать любые данные без ограничений
юнитач, есть ли способ увязать два моноб вместе, если один из них вообще нельзя менять? чтобы исполнялись только вместе, но не порознь. я сейчас делаю так в апдейте моего моноб: if (!script.enabled) return; а дальше уже моя логика. может есть лучше способ?
>>808830 что бы обязательно висели на одном объекте? атрибут [RequireComponent(typeof( ... ))] заодно при добавлении этого мб будет автоматом вешать на объект все требуемые.
>>808557 Bake - это как ты запекаешь навмеш, обычно там самые минимальные значения по всем видам агентов, в агенте ты просто пресеты для навмешконтроллера создаешь, использоваться будет агент в итоге, но если ты запечешь для него невозможные данные, то работать не будет
>>809011 Не ну реально. Я делал примитивами и заебался(ну это лално, хуже то, что не все мог сделать). Теперь думаю, нужно ли в блендер вкатываться или какие инструменты бзать. До этого только 2д делал
>>809013 Для начала нужно разобраться что такое UV, лайт и рефлекшн пробы, как настраивать тени, хотя бы поверхностно шейдеры, и пошарить настройку URP. Иначе всё твоё обучение в блендере превратится в говно, ибо делать 3D и экспортировать 3D - абсолютно разные вещи. По поводу домика, качай ассет ProBuilder, для начала этого более чем достаточно
>>809030 Uv, сюрфейсные и вертиксные шейдеры я знаю. Лайтпробы не оч. Про экспорт/импорт не знаю, но раз речь про uv, видимо нужно будет сопоставлять текстуру с сеткой
Решил наконец взяться за шейдеры. Насколько я понял, можно или ебашить в shaderGraph, или писать код. Поскольку у меня есть опыт в программмировании, хочется выбрать "писать код", и еще по причине, что проводятся ассоциации с лапшей в UE - либо ты пишешь скрипты сам, либо варишь километровую лапшу. В чем я не прав? Или лучше граф изучить?
Поясните про систему частиц. Здорова, начал осваивать систему частиц. Хотел сделать в своей игре эффект листопада, сразу всплыло несколько проблем.
Во первых вид частицы, я во вкладке Shape выбрал спрайт листов, которые заранее нарисовал. От них система взяла видимо только цвет. Тоесть вылетают такие квадраты цветом отдаленно напоминающим листья эти.
Во вторых их вылетает мало. Тоесть вылетает много, но половина из них в холостую, тоесть без текстуры какой-то видимо.
В третьих когда запускаю, в игре вообще нехрена нет, не проигрывает
Прошлый тред:
Официальный сайт: 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 - это начать делать игру и по мере разработки гуглить непонятные моменты.
Для людей абсолютно не знакомых с движком и программированием на C# есть 3и основные книги:
1. Разработка игр на Unity 2018 за 24 часа Майка Гейга
(Знакомство с движком, изучение редактора, создание 4х простых игр практически без кода, отличное пособие для полных новичков).
2. Изучаем C# через разработку игр на Unity. 5-е издание Харрисон Ферроне
(Пошаговое освоение всех базовых знаний по программированию на языке С# в редакторе юнити, создание одной игры стрелялки от первого лица, написание искусственного интеллекта врага, книга переведена не совсем корректно и порой встречаются не просто опечатки, а серьёзные неточности перевода.)
3. Unity в действии. Мультиплатформенная разработка на C#. 2-е межд. издание Хокинг Джозеф
(Правильное построение архитектуры кода для сложных проектов, углублённое изучение программированию на C#, создание 4х полноценных игр на движке, обязательно нужно скачать код проектов, так как в книге он местами уже устарел.)
Шапка: https://www.writeurl.com/publish/qzgktisltkskaitem6aa