24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
На Unity сделано много замечательных игр - 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 - это начать делать игру и по мере разработки гуглить непонятные моменты.
Парни, помогите с задачкой по геометрии. Есть камера с определённым фиксированным ротейшоном по Х. Я хочу передвинуть камеру в какие-то ебеня и центрировать на чём-либо. На сколько мне нужно изменить Y, чтобы камера фокусировалась именно на нужном объекте, а не над ним? Нужно вычислить катет, противоположный углу ротейшона. Как превратить ротейшон Х в угол, и что делать с приближением камеры/глубиной?
>>449696 >по сравнению с буржуйскими Потому что ты половины не понимаешь, а додумываешь. Смысл в итоге тот, но эффект не тот. То же самое с песнями буржуйскими. Если переводить, то там пиздец похлеще, чем у нас.
>>449702 Если высота камеры известна, то tan(угла твоей камеры) умножить на эту высоту, получаешь сдвиг по х. Что там с радианами и углами в юнити я не помню, посмотришь в доках.
>>449702 > чтобы камера фокусировалась именно на нужном объекте Не совсем понял. То есть чтоб объект был по центру камеры, а не чтоб камеры тупо взяла Y объекта и зависла над ним?
>>449724 если переместить камеру к Х и У объекта, то из-за ротейшона в камере этот объект окажется "ниже", т.е. камера над ним смотреть будет. Мне нужно сместить камеру так, чтобы объект в центре камеры был.
>>449699 >Начальный объект не синглтон? Начальный объект - это рут. А если к этому руту прикрутишь какую-нибудь проперти Instance, тогда это будет синглтон.
>А модули сменяемые какого-то объекта синглтоны? Что ты блядь несёшь?
>>449725 Сделай какой-нибудь Vector3 offset, присвой ему на старте разницу между позицией камеры и точкой, куда попадает рейкаст, выпущенный в центр экрана. Потом прибавляй этот offset по x и z к позиции нужного объекта и получай свою позицию камеры.
>>449728 >>449729 Хотя стой >точкой, куда попадает рейкаст, выпущенный в центр экрана Это придётся чертить воображаемую плоскость. Рейкаст способен такое детектить вообще?
>>449730 > Это придётся чертить воображаемую плоскость Шта? Это ещё зачем? Ты же хреначишь рейкаст из центра экрана, он никуда кроме центра экрана не попадёт. Тебе ж на Y пофигу.
>>449731 Камера наклонена же. Если в центре экрана будет возвышенность или впуклость, т.е. не та же самая Х У плоскость, что и у объекта, то смещение будет неправильным.
>>449719 >>449728 >>449733 >>449735 Сделал так vec.z = gCamera.transform.position.z; Quaternion q = new Quaternion(0, 0, 0, gCamera.transform.rotation.w); float angle = Quaternion.Angle(gCamera.transform.rotation, q); Debug.Log (angle);
vec.y += (Mathf.Atan(angle) * vec.z); Выдаёт при 350.0 поворота по Х примерно 14 градусов, что верно. Спасибо всем. Теперь нужно сообразить, что это за зверь такой - Field of View камеры
>>449770 >>449772 Private set означает, что ты задаёшь значение только из тела этого класса. Т.е. тебе нужно либо публичный метод сделать для этого класса, который будет задавать значение, либо сделать свойство полностью паблик и не ебаться.
>>449774 смотри. Если я хочу сделать просто публичное чтение, приватную запись, то я делаю Type MyProperty {get; private set;} без лишней переменной. Но, если я захочу сделать Type MyProperty { get{ return xxx;} private set{ xxx= value} } мне нужна ххх, так как на само свойство я ссылаться не могу, так? как без ххх сделать, чтобы как в первом случае?
>>449778 get; set; - это быстрая запись, которая автоматом "создаёт" xxx типа Type. Ты можешь сам задать ххх, если тебе при использовании свойства нужно как-то ххх менять. Без ххх не сделаешь. >>449784 Ххх нужно сделать. private Type xxx; , или что там у тебя.
>>449770 Забудь про существование property, модификаторов доступа и т.д. Это все нужно для создания интерфейсов библиотек, и не нужно в написании скриптов игры.
>>449863 И конечно же твое мнение основано не на субъективных представлениях ньюфага не разбирающегося в программировании, а на железных аргументах, которые ты готов предоставить?
>>449908 Зачем тебе что-то прятать в своем коде? Только усложнять все лишним слоем абстракции. {get;set;} это вообще ненужный бред в скриптах, тем более не сериализируется в редакторе.
>>449912 Нунида. Архитектура и безопасность, это, конечно, хорошо, но сами по себе они мало что значат. Будь разница в байтах, довод в пользу всяких там инкапсуляций был бы весомее.
>>449928 Что значит "фу"? Есть же и другие языки, и там нет таких фич. САМИ ПО СЕБЕ эти фичи просто фичи, и очень сомнительно, что производительность имеет прямую зависимость от архитектуры. Если это устройство было кем-то arbitrarily порешено как самое лучшее, то оно всё равно в любом случае arbitrary решение.
>>449860 Оправдания говножуев. Если язык постулирует одним из принципов ООП, но при этом в нем невозможно лаконично записать проперти, то это не язык а говно. И никакое его глубинное понимание не изменит ситуацию.
>>449960 Так они там чего, используют менеджеры для всех юнитов, анимаций и поисков путей? Удивительно, то-то же мы апдейты в каждом юните проверяем, а не делаем отдельные менеджеры.
>>449976 А, это же типа новый компилятор (?). Поясните, кстати, что такого пиздатого в новых версиях языка, и почему на него стоит дрочить. Видел только, что внутрь функций нельзя вставлять сложного формата формулы, но не более.
>>449996 Тахуйзнает, я же тупенький, просто пытался провернуть конструкцию типа Math.sin([дохуя переменных с паройфункций]№1, [дохуя переменных с паройфункций]№2), мне студия сразу сказала: "Нет, брат, так не пойдет".
>>449915 >>449918 Абстракции вы будете писать, дурачки, если вам понадобится изменять состояние объекта из другого объекта, вместо прямого чтение и записи переменных.
>>449939 ООП и проперти никак не связаны. Ты сначала разберись что такое проперти и как они работают, а потом уже кукарекай у лаконичности их записи. Придумал какую-то хуйню и обвиняет язык, потому что в нем этой хуйни. Вообще охуеть
>>450058 Ты так скозал? Просто до этого все считали что проперти это лаконичная запись для геттеров и сеттеров, которые в ооп реализуют гибкую систему инкапсуляции и полиморфизма. Но оказывается это не так, сорян тогда, двигай кубы дальше. > Придумал какую-то хуйню и обвиняет язык обвиняет язык, потому что в нем этой хуйни Как хорошо читать жопой, можно писать любую хуйню не задумываясь
>>450092 property это просто сахарный синтаксис и зло, потому что у них непредсказуемое поведение. Семантически это переменная, но на самом деле функция. И что там в этой функции можно только догадываться. Например, нужно кэшировать значение проперти или нет? Особенно заебывает использование property с структурами в юнити. Хочешь изменить property? Сохрани в переменную, измени, и запиши обратно.
>>450130 Срущую свинью нужно игнорировать либо репортить, а не поощрять, присаживаясь срать рядом с ним. Хотя чего я распинаюсь, это наверняка пизданутый семен.
Как создать Аватар для 2D спрайтов? Он мне нужен чтобы появилась возможность зеркалить анимации одним нажатием, но в списке ничего нет, а как создать новый непонятно.
vec.x -= gCamera.transform.position.x; //distance between camera and new point vec.y -= gCamera.transform.position.y; //distance between camera and new point vec.z = 0F; //keeping camera height
if (angle > 360) angle = angle % 360; if (angle > 180) angle = 360F - angle; else if (angle < 180) angle = -angle;
float fovH = height Mathf.Cos(gCamera.fieldOfView/2 Mathf.Deg2Rad); //finding height modified by camera's FOV float side = fovH Mathf.Tan(angle Mathf.Deg2Rad); //finding side vec.y += side; //adding offset
Лолблядь, я и не знал, что они там в радианах считают. Да и сам подсчёт в радианах странный какой-то. Пишет, что возвращает в радианах, но если вписать Mathf.Deg2Rad, то вернёт в градусах. Как так-то?
Анон, как запекать освещение в юнити для интерьеров? Нужно чтобы помещение хорошо освещалось с окон. Однако Directional Light как-то странно работает. Он пропускает свет сквозь крышу, причем сама крыша становится черной. Area Light? Но как тогда быть с тенями?
>>450204 > просто ты бестолоч > Area Light делает то что ты хочешь > Light is emitted in all directions uniformly across their surface area > in all directions uniformly но ведь ето не так, я не бестолоч!
Хочу УИ над каждым персонажем. Создавать канвас на каждого и пэрентить на ГО перса, или сделать общий канвас для херни, которая должна висеть на персонажах, и панельку уже привязывать к положению ГО?
>>450233 >>450232 канвас вообще один должен быть? Например, для окон инвентарей и ОнПлеерУИ разные канвасы должны быть, только если один оверлей, другой в мире? То есть если игра 2д, то все вообще можно делать в одном канвасе, писа окна информации, меню, диалоги, статы юнитов, инвентарь?
>>450239 а, ну и если у меня на персонажа прилеплен канвас, то он и ходит за персонажем. А если я панельку на общий канвас прилеплю, то придется при перемещении и панельку перемещать.
>>450201 сделай у крыши в Skinned Mesh Renderrer чтобы она с двух сторон тень кастовала. важный вопрос. а нужны ли в бане окна? сунь в окна Area Light, тени по моему тебе вообще нахуй не нужны. это же баня, там только рассеянный свет. если хочется Directional Light в окна светить то ебани ему Cookie нужной формы. вообще посмотри какой-нибудь таймлапс освещения в юнити.
>>450206 он и не сделан для этого. он сделан чтобы освещать пространство. если так хочется хитрый свет то всегда можно охуеть и сделать Directional Light как надо пользуясь Culling Mask
>>450227 да оба вариант норм, вопрос в том что получить хочешь.
>>450237 на самом деле не один, если делаешь UI в ворлд спейсе как в дедспейс например. но если ты делаешь 2д то нахуй тебе все эти хитрые фичи то? делай обычный, на одном канвасе. меньше возни.
>>450242 но зачем твой канвас ездит за персонажем?
Ладно, попробую конкретнее. >но зачем твой канвас ездит за персонажем? использовал его как папку для панелек на персонаже.
У меня есть юниты, за ними должны перемещаться панель со статами и панель с уроном (сортинг лэйер выше спрайта юнита и статов, типа когда получаешь урон, вылезает эта панель на некоторое время, показыввает величину урона, ну типа анимация). Как это правильно реализуется.
Про то, что я не правильно понимал канвасы в принципе, я уже понял.
Есть у меня объект дороги, нужно накопировать его на определенную длину. Есть возможность в юнити магнитить объекты прям полигон к полигону или надо расставлять все вручную? Просто если ебашить вручную, то модели всегда будут немного налезать друг на друга или наоборот небольшой пробел между ними, что глаз режет люто, да и времени тратит кучу
>>450253 да как всегда. ебани себе менеджер который бы висел на канвасе, который бы отображал подобные эвенты над юнитами, следил за этими панельками и перемещал их куда надо со всяким там красивым лерпом и прочим говном. сделай чтобы при создании юнита он заодно регистрировался в этом менеджере. ну а дальше че, переводи мировые координаты в экранные и ебись уже с ними. может и муторно, зато все в одном месте, все как ты хочешь и с этим будет проще работать дальше.
>>450258 открой гугл, напиши там unity snap, думаю это то что ты ищешь.
>>450260 >ебись уже с ними. может и муторно хорошо, тогда чем плохи канвасы над каждым юнитом? Оптимизация соснет? Просто это удобнее и кода меньше. И сейчас все работает уже.
>>450264 дааа хуй с этой оптимизацией, этот UI и такое потянет. это конечно удобно в начале, но при увеличении размеров проекта обычно перестает быть удобным. например если захочется делать какие-то клевые манипуляции, например сделать так чтобы полоски ХП не смешивались в кучу а разьезжались немного друг от друга. или когда ты захочешь редактировать все все панельки одновременно, например отключать их когда игрок выходит в другое меню (например карта, или журнал). или когда размер проекта вырастет до таких размеров, когда проще знать куда срать свой тематический код для UI, чем искать все эти 10-20-30 классов куда распиханы какие-то мелкие фичи для интерфейса.
но если тому что ты делаешь такая хуйня никогда не понадобится то оставь как есть. тебе лучше знать.
>>450252 Канвас же по умолчанию имеет функцию прикрепления за камерой. Сам не дошел до UI, но вроде как можно же просто прицепить на юнит точку, на нее инстанциировать панель с анимацией.
>>450339 надо чтобы разное. Грубо говоря при вызове Random.Range(0,5) я получаю что-то такое: {33333111111111000666666666666666000000000}, а не нормальный рандом. В то, что так совпало не верю.
>>450342 чувствую подвох, короче. Документацию почитал, но немного не понял. Он берет дефолтное семечко из даты-времени пк, так? То есть если выдает подряд одинаковую фигню, то значит в этот инкремент времени успел прокрутить цикл х раз, так?
чувствую, что читал жопой, поясните. Или дайте линк на статью, где подробнее написано. Кстати, такая фигня только с интом?а если рандомить флоат и из него потом делать инт, предварительно умножив на что-нибудь, та же фигня выйдет?
>>450238 Вообще-то, много канвасов - это хорошая практика, если у тебя UI много говна имеет. Почитай в разделе ЛУЧШИХ ПРАКТИК на юньковском сайте. tl;dr при каждом чихе у тебя батчи меньше времени тратить будут
А зачем юнити насильно заменяет заданные в скрипте паблик переменные (даже если их скрыть в инспекторе) на те значения, которые заданы в редакторе? Встретился с этим вот. Просто хочу разобраться.
>>450551 Но я их не менял, лол, я их задал в скрипте, а инспектор насильно закрепил. И это не ответ на вопрос. Я не понимаю концепта за этой хуйнёй. Они не смогли синхронизировать скрипты с инспектором, или чего?
>>450552 Делая публичные сериализуемые поля в наследнике MonoBehaviour'а, ты специально делаешь их доступными и изменяемыми / запоминаемыми в инспекторе. Это одна из основных фишек.
>>450554 Но это действительно одно из основных свойств редактора. Level-designer'ам очень удобно подкручивать всякие свойства объектов на уровнях. С точки зрения архитектуры это не очень красиво, т.к. в runtime потом висит объект с публичными полями.
>>450611 грубо: есть колесо от машинки, есть машинки с колесами. Машинки сделаны из префабов колёс и прочих. Хочу чтобы при перекрашивании колеса, колеса менялись на всех машинках. Кнопка Apply работает, когда я хочу изменить объект префаба на сцене и записать в префаб изменения, в моем же случае почему-то не работает.
>>450613 что-то мне подсказывает, что я просто машинку криво сдеал. Смотри, колесо сделано из всякого говна, я его перетащил в прожект, получил префаб колеса. Если я теперь перетащу обратно на сцену несколько префабов колес, добавлю машинку, обведу все и сделаю из добра префаб, он будет считать что префаб машинки сделан из колес или из говна(элементов колес)?
Посоны помогите! Короче, Mathf.Лерп это линейная штука. То есть числа распределены равномерно, но что если я хочу, чтобы оно было не линейным, а по прогрессии какой-то? (как на картинке прикрепленной) Есть что-то такое? Или самому ручками это собирать надо? Я знаю есть slerp, который вроде как можно было бы использовать для моих целей, но он для вектор3, а не для чисел, и вообще вроде как не совсем то.
>- Какие у Unity слабые стороны? Наверно платиновый вопрос, но как же наихуевейшая оптимизация, всякие там garbage collector и memory leak которые вшиты в движок и не фиксятся?
>>450674 unity скоро умрет. советую всем перекатываться на godot. он сейчас уже достаточно развился и, что самое главное, стал де-факто опенсурсным движком. то есть чем-то вроде blender'а в мире игростроя. а так как игровые движки намного популярнее 3д, то и развиваться он скоро будет семимильными шагами.
Перехожу с гамака на юнити. Столкнулся с тем что в гамаке я довольно сностно управлял инстансами через код, а в юнити вообще чето пока не вкуриваю. С# поизучал, но понял что на теории далеко не уедешь и надо что-то делать, но делается как то туго.
Например у меня есть объект на сцене, чтобы через код заставить его что-то делать надо как я понял записать в переменную (ну не силен я в терминологии) данные компонента (GetComponent), например Transform, тогда я смогу через код его двигать. Если я хочу обратиться к какому-то другому объекту на сцене через текущий используют GameObject.Find если данные какой-то переменной мне нужны везде -делаю его паблик статик. Да, я соображаю туговато. Если я создал на сцене 5 объектов и навешал на них 1 скрипт. Переменные в этом скрипте же локальные для каждого gameobject? Наверное это очевидно, просто пока мои скрипты работаю немного не так как я ожидаю.
>>450719 Переменные локальные для каждого навешенного скрипта. Статик будет один для всех, это видимо не то что ты хочешь. Созданные объекты пихаешь в пул, или делаешь как тебе удобно. Find медленная операция (лучше не юзать в Update), можно хуячить объекты при создании в массив или лист какого нибудь менеджера сцены. transform'y не нужно делать GetComponent, он у любого объекта и компонента есть по дефолту, yoba.transform.Translate(...)
>>450719 > Если я хочу обратиться к какому-то другому объекту на сцене через текущий используют GameObject.Find если данные какой-то переменной мне нужны везде -делаю его паблик статик public static относится к классу. Т.е. есть у тебя инстанц класса Klass по имени klass. Просто паблик будет требовать писать klass.variable, статик же Klass.variable. Очевидно, что статик (с таким именем) существует только один. >Если я создал на сцене 5 объектов и навешал на них 1 скрипт. Через AddComponent если, то каждый скрипт как бы отдельная сущность. Есть ещё такая вещь, как new, которая создаёт новый инстанс. >Например у меня есть объект на сцене, чтобы через код заставить его что-то делать надо как я понял записать в переменную Можешь писать в любом наследующем от монобихевиора GameObject.Find("obyekt").transform.position += new Vector3(1, 1, 1), например. Но файнды использовать не рекомендуют. Ты ещё учти на будущее, что переменные стринг, интежеров и т.п. это не инстансы новых объектов, а вот массивы и классы уже да, т.е. в переменных в первом случае хранятся данные, во втором ссылки. По сути, данные и ссылки на контейнеры данных. >>450723 Трансформа нет у объектов без монобихевиора.
Правильно я понимаю, что если есть выбор между реализацией фичи в Корутине или в Апдейте, лучше выбирать Корутин, потому что он умеет в разных потоках работать?
>>450675 Давно бы на него перекатился, но там какая то скриптопараша вместо нормальной статики инб4 пиши на крестах. Разрабы вроде в ближайшем крупном апдейте собираются обновить апи движка, чтобы можно было на любом языке писать. А вообще как замена юнити есть xenko.
>>450865 Процессорная многопоточность и потоки процессов это 2 разные плоскости. Вся твоя логика из монобехавиор всегда вызывается в одном и том же игровом потоке, но это не мешает игровому циклу работать с графикой еще в двух, с сетью в третьем, а со звуком в четвертом.
>>450865 Можно пилить треды средствами C#, но в них нельзя использовать апи юнити. Если нужно провернуть асинхронную операцию не блокируя основной поток то можешь заюзать бесплатный вссет Thread Ninja со специальными корутинами, мне помог.
Юнитаны, подкиньте годный видосик по свету. Чтоб там про запекания, лайтмаппинг, отражения, light probes и всё такое. А то попадается только какое-то говно васянское.
>>450662 Все хуйня. Херач public AnimationCurve задавай нужную тебе кривую далее лерпишь от нуля до единицы нужную тебе штуку. далее AnimationCurve.Evaluate через нужное тебе значение. Побалуйся
>>450864 >У Юнити ведь есть ассет стор - вполне достойный конкурент. Это не конкурент по нескольким причинам: 1. ассеты пилит один автор 2. они платные 3. наличие ассет стора с платными ассетами не дает разработчикам юнити запилить эти функции в движок бесплатно, из-за чего они вынуждены заниматься какой-то иррелевантной хуитой вроде изобретения своих тредов в C#
>>450771 >но там какая то скриптопараша вместо нормальной статики Ну они вроде переросли эти кирилльские амбиции и добавили C# официально. а там и нормальный питон добавили через плагин. Я думаю эти скрипты были основной причиной непопулярности движка. Надеюсь этот gdscript скоро станет deprecated.
>>450865 >А как тогда Юнити распределяется по процессорам? Самым хуевым способом. Тупо создает отдельные потоки для рендера, физона и т.д. Это усложняет архитектуру, все равно тормозит т.к. нужно все синхронизировать, хуево и бесконтрольно утилизирует многопроцессорность, т.к. нагрузка в разных потоках очевидно разная.
Параллельность должна быть на уровне данных. То есть, например, игровая система должна обновлять все компоненты в нескольких потоках (что-то вроде использования Parallel.For())
>>450957 Чисто теоретический вопрос для интереса. А как вообще программы пилят на несколько потоков? Ну, вот, допустим, старт, 1 этап, 2 этап. Один поток добирается по 1 этапа и ждёт остальные потоки, и только затем 2 этап начинает?
>>450961 вовсе необязательно поток скрипта вот выполняется с частотой с какой может, а если поток физона подкатил новые данные (в юнети физон по фиксед апдейту) вставляет его данные в своё. ну это грубо. на самом деле там сложнее и на самом деле я не знаю как именно в деталях
Я думаю что это сделано так: в каждой системе есть свое внутреннее состояние, например, в рендере есть какой-то рендер лист. Система тупо в цикле рисует этот рендер лист. Другая система, если ей нужно обновить рендер, просто блокирует поток и обновляет этот лист. Думаю как-то так.
Подскажите, как это написать человеческим языком чтобы работало? Куча раз переписывал. В чем идея: 2D игра, вид сверху. Есть объекты, с коллизией, типо дивана или стола, сквозь которые меня должно быть видно, поэтому пытаюсь всё делать с тэгом, но скрипт в каких-то ситуациях просто перестаёт работать.
>>451121 Ну кстати может быть. Оке, учту. Кстати, я посмотрел. Я оказывается всё пофиксил уже. У меня еще одна вещь короче. В общем, в чем суть. Если игрок скрылся из поля зрения врага, то моб какое-то время ищет его. Я это реализовал с помощью пика. Но, с такой реализацией появляется баг: Например, преследование длится 6 секунд, моб заагрен на игрока. Игрок скрывается за стеной и сразу же возвращается в поле зрения моба. Через 5 секунд игрок возвращается за стену . Таким образом получается, что у врага остаётся лишь 1 секунда преследования. Собственно, подскажите, как можно реализовать это по-другому, чтобы не было этого бага?
Притом это всё только при компиляции на андроид, если создавать билд для PC-всё успешно компилируется и запускается. В чём причина и как можно исправить?
поделюсь вином для нубасов типа меня и реквестирую гайдов по рефакторингу в visual studio, или по best practices, "правильному" написанию кода в юнити.
Если кто знает вины по паттернам в юнити, кроме game programming patterns, то скиньте тоже.
>>451144 Вот эта книга хороша. Она в целом подскажет, как лучше оформлять код. Необязательно читать всю. Можешь прочитать только интересующие тебя главы.
>>451141 Cейчас провёл исследование- на iOS успешно билдится тоже. Думаю, эти ошибки исходят от структуры Андротда или Андроид Студио, может быть, у кого-нибудь были похожие случаи и известно решение? Очень нужно сбилдить именно под андроид до утра.
Рейкаст видит только УИ, ок. Но почему он видит эти УИ-кнопки там, где их нет? Не невидимые кнопки, а именно что видит кнопку, находящуюся в одном месте экрана, и в другом месте? Этот hitObject в обоих местах имеет имя кнопки, при нажатии работает как та кнопка, и вообще является кнопкой. Я не понимаю, как это вообще
В Юньке для колес используется wheel collider. Как я понял это стандартный компонент PhysX, значит ли это что в Unreal Engine стандартные колеса (если они там вообще есть) ведут себя так же? И я нашел много видео на ютубе где народ хвастается своей физикой авто, при этом подавляющее большинство использует wheel collider. В таком случае в чем уникальность их физики? Ведь если я правильно понял в wheel collider есть все необходимое что отвечает непосредственно за саму физику колес.. А у всего остального особо нет места творчеству (например ускорение, оно и в африке ускорение) В физике авто я вообще не разбираюсь, но если кто знает как это правильно делается, поделитесь. Если макакить свои колеса, я правильно понимаю, что ничего не понимающий в физике человек это точно не сможет?
У меня есть предположим изменяемая карта, и мне надо чтобы навмеш соответствовал карте. Как мне это делать? Тупа ребилдить его? Или может его можно как-то частично ребилдить?
Хлопцы, вот смотрите. Есть у меня класс Yoba. От него наследуется класс BolshoiYoba. Могу ли я через проверку GetComponent (или ещё какую-нибудь) определить от какого класса наследуется мой BolshoiYoba? Или не выёбываться и ебашить по тегам?
>>451269 Есть болванчик. Болванчик может стрелять в объекты. Пока он стреляет в объекты, на которых висит скрипт "Mob", определяет его наличие через GetComponent. От этого самого "Mob" я хочу унаследовать несколько разновидностей мобов и вот думаю как организовать проверку моб ли это или хрен собачий. Писать проверку на каждый вариант унаследованного скрипта - так себе занятие. Вот и думаю, можно ли отследить родительский класс или не ебать мозги и хуярить по тегам.
>>451271 не еби мозги и хуярь по тегам. на самом деле, я настоятельно не советую звать getcomponent в случаях когда его вызова можно избежать. кроме того что это одна из самых тяжелых функций в юнети хотя я проверял версии эдак в третьей, так еще и теги ведь они прям для этих случаев и нужны.
>>451279 > (on vulkan) вулькан это вам не директикс, это вам не опенгл. он пока молод и дерзок и нихуя не умеет. вообще удивительно что под айос скомпилировалось
>>451268 Что-тоттипа того можно GetComponent<Yoba>(); вернет тебе компонент, который наследуется от Yoba. Соответственно если на объекте не висит компонента наследуемого от Yoba, то он тебе null вернет
>>451286 То есть не по старинке ебать, а нежно целовать и облизывать? Вон там даже народ говорит что с вулканом 9000 фпс, а не то что этот ваш самый дирух или опенрыло.
Resource Dirs: Including resources from package: C:\AndroidSDK\platforms\android-25\android.jar applyFileOverlay for drawable applyFileOverlay for layout applyFileOverlay for anim applyFileOverlay for animator applyFileOverlay for interpolator applyFileOverlay for transition applyFileOverlay for xml applyFileOverlay for raw applyFileOverlay for color applyFileOverlay for menu applyFileOverlay for mipmap ] exit code: 1 UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg, Int32 retriesOnFailure) UnityEditor.HostView:OnGUI()
>>451271 У тебя все неправильно. Пуля про столкновении просто отправляет сообщение столкнувшемуся объекту. На этот объект ты можешь уже навесить какие угодно компоненты обрабатывающие это сообщение, безо всяких наследований. Например, компонент пускающий искры, или компонент отнимающих ХП
>>451271 Тебе не нужно определять, какого типа этот моб. Ебашишь Mob как абстрактный класс, ебашишь наследующие от него разновидности, скажем, MaliMob и BolshoyMob. Создать класс Mob нельзя, но ты сможешь создавать MaliMob и BolshoyMob, которые по умолчанию будут Mob'ами. В Mob ебашишь абстрактные методы "без тела", в наследниках ебашишь те же самые методы с override'ами. Ты будешь искать класс Mob и запускать через Mob абстрактные методы Mob'а, которые будут "автоматически" заменяться овверадиться на методы MaliMob и BolshoyMob
>>451405 >>451409 Можно поподробнее? Это медленее чем геткомпонент? По идее если у меня 1.5 компонента висит то время выполнения геткомпонента не будет большим.
>>451406 Бро, чувак спрашивает элементарные вещи, а ты его так с лету абстрактными классами грузишь. Вообще в коде для юньки при наличии геймобджектов лучше переходить на ECS и забить на классический ООП, оставив от последнего только наслелования, избегая использования олдскульных паттернов
>>451416 >абстрактные классы >грузят Сколько у тебя IQ? На кой чёрт кодить на сишарпе, если самые крутые фичи - абстракции, интерфейсы и делегаты - не использовать? А если ещё и типы как-то присобачить, уууух! Там нет вообще ничего сложного. Абстрактный класс САМ ПО СЕБЕ не существует, но существуют его наследники, в которых он и выражается. Абстрактный метод не содержит в себе никакой логики, он просто является "шаблоном" и указывает, сколько принимает и выдаёт метод, который будет использоваться ВМЕСТО шаблона. Делаешь абстрактный класс Юнит, делаешь наследника Бандит, делаешь наследника Страж. В Юните задаёшь то, что есть и у того, и у другого, скажем, здоровье и урон и абстрактный метод Отака(), а в Бандите и Страже задаёшь особенности того, как будет происходить Отака(). Если коду попадётся Юнит, он не будет разбирать, Бандит он или Страж, он сразу запустит Отака(), и шаблон автоматом укажет, бандитскую или стражниковскую Отака() использовать. Чем это великолепие заменить вне ООП? Ёблей с энумераторами и свитчами? Так это ж ещё сложнее структурно, чем абстрактные классы и методы. Нахуя новичку советовать то, что сложнее?
>>451418 ECS подразумевает создание персонифицированных ГО, где инстанцированный, как ты говоришь, Юнит, который может иметь множество экземпляров - может получить всю нужную инфу о любых переменных, допустим, из базы, через контроллер. Итого мы имеем единичный ентити, (или ГО), который не знает ничего о себе, зпаолняемый нужными компонентами, которые заполняются как раз переменными из контроллера-синглтона. Это удобно и для прототипирования, потому как каждый компонент можно настраивать ручками, и для окончательного формирования базы с инфой о переменных и компонентах.
Вообще это не я придумал, да и в случае с командой программистов и прочих более одного человека, разработка становится более прозрачной и доступной для быстрого понимания кода и происходящего. ECS+MVC = НЯ!
>>451271 Не слушай эту >>451371 макаку. Самым правильным решением будет сделать абстрактную прокси фабрику десериализирующую энтити бины в абстрактный синглтон фактори менеджер.
>>451418 > Чем это великолепие заменить вне ООП? Кирилы итт проснулись и вспомнили про ооп в гейдеве, когда весь мир уже благополучно забыл его как монструозное и неповоротливое говно и перешел на ecs подход. которого в юнити нет, потому что у разрабов СВОЕ ВИДЕНЬЕ
>>451454 Почему же свое виденье? Тут тебе и objectOfType и UnityEvents и включение-выключение компонентов прямо на ГО. Можно ECS обмазываться при грамотном подходе
Resource Dirs: Including resources from package: C:\AndroidSDK\platforms\android-25\android.jar applyFileOverlay for drawable applyFileOverlay for layout applyFileOverlay for anim applyFileOverlay for animator applyFileOverlay for interpolator applyFileOverlay for transition applyFileOverlay for xml applyFileOverlay for raw applyFileOverlay for color applyFileOverlay for menu applyFileOverlay for mipmap ] exit code: 1 UnityEditor.Android.Command.Run (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg) UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg, Int32 retriesOnFailure)
>>451477 сука блять тебе погуглить сложно? там же всё элементарно, но нет, не хочу, ему блять даже сказали в какую сторону смотреть, нет не хочу, хочу чтобы мы за него собрали приложение
услышал такую вещь, что для удобства многие объекты лучше размещать на сцене, всунув в парент к пустому ГеймОбжекту. Типа так проще с пивотами работать, менять всякое если что и прочее. Только я вот не понял, компоненты логики тогда на пустой ГО вешать, или на сам объект?
>>451484 нет, не для того, чтобы группировать. Тут то все понятно.
Чел рассказывал, чо это типа удобно, например если надо пивот настроить (иначе никак) или просто при импорте моделек, лучше пихать в пустой, чтобы было проще потом работать/менять, настраивать.
Я видос забыл, в истории не найду, вот вспомнил, когда пивот кастомный понадобился, а куда логику пихнуть не знаю. Один объект - один пустой ГО, есличто.
Инбифо. Твой чел, ты и разбирайся, хз что он там говорил и к чему вообще.
Какого хрена visual studio иногда не цепляет неймспейсы для вновь созданных классов? Не узнает нифига из юнитивских штук. Закрыть-открыть помогает только, да и то не всегда.
>>451144 Я уже заебался кидать одну и ту же ссылку, но вам нужно изучить принципы SOLID. Даже где-то в дебрях документации Unity можно найти ссылку на этот сайт: https://refactoring.guru/
>>451685 >>451650 Плять, почитал, теперь захотелось переделать связку юниты-клетки в связку массив рендереров - массив координат - массив статов - массив айдишников. Сука, я ж сейчас переделывать весь код пойду из-за вас
Друзья, объясните тупому, как вставить анимацию? Пытаюсь использовать apng, ничего не работает. Юнити, кажись, вообще думает, что это обычный png. Покадраво тоже ничего не понял.
>>451678 Чувак, пойми другое. Все эти техники нужны для того, чтобы упростить сам процесс разработки. Чтобы ты посреди разработки не осознавал, что написал говно уровня: поменял один модуль - сломал 24 других модуля.
>>451710 Вот и переделывай. В случае чего, откатить в svn не проблема.
>>451718 Берешь и вставляешь спрайтшит. Потом в аниматоре делаешь анимацию. APNG - ебанутый и оверинжинирнутый формат. Юнити его не поддерживает. Угомонись.
>>451743 >ебанутый и оверинжинирнутый формат. Юнити его не поддерживает потому что унити говно само по своей природе? И авторы юнити не смогли написать работающий импортёр?
>>451743 >Вот и переделывай. Как я кодить начал, я только и делаю, что переделываю всё. ООП, говорят, делай, наследувай, фор вместо форич используй, синглтоны бля юзай. А тут читаешь - де, кэш он вон как устроен, и если ООП юзать, то это в 50 раз медленнее согласно тому, что по ссылке, чем ебошить методами какого-нибудь паскаля школьного. Это как-то дико, как мне кажется. Я-то думал, если ООП (САМО ООП), то все эти проблемы как бы системно решены, всё по-умному устроено, АН НЕТ, НИХУЯ, ВСЁ ТУПО, А ТЫ ГУБУ РАСКАТАЛ. Мне не пригорает, возиться в коде-то весело и приятно и самое лучшее времяпреповождение, но серьёзно, хуле всё так плохо, нехитро устроено?
>>451745 Ты чмоха необразованная. Пиздуй напиши свой имортер, юнити тебе руки не ограничивает ничем. Потом выложишь в AssetStore за 5 баксов. Его никто не купит, потому что никто не использует APNG для анимации в играх, т.к. формат конченый и жрёт дохуя времени на цпу которого у тебя нет, лох
>>451747 Понимаешь, ООП в реалиях геймдева сегодня -- это нихуя не медленно. В большинстве случаев у тебя узким местом производительности будет рендеринг.
ООП пришло для того, чтобы код стал читабельнее и для того, чтобы ты мог быстрей вливаться в новые проекты и быстрей писать код, а не приходить на проект и полгода-год раскачиваться и вкуривать, что же понахуячили эти дебилы.
Беда ООП в том, что люди нихуя не понимают его сути и ругают его за зря.
А вообще, в Unity использует КОП (компонентно-ориентированное программирование)
Хочу построить (build) игру, однако у меня вылезает одна и та же ошибка - 1 пикча.
Посмотрел в инете - понял что у меня не настроен keystore. Настроил, не работает
Парень написал решение проблемы на 3 пикче, но не то что бы я не понял что он хотел сказать, просто я не понял что это за SVN такой, и что с ним надо делать. Кстати у того чувака все писали мол он им очень сильно помог
Прошу объяснить на пальцах что и как мне делать, если конечно это не трудно.
>>451756 Там нехуй делать будет, когда эти проблемы решатся. Самые-самые базовые механики готовы, теперь только оболочками их обмазывать, а потом модельки влепить нормальные и всё готово будет. Можно поставить вопрос так - чем сильнее и лучше продумаешь свой инструментарий, тем быстрее потом сможешь ебошить сюжет и карты.
>>451764 Так, у меня вроде что то получилось, я кое где поменял кое что. Проблема потеряла силу. Эх, вот бы они всегда так решались благосклонным рандомом
Тупой вопрос, каким образом можно сделать генирацию бесконечной земли, учитывая, что она будет идти по какой-то функции, без швов(для юзера)? Пример такого: Alto's Adventure
>>451710 После такого поста даже запускать не буду, вдруг там окажется такая годнота, что я осознаю что до этого я занимался неправильной хуйнёй, а белые люди всё делают совсем не так.
Производительность на смартфонах. Делаю сетевой шутер под андроид. И вот задумался. Есть объект игрока, который я могу разбить где-то на 7 разных компонентов. Это удобно для разработки и код в целом понятнее будет, НО, это породит много вызовов методов, породит больше вызовов GetComponent и тому подобное. Компоненты вида PlayerHealth (синхронизирует здоровье, принимает демадж), PlayerMovement (синхронизирует позицию, обрабатывает передвижение), PlayerVisuals (реагирует на события, создаёт эффекты, отображает модели), PlayerShooting, PlayerInput, PlayerAbilities и т.п.
Не приведёт ли это к проблемам в дальнейшем? Или стоит всё по-старинке захерачить в 2-3 компонентах?
>>451837 Во-первых, результат GetComponent всегда можно кэшировать. Во-вторых, когда ты разбиваешь код на компоненты, то ты делаешь свой код гибче и реюзабельнее. Юнити построена на таком подходе, т.к. если бы все компоненты физики/рендеринга и прочего были захуячены в один класс, то ты бы заебался настраивать каждый компонент так как тебе нужно. Ну и было бы дохуища кода, который ты бы не смог переиспользовать и дрочился бы ты с boiler-plate кодом как ебанутый.
Из плюсов могу привести пример. Например, у меня есть компоненты Projectile и Damageable. Projectile наносит урон компонентам Damageable, Damageable компоненты следят за тем, что если наносимый дамаг выжрал всё здоровье, то пора сдохнуть тому или иному объекту. Таким образом я смог переиспользовать один и тот же код для юнитов и для статичных объектов на сцене, которые могут быть сломаны, т.к. логика у них по сути одна и та же.
if (damageValue >= currentHealth) InvokeDeathEvent();
>>451837 >GetComponent ГейОбжект знает обо всех компонентах и хранит ссылки на них. Поэтому ГетКомпонент быстро отрабатывает. Но если будешь вызывать его по 10к раз за один тик, тогда могут быть проблемы.
>>451841 Ты ебанутая пизда, ты сначала напиши код, который реально будет тормозить и убивать твой CPU, а потом уже пиши, что-то про производительность. В большинстве случаев, игры задыхаются из-за того, что у тебя слишком много говна рисуется на экране.
Повторяю ещё раз, необразованный. Шаблоны нужны для того, чтобы не переписывать один и тот же код по 100 раз, т.к. ты с "архитектурой" обосрался. Они нужны просто для упрощения процесса разработки.
>>451847 > сначала напиши код, который реально будет тормозить и убивать Я как-то раз запустил while (true) в обычном viod, который висел в падейте и прихуел от того, что у меня даже первый кадр не прорисовывается. Потом понял что я долбоёб и перенёс это в корутину. мимо шёл
>>451855 > Зачем тебе делать дохуя компонентов, которые используются только с одним объектом? Архитектурно это проще, но таки, тот ананас ебанутый, 7 компонентов на одном объекте это наркомания.
>>451857 >7 компонентов на одном объекте это наркомания Ну, можно до 5 сократить.
Player - хранит имя, жизни, обрабатывает получение урона и смерть. И любая другая хрень будет здесь же. PlayerMovement - обрабатывает передвижение, коллизии, прыжок. PlayerVisuals - отображает скин игрок, оружие, анимацию, эффекты стрельбы/смерти/крови. PlayerShooting - занимается стрельбой из оружия. PlayerInput - принимает ввод и транслирует его на другие компоненты.
Это такой минимум, который не стоит сокращать, как мне кажется. Хотя PlayerInput можно перенести в Player. PlayerMovement тоже можно. Да вообще все эти компоненты можно туда перенести, но это будет пиздец.
>>451815 > есть хоть одно наследование А как сделать тогда разные виды оружия? Я вот делал абстрактный класс с парой общих для всех оружий методов и парой переопределяемых. И вроде все охуенео удобно было. > SendMessage() Оно же у всех компонентов свою хуйню вызывает, не проще ли геткомпонент сделать?
>>451860 > но это будет пиздец Именно. Если у тебя скрипт и швец и жнец и на дуде игрец — там начинается такой анальный цирк, шо я бля ебал того маму рот.
>>451860 Хуйню пишешь. Ей богу, пора начинать брать деньги за консультации. Character - хранит имя, жизни, обрабатывает получение урона и смерть. И любая другая хрень связанная с любыми персонажами игры (NPC, враги, игрок). обрабатывает передвижение, коллизии, прыжок. Player - принимает ввод и транслирует его на другие компоненты. отображает скин игрок, оружие, анимацию Для оружия - разные компоненты с логикой оружия на самом префабе оружия
>>451875 > Для оружия - разные компоненты с логикой оружия на самом префабе оружия И типа этим компонентам делать обработчик собвтия выстрел(когда игрок или аи контроллер решил стрельнуть)? А когда производится выстрел этот компонент оружия триггерит событие, которое обрабатывается компонентом который хранит патроны?
>>451861 >А как сделать тогда разные виды оружия? Разными компонентами
>Оно же у всех компонентов свою хуйню вызывает, не проще ли геткомпонент сделать? Суть в том, что ты не знаешь во время выполнения игры, какой компонент на оружии, например. Можно делать наследование или интерфейс. Но лучше использовать SendMessage. Почему это лучше? Потому что у тебя может быть не один компонент-обработчик сообщения. Например, компонент, который спавнит отстрелянные гильзы, или проигрывает какой-то эффект
>>451905 Зацени няшный код от корпораций. ARKit, хололензовский сдк, кинектовский и прочие штуки от больших ребят. Или тех-же юнитеков. Стилистики общей написания плагинов под юньку нет. Но есть понимание, что во-первых - нет перегруза с абстрактными классами. Полностью отсувуют реализации синглтонов и ебучих фабрик с фасадами. Зато есть контроллеры, которые обращаются к управляющему классу, и объекты с компонентами обращаются в эти контроллеры. Во-вторых любые реализации взаимодействия с уи-шными компонентами и прочим связанным с вызовом на конкретных го происходит через геткомпонент, а лучше - публичные unityevents. В-третьих никаких тегов, слоёв и сендмессаджей. Это вообще какое-то костыльное решение для быстрого прототипирования и дебага
>>451910 Ну например компонент на пуле должен отправлять сообщение объекту с которым он столкнулся. 1. Очевидно это проще сделать просто с SendMessage и все. Если на объекте есть компоненты получающие это сообщение, они сработают, если нет - ничего не будет. 2. Как ты это сделаешь без SendMessage? Очевидно, подписка на события тут в принципе не может быть сделана. Можно использовать явно GetComponent<Health>() со столкнувшимся объектом и например отнимать ХП. 3. А если у тебя несколько компонентов обрабатывающих это сообщение, то единственный вариант использовать интерфейс с одним методом и как-то foreach (var comp in obj.GetComponents<IDamageable>()) comp.DoDamage();
Очевидно, что первый способ самый простой и с ним все компоненты изолированы друг от друга без зависимостей. Это идеальный вариант.
>>451912 >Зацени няшный код от корпораций Ну лично из моего опыта, я пришел к выводу, что чем проще и чем меньше кода, тем лучше. SendMessage делает многие сложные вещи простыми с минимум кода.
>>451919 Этот паттерн не дает никаких преимуществ а только усложняет код и плохо сказывается на производительности. Вместо него можно просто делать поля статичным.
>>451919 Mrtk потихоньку их выпиливает, вводя неймспейсы и классы уже в движок. Вот эти все темы с XR.WSA и прочее. Да есть в паре мест синглтоны, но они являются лишь контроллерами для выполнения каких-то методов со сцены. Те в свою очередь пользуются пару-тройку больших классов для спейшал мпюаппинга, войска рекогишнк и прочего инпута. На самом деле все красиво, но в некоторых моментах перемудрили Здравствуйте, коллега. И вообще, что сейчас происходит с ветками на гитхабе посвященным теме, этим всем обновлениями юньки/винды/беткам/очков - пиздец полнейший. То, что юнитеки отдельные mrtp версии пихают - уже говорит о чем-то страшном
>>451914 Во-первых, https://docs.unity3d.com/ru/530/Manual/MessagingSystem.html Во-вторых, SendMessage - это удар по производительности, т.к. ты вызываешь метод по строке, а тут уже и так становится понятно, что под капотом крутится подобие рефлексии. А также передаёшь аргументы как object. Из-за чего триггеришь лишние упаковки для value-type. В-третьих, если ты себе инструменты для рефакторинга ломаешь, т.к. если ты поменяешь сигнатуру метода, то тебе надо будет руками пройти и все SendMessage поменять и проверить.
>>451919 Приведу пример, который у меня недавно на работе случился. Я сидел писал код, отвечающий за запекание текстур окружения на загрузочном экране. Код у меня был не привязан ни к чему. Из-за чего я один и тот же код спокойно крутил в редакторе и в рантайме. Внезапно пришла задача сверху, что нужно сделать отдельный прогресс-бар для запекания текстур. Поскольку в тот момент я был в отпуске, кто-то взял задачу на себя. Не вдаваясь в детали разрабатываемого модуля, он просто вхуячил посреди пайплайна запекания такие две строчки.
Код редактора был сломан нахуй. Люди, которые работали в редакторе не смогли продолжать работать, а тот чувак так и не понял, что плохого в синглтонах. Ну сломался редактор, ну и чо - ПОЧИНИШЬ ЖЕ)))) ты же его писал)))000
У меня скоро крыша поедет в попытках написать хорошую архитектуру. А если я напишу паршивую архитектуру, то мне не захочется продолжать. Замкнутый круг самообоссывания.
>>451952 Слушай сюда, n00b. Пиши так как хочешь/удобно. Как только упрёшься в ограничения архитектуры, достаёшь паттерны и думаешь как они тебе помогут разрулить ту или иную проблему. Ты по-любому по незнанке наломаешь дров, но ты и учишься, чтобы в будущем не ломать одни и те же дрова, а с каждым проектом становиться всё лучше и лучше. Только практика поможет тебе понять, что не так с кодом и как дальше с этим жить. Удачи.
Здарова, пацанва. Хочу реализовать следующее в своей игре: Есть враг, есть точка, к которой он идет. Точка должна переместиться, после того. как враг до неё дойдет. Точка переместиться должна рандомно, но при этом не попадая за стену. Как сделать?
https://www.youtube.com/watch?v=7kHNUdNHT-A Чувак говорит, что лучше сделать один апдейт на игру, и вызывать другие псевдо-апдейты(просто функции) из него. Еще про кеширование трансформы. Почему они всю эту хуйню до сих пор не оптимизировали, вот что интересно.
>>451974 Хватит форсить себя, полудурок ебаный. В юнитиблогах эту тему обсосали уже, нахуя видео записывать? Особенно, когда нет исходников движка и что-то кукарекаешь с умным видом.
Не оптимизировали потому что ты полудурок ебаный, который не шарит в программировании и не понимает как крутятся шестерёнки под капотом.
>>451974 Про трансформ ты жопой слушал что ли? А насчет вызова апдейт, старт и прочего говна посмотри на стек вызова этих функции, он идет из нативной среды ядра движка через прокси объекты с кучей проверок на каждый вызов + там скорее всего какие то уровни аспектов для логирования, синхронизации и еще какого нибудь служебного говна, которое пришлом девам в голову после прочтения 20 ПАТТЕРНОВ ПРОЕКТИРОВАНИЯ КОТОРЫЕ ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРОМИСТ. А еще, если бы ты уебок дошел до сборки проекта, то увидел бы настройки оптимизации и твой кусок говна из двух кубов, который ты называешь проектом, работал бы на 4 миллисекунды быстрее. Но все это неважно, просто ни на сколько не важно, и не имеет никакого значения, потому что вы уебки второй тред подрядят пережевываете говно друг друга вместо того чтобы сделать хоть одну ебучую игру для плеймаркета. Как же вы твари бесите меня, насрал бы в рот каждому кто еще спизданет про оптимизацию, архитектуру или ооп. Просто трясет нахуй.
>>452028 А это как? Можно ли без перебора 100000 точек до тех пор пока не найдется точка не за стеной? > Точка переместиться должна рандомно, но при этом не попадая за стену. Как сделать?
>>452052 В прошлом треде мелкобуквенный ананас кидал свой ассет, который в навмеше определял "за стеной" точка или нет. Или сам поищи (тред ещё не смыло), или дождись пока он вкатится.
>>452060 Спасибо, смотрел гайды на ютубе о MovieTexture, но никак не импортировалось видео. Попробую по оф.гайду. Чё-т хуй знает, почему сам не додумался его посмотреть, лол.
>>452052 Я анон, который вопрос задавал. У меня идея возникла следующая: Можно провреять рейкастом, есть ли стена между точкой и мобом и, если есть, то перемещать её перед стеной.
>>452153 определи рандом внутри нужной тебе зоны. и... Зачем спавнить спавнить что-то вне нее, чтоб потом подгонять как раз внутрь этой зоны? Это же идиотизм какой-то
>>452158 Ну прикол в том, что у меня очень много лвлов в игре будет и я хочу потом не запариваясь об этом, делать сами лвла. Ну, чтобы мне не пришлось ничего делать, кроме как ставить самих врагов, сундуки всякие, сам лвл.
>>452154 У меня прикол в том, что может запуститься несколько коррутин одинаковых. И собственно, флажок будет на все действовать же. Ну или я просто не понял, что ты имеешь ввиду. >>452157 Попробую, спс.
>>452153 В том посте на который ты отвечаешь есть ответ. Берешь навмешагента, ставишь ему целью случайную Дальше делаешь агент.haspath или что-то типа того. Если пути нет - выбираешь другую точку
>>452180 Зачем агентом? Плодите сущности, сударь. Если эти комнаты достаточно простой геометрии, то ничего не мешает вполне таки обрисовать границы чем-то вроде мешика по точкам углов помещения(меш и не нужен, нужны координаты точек в углах и все)
>>452182 > Зачем агентом? Плодите сущности, сударь. Прочитай что он спрашивал. Я могу тебе помочь: >>451973 > Есть враг, есть точка, к которой он идет.
Так что никакие сущности я не пложу, ему в любом.случае надо делать навмеш с агентами, либо свой велосипед(но если ыбы он свой велосипед хотел он бы это не спрашивал >>452195 Ну тогда тебе надо сделать какую-нибудь крутую(но можно и не очень, тупа двумерная тайл карта сойдет) абстракцию над твоей картой, чтобы там можно было запилить поиск пути(а стар например) и смотреть можно ли пройти от врага куда он хочет или нет. Хотя я не знаю что там у тебя за игра, может тебе рейкаста хватит.
Мне не нравится в каком направлении движется API юнити. Они слишком много перекладывают из натива в C#, где они занимаются всякими ебанутыми микро-оптимизациями, в худших традициях юнити-тредах. Например, отказываются от создания объектов. Создание объектов - это суть C#. Пытаться отказаться от этого и ебашить на структах - это как пытаться выебать C# в жопу без вазелина. Раньше у юнити было просто и чисто API. Сейчас я смотрю на Playable и на Job System и охуеваю: что это за говно блядь.
>>452230 >Сейчас я смотрю на Playable и на Job System и охуеваю Это считай плагины. Как и uNet, как и UI. Можешь своё запилить. Главное, чтобы они новую версию шарпа подрубили и нет фреймворка. Тогда я с удовольствием запилю какой-нибудь плагин.
>>452208 Короче, я видимо реально не умею вопросы задавать. >Точка переместиться должна рандомно, но при этом не попадая за стену. Как сделать? Вот вопрос)))
>>452307 > >Точка переместиться должна рандомно, но при этом не попадая за стену. Как сделать? Блять, ну я же об этом и писал)))))) Вот: >>452208 > Ну тогда тебе надо сделать какую-нибудь крутую(но можно и не очень, тупа двумерная тайл карта сойдет) абстракцию над твоей картой, чтобы там можно было запилить поиск пути(а стар например) и смотреть можно ли пройти от врага куда он хочет или нет. Хотя я не знаю что там у тебя за игра, может тебе рейкаста хватит.
Кароче такие варианты есть: 1. Рейкаст в рандомную сторону от врага. Смотришь на расстояние до столкновения и ебашишь рандомную точку между врагом и столкновением(догадаешься как сделать?) 2. Если у тебя тайловая карта, то простейший пилишь поиск пути. Из этого вытекает и получение всех точек до которых можно дойти, и определение того, есть ли путь до нужной тебе точки.
>>452310 >>452330 >1. Рейкаст в рандомную сторону от врага. Смотришь на расстояние до столкновения и ебашишь рандомную точку между врагом и столкновением(догадаешься как сделать?) Спасибо большое, это то, что мне было нужно.
>2. Если у тебя тайловая карта, то простейший пилишь поиск пути. Из этого вытекает и получение всех точек до которых можно дойти, и определение того, есть ли путь до нужной тебе точки. Это бы не подошло, т.к. у врага может появиться точка, например, за домом и она будет являться проходимой, но он туда идти не должен.
>>452351 > Это бы не подошло, т.к. у врага может появиться точка, например, за домом и она будет являться проходимой, но он туда идти не должен. Чтобы это исправить достаточно пометить точки непроходимые для врагов, которые при этом могут быть проходимыми для игрока. Но в твоем случае(чтобы не выходить из комнат) рейкаста более чем достаточно, можешь его спокойно использовать.
>Чтобы это исправить достаточно пометить точки непроходимые для врагов, которые при этом могут быть проходимыми для игрока. Дык, если они заагрятся на врага, им надо будет выйти из комнаты, чтобы преследовать его. Ну и поиск путей в таком случае тоже нужен, т.к. мили враги должны использовать его, чтобы обходить всякие столы, тумбочки и т.д.
https://www.youtube.com/watch?v=cupdlbOFNK4 Ха блядь! Я по одному только инпут филду на 2:48 сразу догадался, что эта игра сделана на юнити. Вот серьёзно: всё, что сделано с использованием стандартных ассетов, выглядит одинаково, и внутренние ограничения на стандартные ассеты - те же кнопки или инпутфилды - меняют дизайн игры узнаваемым образом. Я пока что умею споттить юнити безотказно по заставочке юнитовской и кнопкам с инпутфилдами. Какие ещё фичи движка выдают его с головой?
Ща будет ваще тупой вопрос, но как отключить луп анимации? Допустим, есть дверь, у нее есть состояние Idle, тут ее игрок активирует и она переходит в состояние Open, но вместо того, чтобы один раз открыться, она бесконечно ебашит туда-сюда.
Сап котики, сделал анимацию и движение влево-вправо героя в 2д проекте, короче как сделать чтобы анимация всегда возвращалась в Idle, когда мой герой останавливается? А то сейчас, пока я жму бег, идет цикл между idle и run и тип анимации зависит от того на каком моменте я перестану бежать.
А и ещё вопрос, мне вот в мануале написали следующее: >Alright let's implement jumping! First of all we will need to find out if player is currently standing on the ground or not. For some reason there is no Unity function for this just yet, so we will create our own IsGrounded function here: Там мануал по старой версии юнити. Вопрос, появилась ли сейчас такая функция, если да, то как называется и используется?
>>452388 Сам с этим долго ебался. Короче. Выделяешь стрелочку к анимации. В инспекторе настраиваешь переход. Там снизу такая синенькая область, ставишь её на минимум и галочку с "exit time" снимаешь.
>>452424 >критикуют кнопочки >значит, хотят замаскировать поведение! Надо бы дать совет, как это сделать! Не вся критика требует ответов. Знаешь, иногда можно просто смотреть на что-то и получать удовольствие от увиденного.
>>452433 Ты путаешь с таймлайном. Playable скорее больше подходит для процедурной анимации, без который в больших проектах достаточно тяжко. Animator - это монолитный кусок.
>>452391 Так я и использую >>452392 >галочку с "exit time" Это я делал. На пике выделена область, ты про неё? У какой стрелочки её менять, я уже всяко разно перепробовал, хуй знает, заскринь как правильно будет, если не сложно
>>452444 >>452443 А всё отбой, вроде взлетело, убрал вообще на ноль на стрелочке от run к idle Так я не понял про аниматор, че зашквар что ли? Работает же, мне сложных анимаций и не нужно в платформере
>>452445 Блять т.е. от idle к run. Но энивэй, иногда всё-равно зависает анимация на run, хуевый баг какой-то Модер, почисти мои посты короче, заспамил все к хуям
>>452447 Ну дык запили стори с самого начала. Образование есть? Когда программировать начал? Как вкатился? По вакансии или заметили? Как работа? Доставляет или рутина? Сам же знаешь, что рассказывать :)
>>452445 > Так я не понял про аниматор, че зашквар что ли? Работает же, мне сложных анимаций и не нужно в платформере Если у тебя там полторы анимации, то забей.
>>452461 Ну давай сначала определимся каким именно образом у тебя объект куда-то движется. Аниматором? Геймконтроллером? Силой риджидбади? Транслейтом?
Я создал инпутфилд в рандомных ебенях, инпутфилд является дитём другого УИ объекта, при нажатии включается, всё ок, но каретка не показывается. В паузе рисует, что каретка должна быть в пределах поля ввода, но ничего подобного нет. На стрелки воображаемая каретка двигается, все команды для работы с текстом работают. Выделение тоже не отображается.
Я вот запилил свой вариант поворота ног в сторону движения, но при движении вперёд творится какая-то неведомая хуйня, помогите понять, в чем я накосячил?
>>452486 Нахуй тебе rb, если velocity.magnitude хавается стандартным чарактерконтроллером? Но ты нахуевертил свой, так что теперь либо твой велосипед нужно разбирать, либо костылить. Выбирай.
>>452491 Это в процессе разработки осталось :) >>452492 Это самое первое, что я в жизни написал. Но спс, поправлю.
>>452479 Так а всё-таки, можете объяснить, почему у меня такая хрень происходит? Причем баг этот идет только в сторону, которой ноги поворачиваются. Ну т.е., если поставить (vector2.right, latetonow), то соответственно, при ходьбе вправо это будет.
>>452495 > Так а всё-таки, можете объяснить, почему у меня такая хрень происходит? Для этого надо разбираться во всех твоих велосипедах, вплоть до аниматора, который ты не показал. И, кстати, определения типа > творится какая-то неведомая хуйня > почему у меня такая хрень происходит? не сильно проясняют твою проблему. Заливай на гит, посмотрим. А так на гуще гадать — толку мало.
>>452497 >не сильно проясняют твою проблему. А, дык я приложил скриншот с инеспектором. Там Rotation. Стрелочками справа указано направление движения. Наверное надо было уточнить.
>>452502 Ладно, ты, судя по всему, парень новый, так что давай попробуем сначала. У тебя движения задаются чем? WASD'ом? Если да, то кто тебе мешается на этот самый WASD повесить поворот в нужную сторону?
В общем, создаю инпутфилд. При включении поля создаются из пула две кнопки для да и нет сбоку. Внезапно обнаружилось, что кнопочки-то будут грузиться ПОД любым УИ, а мне надо их грузить НАД любым УИ. Делаю кнопки дочерними к самому полотну, проверяю в паузе, чтобы кнопки были в самом низу, но нихуя. Что не так я делаю? Как вариант - унять амбиции и грузить кнопки не сбоку, а прямо над полем ввода.
>>452511 > Внезапно обнаружилось, что кнопочки-то будут грузиться ПОД любым УИ, а мне надо их грузить НАД любым УИ Рор, лэйаут зависит от позиции в иерархии под канвасом. Ничего там дочерним делать не надо.
>>452510 1. Плавность поворота. Сейчас он охуительно выглядит, реально. 2. Я вообще эту игру хочу под мобилку сделать и там джойстиком будет управление задаваться. Просто пока-что я на компе всё тестирую, чтобы проще было.
>>452514 > Плавность поворота Vector3 direction = (target.position - transform.position).normalized; Quaternion lookRotation = Quaternion.LookRotation (direction); transform.rotation = Quaternion.Slerp (transform.rotation, lookRotation, Time.deltaTime /тут коэфициент поворота*/); > там джойстиком будет управление задаваться В любом случае оно будет задаваться осями из Input. Берёз из осей знак минус, если он есть (https://docs.unity3d.com/ScriptReference/Mathf.Sign.html) и умножаешь его на v3.right и v3.up, туда и крутишь своего болванчика.
>>452519 > А как из Input взять их под поворот? Ну блин, я ж тебе скинул > Vector3 direction = (target.position - transform.position).normalized; > Quaternion lookRotation = Quaternion.LookRotation (direction); > transform.rotation = Quaternion.Slerp (transform.rotation, lookRotation, Time.deltaTime /тут коэфициент поворота*/); target.position откладываешь от своего позишина, учитывая оси и минусы.
>>452521 Хотя .normalized тут, наверное, и не надо. Это кусок из моей 3д-херни, где плавный поворот работает. Если зуб перестанет болеть - попробую в 2д попробовать.
Добрый вечер, вопрос для тех кто девелопит на айфоны.
Можно ли на яблочных девайсах поставить моё приложение не публикуя его в маркете и не имея ентрепрайз сертификата? Вариант с добавлением тестовых девайсов тоже не подходит.
Кейс такой - на мероприятие придут люди и им нужно показать апп, те у кого андроиды просто скачают и поставят его, как быть тем у кого аплы?
Если нормальных вариантов кроме айтюнс нет, то вопрос - как долго обычно публикуются приложения?
>>452516 > , Time.deltaTime /тут коэфициент поворота*/); Если фреймрейт скачет, то интерполяция будет дерганой. Лучше использовать захардкореное значение.
>>452525 судя по тому что я читал можно только на своем девайсе со своего девелопер аккаунта.
На разные девайсы при наличии ентерпрайз сертификата. Либо если добавить их в тестовый пул своей дев. группы, с ограничением 100 девайсов в год на группу.
Предлагать людям на мероприятии джейлбрейкаться тоже не вариант.
Т.е. безнадега, вся надежда что я чего-то не так понял.
>>452512 Я нашёл, в чём дело. Я создавал копии объекта в пуле, но не прописывал им родителя в виде канваса. Из-за этого кнопки не появлялись на экране, собственно. УИ - это ад. У меня накожено меню и полторы панельки внутриигровые, и я внутренне содрагаюсь, сколько взаимодействий нужно будет тестировать, когда увеличится количество всего этого говна. И ведь, сука, нельзя просто чисто и раздельно всё сделать, всюду столько исключений из правил кроется, что я просто хуй знает.
>>452453 >>452458 >>452460 Сначала пришел в инди компанию, где начальник играет в геймдев разработку. Имел за плечами среднего качества вышку по ит-направлению и опыт уровня /gd/ около двух лет. В целом было весело, делал прототипы всякие. Но через пол года мне предложили уйти (я доебал писателя и геймдиза, пытаясь донести до них, как работают текстовые квесты). Через две недели нашел другую вакансию, связанную с vr/ar разработкой. Год работаю там, делаем не игры, а btb презенташки всякие на юнити, но какая разница. Иногда интересные кейсы попадаются, иногда рутина, иногда отбитые заказчики. По моему опыту считаю, что вкатиться в юнити макакинг просто, нужно лишь иметь средние знания шарпов и пару проектов, чтобы показать (не обязательно даже допилиных).
>>452571 Заклинания, заговоры, настойки приворота, блять, что угодно! Не хочу и не буду чужие игры делать. С какого хуя я должен работать над чужими играми если своих ИДЕЙ жопой жуй.
Юнитибратья, памахите: Прикрутил unity IAP, сделал кнопку, в плеере запускается фейкстор, покупается, все ок. Делаю билд, залил в стор, поставил на тел - запускую - нихуя, описания товара нет, цены нет, при нажатии выпадает нульпойнтер на хер знает что, хер знает где. Второй день пишу логгер чтобы понять хотя бы где ошибка. Кто имеет успешный опыт прикручивания этого говна - поделитесь, а? Делал все по туториалам юнити.
Короче пилю марио по мануалу из шапки треда, и видимо там какие-то зашкварные скрипты или че, потому что игра получается с багами. Ящик может сменить координату, герой может подпрыгнуть два раза, хотя я жму только один раз, может сильно высоко подпрыгнуть, хотя я ему такой хуйни не задавал. Вот архив с проектом из мануала, там все те же баги есть, а ещё $20 просят за свои мануалы задроченные: http://dropmefiles.com/iQobg Может найдётся умелец, который перепилит проект, убрав все баги и прочий щит. Что бы на будущее для нубов хороший пример был. Кто если не мы будем подымать с колен индигей девелопинг?
>>452599 > собственное инди "Хуяк-хуяк и в продакшен"? Для собственной игры нужен художник, моделлер, дизайнер, композитор, да дохера кто нужен, вплоть до маркетолога. А это всё упирается в деньги. Можно, конечно, быть человеком-оркестром, но тогда игру будешь делать 10 лет и все эти 10 лет питаться дошиком и запивать водой из крана.
>>452600 > по мануалу из шапки треда Там мануалы местами кривые, потому как писались ещё при царе Горохе и на новых версиях юньки могут вести себя странно. Я по тем же мануалам делал тетрис, так пришлось допиливать.
>>452603 Тебе может ещё презентацию запилить надо было? Давайте просто разберемся, чего там подправить надо, или где нормальный мануал взять, багов дохуя. Не бойтесь архив качать, там нет вишмастеров
>>452611 Ну теперь нашёлся бы профи, который смог бы запилить марио без багов. Сейчас вот такой вот мануал нарыл, пойду смотреть: https://www.youtube.com/watch?v=CAPVBTKk3Ww Может после просмотра сам что-то вкурю. Вообще накидайте пожалуйста годных ссылок или лучше готовых проектов с платформерами и прочим 2d щитом, змейки, тетрисы, квесты, кликеры и прочее, у кого что есть, если не жалко, можно на почту - [email protected] Если сильно годные 2d проекты жалко отдавать за просто так, пишите свои предложения так же на почту. А вообще, я за то чтобы мы сплотились все, и помогали другу другу, чтобы было больше действительно годных игр, а не той недоделанной параши, которую нынче пачками выдают школьники и прочие лентяи. Нам нужен хороший мануал по вот этим всем техническим основам, на которые по сути не так много времени и уходит, главное чтобы без багов были. Разъебаться с ними и уже отдаться непосредственно геймдизайну
>>452621 > ты напишешь? Может и напишу тетрис от скуки за вечер написал в своё время, но пока сижу с дикой температурой и соображаю хуже обычного. Даже свой проект Тауэр дефенс не открывал уже несколько дней.
>>452621 Физон для аркадки написать - неделю, даже нуб справится. Возьми офишиал гайдпро картошку с канала юнити. Графон, локализация, ЮИ, левелдизайн - вот где пердолинг, и никто тебе никаких гайдов не напилит.
>>452618 Спасибо. Вот это вроде годнота: https://www.youtube.com/watch?v=wGI2e3Dzk_w&index=1&list=PLX2vGYjWbI0SUWwVPCERK88Qw8hpjEGd8 Просто блять, надо шапку треда тогда перепилить, хули там делают кривые мануалы? Надо ей заняться >>452622 Ок бро, поправляйся там. >>452623 Так я о чём и толкую >техническим основам, на которые по сути не так много времени и уходит >Разъебаться с ними и уже отдаться непосредственно геймдизайну Я рылся в мануале у них на сайте, но чё-то не наткнулся, о чем ты толкуешь, кинь ссылку?
>>452625 Картошка старая как говно, мож уже и по новее есть чего, зря я ее вспомнил. Проблема всех юнити-мануалов по аркадкам - правильно высчитать стоит игрок или летит в воздухе. Все остальное просто решается физикой ригибоди2д.
>>452602 Неужели за годы макакинга не оброс связями и знакомствами? Может быть в твоем окружении есть люди кто хотел бы запилить собственную игорь? На почве этого можно было бы слиться в стихийном потоке коллаборации.
>>452555 рассказывай про зарплаты на всех этапах, что на собеседованиях спрашивали. Интересно еще про первые дни, вот пришел ты, что тебе дали из задач, насколько торопили по времени, помогали ли?
Во всех компаниях своя специфика, но наверняка есть база, которую нужно знать обязательно, что это? Документация и уроки с сайта юнити, или есть дефолтные книги, или еще что?
Вот запилил я морской бой и простую ТД, с графеном из бесплатного ассетстора и примитивов, все работает, но код — говно. (Делал часть по туториалам, но все равно потом заново переписал по-своему). Стоит подучить документацию и идти на джуна?
>>452599 Не достаточно финансов, чтобы лезть в залупу и тратить деньги на собственный проект. В свободное время пилю всякое, но дропнуть работу и пытаться мутить что-то своё стрёмно. >>452645 Зарплата от 50(на первой работе) до 100(сейчас). На первой работе просили натаскать шутан из ассетов и логику для пары пушек написать, на второй писал в качестве тестового расширение для редактора. Код везде и у всех говно, приходит с опытом.
>>452664 >>452662 >На первой работе просили натаскать шутан из ассетов и логику для пары пушек написать, на второй писал в качестве тестового расширение для редактора. это непосредственно на тех. интервью, или заранее в вакансии было задание?
>>452695 и в альфу и в бетту пробовал, однохуйственно. адбы пока нету, не прикручено. Выбрасывает Пурчез фейлюр, нульпойнтер эксцепшион, вроде как из недр IAPButton
>>452700 там обычный код из примеров. кнопка и листнер а ты заводил торговлю через юнити иап? все работало без оверпердолинга? вернусь с командировки, попробую логирование нормальное сделать, вернусь в тредж.
Допустим, я хочу сделать какие-то движение или анимацию с достаточно большой продолжительностью, чтобы была важна возможность ставить паузу, например, во время вызова меню. Как это взрослые дядьки реализуют?
>>452706 Ну бля, типичный юнити тред. Я хочу останавливать текущую корутину (или анимацию, я хз) и возобновлять её по требованию с того места, где её остановили. Мне что, запускать корутину, проверять, достигнут ли буль паузы, если да, то останавливать её и брать оставшееся количество кадров, сохранять до возобновления, и при возобновлении начинать корутину заново с остатком кадров?
>>452709 > И что этот таймскейл сделает? А что обычная пауза делает? Останавливает всё.
> The scale at which the time is passing. This can be used for slow motion effects. > When timeScale is 1.0 the time is passing as fast as realtime. When timeScale is 0.5 the time is passing 2x slower than realtime. > When timeScale is set to zero the game is basically paused if all your functions are frame rate independent.
>>452712 Ты не заставишь меня не писать велосипед! Но серьёзно, это слишком просто. Что значит время здесь? Вот есть апдейт. Каждый фрейм он вызывается у всех, разница между фреймами в секундах это дельтатайм. Вот есть у меня инпут с клавиатуры. Я поставил таймскейл на 0. Когда может произойти апдейт, который поймает инпут?
>>452713 Ты совсем безруки и не можешь посмотреть документацию? > Except for realtimeSinceStartup, timeScale affects all the time and delta time measuring variables of the Time class. > FixedUpdate functions will not be called when timeScale is set to zero.
>>452714 Оно всё так написано, что вопросов остаётся больше, чем ответов. Ладно, фиксед апдейт не вызывается. Все анимации и движения в фиксед апдейт закидывать надо, чтобы таймскейл = 0 работал безупречно? И все дельтатаймы тогда всегда должны быть как deltatime * (выражение) использоваться? А инпутфилды? Они же с самыми разными апдейтами внутри сидят. Из-за этого таймскейла они не отвалятся?
>>452555 VR/AR. b2b презенташки. Да вы сударь, выходит, что мой коллега. Сколько лет опыта в этой теме? Есть устройства мало характерные для сферы, с которыми общаешься?
У меня есть камера, которая видит и УИ, и 3д объекты. Проблема в том, что камера видит УИ там, где его нет, т.е. я могу нажать по пустому месту и так нажать на кнопку - и при этом могу нажимать по кнопке и по-нормальному. Позиция нажатия не случайная, причём при повороте камеры/изменении высоты позиция для неправильного нажатия меняется, если камеру повернуть под 50 градусов, то нажать в неположенном месте становится нельзя. На какой высоте расположен УИ и как поменять эту высоту?
>>452863 > На какой высоте расположен УИ и как поменять эту высоту? Ты вообще читал как UI работает? вот тебе страница из документации https://docs.unity3d.com/Manual/UISystem.html На скрине в самом верху Rect Transform видишь? Как думаешь, что это? И да, там ниже есть ссылочка на туториал, ознакомься.
>>452865 От изменения высоты камеры ничего не меняется. Когда камера смотрит прямо вниз, то неправильная область нажатия для кнопки на середине экрана где-то, когда поворот под 50 градусов, то область съезжает за пределы экрана.
>>452868 >The UI system allows you to create user interfaces fast and intuitively. This is an introduction to the major features of Unity’s UI system. Ну охуеть теперь я всё знаю.
У меня есть конкретная проблема. Ты мне предлагаешь "ну иди бля книжки почитай, обучайся". Ты понимаешь, что это так не работает?
>>452869 > У меня есть конкретная проблема Которую ты объясняешь примерно как "Доктор, у меня живот болит, что со мной?" Ты понимаешь что у твоей хуйни может быть дохера причин? Откуда я знаю что ты там нахуевертил? Откуда я знаю хреначил ли ты UI раньше и работало ли оно, а теперь не работает? Заскринил бы хотя бы сцену, иерархию. Я хуею, не могут ничего толком объяснить, а потом удивляются почему им не говорят "плюнь через плечо и всё заработает".
>>452872 > перестал видеть неправильную область для кнопки Мне интересно как у тебя вообще вылезли "неправильные области", если UI проецируется с канваса прямо на экран. Ты в следующий раз кидай скрины, это ж не сложно, а понимание проблемы увеличивает в разы.
>>452873 Говорю же, от высоты и наклона камеры видимость области зависела. Очевидно же, что дело в том, что УИ имеет какую-то высоту в "реальном мире". Похоже, эта высота где-то в районе 800-1000 по z Олсо, по скринам вообще бы нихуя не было понятно всё равно. Ну, допустим, один скрин, где мышка на кнопке и кнопка подсвечивается, другой, где мышка не на кнопке, и кнопка серая, и третий, где мышка в определённой области, но кнопка подсвечивается. Что ты из этого решишь? Что я, долбоёб, залепил громадную кнопку с коллайдерами, и все части этой кнопки без коллайдера игнорирую?
>>452874 > УИ имеет какую-то высоту в "реальном мире" Нет, она имеет только привязку к канвасу. > высота где-то в районе 800-1000 по z Высота это Y, а не Z. > по скринам вообще бы нихуя не было понятно Всё стало бы охуенно понятно. Может ты вообще кнопку из-под канваса вытащил или ивэнтсистем удалил из "ненадобности", а может у тебя там и вовсе всё кромешный мрак.
>>452875 >Высота это Y, а не Z. Ну, глубина тогда. >Нет, она имеет только привязку к канвасу. https://gamedev.stackexchange.com/questions/101649/unity-ui-vanishes-when-the-camera-z-exceeds-1000 We are developing 3D racing game. After the player's position in Z axis reaches 1000, our Canvas UI is hidden and reset. If I unparent it from Character controller, it still gets auto reset but not hidden. If I drag player back to < 1000, it again shows my UI. т.е. у них камера доходила до места, где УИ "хранится", и после него камера уже видеть не могла УИ. >Может ты вообще кнопку из-под канваса вытащил Кнопка работает, весь функционал правильный, но у неё есть дополнительная неправильная область нажатия. С чего бы вдруг ты решил, что я удалил себе ивентсистем?
>>452876 > где УИ "хранится" Это называется канвас, да. Вообще скачай книгу из шапки, там отдельная глава под UI, там теории ровно 10 страниц (со 138-ой страницы), и то страницы со старым ГУЕМ из 4-ой версии можно пропустить.
>>452854 Ага. На выставках, экспозициях, в музейчиках. оно и есть. И почти все это на юньке и чсх делается(блоагдаря приемлимой 3д-шке и тому, что производители делеза быстро пишут под него сдк-шки)
А почему Unity не находит обновления автоматически? Не то что-бы очень надо, но стоит версия 2017.1, и через меню Help-Check For Update пишет у вас последняя версия. А на сайте уже 2017.2. Абидно как-то...
>>452718 Пытаюсь сделать машину, но она чуть что переворачивается. Добавил к ней геймобжект с ригид боди с большой массой, типа как центр массы, и все равно переворачивается. Что я делаю не так?
>>452622 Ну что ты, бэтман? Напишешь? >>452637 >правильно высчитать стоит игрок или летит в воздухе. Все остальное просто решается физикой ригибоди2д. Ну способов это сделать несколько, насколько я понимаю, потому что вот мои способы работают с багами. Что за картошка то блять? Кинь ссылки на мануалы, пожалуйста
>>453014 > Ну что ты, бэтман? Напишешь? Лол, а ведь я даже набросал локация с трубами и кустиками, хуйнул персонажа, написал контроллер, а потом удалил всё к хуям, потому что подумал что оно нахуй никому не нужно.
Есть нормальные ПОДРОБНЫЕ книги для юнити? Где бы объяснялся подробно процесс создания полноценный игры? Скачал пачку книг и видео туторов из разряда делаем фпс шутер, делаем ртс, делаем рпг, делаем настолку и т.п.. Но у всех тупо начинается с того что дают ссылку где скачать уже готовый ассет или можно сказать сделанный на 99% проект и потом по ходу книги начинают размышлять о дизайне и прочей ерунде. Или разбирают 1%-2% кода из проекта. А что-нибудь максимально подробное есть от начала и до конца без использования стартер китов и сделанных уже проектов есть?
>>453237 Устроиться к ИП Андрей Иванович очень даже просто, если ты разбираешься в юнити. Там поработаешь год и можно будет идти в более серьёзную конторку.
>>453238 >Устроиться к ИП Андрей Иванович очень даже просто, если ты разбираешься в юнити. ИП Андрей Иванов хочет чтобы я делал всю работу по 18 часов в сутки за 15к рублей в месяц.
У меня есть голый ректтрансформ без изображения, в котором я создаю дитя с изображением.
NullReferenceException: Object reference not set to an instance of an object UnityEngine.UI.MaskUtilities.GetStencilDepth (UnityEngine.Transform transform, UnityEngine.Transform stopAfter) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/MaskUtilities.cs:73)
Я хотел спросить, почему это говно выдаёт ошибку, но потом добавил в ректтрансформ изображение (даже прозрачное), и внезапно ошибку перестало давать. Ну надо же! И вот где это требование написано? https://docs.unity3d.com/Manual/script-Mask.html Здесь точно ничего подобного нет, самое близкое >using say a Panel object (menu: GameObject > Create UI > Panel) as a “frame” но тут не упоминается, что изображение обязательно. Нахуя так жить, котаны?
>>453337 >>453340 И ещё одно. Оказывается, если у родителя изображение прозрачное, то для маски ФСЬО будет считаться как будто за пределами маски. Какое же веселье-то.
Анон, нид халп. Появилась возможность вкатиться в геймдев. Предложили пройти тестовое задание. Сделать надо на юнити. Подскажи, анон, реально ли такое запилить при полном отсутствии опыта? В какую сторону гуглить? На задание дали 4 дня. Пикрил.
По заданию: перед нами поле 10 на 10 ячеек. На поле расставлены блоки (непроходимые) - сделать авто генерацию уровня, но обязательно обеспечить хотябы один вариант к выходу. На карте есть вражеские объекты 1 и 2 с секторами видимости - они перемещаются по карте (в базе со скоростью игрока +- Random для увеличении скорости врага и усложнения. На карте есть точка Н и ВЫХОД . В точке Н появляется наш герой (управление - клавиатура и мышка) Наша цель не попасть в зоны видимости (секторы) объектов 1 и 2 и добраться до выхода. При попадании на сектор обзора врага - враг стремится к нашему игроку, при коллизии с нашим игроком - конец игры. Перед основной сценой используйте меню начала игры и завершение уровня.
>>453418 > Появилась возможность вкатиться в геймдев > при полном отсутствии опыта Мде. А вообще — реально вполне. Покури вот этот гайд по диагонали. Там много того, что тебе не нужно, но и до жопы того, что нужно. https://unity3d.com/ru/learn/tutorials/projects/2d-roguelike-tutorial И да, враги тоже рандомно ставятся на свободные клетки или их позиция задана изначально?
>>453421 Да, вообще — полный ноль. Был опыт только написания простых скриптов bat/cmd. Но я в принципе не против попробовать.
>>453422 > враги тоже рандомно ставятся на свободные клетки или их позиция задана изначально То, что будет проще. Для начала, я так понимаю, лучше сделать уровень и врагов статичными, тупо один уровень игры. А потом уже "улучшать", если время останется.
>до жопы того, что нужно Как я понимаю, мне нужно следующее:
1. Перемещение игрока. 2. Коллизии со стенами. 3. Коллизии с врагами. 4. ИИ врагов (движение по уровню, определение коллизий). 5. "Зрение" NPC (приближение к игроку в радиусе действия, лимитированный обзор) - пока что самое непонятное из этого списка. 6. Главное меню и завершение уровня.
>>453428 > Перемещение игрока Несколько строчек. > Коллизии со стенами Ещё проще. > Коллизии с врагами Так же. > ИИ врагов Херня. > "Зрение" NPC В одном скрипте с ИИ. > Главное меню и завершение уровня Это вообще смешно.
И да, двигаться тебе как надо? Как в шахматах, то есть одна клетка — одна позиция?
>>453428 > Да, вообще — полный ноль Это куда нынче берут с полным отсутствием опыта и сколько обещают платить? Я такое тестовое задания за вечерок бы написал.
>>453429 > В одном скрипте с ИИ. Мне гораздо проще было бы найти уже готовый проект, похожий на задание, в котором я бы мог просто потыкать в код/скрипты и отредактировать то, что нужно. Сейчас пытаюсь пройти https://unity3d.com/ru/learn/tutorials/projects/2d-ufo-tutorial, чтобы появился хоть какой-то опыт работы с движком и создать часть того, что нужно по заданию.
> И да, двигаться тебе как надо? Как в шахматах, то есть одна клетка — одна позиция? >> На карте есть вражеские объекты 1 и 2 с секторами видимости - они перемещаются по карте (в базе со скоростью игрока +- Random для увеличении скорости врага и усложнения. Я так понимаю, всё должно происходить реалтайм, перемещение не "ступенчатое", а плавное.
>>453452 > завтра А ладно. Мобы медленные, но это чтоб было видно что они преследуют игрока. Можно ускорить. Прикрутить генерацию уровня и готово твоё задание. Ну и модельки какие-нибудь хуйнуть, лол, а то шарики бегают за капсулой среди кубиков.
>>453418 забей на вакансию. Ты если и сделаешь это за 4 дня, то в первый же день или на интервью все зафейлишь. Они ждут человека не с 4-х дневным опытом.
Юнити-рабы пытаются встроиться в систему юнити-маркетинга. Мутятся ассеты, онлайн-курсы, семинары, конференции, создаются рабочие места. А игр как не было, так нет. Так зачем нужен ваш Юнити?
>>453511 Ничего личного, анончик. Ассеты крутятся - лавеха мутиться. Но пару лет, а то и месяцев такой работы, и тебя начнёт мутить тебя самого. Не лучше ли работать водителем трамвая, а по вечерам играть в старые добрые игры 70-ых-80-ых?
>>453225 сделал забавную прыгающую жопу на этом блендинге кривых. импульс жопы, кстати, высчитывается из движения ног. контролер двигается физоном. надо ещё чего нибудь ебануть.
>>453230 но я устроился на такую работу на которой можно почти нихуя не делать и хочу делать игры. а потом в один прекрасный момент я прихожу в себя сваривая раму очередного велосипеда.
>>453490 чет дохуя. у него небось другие качества были.
>>453521 я и делал. делал контролер для сетевого дрючева, обнаружил что юнити не обновляет велосити у обычного чарактер-контролера если игра свернута. репу почесал, решил попробовать другие имплементации контролера. сделал контролер через физон. пока делал контролер задумался что "а клево, тут же и правда велосити есть". на тестовом контролере ебанул чтобы шарик наклонялся в сторону куда велосити чтобы проще было дебажить. а потом "а хули бы не приделать ноги", сделал 1D интерполяцию у кривых, персонаж стал забавно семенить шариками по земле. потом задумался что что-то хуево что стрейфится не может, сделал хуевую 2D интерполяцию. потом "что-то говно какое-то, нука попробую интерполировать в полярной системе кординат", получилось хуево. копнул глубже, сделал хуйню эту, стало клево. потом накидал быстренько самописную 1D пружину, инверсивную кинематику, значения кривых стал хватать чтобы жопа качалась. получилась прыгающая жопа. и я чето довольный стал. теперь уже думаю что а не забить бы на воровство анимаций, сам то я их все равно не хочу делать. может процедурными их поделать.
>>453523 лол у этой хуйни же сорцов дай боже строк на 150
>>453523 Держи, чо. Шарики уже в стены не залезают, но оно всё равно сырое. Хотя тебе даже на пользу пойдёт, пока допилишь — что-то поймёшь. К тому же это только скрипты, придётся по ним ещё и понять что там на объектах висит, тоже полезно будет. Я бы ещё кое-какие магические числа вынес в переменные, но похуй, сам сделаешь если надо. И да, код не просто так в скринах. Будешь ручками перебивать — больше запомнишь.
Перспективный пробивной парень >>453523 нихуя не делая устраивается в престижную фирму за счет полоумного раболепного пидорана >>453533 вытирающего за него обосраный унитаз. Как же жизненно.
>>453779 Полный ноль на этих двух скриптах никуда не уедет, а уже тем более обосрётся на собеседовании на первом же вопросе по коду. Так что один хуй придётся учить.
>>453789 Завидовать чему, лол? 60-ти строчкам ебли с трансформом без какого-либо другого сурса? Да ты сам недалеко ушёл от того нулёвого, раз думаешь что там какие-то тайны вековые написаны.
>>453789 65 строчек. Это, конечно, работа, и ещё какая работа, но люди и большее за бесплатно делали для других. If all, это то, к чему общество должно стремиться. Если все всем всё за бесплатно делать будут, это уже утопия будет. Хорошее в людях надо поощрять, а не гнобить.
У меня где-то была ссылка на гайд, но я её проебал. Мне нужно взять спрайт и заменить пограничные пиксели на другой цвет. Сделать границу, то бишь. И ещё поменять размер спрайта, растянуть его. Где смотреть это?
>>453900 Ну, давай разберём по частям написанное. Тебе нужно сменить "пограничные" пиксели. Если я всё правильно понимаю, ты хочешь ОБВОДОЧКУ? Тогда тут всё просто, берёшь и дрочишь вертикальные и горизонтальные линии пикселей, опрашивая: ЕСЛИ У ЭТОГО ПИКСЕЛЯ АЛЬФА РАВНА 1, А У СЛЕДУЮЩЕГО РАВНА 0, ТО СЛЕДУЮЩЕМУ ЕБАШИМ ЦВЕТ. Гугли в сторону: texture.GetPixel, texture.SetPixel В идеале, конечно же дёрнуть анус все пиксели в какой-нибудь буффер, при помощи texture.GetPixels, чтобы не проебать тонну времени на обоссаную маршализацию, но это совсем другая история.
Ну, а растянуть можешь через поле Scale у компонента Transform.
>>453808 >>453806 >>453791 Продолжайте верещать, пидораны, чем громче верещите тем скорее поверят что вам не рвет жопы от эксплуатирующих чмырей успешных Ерох.
>>453932 >Гугли в сторону: texture.GetPixel, texture.SetPixel Спасибо, вроде, оно. >Ну, а растянуть можешь через поле Scale у компонента Transform. Ну, это как бы очевидное решение, но я про сами спрайты спрашивал. Но если подумать, оно мне и не нужно, проще будет создавать новый спрайт поверх старого с нужной границей.
Ровный пацан уже прошел собеседование и получил работу в престижной компании за счет пидорах >>454024 а они всё продолжают верещать как им небамбит. Подшивайтесь, пидорахи, когда пацану дадут задачу вам же её выполнять.
>>453932 >>454076 Попробовал делать границу. Texture2D tex = new Texture2D(texW, texH); Color[] pixels = new Color[texW texH];
for (int i = 0; i < pixels.Length; i++) { pixels = new Color(); }
for (int i = 0; i < texW borderThickness; i++) { pixels = borderColor; pixels[pixels.Length - 1 - i] = borderColor; } for (int i = borderThickness; i < texH - borderThickness; i++) { for (int j = 0; j < borderThickness; j++) { pixels[(i texW) + j] = borderColor; pixels[texW - 1 + (i texW) - j] = borderColor; } } tex.SetPixels(pixels);
return Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
Но эта херь рандомным образом обрывает цикл так, что половина пикселей оказывается незакрашенными, причём случайная половина, может цикл не начаться, а может наоборот закончиться раньше, чем надо. Проблема на моей стороне?
Похоже на то, что это как-то от нагрузки системы зависит. Поставил count++ в циклы, так все картинки полностью серые становятся, хотя count получается правильный.
ЧЯДНТ? Отключаю проверку столкновений у объектов одного слоя, и все равно когда собирается толпа, физон резко увеличивает количество вызовов Physics2D.Simulate. Чё ты там симулируешь, сука?
Всем привет, ньюфаг в юньке, немного шарю в обычном дотнете.
Поясните, в юньке можно использовать System.Threading чтобы отпараллелить какую-нибудь жирную задачу в отдельный поток или оно не заработает/не будет собираться/отвалится на каких то платформах? Или в юнити только корутины можно для такой хуйни использовать? Меня просто парит что штуки в корутине будут в основном потоке и это может вызвать какие-нибудь пролаги анимации или другие неприятные глитчи...
>>454125 А вот эту хуйню нельзя в юнити шейдером делать, кстати? Ведь шевеление пикселей такое, как я понял, по сути на CPU идет, по идее видюхи с шатанием текстур должны лучше справляться, не? Или там начинается дрочево с тем, что нужно знать цвет соседнего пикселя и гробгробкладбищепидор?
>>454217 У меня есть один спрайт из текстуры, но вместо того, чтобы теребить старый спрайт, я создаю новый прозрачный спрайт поверх старого с нужной закрашенной областью. Я так думаю, шейдеры таким же образом устроены, только хитрее.
>>454218 У шейдеров прикол в том, что видюхи умеют ахуенно распараллеливать работу с пикселями. То что ты в цикле делаешь, оно делается с каждым пикселем по очереди, а шейдер - в идеале - делает всю работу с каждым пикселем одновременно. Минус в том, что по дефолту в шейдере у тебя есть данные только про текущий пиксель, не соседние (однако можно как параметр дать дополнительную текстуру и исходя из данных в ней трансформировать текущую). Но я в юньке шейдеры никогда не писал, так шо скорее теоретизирую.
>>454221 Звучит интересно, но мне лично не очень полезно. Я хочу вообще вместо границ связанные с фракциями изображения использовать, скажем, для одной крылья, для другой чешуя и т.п. Надо будет потом посерьёзнее глянуть на шейдеры, с первого взгляда на колдовство лютое похоже.
Продолжаю пердолинг с Unity IAP. Примеры с кнопками не сработали, написал коротенький скрипт покупки товара, подрубил adb к блюстакам: Есть плюс - инициализируется вроде ок, высасывает названия и цены товаров с гуглплея. Но при нажатии кнопки купить - в логи вылазит пикрелейтед. Какого хера? На форуме юньки предлагают реинстолить ИАП(сделал 10 раз уже по-всякому - сторого похуй.) Хелп ме плиз!
>>453170 >объяснялся подробно процесс создания полноценный игры Объясняю. Просто и без задней мысли создаешь сцену, ставишь на ней геймобжекты, пишешь скрипты. Дополнительные сцены делаешь по мере надобности. Моделишь модели, рисуешь/пиздишь текстуры, настраиваешь материалы. Делаешь озвучку.
>>454294 Локализация, микротранзакции и режим для нескольких игроков непосредственно в игру не входят, тащемта, если речь не про сетевую игру изначально.
>>454294 >заново Кстати про "заново". Если тебе надо перепердоливать готовую функциональность для добавления чего-то нового, то ты проебался на уровне дизайна. Пример: у меня есть набор скриптов, которые симулируют орбитальную механику. Есть другой набор скриптов, который рисует что-то вроде карты, расставляя на сцене схематические изображения планет, кораблей и всего такого. Есть третий набор скриптов, который ресует "реальный мир", где кораблик вращается вокруг огромной планеты. Так вот, для добавления функциональности "кораблик может сесть на планету" мне понадобится модифицировать только последний набор скриптов, добавляя в первые два только косметические изменения. Я бы назвал "набор скриптов" сценой, но вообще это одна сцена, на которой в разных слоях работает все что нужно. Для добавления аэродинамики в атмосфере мне понадобится только дописать скрипты, которые считают силы для аэродинамики. Так же для всего остального. Если у тебя это не так - ты пишешь хуйню, иди читай книги по ООП. inb4: Ряяя программирование нинужно ddp лудше ко-ко-ко пок.
>>454300 > Если тебе надо перепердоливать готовую функциональность для добавления чего-то нового, то ты проебался на уровне дизайна Скорее "на уровне архитектуры", но так-то да, всё верно. При грамотном подходе на игру можно налепить хоть небо, хоть Аллаха.
Сап, гдэч. Есть одно приложение и есть MSSQL бд. Все бы ничего, но при вызове SQL StoredProc, юнити начинает бешенно обмазываться GarbageCollector. Доходит до абсурда - 10 персонажей, исполняющие каждые пол секунды StoredProc, жрут ресурсов больше чем Camera. Что я делаю не так? Чому IDbCommand.ExecuteReader() забрызгивает меня мусором? Как сделать, чтобы правильно?
if (dbcon == null) dbcon = new SqlConnection(connectionString); if (dbcon.State != ConnectionState.Open) dbcon.Open();
>>454368 >Они наконец пересмотрели свою убогую реализацию системы компонентов Разве? По-моему они просто добавили новый фреймворк для написания "высокопроизводительного кода". Раньше для этого приходилось самому писать свои решения. А сам юнити апи остаётся прежним, что немного печалит.
Сап, анчоусы, нужна ваша помощь. В настройках билда есть галочка Force Single Instance - она нормально работает, если билд уже нормально запущен, но если по exe-шнику клацать ентером как ебанутый, то все равно успевает открыться несколько окон - как это фиксить?
>>454357 В целом да. Повторяют примерно что было в bitsquid. >>454381 Они добавляют поверх него более-менее нормальную ECS. И они не могут выкинуть старые решения, сломает существующий код.
>>454379 >entity component system Прочитал на вики что это такое, не понял разницу с тем, что уже есть. >>454417 Аноны, когда пользователь разъебывает свою пеку кувалдой, моя игра не работает. Как фиксить?
Поясните пожалуйста, как в играх управляются с объектами Игрока и камеры? Если убрать возможно сохранятся и загружаться, то достаточно создать их в самой первой сцене, и поставить флаг "не уничтожать", так? А если я загружаю игру, то как мне поставить на сцену игрока и камеру? Куда копать?
>>454689 >>454694 >>454688 А где лучше всего собирать все данные, чтобы их потом сериализовать? В СкриптаблОбжекте, в синглтоне, в скрипте повешенном на игрока?
>>454684 >Поясните пожалуйста, как в играх управляются с объектами Игрока и камеры? Если убрать возможно сохранятся и загружаться, то достаточно создать их в самой первой сцене, и поставить флаг "не уничтожать", так?
Ответ на твои вопросы находятся в этой книге "Unity в действии Джозеф Хокинг", а ответы на будущие вопросы находятся здесь "Паласиос Х. - Unity 5.x. Программирование искусственного интеллекта в играх - 2017".
>>454759 > некоторые моменты, ввиду своей неопытности в среде/языке - не понимаю Значит не с того начал. Посмотри в официальных туториалах видосы по roll a ball и space shooter (вроде так называются), освоишь необходимый минимум, а потом уже приходи за платформерами.
>>454763 > там в форме видео-роликов Это даже удобнее для начала. > и на английском Он там настолько элементарный, что даже мой кот всё понимает. > Может быть есть подобные уроки, но в форме текста? И на русском? Если знаешь шарпы хотя бы на уровне имбецила, то качай книгу из шапки.
>>454765 Как вы без английского живёте? На русском языке же ничего нет кроме старых советских статей. А если и есть, на английском всё равно лучше версия - то ли из-за качества переводчиков, то ли из-за того, что это и не перевод вовсе. За державу обидно, это да
Есть набор префабов: prefab1, prefab2 и т.д. Они лежат в папке проекта, в менеджере ресурсов, но в самой сцене их нет. Я пытаюсь написать генератор, который бы случайно выбирал один из таких префабов и вытаскивал на сцену. Потом, если срабатывает триггер, объект удаляется, и вместо него на сцену вытаскивается другой префаб. 1. Можно ли как-то через скрипт C# вытащить на сцену префаб? 2. Можно ли как-то объединить префабы, чтобы скрипт рассматривал только вот этот набор?
>>454909 Instantiate(Resources.Load(nazvanie[r]) as GameObject , где nazvanie[] - лист или словарь или массив со стрингами-названиями префабов. >>454911 Есть Resources.LoadAll Можешь фильтры там настроить.
Сап, /gd/аноны, вопрос не совсем по Unity. Делаю пошаговую дрочильню на Unity с помощью .NET Sockets. Архитектура хост - клиент, то есть на одном компе Сервер и клиент, на другом просто клиент.На localhost все работает, но как мне, например, соединиться с друганом? Как я понимаю для этого нужен белый ip, но как другие разработчики делают соединение для обычных пользователей, когда у них нет белого ip? Какой-то дополнительный сервер нужно делать? Или так вообще не получится и нужно обязательно делать Клиент-Сервер. Пикрандом.
>>454977 >14/10/17 Проблема была не в смотрении на объект, а в том, что нужно было смещать камеру на определённую величину (нужен катет "на земле", а мы знаем высоту камеры и угол её поворота + нужно зум камеры учитывать, который как обратное отношение нормальной высоты камеры к усечённой зумом высоте), сохраняя прежний угол. Да и решил через геометрию уже. Надо только поворот вокруг оси Z ещё учитывать, чтобы не только по игреку смещать.
Кто-нибудь мне может объяснить, почему обычный вызов SQL процедуры, даже не возвращающий значение, такой, блять, медленный, даже при простейшем ExecuteNonQuery? 16 Calls = 6 ms. Ебануться, товарищи. Что делать?
>>455031 > Кто-нибудь мне может объяснить, почему обычный вызов SQL процедуры, даже не возвращающий значение, такой, блять, медленный, даже при простейшем ExecuteNonQuery?
Ты про какую субд? В орахле, помнится, можно было указывать что функция deterministic
>>455035 Я про любую. Функция на сервере не делающая вообще ничего (заглушка), нереально тормозит из-за Mono, даже при использовании последнего System.Data из 4й версии .NET
>>455037 Не использую Дебаг.Лог Вот тебе, подержи произведение сумрачного гения создателей MONO Develope, которое ставит на моей идее на лету брать данные из БД жырный крест
>>455041 Ты читаешь из БД в апдейте? Я, конечно, в БД не разбираюсь, но ИМХО, БД надо читать один раз и записывать один раз, в начале и в конце и, скажем, если сохраняешься. Это ж большая длиннющая стринга, как ты с ней не ебись, если каждый фрейм с ней что-либо делать, то она обязана тормозить.
Правильно я понял, что для юнити достаточно либо аналога местного js, либо C#? Допустим я знаю немного JS, а мой товарищ взялся за C# и мы вместе начали делать проект. Это конфликтно? Нужно для одного проекта выбирать 1 язык, или это пофиг и все в итоге перекомпилируется легко в машинный код даже если разные модули написаны на разных языках?
Всё что пишется на C# в итоге может быть написано на US?
>>455064 Я веб макака и JS мне нужен для работы, так еще и если буду в нем хорошо разбираться, то и рост будет на ней же. А запил простой игры - это в свободное время, не хочется дрочиться с 3 разными инструментами параллельно.
>>454962 Деплоишь на heroku приложение вся задача которого это хранить список подключенных к нему айпи и созданных "пати", на клиенте соответственно выводишь этот список пати и подключаешься к уже известному айпи.
>>455062 Как то это жестко. Я и так родной System.Data юзаю с формированием на стороне Моно класса StoredProc со своими параметрами и т.д. юзаю, и что то мне подсказывает, что лучше чем его создатели, я не смогу написать интерфейс общения с БД. но на всякий случай: куда копать, с чего начинать?
>>455065 Юнитовский жс это изоморфная версия старого стандарта ecmascript, от которой в твоей работе веб макакой тебе не будет никакого профита если ты конечно до этого ничего не знал ни про переменные, ни про циклы, операторы и прочее что есть в любом языке. Но даже и при этом не будет. Если хочешь прокачать скилы именно в жс, то бери любую геймдев жс библиотеку/фреймворк и делай на нем. В юнити тебе в любом случае придется много сталкиваться с с# кодом на форумах, а транслировать его со стаковерфлоу с одного язык на другой, для макаки это тот еще труд.
>>455064 >>455070 >>455080 Спасибо за ответы и разъяснение. Еще такой вот вопрос. А юнити накладывает на C# какие-то ограничения? Или выучив где-то его, просто берешь и без задней мысли начинаешь полноценно использовать?
>>455081 >А юнити накладывает на C# какие-то ограничения? Нет, но там используется C# 3.0 и .net 3.5. Хотя они уже начинают вводить более новую версию шарпа и .net фреймворка.
>>455067 Мне то не нужно. Я решил игру сделать, но оказалось для этого нужно программировать, но программирование - это пиздец. Я вроде основы почитал (ну там циклы всякие, точки с запятыми, скобочки) - включаю официальный тутор по роглайку, и в первой же серии с кодом нихрена не понимаю. Чувак там юзинги в начале переписывает, классы в классе объявляет и описывает - пиздец одним словом.
>>455095 Кроме циклов по минимуму нужно знать только логику апдейтов и то, как указывать переменные. Рогалику вообще ничего не нужно, кроме циклов и "смены кадров". Банально делаешь карту мира, делаешь первый кадр и логику, которая будет создавать следующий кадр.
>>455097 Я это тоже почитал. Просто не хочу заниматься придумыванием своих кривых велосипедов, а хочу делать все по науке, как взрослые дядьки. Но эти дядьки переписывают юзинги (я так и не понял, зачем, там вроде и так все должно работать) и объявляют классы в классе.
>>455101 Юзинги как раз и обозначают созданные взрослыми дяденьками велосипеды. Не сцы, там и важных только для работы с УИ, Collections.Generic и ещё по ситуации.
>>455103 Это как бы используемые скриптом компоненты из базового багажа. Для листов там, словарей, для работы со спрайтами и текстурами и т.п. Не во всех скриптах нужно же это, вот оно и подключается только там, где нужно.
>>455101 > Но эти дядьки переписывают юзинги Шта? Юзинги подключают пространства имён, только и всего. AI, UI, EventSystems и т.д. То есть, чего для обычного макакинга обычно не надо. Только и всего.
>>455101 > а хочу делать все по науке, как взрослые дядьки И чтоб вот так вот сразу, да? Чтоб хуяк-хуяк и научился. Ты на сложность туториала по рогалику смотрел? Там было написано "базовая"? Нет, не было. А вот на туториале "Roll a Ball" именно так и написано. Отсюда вывод какой? Правильно, начинай с малого.
У меня используются First person и Third person камеры. Стоит ли их объединить в один скрипт GameCamera, добавить туда CameraMode и через Editor-скрипт скрывать поля в зависимости от выбранного режима камеры? Или же лучше вынести их в разные скрипты FirstPersonCamera и ThirdPersonCamera? В камере от 3го лица используется коллизия, таргет и другие поля, которые не нужно камере от 1го лица.
>>455106 https://www.youtube.com/watch?v=bvvaqAbpPjc&t=60s Сериалайзбл атрибут - это [SerializeField]? Или я что-то путаю? Но зачем тогда включать пространство имен систем? Оно же и так работает. И зачем ему переуказывать рандом? Что поломается, если он этого не сделает?
>>455107 >И чтоб вот так вот сразу, да? Чтоб хуяк-хуяк и научился. Ну да, а что, нельзя? Если начинать с малого - нихрена не успеется.
>>455119 > Если начинать с малого - нихрена не успеется А если начать со сложного и нихуя не понять — вот тогда всё успеется, ага. > Но зачем тогда включать пространство имен систем? Оно же и так работает. И зачем ему переуказывать рандом? Что поломается, если он этого не сделает? Потому что туториал делался под версию 4.6, сейчас это устаревший шаг. > На второй минуте - класс Count Он его объявляет и сериализует чтобы рулить им через инспектор.
>>455121 >А если начать со сложного и нихуя не понять — вот тогда всё успеется, ага. Вот я и пытаюсь понять - чтобы все успелось. >Потому что туториал делался под версию 4.6, сейчас это устаревший шаг. Под 5 версию, там просто сказано, что на 4.6+ можно сделать все то же самое с минимальными отличиями. И что конкретно устареший шаг - подключение система или указание рандома? Или рандом указывается только из-за подключения система? >Он его объявляет и сериализует чтобы рулить им через инспектор. И как это вообще работает? Как используется эта конструкция, если к ней нужно из других классов обращаться? При всяких наследованиях, дочерних классах и прочем?
>>455123 > Вот я и пытаюсь понять - чтобы все успелось. Ты бы ещё начал курить интегралы до того как цифры выучить. Не еби мозги и начинай сначала. Все так делали и ничего, не поломались. > И что конкретно устареший шаг - подключение система или указание рандома? и то и другое. > И как это вообще работает? В инспекторе у тебя появляется класс, как же ещё? Ты пока всё это спрашиваешь — уже бы половину того же "Roll a Ball" посмотрел бы, узнал бы раз в 10 больше.
>>455124 >В инспекторе у тебя появляется класс, как же ещё? В смысле все объекты класса, объявленные в коде или как? Ты пока всё это спрашиваешь — уже бы половину того же "Roll a Ball" посмотрел бы, узнал бы раз в 10 больше. >Ладно, уговорил. Пойду уроки сделаю и буду про шарик смотреть.
>>455126 > В смысле все объекты класса, объявленные в коде или как? В смысле все поля вложенного сериализованного класса будут в инспекторе отображаться в свитке, а не просто ячейками. Так удобнее и эргономичнее.
>>455135 > я говорю что надо писать нормальный инспектор Хоссади, откуда такой максимализм? Если тебе надо свернуть всего 4 поля под свиток — нужно пидарасить целый ГУЙЛэйаут? И кто тут сущности плодит? Я ж объяснял нахуя автор туториала это делает, а не говорю только так и надо делать. Глаза б сначала протёр.
>>455136 да, надо пидорасить свой инспектор, если уж дошел до того что пишешь говно чтобы порадовать глаз. большая ли разница где плодить сущьности? плоди сущьности правильно. в правильных местах. не каждый туториал юнити учит тому как надо делать. если учишь фиче то учи ещё и применять её.
>И зачем ему переуказывать рандом? у юнити свой класс рандома есть со своим специфичным говном
>хочу делать все по науке, как взрослые дядьки >Ну да, а что, нельзя? Если начинать с малого - нихрена не успеется. не набьешь шишек - не поймешь как избежать больше шишек. набивая шишки с середины будешь обьебыватся на самом базовом говне до самого конца.
>>455138 >которые вообще можно менять из инспектора. Ты забыл добавить, что значение публичного поля насильно переписывается значением из инспектора, т.е. задача начального значения в скрипте вообще ничего не даёт.
>>455139 йеп. забыл. назойливое юнити любит сохранять поля даже когда передумал и написал там другое значение. и создает объекты даже если не создавал их. и другие прелести сериализации юнити с сериализацией наследуемых классов и прочим говном. ну да ладно все это понятно из ссылок которые я дал.
>>455140 я всего лишь продолжаю линию беседы. я не настолько радикален. мне достаточно чтобы тред узнал.
Появилась идея сделать retain gui обертку над убогим юнитивским immediate гуи для редактора и загружать ее из xml, например. Может уже что-то такое есть, чтобы не тратить время?
Я подебил ИАП! Если кому важно - родной юнити иап не дружит с юнити 2017.2, живите на 2017.1, только старая школа, пацаны! Пик рандом релейтед. как блять стать альфа тестером в гуглплеее? что за ебаный цирк на каждом шагу!
>>455316 Я так понял что он через поиск на графе, а не через матрицу реализован. Мне не понятно как навмеш создает такую такие полигональные фигуры для навигации?
>>455317 какую нахуй матрицу то? разумеется любой навмеш будет на графе. сам навмеш это просто визуализация графа где члены графа являются конвексными фигурами. ты что-ли хочешь узнать как делается навмеш? могу рассказать, хули.
>>455321 Ну типа на твоем пике каждый красный/зеленый куб это элемент в двумерном массиве, и если он с чем то пересекается то становится невалидным для прохода. Я таким способом представлял вэйпоинты в А*. Мне непонятно зачем нужны эти черные грани и каким способом они образуются. Если что то знаешь то поясни.
>>455324 разумеется я знаю, я же написал это говно. ты дурак чтоли. навигация происходит не по вокселям, а по центрам конвексных фигур. очевидно что эти линии это грани между этими фигурами. и из-за того что они конвексные между разными фигурами может быть только одна грань. в этом вся хитрость навмеша. он уменьшает размер графа который перебирается чтобы найти путь по нему. образуются они каким-либо методом триангуляции как правило и объединением треугольников. или в моем случае они образуются поиском ноды для всех углов нормали которых смотрят вовнутрь, ограничиваясь углом до нормали где угол это угол между следующей и предыдущей ноды в списке.
>>455328 они грань, понимаешь? они грань между фигурами. когда находится путь между фигурами то берутся их грани. эти грани образуют "туннель" с правой и левой гранью. и зная правую и левую границу пути можно найти самый короткий путь. гдето у меня был набор картинок. я уже рассказывал как это работает. вот смотри: 1 - конвексная область и её грани 2 - граф из конвексных бластей 3 - путь между областями через одну промежуточную область 4 - путь между гранями соединяющими эти фигуры. самый короткий путь находит алгоритм воронки.
а воксели нужны чтобы вообще создать эти фигуры. они не участвуют в процессе навигации.
>>455330 Так, более менее представил как это происходит. А как получить фигуру по мировой позиции? Я представляю перебор всех фигур и проверять вписывается ли туда точка. И у этого всего подхода есть называние или это такой кастомный поиск придуманный дэвами из юнити?
>>455331 > А как получить фигуру по мировой позиции? Я представляю перебор всех фигур и проверять вписывается ли туда точка. ну а как ещё то. ну можно ещё оптимизировать поиск, ограничить перебор фигур. например у меня это делается простенько. весь мир делится на чанки, а в чанках есть грид. в этом гриде ссылки на все области которые попадают в этот грид. так что проверяется не все 20-30 фигур, а 2-3.
>И у этого всего подхода есть называние или это такой кастомный поиск придуманный дэвами из юнити? дурак чтоли. это все придумали давным давно по отдельности и у каждой детали этого процесса есть какое-то свое название. конкретно поиск пути https://ru.wikipedia.org/wiki/A* который придумали давным давно
>>455336 если интересно то для создания навмеша не обязательно проводить триангуляцию. достаточно сделать все фигуры конвексными. у меня например сделано что-то вроде того что можно почитать в этом интересном тексте. http://upcommons.upc.edu/bitstream/handle/2099.1/16508/Ramon%20Oliva.pdf правда у меня не создаются новые эджи, а вместо этого берется самые близкие к нормали правые и левые видимые ноды.
ха-ха! тестировал синхронизацию движения ИИ по сети. сделал чтобы каждые 3 секунды ИИ выбирал одну из 4 точек для движения и топал туда. и по какой-то нелепой причине ротация не синхронизировалась как надо. зато направление взгляда вполне себе. получилось очень выразительно.
Суп гд. Объясните как сделать фаст слоты (2д рогалик), я сделал инвентарь, по сути просто массив итемов, но что собой представляют слоты быстрого доступа - хз
>>455502 Да я тупой, но стой подожжи. Если я его сделаю просто таким же массивом, то это будут доп слоты, а не быстрые, или мне надо просто передавать ссылки с объектов в этот массив?
>>455338 Ты когда первоначальные многоугольники строишь из сетки, упрощаешь их через тот Ramer-Douglas-Peucker алгоритм из статьи, или что-то еще делаешь?
>>455577 йеп, через него. хотя конечно много хуйни можно нагородить в алгоритме упрощения линии. упрощать приходится в два прохода, сначала с очень небольшим отклонением, а потом с нужным. иначе это слишком деформирует линию. ну и чтобы упростить приходится сначала находить все отрезки для упрощения и флажками помечать какие сегменты уже были упрощены, чтобы не пытаться одни и те-же места несколько раз упростить.
Сап, ю. Решил обучиться юнити, скачал тутор по шарику и космической аркаде, собрал проектs, и наблюдаю в них микролаги. Почему в этих стандартных проектах изображение какое-то дерганое, как при 15-20 fps?
Аутисту снова требуется помощь. Есть камера от третьего лица, которая расположена сбоку от персонажа. Когда игрок стреляет, берётся луч из камеры. Но у стрельбы есть рейндж. Мне нужно получить правильную дистанцию от игрока (player) до цели (target), чтобы потом сравнить её с ренджом оружия.
Я так понял, нужно как-то спроецировать позицию игрока на луч из камеры? Но у меня не получилось это сделать правильно. Я не могу просто взять дистанцию от игрока до цели, потому что в логике кода используется луч от камеры и мне нужно скорректировать его origin позицию, чтобы потом получить правильную дистанцию.
Вечер в хату, гемдев-бояре. Решил совместить приятное с полезным: изучить C# и геймдев. Однако где-то читал такое мнение, что в юнити юзают какой-то измененный сишарп, а мне бы хотелось не только научиться игорки пилить, но и приобрести полезные навыки. Отличается ли C# в юнити от классического шарпа и, если да, то насколько сильно?
>>455921 На самом деле в юнити используется питон с шарпоподобным синтаксисом, так что делая на нем игры ты вряд ли потом сможешь перекатиться в тот же wpf или еще куда. Лучше бери pygame, там чистый питон. Сможешь потом писать программы для микроконтроллеров и другие крутые вещи. Эта хуйня сейчас как раз набирает популярность.
>>455921 К анону выше добавлю, что девы юнити потихоньку перекатывают его на хаскель платформ, поэтому советую начать изучать хескель чтобы в будущем не остаться без штанов.
>>455921 Отличается тем, что это форк моно 11 летней давности. Там множество костылей с тем, чтобы он мог работать под юнити. Также есть некоторые классы, которые адекватно не работают, т.к. дохуя платформ имеют свои особенности. Если интересно, то этот форк открыт и можешь почитать сорсы тут: https://github.com/Unity-Technologies/monoно тебе это делать рано
Энивей, особо мозги не делай и пиши код. На месте разберёшься.
>>455979 Деблод, автовывод типов есть в любом современном языке. И тут дело не только в эргономике, а если нравится по два раза части кода переписывать, то дело твое.
>>455929 Кстати это причина корявой работы дотнетовских библиотек. Майкрософтовцы вообще офигевают от происходящего и никак не могут договориться как к этого монстра застваить общаться с Universal Windows Platform
player_pos - позиция игрока camera_pos - позиция камеры camera_dir - направление камеры new_camera_pos - искомый вектор, новая позиция камеры (всё это Vector3)
Нужно как-то провести перпендикуляр от позиции игрока и найти новую позицию камеры.
>>455908 >Мне нужно получить правильную дистанцию от игрока (player) до цели (target) >>455922 >Vector3.distance(player.position, target.position) Остановите этого аутиста, он же себе мозг сломает. Что ты вообще хочешь сделать то и найти?
Написано жи: Structs are copied on assignment. When a struct is assigned to a new variable, all the data is copied, and any modification to the new copy does not change the data for the original copy.
Я пишу: static public DateTime date [инициализация]; private DateTime dateOfDSB [инициализация];
Потом, в цикле dateOfDSB = date; date = date.AddYears(1);
Проверяю в watch dateOfDSB и date, они не равны (по значению), все правильно
Потом, внезапно, посреди выполнения какого то левого геттера dateOfDSB становится равным date (по значению). Как блядь? Потоки не использую. Где я обосрался то?
DateTime жи структура public struct DateTime : IFormattable, IConvertible, IComparable, IComparable<DateTime>, IEquatable<DateTime>
>>456159 Прикол в том, что endMarker - это ссылка на объект, а тот объект, на который эндМаркер ссылается, меняется (он же игрок, ага). Мне лень открывать юнити, чтобы посмотреть, можно ли копировать так, но сделай endMarker = new Transform(playerCoords.transform); Как вариант - сделай new Vector3(playerCoords.transform.position.x, ~y, ~z)
>>456162 Хотя трансформ это монобихевиор, вроде (и потому его нельзя создать просто через new), так что лучше сразу использовать Vector3 для startMarker и endMarker, т.е. сохранять в маркеры не трансформы, а transform.position (которые являются Vector3).
>>456150 До чего ж популярная тема, на реддите каждую неделю презентуют новый генератор шаров.
>>456152 >Давай сюда код, подебажим за тебя. Спасиб, братишка, но я уже вкинул весь код что имеет значение. Просто посреди левого метода две структуры DateTime с разными значениями (например, год 2014 и год 2015) получают одинаковое значение. Ни потоков, ни переопределений нет. Причем, в watch цифра не подкрашивается красным, мол переменная поменялась. Просто меняется значение и все.
Ну его на фиг, я эту дату для отсчета времени в стратежке использую. Лучше запилю свой MyDateTime, все равно мне тот избыточный функционал не нужен с високосными годами прочей поебенью.
>>449619 (OP) Насколько хорошо нужно сишарп изучить, прежде чем приступать к юнити? Так то я программировать умею но вот сколько уделить этому времени лучше всего? Изучить основные конструкции и сразу переходить к юнити или лучше позадрачивать его подольше и потом это окупится?
А правда что Animation Events работает тупо как SendMessage, который пиздецки медленный и использует сравнение строк? У меня просто есть два варианта как поймать кадр, либо проверять NormalizedTime анимации каждый кадр и ловить нужный, либо через эвент вызывать метод на нужном кадре. Как будет лучше?
Какой же гейтс пидор. За 20 лет не сделал норм менеджер ресурсов. Пункты из меню исчезают. Перезагрузись, еще раз перезагрузись, я не перезагружался целую неделю. Весь функционал попрятан и нихуя не очевиден.
>>456202 Оть глупенький. Не дорос видать, раз такие вопросы задаёшь.
Оглянись, придурок, она везде... Везде фракталы.
А вообще репутация у неё явно сильно подпорчена на фоне недавних высеров типа NMS. Но не обязательно делать упор именно на повсеместной процедурности контента. Да, местами она уныла (в большинстве случаев это связано с неумением ей пользоватся или дозировать её), невыразима. И это действительно так, куда не посмотри... Но ведь есть примеры, когда эта 'технология' (или 'фича' - называй как хочешь) действительно разбавляет картинку и вообще, в целом, делает её более правильной. Повторюсь - игры выглядят стерильно, процедурка же вносит в виртуальные миры крупицу хаоса. Не того хаоса, даун
>>456195 Ебать ты генератор. Чотко, красиво. А у нас в игре это выглядит сейчас не очень. хотя у нас карта крутится во все стороны, но это отдельная песня
>>456204 Какие это игры выглядят стерильно? Люди собственными ручкам как раз более интересные пейзажи создают. Другое дело что не все могут позволить себе таких людей.
>>456206 Да почти все. В большей или меньшей степени, конечно.
Да, люди, но все они пользуются процедуркой. Ты знаешь хоть об одном инструменте для создания контента? Она там везде. Это глупый спор по сабжу, в котором один вовсе не понимает сути. Другое дело, если тебе интересно всё это узнать, но это же борда, камон
>>456208 Ну ладно, ты прав. Просто как-то много тут людей которые этим занимаются, вот я и решил узнать. Никто не пилит свои системы диалогов/квестов, например.
Я тут тоже пилю свою процедурную генерацию, но для рогалика. Один из важнейших ее аспектов - разбиение пространства на прямоугольные зоны(некоторые превратятся в комнаты, некоторые в коридоры, некоторые удалятся). Проблема заключается в том что нет идей как какую-нибудь прикольную разметку получить. Сейчас я просто рандомно делю комнаты на 2 маленькие и результат немного унылый. Может у вас есть какие-нибудь идеи?
>>456214 Фантазируй. Ты же можешь комнату разбить как хочешь, но тебе нужно то, что поможет тебе. В твоём случае - это функция, которая, НАПРИМЕР, скажет, где поставить стену. Т.е ты просто можешь поменять свой рандом на результат работы шума, его комбинаций, модуляций и тд. Особенно, если карта генерируется 1 раз при старте уровня, например. Тут сколько хочешь усложняй систему.
>>456201 текстов откуда черпалось вдохновение, если такие есть. или сам чего интересного расскажи. как кстати сферы то генерировать? куб выпучивать до состояния сферы?
по моему без нодовых редакторов процедурной генерации не запилить нормально.
видел разве что тут. я давно уже выкладывал, с тех пор особо не менял это говно. разве что всякую мелочь добавил типа разделения наборов 2д координат в соотношении, ноду которая бы смещала синусойду по инпуту. дольше всего, кстати, возился с модификаторами высоты. чтобы можно было участки карты выравнивать, или сморщивать. как закончу с тем чтобы заставить ИИ работать по сети нормально то вернусь наверно к этому генератору, хотя-бы простую эрозию почвы надо добавит, кустики там симпатичные поискать, камни, цыферки красивые по выбирать. а то не было времени воспользоваться тем что сделал.
кстати если лень нодовый редактор писать то можешь схватить редактор нод юнити, который для меканима используется. UnityEditor.Graphs который.
>>456205 над этим ещё работать и работать. за основу кстати взял вороного, чтобы ещё его ещё переиспользовать потом для некоторых фич. покажи хоть что сделал то, интересно же.
Как реализовать вызов метода WasHitByPlayer(float damage, vector3 impact). Из-за того что параметр не один, SendMessage не работает, а GetComponent я не могу использовать, потому что этот метод должен быть у совершенно разных врагов в их личных скриптах. т.е. игрок бьет НПС, вызывает у них метод, а кого именно он ударил он не знает
Можно ли сделать класс Enemy, наследовать от него конкретные классы врагов, и каким-то образом получать потом ссылку на скрипт который наследует от Enemy? Это возможно?
>>456240 А, всё. Я узнал про виртуальные методы, и они решили проблему. Блять, стараюсь задавать в тред только те вопросы которые кажутся самыми сложными, но в результате всегда сам их решаю довольно быстро, зато бьюсь часами над всякой хуйней которая с первого взгляда кажется простейшей
>>456240 >использовать SendMessage Кек >>456241 >узнал про виртуальные методы Почему новички узнают о сендмессадж раньше, чем о виртуальных и абстрактных методах?
Ананасики, надеюсь на вашу помощь. Загрузил и установил с официального сайта пятую версию Unity. Всё нормально установилось, но при запуске редактора перестает работать мышь. Переподключение не помогает, только перезагрузка компьютера. В четвёртой версии такой проблемы нет.
>>456239 Да просто с интернета же. Все подряд бумажки про процудурку на шарах, или как не выстрелить себе в ногу превращая квадрат в шар. Нет, реально, я все пальцы отбил себе обгугливая это по 10-12 страниц результатов. А вообще есть книжки хорошие... (прикрепляйтед 1 и 2)
Вообще вдохновение черпал из Space Engine, потому что мне хотелось по такой же вселенной полетать на кораблике. (Потом, правда, в SE появились корабли) Да, я знаю про дефолтный граф, но даже не пытался поковырять его. Да, куб. Только не прямой подход: У меня всё считается в Clip Screen Space, а потом происходит магия 2D => 3D.
>>456243 В Unity in action SendMessage приводится в качестве первого варианта для связи между ГО. Затем, конечно, поясняется его хуевость, но всё равно, способ запоминается.
Это снова анон с произвольно меняющимися переменными. Я заменил структуру DateTime на мой класс MyDate, но оно все равно произвольно меняет значение. Возможно, я таки обосрался с мнопоточностью, а именно с гуишными колбеками. Я даже заметил момент когда проц нагружается какой то параллельной хуйней посреди простейшего оператора.
Вот только как это дебажить? Я пробовал ставить брекпоинты в точках где может вызваться параллельный код но дебагер их игнорит: кажется, он только 1 поток видит (MS VS). В call stack криминала не видно
ПС. закоментил потенциальный коллбек, а переменные все равно меняются.. И нет, я присваиваю объекты не по ссылке а по значению. Печалька..
>>456299 Небось public полями обмотался и теперь сосёшь. Используй проперти и дедовский дебаг.
Например, MyDate m_myDate; MyDate myDate { get { return m_myDate; } set { m_myDate = value; Debug.Log(m_myDate); вот это называется дедовский дебаг } }
Если у тебя в консоли не отключен стектрейс, то вообще будет красота.
>>456304 > Я пробовал делать через while В апдейте? Ёбу дал? Такое говно разве что в корутине делать можно, и то в приличном обществе за такое по ебалу бьют.
>>456321 > while в апдейте вообще не используем? Смотря при каких условиях. Твой апдейт прорабатывается раз в кадр, и если ты там замутил, например, while (true), то будь готов к тому, что всё зависнет нахуй, потому как следующий кадр не наступит пока не обработается предыдущий.
Есть код balance = getDemandSupplyBalance(price.getProduct());
Дата меняется в getDemandSupplyBalance. НО! Я рассчитываю что должен сначала выполниться метод price.getProduct() а затем getDemandSupplyBalance. Правильно?
А по факту, получается getDemandSupplyBalance как то скрыто и неуловимо для брейкпоинта вызывается где-то при загрузке стека price.getProduct() и меняет этим дату. Потом getDemandSupplyBalance нормально вызывается, но уже с неправильной датой.
Как так то? getProduct прост как блин: public Product getProduct() { return product; } он ничего не перегружает, не переопределяет и не вызывает статических инициализаторов. Хуйня какая то.
Алсо, нельзя сделать что бы юнити консоль отображалась в ms vs? А то в во время дебагинга Юнити подвисает и консоль не видна.
Блэт, какой же я дегрод, пиздец просто У меня этот метод getDemandSupplyBalance() в простыне watchа был вписан, оттуда вызывался и ломал логику при дебагинге. Пиздец я в шоке.
А вообще, суть была в том что бы этот (оче тяжелый) метод не вызывался 100500 раз за тик, а только тогда когда дата сменилась.
суп, анонасы. я новичок в юнити и делаю sampleговношутер (да-да), вопрос таков: как сделать так, чтобы руки + пушка двигались за камерой, как в топ шутерах.
буду благодарен, если накидаете годных моделек с анимациями.
Приветствую господа. С одной стороны, не хочется выкладывать полную фигню, но с другой еще более не хочется вставать на чужие грабли. Мы тут с другом игру делаем. Он рисует, я всё это кодю. Первый рас в жизни пробую, поэтому хотелось бы узнать ваше мнение. Подскажите, где и что еще не так, кромет ого, что я обозначу ниже. Ну и по поводу обозначенного подскажите, может стоит что по-другому сделать? Хотим, чтобы вышло годно, поэтому мнение каждого очень важно для нас. Вот собственно, сама демка: https://youtu.be/jeH0AF1un-g Мои мысли по ней: Итак, выявленные проблемы: 1. Враги преследуя тебя, находятся в стене. Решение: Во время генерации путей запилить коллайдеры всех объектов в 2 раза толще. Это заёбно, но других способов пока-что не вижу. Надо подумать над оптимизацией этого процесса. 2. Динамичность. Игра слишком тактическая, пока-что. Решение: Нужно увеличить скорость передвижения игрока, отдалить камеру, забалансить хп/урон. 3. Если враг подойдет вплотную, то ты не сможешь по нему стрелять, т.к. пуля летит из пистолета прямо. Решение? (Возможно оно не нужно) 4. Однообразные смерти. Есть разные смерти под разные виды оружия, но сами смерти однообразны. Я думаю, что смерти по-любому надо разнообразить, т.к. игрок будет зачищать большое кол-во врагов одной пушкой. Для основных пушек (пулевое, колящее, дробь, ударное) надо запилить по несколько анимаций смерти. Для всяких огнемётов-плазмоганов и прочего, анимация может быть одна и та же. Типо челик разваливается на плазму, или бегает горящим, потом от него остаётся лишь пепел. 5. Шум. Делать его вообще или нет? Если делать, то мне не нравится моя идея реализации. Надо вместе посидеть подумать. 6. Укрытия. Появилась идея, типо если ты стреляешь из-за дивана, то по тебе урон проходит меньше, ну и если враг из-за дивана, то тоже меньше. 7. Враги ближнего боя. Я запилил им механику удара без хитбоксов: После замаха определяется дистанция игрока. Если игрок попал в дистанцию, то урон проходит. Тут есть минус, он заключается в том, что игрок, находясь за спиной у врага ближника получит урон. Фиксится это легко, но вопрос стоит ли? Типо враг же все-равно так или иначе на тебя будет смотреть. 8. Стрельба сквозь стены. Фиксится легко. Просто проверять есть ли стена между игроком и местом, откуда вылетает пуля.
Пацаны, скажите нубу, бесконечные циклы однозначное зло или обсуждаемо? Просто в официальных гайдах по юнити разрабы ими пользуются. Но погуглив я обнаружил, что все называют их говнокодом. Так где же истина?
>>456512 Я позавчера только начал юнити изучать, до таких тонкостей еще не дошел, но мне кажется, что озвученный вариант не столь практичен, удобен и прост как список тегов.
А почему юнити тред лучший на всем харкаче? Во всех остальных местах ньюфагов обоссывают, хамят и троллируют. А тут всегда помощь и нормальный диалог. Юнити-господа лучшие из людей?
>>456513 Если нужны глобальные Properties для GO, создай отдельный класс (скрипт) с нужными полями и лепи на объекты, хватать можно через GetComponent<>()
Правда, это примитивный и довольно медленный вариант если у тебя СТОТЫЩЬ объектов и запросы идут почти каждую секунду/фрейм. Впрочем, запрос тега тоже не без потерь.
>>456444 Ну, надеюсь, что меня не пидорнут, но так и быть расскажу. Работаю в Herocraft. Пишу игровую логику, редакторы, шейдеры. В общем всё то, что нужно текущему "секретному" проекту.
>>456509 Ну, тут скорей всего у тебя беда в самом устройстве. Ковырни в сторону adb. Чтобы через консоль сам девайс был виден. Я давно с андроидом не работал, поэтому сорян.
>>456514 Видимо тут собрался один молодняк, а не пропёрженые плюсовики-затейники, которых обоссывали и обоссывают, а они типа как ДЕДЫ в армейке себя ведут.
>>456543 По зп, увы сказать не могу, ибо НДА. Вкатился спонтанно. Искал другую контору, в которой не будут лепить говноказуалки. Так вышел на них. Коллектив охуенный. Подход к работе идеальный для меня. Опыт чуть больше, чем 3 года.
>>456545 Охуенно. Как думаешь, имея полгода практики и 2-3 завершенных проекта, реально куда-нибудь вкатиться на джуна? Социалка/общение на хорошем уровне. Никогда раньше не кодил, но не так давно попробовал, и неожиданно для самого себя, стало нормально получаться. Код, который казался каким-то дремучим лесом 2 недели тому назад уже сейчас выглядит для меня вполне понятным + пока что, все задачи, которые я себе ставлю в своих небольших проектах, я реализую достаточно быстро с помощью гугла.
Я понимаю, что вопросы идиотские, и все зависит от обстоятельств. Просто никогда не работал в айтисфере + я весьма великовозрастный.
>>456551 А ты готов работать (не пинать хуи дома на диване, а ежедневно, в офисе, по 40 часов в неделю, где с тобой будут обращаться аки с дерьмом 20-летние мальчики (а иногда даже и девочки), взваливая на тебя самую нудную работу) первые полгода забесплатно? Если готов - то да, в принципе можно вкатиться куда-нибудь джуном.
>>456578 Не работать забесплатно. Любой труд должен быть оплачен, это золотое правило всех нормальных коллективов. Хотя на первое время нужно соглашаться на скромную зп, канешн.
>>456681 Кресты, питон, шарп, есественна, на жаве небольшой опыт (но только как скриптящего qa), паттерны, ООП. Официально работаю qa-инженегром, хотя временами это напоминает программиста или продакт менеджера, когда приходится полоскать мозги кодерам на счет того, что делать надо не только на основе того, что в джире написано, но и руководствуясь здравым смыслом. Дома ради фана пилю свой космосим с орбитальной механикой.
>>456675 >Не работать забесплатно. Любой труд должен быть оплачен, это золотое правило всех нормальных коллективов. Хотя на первое время нужно соглашаться на скромную зп, канешн. Как и труд конторы по его обучению и превращению из говна в человека, который способен делать что-то полезное.
Не могу понять, как работает Box Collider. Пытаюсь реализовать столкновение двух автомобилей - игрока и опонента. У обоих есть Box Collider с Is Trigger = true. Сделал проверку на OnTriggerEnter и OnTriggerExit. Завел отдельную булевую переменную, которая определяет, что пока объект не покинул коллайдер бокс другого объекта, повторно код для столкновения обрабатывать не надо. Переменная статическая! И все равно Unity считает, что столкновение происходит каждые четверть секунды. Как выйти из ситуации? Какую логику лучше использовать для обработки столкновений?
>>457484 >Котики, у меня иногда из-за ошибок код уходит в while(true){}. Можно ли как то вывести редактор из бесконечности иначе чем через убивание процесса? Бля не тот тред
Прошлый тред:
Официальный сайт: 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 сделано много замечательных игр - 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 - это начать делать игру и по мере разработки гуглить непонятные моменты.
Шапка: http://www.writeurl.com/publish/zukmrogwv45ptyuseyol