Вы видите копию треда, сохраненную 18 сентября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: >>442120 (OP)
Официальный сайт: 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
Потому что может.
Потому что те кто брезгают синглтоном, получают поток инстансов себе в лицо.
Стремно только, что приходится все поля паблик делать, чтобы были видны в инспекторе.
Хватит уже на сосаче пиариться.
>когда я делал данжелот
Это реально он данжелот делал?
Какик же, все равно, русскоязычные видосы унылые, по сравнению с буржуйскими.
И не говори, бротиш.
Нужно вычислить катет, противоположный углу ротейшона. Как превратить ротейшон Х в угол, и что делать с приближением камеры/глубиной?
>по сравнению с буржуйскими
Потому что ты половины не понимаешь, а додумываешь. Смысл в итоге тот, но эффект не тот. То же самое с песнями буржуйскими. Если переводить, то там пиздец похлеще, чем у нас.
И что мне делать? Брать текущий вектор камеры, отражать его, сдвигать к объекту, снова отражать, и применять к камере?
Если высота камеры известна, то tan(угла твоей камеры) умножить на эту высоту, получаешь сдвиг по х. Что там с радианами и углами в юнити я не помню, посмотришь в доках.
> чтобы камера фокусировалась именно на нужном объекте
Не совсем понял. То есть чтоб объект был по центру камеры, а не чтоб камеры тупо взяла Y объекта и зависла над ним?
если переместить камеру к Х и У объекта, то из-за ротейшона в камере этот объект окажется "ниже", т.е. камера над ним смотреть будет. Мне нужно сместить камеру так, чтобы объект в центре камеры был.
если правнять Х и У камеры к Х и У объекта*
>Начальный объект не синглтон?
Начальный объект - это рут. А если к этому руту прикрутишь какую-нибудь проперти Instance, тогда это будет синглтон.
>А модули сменяемые какого-то объекта синглтоны?
Что ты блядь несёшь?
Сделай какой-нибудь Vector3 offset, присвой ему на старте разницу между позицией камеры и точкой, куда попадает рейкаст, выпущенный в центр экрана. Потом прибавляй этот offset по x и z к позиции нужного объекта и получай свою позицию камеры.
> Это придётся чертить воображаемую плоскость
Шта? Это ещё зачем? Ты же хреначишь рейкаст из центра экрана, он никуда кроме центра экрана не попадёт. Тебе ж на Y пофигу.
Камера наклонена же. Если в центре экрана будет возвышенность или впуклость, т.е. не та же самая Х У плоскость, что и у объекта, то смещение будет неправильным.
> Камера наклонена же
Лол, не из самой камеры рейкасти, а из центра экрана.
Camera.main.ViewportPointToRay
>>49728
>>49733
>>49735
Сделал так
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 камеры
Это понятно. Мне непонятно, как его конвертировать в "отсекаемую" часть высоты.
float angle = Quaternion.Angle(gCamera.transform.rotation, new Quaternion(0F, 0F, 0F, gCamera.transform.rotation.w));
float fovH = vec.z Mathf.Cos(gCamera.fieldOfView/2);
vec.y += (Mathf.Atan(angle) fovH);
Эта херь как-то работает, хотя мне и кажется, что я чего-то не учитываю.
как мне дописать что-то в сеттер, при этом оставив его приватным, а геттер публичным?
а, блин, я кажись я затупил прост
смотри. Если я хочу сделать просто публичное чтение, приватную запись, то я делаю
Type MyProperty {get; private set;} без лишней переменной.
Но, если я захочу сделать
Type MyProperty
{
get{ return xxx;}
private set{ xxx= value}
}
мне нужна ххх, так как на само свойство я ссылаться не могу, так? как без ххх сделать, чтобы как в первом случае?
предполагается, что в скобки я еще что-то впишу, само собой, иначе просто первый вариант сделаю
нет вроде, просто не врубаюсь в свойства.
представь, что есть у меня Type MyProperty {get; private set;}
как мне дописать что-то в сеттер?
Забудь про существование property, модификаторов доступа и т.д. Это все нужно для создания интерфейсов библиотек, и не нужно в написании скриптов игры.
просто мне показалось, что ты назвал C# - самый современный, продвинутый и технологичный язык - окаменелым говном
И конечно же твое мнение основано не на субъективных представлениях ньюфага не разбирающегося в программировании, а на железных аргументах, которые ты готов предоставить?
Зачем тебе что-то прятать в своем коде? Только усложнять все лишним слоем абстракции.
{get;set;} это вообще ненужный бред в скриптах, тем более не сериализируется в редакторе.
Это шизик из предыдущего треда, не обращая внимание.
Нунида. Архитектура и безопасность, это, конечно, хорошо, но сами по себе они мало что значат. Будь разница в байтах, довод в пользу всяких там инкапсуляций был бы весомее.
Нунинада*
Что значит "фу"? Есть же и другие языки, и там нет таких фич. САМИ ПО СЕБЕ эти фичи просто фичи, и очень сомнительно, что производительность имеет прямую зависимость от архитектуры. Если это устройство было кем-то arbitrarily порешено как самое лучшее, то оно всё равно в любом случае arbitrary решение.
> Есть же и другие языки, и там нет таких фич
Ну да, я вот до сих пор на паскале пишу и мне норм.
А на питоне фигурных скобочек нет. Чому бы на питон не перейти? Это ж сколько типографских знаков сохранишь!
А я о чём говорю? Ты это арбитрарное решение не признаёшь, а кому-то нравится. Важно иметь перспективу, понимаешь? На себя критично смотреть.
> а кому-то нравится
Ну кому-то и знаешь чё ещё нравится?
Кароч тред не об этом, так что завязываем.
Там надо отступы ставить, пустота тоже байты занимает.
Оправдания говножуев. Если язык постулирует одним из принципов ООП, но при этом в нем невозможно лаконично записать проперти, то это не язык а говно. И никакое его глубинное понимание не изменит ситуацию.
Лаконично пописял тебе в ротик.
Какая йоба. Жаль, что только в следующем году выйдет.
Ну, это официально, а демку, думаю через полгодика дадут пощупать. Я аж на радостях подписался на демку.
Так они там чего, используют менеджеры для всех юнитов, анимаций и поисков путей? Удивительно, то-то же мы апдейты в каждом юните проверяем, а не делаем отдельные менеджеры.
А, это же типа новый компилятор (?). Поясните, кстати, что такого пиздатого в новых версиях языка, и почему на него стоит дрочить. Видел только, что внутрь функций нельзя вставлять сложного формата формулы, но не более.
>Видел только, что внутрь функций нельзя вставлять сложного формата формулы
Вут? Это ты про ограниченный размер стека?
Тахуйзнает, я же тупенький, просто пытался провернуть конструкцию типа Math.sin([дохуя переменных с паройфункций]№1, [дохуя переменных с паройфункций]№2), мне студия сразу сказала: "Нет, брат, так не пойдет".
ООП и проперти никак не связаны.
Ты сначала разберись что такое проперти и как они работают, а потом уже кукарекай у лаконичности их записи.
Придумал какую-то хуйню и обвиняет язык, потому что в нем этой хуйни. Вообще охуеть
Ты так скозал? Просто до этого все считали что проперти это лаконичная запись для геттеров и сеттеров, которые в ооп реализуют гибкую систему инкапсуляции и полиморфизма. Но оказывается это не так, сорян тогда, двигай кубы дальше.
> Придумал какую-то хуйню и обвиняет язык обвиняет язык, потому что в нем этой хуйни
Как хорошо читать жопой, можно писать любую хуйню не задумываясь
property это просто сахарный синтаксис и зло, потому что у них непредсказуемое поведение. Семантически это переменная, но на самом деле функция. И что там в этой функции можно только догадываться. Например, нужно кэшировать значение проперти или нет?
Особенно заебывает использование property с структурами в юнити. Хочешь изменить property? Сохрани в переменную, измени, и запиши обратно.
>И что там в этой функции можно только догадываться.
У тебя же есть ретёрн с определённым типом.
800x450, 0:10
Срущую свинью нужно игнорировать либо репортить, а не поощрять, присаживаясь срать рядом с ним. Хотя чего я распинаюсь, это наверняка пизданутый семен.
Мочер у нас поехавший, в дурке уже.
> Аватар
> 2D
Рор.
Если ты хочешь ебать 2д-анимацию, то смотри как это сделано здесь.
https://unity3d.com/ru/learn/tutorials/topics/2d-game-creation/2d-game-development-walkthrough
Поправочка подъехала.
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
float height = gCamera.transform.position.z;
float angle = gCamera.transform.rotation.eulerAngles.x;
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? Но как тогда быть с тенями?
> просто ты бестолоч
> Area Light делает то что ты хочешь
> Light is emitted in all directions uniformly across their surface area
> in all directions uniformly
но ведь ето не так, я не бестолоч!
Нахрена тебе несколько канвасов на одном экране? Можешь их хоть 80 сделать, но зачем?
а просто парентить удобнее по группам, но раз не нужно, буду парентить в емпти ГО.
а, ну и если у меня на персонажа прилеплен канвас, то он и ходит за персонажем. А если я панельку на общий канвас прилеплю, то придется при перемещении и панельку перемещать.
Блять, почитай уже как работает канвас и не еби мозги.
За персонажем у него канвас ходит, вообще охуеть.
сделай у крыши в Skinned Mesh Renderrer чтобы она с двух сторон тень кастовала.
важный вопрос. а нужны ли в бане окна? сунь в окна Area Light, тени по моему тебе вообще нахуй не нужны. это же баня, там только рассеянный свет. если хочется Directional Light в окна светить то ебани ему Cookie нужной формы.
вообще посмотри какой-нибудь таймлапс освещения в юнити.
>>50206
он и не сделан для этого. он сделан чтобы освещать пространство. если так хочется хитрый свет то всегда можно охуеть и сделать Directional Light как надо пользуясь Culling Mask
>>50227
да оба вариант норм, вопрос в том что получить хочешь.
>>50237
на самом деле не один, если делаешь UI в ворлд спейсе как в дедспейс например. но если ты делаешь 2д то нахуй тебе все эти хитрые фичи то? делай обычный, на одном канвасе. меньше возни.
>>50242
но зачем твой канвас ездит за персонажем?
>но зачем твой канвас ездит за персонажем?
использовал его как папку для панелек на персонаже.
У меня есть юниты, за ними должны перемещаться панель со статами и панель с уроном (сортинг лэйер выше спрайта юнита и статов, типа когда получаешь урон, вылезает эта панель на некоторое время, показыввает величину урона, ну типа анимация). Как это правильно реализуется.
Про то, что я не правильно понимал канвасы в принципе, я уже понял.
да как всегда.
ебани себе менеджер который бы висел на канвасе, который бы отображал подобные эвенты над юнитами, следил за этими панельками и перемещал их куда надо со всяким там красивым лерпом и прочим говном. сделай чтобы при создании юнита он заодно регистрировался в этом менеджере. ну а дальше че, переводи мировые координаты в экранные и ебись уже с ними. может и муторно, зато все в одном месте, все как ты хочешь и с этим будет проще работать дальше.
>>50258
открой гугл, напиши там unity snap, думаю это то что ты ищешь.
>ебись уже с ними. может и муторно
хорошо, тогда чем плохи канвасы над каждым юнитом? Оптимизация соснет? Просто это удобнее и кода меньше. И сейчас все работает уже.
дааа хуй с этой оптимизацией, этот UI и такое потянет. это конечно удобно в начале, но при увеличении размеров проекта обычно перестает быть удобным. например если захочется делать какие-то клевые манипуляции, например сделать так чтобы полоски ХП не смешивались в кучу а разьезжались немного друг от друга. или когда ты захочешь редактировать все все панельки одновременно, например отключать их когда игрок выходит в другое меню (например карта, или журнал). или когда размер проекта вырастет до таких размеров, когда проще знать куда срать свой тематический код для UI, чем искать все эти 10-20-30 классов куда распиханы какие-то мелкие фичи для интерфейса.
но если тому что ты делаешь такая хуйня никогда не понадобится то оставь как есть. тебе лучше знать.
спасибо за подробности, чаю и пледов тебе
Канвас же по умолчанию имеет функцию прикрепления за камерой. Сам не дошел до UI, но вроде как можно же просто прицепить на юнит точку, на нее инстанциировать панель с анимацией.
Генерит одну хуйню в цикле, если семечко менять, то та же хрень. Верхняя граница эксклюзив, это знаю.
надо чтобы разное. Грубо говоря при вызове Random.Range(0,5) я получаю что-то такое:
{33333111111111000666666666666666000000000}, а не нормальный рандом.
В то, что так совпало не верю.
чувствую подвох, короче. Документацию почитал, но немного не понял.
Он берет дефолтное семечко из даты-времени пк, так? То есть если выдает подряд одинаковую фигню, то значит в этот инкремент времени успел прокрутить цикл х раз, так?
> при вызове Random.Range(0,5) я получаю что-то такое
> 666666666666666
> при вызове Random.Range(0,5)
Кстати, такая фигня только с интом?а если рандомить флоат и из него потом делать инт, предварительно умножив на что-нибудь, та же фигня выйдет?
ну ты понел, опечалатся
Вообще-то, много канвасов - это хорошая практика, если у тебя UI много говна имеет.
Почитай в разделе ЛУЧШИХ ПРАКТИК на юньковском сайте.
tl;dr при каждом чихе у тебя батчи меньше времени тратить будут
Никак.
тебе же ответили, ты слепой чтоли
Потому что ты их изменил в инспекторе.
Хочешь менять переменные через скрипт — присваивай им значения в старте.
Но я их не менял, лол, я их задал в скрипте, а инспектор насильно закрепил.
И это не ответ на вопрос. Я не понимаю концепта за этой хуйнёй. Они не смогли синхронизировать скрипты с инспектором, или чего?
Делая публичные сериализуемые поля в наследнике MonoBehaviour'а, ты специально делаешь их доступными и изменяемыми / запоминаемыми в инспекторе. Это одна из основных фишек.
Но это действительно одно из основных свойств редактора. Level-designer'ам очень удобно подкручивать всякие свойства объектов на уровнях.
С точки зрения архитектуры это не очень красиво, т.к. в runtime потом висит объект с публичными полями.
этой кнопочкой он почему-то меняет только в самом префабе, а в других префабах, которые из этого префаба сделаны не меняет.
грубо: есть колесо от машинки, есть машинки с колесами. Машинки сделаны из префабов колёс и прочих. Хочу чтобы при перекрашивании колеса, колеса менялись на всех машинках. Кнопка Apply работает, когда я хочу изменить объект префаба на сцене и записать в префаб изменения, в моем же случае почему-то не работает.
что-то мне подсказывает, что я просто машинку криво сдеал. Смотри, колесо сделано из всякого говна, я его перетащил в прожект, получил префаб колеса. Если я теперь перетащу обратно на сцену несколько префабов колес, добавлю машинку, обведу все и сделаю из добра префаб, он будет считать что префаб машинки сделан из колес или из говна(элементов колес)?
Короче, Mathf.Лерп это линейная штука. То есть числа распределены равномерно, но что если я хочу, чтобы оно было не линейным, а по прогрессии какой-то? (как на картинке прикрепленной) Есть что-то такое? Или самому ручками это собирать надо?
Я знаю есть slerp, который вроде как можно было бы использовать для моих целей, но он для вектор3, а не для чисел, и вообще вроде как не совсем то.
>- Какие у Unity слабые стороны?
Наверно платиновый вопрос, но как же наихуевейшая оптимизация, всякие там garbage collector и memory leak которые вшиты в движок и не фиксятся?
unity скоро умрет.
советую всем перекатываться на godot. он сейчас уже достаточно развился и, что самое главное, стал де-факто опенсурсным движком. то есть чем-то вроде blender'а в мире игростроя. а так как игровые движки намного популярнее 3д, то и развиваться он скоро будет семимильными шагами.
Как обычно занимаются хуитой безразличной конечным пользователям и показывает захардкоженные демки.
В mono давно есть simd, какой-то там свой конпелятор они пишут, велосипедисты ебаные.
job system какой-то уебищный хак с генерацией кода и изобретением своих тредов.
https://www.youtube.com/watch?v=AXUvnk7Jws4
вот тут подробнее про эти job. Лютое говнище какое-то
Например у меня есть объект на сцене, чтобы через код заставить его что-то делать надо как я понял записать в переменную (ну не силен я в терминологии) данные компонента (GetComponent), например Transform, тогда я смогу через код его двигать. Если я хочу обратиться к какому-то другому объекту на сцене через текущий используют GameObject.Find если данные какой-то переменной мне нужны везде -делаю его паблик статик. Да, я соображаю туговато. Если я создал на сцене 5 объектов и навешал на них 1 скрипт. Переменные в этом скрипте же локальные для каждого gameobject? Наверное это очевидно, просто пока мои скрипты работаю немного не так как я ожидаю.
Есть ли какие-то ошибки в том что я написал?
Переменные локальные для каждого навешенного скрипта.
Статик будет один для всех, это видимо не то что ты хочешь.
Созданные объекты пихаешь в пул, или делаешь как тебе удобно. Find медленная операция (лучше не юзать в Update), можно хуячить объекты при создании в массив или лист какого нибудь менеджера сцены.
transform'y не нужно делать GetComponent, он у любого объекта и компонента есть по дефолту, yoba.transform.Translate(...)
> Если я хочу обратиться к какому-то другому объекту на сцене через текущий используют GameObject.Find если данные какой-то переменной мне нужны везде -делаю его паблик статик
public static относится к классу. Т.е. есть у тебя инстанц класса Klass по имени klass. Просто паблик будет требовать писать klass.variable, статик же Klass.variable. Очевидно, что статик (с таким именем) существует только один.
>Если я создал на сцене 5 объектов и навешал на них 1 скрипт.
Через AddComponent если, то каждый скрипт как бы отдельная сущность. Есть ещё такая вещь, как new, которая создаёт новый инстанс.
>Например у меня есть объект на сцене, чтобы через код заставить его что-то делать надо как я понял записать в переменную
Можешь писать в любом наследующем от монобихевиора GameObject.Find("obyekt").transform.position += new Vector3(1, 1, 1), например. Но файнды использовать не рекомендуют.
Ты ещё учти на будущее, что переменные стринг, интежеров и т.п. это не инстансы новых объектов, а вот массивы и классы уже да, т.е. в переменных в первом случае хранятся данные, во втором ссылки. По сути, данные и ссылки на контейнеры данных.
>>50723
Трансформа нет у объектов без монобихевиора.
Смотря что за "фича".
Nested prefabs. Спрашивают их об этом на каждом Unite. Да, да, сделаем. Ага, скоро, ждите.
Давно бы на него перекатился, но там какая то скриптопараша вместо нормальной статики инб4 пиши на крестах. Разрабы вроде в ближайшем крупном апдейте собираются обновить апи движка, чтобы можно было на любом языке писать. А вообще как замена юнити есть xenko.
Вся суть юнити треда
Может тебе нитки зашить сраку нужны а не аргументы?
А чем опен-сурс так хорош? Тем что комьюнити начинает допилить движок? У Юнити ведь есть ассет стор - вполне достойный конкурент.
А как тогда Юнити распределяется по процессорам? У него вообще есть многопоточность?
Процессорная многопоточность и потоки процессов это 2 разные плоскости. Вся твоя логика из монобехавиор всегда вызывается в одном и том же игровом потоке, но это не мешает игровому циклу работать с графикой еще в двух, с сетью в третьем, а со звуком в четвертом.
Можно пилить треды средствами C#, но в них нельзя использовать апи юнити. Если нужно провернуть асинхронную операцию не блокируя основной поток то можешь заюзать бесплатный вссет Thread Ninja со специальными корутинами, мне помог.
А то попадается только какое-то говно васянское.
в ютуб вводишь "unity lightmapping", "unity light probes" и т.д. и смотришь.
Все хуйня. Херач public AnimationCurve
задавай нужную тебе кривую
далее лерпишь от нуля до единицы нужную тебе штуку. далее
AnimationCurve.Evaluate через нужное тебе значение.
Побалуйся
>У Юнити ведь есть ассет стор - вполне достойный конкурент.
Это не конкурент по нескольким причинам:
1. ассеты пилит один автор
2. они платные
3. наличие ассет стора с платными ассетами не дает разработчикам юнити запилить эти функции в движок бесплатно, из-за чего они вынуждены заниматься какой-то иррелевантной хуитой вроде изобретения своих тредов в C#
>но там какая то скриптопараша вместо нормальной статики
Ну они вроде переросли эти кирилльские амбиции и добавили C# официально. а там и нормальный питон добавили через плагин.
Я думаю эти скрипты были основной причиной непопулярности движка. Надеюсь этот gdscript скоро станет deprecated.
>А как тогда Юнити распределяется по процессорам?
Самым хуевым способом. Тупо создает отдельные потоки для рендера, физона и т.д. Это усложняет архитектуру, все равно тормозит т.к. нужно все синхронизировать, хуево и бесконтрольно утилизирует многопроцессорность, т.к. нагрузка в разных потоках очевидно разная.
Параллельность должна быть на уровне данных. То есть, например, игровая система должна обновлять все компоненты в нескольких потоках (что-то вроде использования Parallel.For())
Чисто теоретический вопрос для интереса.
А как вообще программы пилят на несколько потоков? Ну, вот, допустим, старт, 1 этап, 2 этап. Один поток добирается по 1 этапа и ждёт остальные потоки, и только затем 2 этап начинает?
вовсе необязательно
поток скрипта вот выполняется с частотой с какой может, а если поток физона подкатил новые данные (в юнети физон по фиксед апдейту) вставляет его данные в своё. ну это грубо. на самом деле там сложнее и на самом деле я не знаю как именно в деталях
https://www.gamasutra.com/view/feature/130247/multithreaded_game_engine_.php
Я думаю что это сделано так: в каждой системе есть свое внутреннее состояние, например, в рендере есть какой-то рендер лист. Система тупо в цикле рисует этот рендер лист. Другая система, если ей нужно обновить рендер, просто блокирует поток и обновляет этот лист.
Думаю как-то так.
Потому что это лучший движок на данный момент
Грамотный пиар, широкие возможности, низкий порог вхождения, адекватный скриптовый язык. Кому вообще уперлась твоя опенсурсность?
В чем идея: 2D игра, вид сверху. Есть объекты, с коллизией, типо дивана или стола, сквозь которые меня должно быть видно, поэтому пытаюсь всё делать с тэгом, но скрипт в каких-то ситуациях просто перестаёт работать.
Имена переменных на русском, проблема в этом.
>Sostoyan.Агр
Или все бы тогда на русском писал, я не знаю.
Называй переменные нормально, блджад. От одних только ugol и ugl голова болеть начинает
Ну кстати может быть. Оке, учту. Кстати, я посмотрел. Я оказывается всё пофиксил уже.
У меня еще одна вещь короче. В общем, в чем суть. Если игрок скрылся из поля зрения врага, то моб какое-то время ищет его. Я это реализовал с помощью пика. Но, с такой реализацией появляется баг:
Например, преследование длится 6 секунд, моб заагрен на игрока.
Игрок скрывается за стеной и сразу же возвращается в поле зрения моба.
Через 5 секунд игрок возвращается за стену .
Таким образом получается, что у врага остаётся лишь 1 секунда преследования.
Собственно, подскажите, как можно реализовать это по-другому, чтобы не было этого бага?
При компиляции билда на андроид возникают такие ошибки:
Shader error in 'Hidden/Post FX/Screen Space Reflection': '' : compilation terminated at line 141 (on vulkan)
Shader error in 'Hidden/Post FX/Screen Space Reflection': 'z' : vector field selection out of range at line 141 (on vulkan)
CommandInvokationFailure: Failed to re-package resources.
C:\AndroidSDK\build-tools\25.0.2\aapt.exe package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_
Притом это всё только при компиляции на андроид, если создавать билд для PC-всё успешно компилируется и запускается. В чём причина и как можно исправить?
поделюсь вином для нубасов типа меня и реквестирую гайдов по рефакторингу в visual studio, или по best practices, "правильному" написанию кода в юнити.
Если кто знает вины по паттернам в юнити, кроме game programming patterns, то скиньте тоже.
Возможно, что-то связанное с визуальной механикой
Вот эта книга хороша. Она в целом подскажет, как лучше оформлять код. Необязательно читать всю. Можешь прочитать только интересующие тебя главы.
Cейчас провёл исследование- на iOS успешно билдится тоже. Думаю, эти ошибки исходят от структуры Андротда или Андроид Студио, может быть, у кого-нибудь были похожие случаи и известно решение? Очень нужно сбилдить именно под андроид до утра.
pointerData.position = Input.mousePosition;
results.Clear();
EventSystem.current.RaycastAll(pointerData, results);
if (results.Count > 0) //check UI
{
hitObject = results[0].gameObject;
}
Рейкаст видит только УИ, ок. Но почему он видит эти УИ-кнопки там, где их нет? Не невидимые кнопки, а именно что видит кнопку, находящуюся в одном месте экрана, и в другом месте? Этот hitObject в обоих местах имеет имя кнопки, при нажатии работает как та кнопка, и вообще является кнопкой. Я не понимаю, как это вообще
Глянул на саму кнопку - показывает жёлтое предупреждение в Image, что у изображения нет границы. Из-за этого может быть?
Или не выёбываться и ебашить по тегам?
Есть болванчик. Болванчик может стрелять в объекты. Пока он стреляет в объекты, на которых висит скрипт "Mob", определяет его наличие через GetComponent. От этого самого "Mob" я хочу унаследовать несколько разновидностей мобов и вот думаю как организовать проверку моб ли это или хрен собачий.
Писать проверку на каждый вариант унаследованного скрипта - так себе занятие.
Вот и думаю, можно ли отследить родительский класс или не ебать мозги и хуярить по тегам.
не еби мозги и хуярь по тегам.
на самом деле, я настоятельно не советую звать getcomponent в случаях когда его вызова можно избежать. кроме того что это одна из самых тяжелых функций в юнети хотя я проверял версии эдак в третьей, так еще и теги ведь они прям для этих случаев и нужны.
На айос же получилось(скомпилировал без ошибок, но не запускал, т.к. нету яблока). Т.е. для андроида нужно отказаться от них?
> (on vulkan)
вулькан это вам не директикс, это вам не опенгл. он пока молод и дерзок и нихуя не умеет. вообще удивительно что под айос скомпилировалось
То есть не по старинке ебать, а нежно целовать и облизывать?
Вон там даже народ говорит что с вулканом 9000 фпс, а не то что этот ваш самый дирух или опенрыло.
Ок, отключил постэффекты. Теперь осталась эта ошибка :
CommandInvokationFailure: Failed to re-package resources.
C:\AndroidSDK\build-tools\25.0.2\aapt.exe package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_
stderr[
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'theme' with value '@style/UnityThemeSelector').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/app_icon').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'banner' with value '@drawable/app_banner').
AndroidManifest.xml:5: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
]
stdout[
Configurations:
(default)
Files:
AndroidManifest.xml
Src: () AndroidManifest.xml
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()
Ок, отключил постэффекты. Теперь осталась эта ошибка :
CommandInvokationFailure: Failed to re-package resources.
C:\AndroidSDK\build-tools\25.0.2\aapt.exe package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_
stderr[
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'theme' with value '@style/UnityThemeSelector').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/app_icon').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'banner' with value '@drawable/app_banner').
AndroidManifest.xml:5: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
]
stdout[
Configurations:
(default)
Files:
AndroidManifest.xml
Src: () AndroidManifest.xml
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()
>>50669
>>50673
>>50942
Спасибо всем. Благодаря вам я нашел божественное вмешательство в виде https://gist.github.com/cjddmut/d789b9eb78216998e95c
Во-первых, используй слои (layer), а не теги. Во-вторых, используй интерфейс.
А зачем тебе это наследование ебаное?
До диез дало тебе интерфейсы.
Уверен, твоя задача отлично ими решается.
У тебя все неправильно. Пуля про столкновении просто отправляет сообщение столкнувшемуся объекту. На этот объект ты можешь уже навесить какие угодно компоненты обрабатывающие это сообщение, безо всяких наследований.
Например, компонент пускающий искры, или компонент отнимающих ХП
Есть стандартные юнитевские методы, которые много проще для понимания
Тебе не нужно определять, какого типа этот моб.
Ебашишь Mob как абстрактный класс, ебашишь наследующие от него разновидности, скажем, MaliMob и BolshoyMob. Создать класс Mob нельзя, но ты сможешь создавать MaliMob и BolshoyMob, которые по умолчанию будут Mob'ами.
В Mob ебашишь абстрактные методы "без тела", в наследниках ебашишь те же самые методы с override'ами. Ты будешь искать класс Mob и запускать через Mob абстрактные методы Mob'а, которые будут "автоматически" заменяться овверадиться на методы MaliMob и BolshoyMob
Ну раз ты так сказал
Бро, чувак спрашивает элементарные вещи, а ты его так с лету абстрактными классами грузишь. Вообще в коде для юньки при наличии геймобджектов лучше переходить на ECS и забить на классический ООП, оставив от последнего только наслелования, избегая использования олдскульных паттернов
>абстрактные классы
>грузят
Сколько у тебя IQ?
На кой чёрт кодить на сишарпе, если самые крутые фичи - абстракции, интерфейсы и делегаты - не использовать? А если ещё и типы как-то присобачить, уууух!
Там нет вообще ничего сложного. Абстрактный класс САМ ПО СЕБЕ не существует, но существуют его наследники, в которых он и выражается. Абстрактный метод не содержит в себе никакой логики, он просто является "шаблоном" и указывает, сколько принимает и выдаёт метод, который будет использоваться ВМЕСТО шаблона. Делаешь абстрактный класс Юнит, делаешь наследника Бандит, делаешь наследника Страж. В Юните задаёшь то, что есть и у того, и у другого, скажем, здоровье и урон и абстрактный метод Отака(), а в Бандите и Страже задаёшь особенности того, как будет происходить Отака(). Если коду попадётся Юнит, он не будет разбирать, Бандит он или Страж, он сразу запустит Отака(), и шаблон автоматом укажет, бандитскую или стражниковскую Отака() использовать.
Чем это великолепие заменить вне ООП? Ёблей с энумераторами и свитчами? Так это ж ещё сложнее структурно, чем абстрактные классы и методы. Нахуя новичку советовать то, что сложнее?
ECS подразумевает создание персонифицированных ГО, где инстанцированный, как ты говоришь, Юнит, который может иметь множество экземпляров - может получить всю нужную инфу о любых переменных, допустим, из базы, через контроллер. Итого мы имеем единичный ентити, (или ГО), который не знает ничего о себе, зпаолняемый нужными компонентами, которые заполняются как раз переменными из контроллера-синглтона. Это удобно и для прототипирования, потому как каждый компонент можно настраивать ручками, и для окончательного формирования базы с инфой о переменных и компонентах.
Вообще это не я придумал, да и в случае с командой программистов и прочих более одного человека, разработка становится более прозрачной и доступной для быстрого понимания кода и происходящего.
ECS+MVC = НЯ!
> Чем это великолепие заменить вне ООП?
Кирилы итт проснулись и вспомнили про ооп в гейдеве, когда весь мир уже благополучно забыл его как монструозное и неповоротливое говно и перешел на ecs подход. которого в юнити нет, потому что у разрабов СВОЕ ВИДЕНЬЕ
Почему же свое виденье? Тут тебе и objectOfType и UnityEvents и включение-выключение компонентов прямо на ГО. Можно ECS обмазываться при грамотном подходе
Что плохого в простеньком интерфейсе? Это лучше, чем наследование, чем проверка кучи компонентов и тому подобное.
CommandInvokationFailure: Failed to re-package resources.
C:\AndroidSDK\build-tools\25.0.2\aapt.exe package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_
stderr[
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'theme' with value '@style/UnityThemeSelector').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/app_icon').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'banner' with value '@drawable/app_banner').
AndroidManifest.xml:5: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
]
stdout[
Configurations:
(default)
Files:
AndroidManifest.xml
Src: () AndroidManifest.xml
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)
CommandInvokationFailure: Failed to re-package resources.
C:\AndroidSDK\build-tools\25.0.2\aapt.exe package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_
stderr[
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'theme' with value '@style/UnityThemeSelector').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/app_icon').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
AndroidManifest.xml:4: error: Error: No resource found that matches the given name (at 'banner' with value '@drawable/app_banner').
AndroidManifest.xml:5: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name').
]
stdout[
Configurations:
(default)
Files:
AndroidManifest.xml
Src: () AndroidManifest.xml
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)
Они же просто пограмисты, имитации игроделов. Сможет ли погромист сделать игру, создать шедевр?
Т.е. заполнить данные о компании в Identification?
Вроде бы не совсем получилось-там есть какие-то определённые правила заполнения?
сука блять тебе погуглить сложно? там же всё элементарно, но нет, не хочу, ему блять даже сказали в какую сторону смотреть, нет не хочу, хочу чтобы мы за него собрали приложение
Только я вот не понял, компоненты логики тогда на пустой ГО вешать, или на сам объект?
Парент можно воспринимать как группу или "папку" с объектами. Логика у тебя к самому объекту относится или к группе объектов?
нет, не для того, чтобы группировать. Тут то все понятно.
Чел рассказывал, чо это типа удобно, например если надо пивот настроить (иначе никак) или просто при импорте моделек, лучше пихать в пустой, чтобы было проще потом работать/менять, настраивать.
Я видос забыл, в истории не найду, вот вспомнил, когда пивот кастомный понадобился, а куда логику пихнуть не знаю. Один объект - один пустой ГО, есличто.
Инбифо. Твой чел, ты и разбирайся, хз что он там говорил и к чему вообще.
мало ли кто тут так делает постоянно, может подскажете.
Ебаная хуйня не хочет видеть нажатие, што не так анон.
Ну а хули она не может работать как у всех? eventSystem не помог.
Да блджать, объясните чому это говно не пашет. Колайдер есть, перед объектом ничего нет. И всеравно нихуя.
Rider
Монодевелоп
Блокнот
EventSystem есть? В канвас рейкастер запихни на всякий случай.
Кто тебя знает, может у тебя моник выкручен на полную и хуярит аки солнце.
Лол, а ты глазастый.
Я уже заебался кидать одну и ту же ссылку, но вам нужно изучить принципы SOLID. Даже где-то в дебрях документации Unity можно найти ссылку на этот сайт: https://refactoring.guru/
А как это правильно сделать?
Ты, только, не ударяйся в те техники как ебанутый шизик, пихаяя их всюду.
Доставай их только, когда появляется проблема.
MVP блеать! Омежки-вылизаторы не нужны
Чувак, пойми другое. Все эти техники нужны для того, чтобы упростить сам процесс разработки.
Чтобы ты посреди разработки не осознавал, что написал говно уровня: поменял один модуль - сломал 24 других модуля.
>ебанутый и оверинжинирнутый формат. Юнити его не поддерживает
потому что унити говно само по своей природе? И авторы юнити не смогли написать работающий импортёр?
>Вот и переделывай.
Как я кодить начал, я только и делаю, что переделываю всё. ООП, говорят, делай, наследувай, фор вместо форич используй, синглтоны бля юзай. А тут читаешь - де, кэш он вон как устроен, и если ООП юзать, то это в 50 раз медленнее согласно тому, что по ссылке, чем ебошить методами какого-нибудь паскаля школьного. Это как-то дико, как мне кажется. Я-то думал, если ООП (САМО ООП), то все эти проблемы как бы системно решены, всё по-умному устроено, АН НЕТ, НИХУЯ, ВСЁ ТУПО, А ТЫ ГУБУ РАСКАТАЛ.
Мне не пригорает, возиться в коде-то весело и приятно и самое лучшее времяпреповождение, но серьёзно, хуле всё так плохо, нехитро устроено?
Ты чмоха необразованная.
Пиздуй напиши свой имортер, юнити тебе руки не ограничивает ничем. Потом выложишь в AssetStore за 5 баксов.
Его никто не купит, потому что никто не использует APNG для анимации в играх, т.к. формат конченый и жрёт дохуя времени на цпу которого у тебя нет, лох
Понимаешь, ООП в реалиях геймдева сегодня -- это нихуя не медленно. В большинстве случаев у тебя узким местом производительности будет рендеринг.
ООП пришло для того, чтобы код стал читабельнее и для того, чтобы ты мог быстрей вливаться в новые проекты и быстрей писать код, а не приходить на проект и полгода-год раскачиваться и вкуривать, что же понахуячили эти дебилы.
Беда ООП в том, что люди нихуя не понимают его сути и ругают его за зря.
А вообще, в Unity использует КОП (компонентно-ориентированное программирование)
Хочу построить (build) игру, однако у меня вылезает одна и та же ошибка - 1 пикча.
Посмотрел в инете - понял что у меня не настроен keystore. Настроил, не работает
Парень написал решение проблемы на 3 пикче, но не то что бы я не понял что он хотел сказать, просто я не понял что это за SVN такой, и что с ним надо делать. Кстати у того чувака все писали мол он им очень сильно помог
Прошу объяснить на пальцах что и как мне делать, если конечно это не трудно.
Все эти проблемы блекнут по сравнении с тем, что такими темпами ты никогда не сделаешь игру.
что ж, я попробую!
Там нехуй делать будет, когда эти проблемы решатся. Самые-самые базовые механики готовы, теперь только оболочками их обмазывать, а потом модельки влепить нормальные и всё готово будет. Можно поставить вопрос так - чем сильнее и лучше продумаешь свой инструментарий, тем быстрее потом сможешь ебошить сюжет и карты.
Как бы ты не перегорел вылизывая свою архитектуру и инструментарий которые все равно никто не увидит
Нечему перегорать, я и так уже полый.
Неа, говорит что нельзя старую версию использовать, потому проблема ещё в силе
Так, у меня вроде что то получилось, я кое где поменял кое что. Проблема потеряла силу. Эх, вот бы они всегда так решались благосклонным рандомом
>захотелось переделать связку юниты-клетки в связку массив рендереров - массив координат - массив статов - массив айдишников
Ты что, ебанутый? Это анти-паттерн
После такого поста даже запускать не буду, вдруг там окажется такая годнота, что я осознаю что до этого я занимался неправильной хуйнёй, а белые люди всё делают совсем не так.
Если у тебя есть хоть одно наследование, или в твоем коде нет ни одной функции SendMessage(), ты и так делаешь все не так.
Переделывай пока не поздно
Или если использует богомерзкий SerializeField вместо божественного public, потому что он больше байт занимает.
Делаю сетевой шутер под андроид. И вот задумался. Есть объект игрока, который я могу разбить где-то на 7 разных компонентов. Это удобно для разработки и код в целом понятнее будет, НО, это породит много вызовов методов, породит больше вызовов GetComponent и тому подобное. Компоненты вида PlayerHealth (синхронизирует здоровье, принимает демадж), PlayerMovement (синхронизирует позицию, обрабатывает передвижение), PlayerVisuals (реагирует на события, создаёт эффекты, отображает модели), PlayerShooting, PlayerInput, PlayerAbilities и т.п.
Не приведёт ли это к проблемам в дальнейшем? Или стоит всё по-старинке захерачить в 2-3 компонентах?
Похуй мне на шаблоны, они однохуйственны. А вот разница в скорости в 50 раз - это уже что-то, о чём стоит побеспокоиться.
Хуярь на асме, батя грит скорость в небеса улетела к Аллаху.
Во-первых, результат GetComponent всегда можно кэшировать.
Во-вторых, когда ты разбиваешь код на компоненты, то ты делаешь свой код гибче и реюзабельнее. Юнити построена на таком подходе, т.к. если бы все компоненты физики/рендеринга и прочего были захуячены в один класс, то ты бы заебался настраивать каждый компонент так как тебе нужно. Ну и было бы дохуища кода, который ты бы не смог переиспользовать и дрочился бы ты с boiler-plate кодом как ебанутый.
Из плюсов могу привести пример. Например, у меня есть компоненты Projectile и Damageable.
Projectile наносит урон компонентам Damageable, Damageable компоненты следят за тем, что если наносимый дамаг выжрал всё здоровье, то пора сдохнуть тому или иному объекту.
Таким образом я смог переиспользовать один и тот же код для юнитов и для статичных объектов на сцене, которые могут быть сломаны, т.к. логика у них по сути одна и та же.
if (damageValue >= currentHealth) InvokeDeathEvent();
Как-то так.
>GetComponent
ГейОбжект знает обо всех компонентах и хранит ссылки на них. Поэтому ГетКомпонент быстро отрабатывает. Но если будешь вызывать его по 10к раз за один тик, тогда могут быть проблемы.
Ты ебанутая пизда, ты сначала напиши код, который реально будет тормозить и убивать твой CPU, а потом уже пиши, что-то про производительность. В большинстве случаев, игры задыхаются из-за того, что у тебя слишком много говна рисуется на экране.
Повторяю ещё раз, необразованный. Шаблоны нужны для того, чтобы не переписывать один и тот же код по 100 раз, т.к. ты с "архитектурой" обосрался. Они нужны просто для упрощения процесса разработки.
> сначала напиши код, который реально будет тормозить и убивать
Я как-то раз запустил while (true) в обычном viod, который висел в падейте и прихуел от того, что у меня даже первый кадр не прорисовывается. Потом понял что я долбоёб и перенёс это в корутину.
мимо шёл
Ты ебанутый. Суть компонентов в повторном использовании. Зачем тебе делать дохуя компонентов, которые используются только с одним объектом?
> Зачем тебе делать дохуя компонентов, которые используются только с одним объектом?
Архитектурно это проще, но таки, тот ананас ебанутый, 7 компонентов на одном объекте это наркомания.
>7 компонентов на одном объекте это наркомания
Ну, можно до 5 сократить.
Player - хранит имя, жизни, обрабатывает получение урона и смерть. И любая другая хрень будет здесь же.
PlayerMovement - обрабатывает передвижение, коллизии, прыжок.
PlayerVisuals - отображает скин игрок, оружие, анимацию, эффекты стрельбы/смерти/крови.
PlayerShooting - занимается стрельбой из оружия.
PlayerInput - принимает ввод и транслирует его на другие компоненты.
Это такой минимум, который не стоит сокращать, как мне кажется. Хотя PlayerInput можно перенести в Player. PlayerMovement тоже можно. Да вообще все эти компоненты можно туда перенести, но это будет пиздец.
> но это будет пиздец
Именно. Если у тебя скрипт и швец и жнец и на дуде игрец — там начинается такой анальный цирк, шо я бля ебал того маму рот.
Не слушай этих чуханов, так и надо делать.
> Player...
Зачем код разбивать на компоненты если они все используются только на одном и том же го и больше нигде?
А для другого эвенты у нас не используются, да?
Хуйню пишешь. Ей богу, пора начинать брать деньги за консультации.
Character - хранит имя, жизни, обрабатывает получение урона и смерть. И любая другая хрень связанная с любыми персонажами игры (NPC, враги, игрок). обрабатывает передвижение, коллизии, прыжок.
Player - принимает ввод и транслирует его на другие компоненты. отображает скин игрок, оружие, анимацию
Для оружия - разные компоненты с логикой оружия на самом префабе оружия
>А как сделать тогда разные виды оружия?
Разными компонентами
>Оно же у всех компонентов свою хуйню вызывает, не проще ли геткомпонент сделать?
Суть в том, что ты не знаешь во время выполнения игры, какой компонент на оружии, например. Можно делать наследование или интерфейс. Но лучше использовать SendMessage. Почему это лучше? Потому что у тебя может быть не один компонент-обработчик сообщения. Например, компонент, который спавнит отстрелянные гильзы, или проигрывает какой-то эффект
900x544, 0:07
>SendMessage
>2к17
Тут хоть кто-то с кодерской вышкой есть кроме меня? Поднимите руки.
Тролли троллят троллей.
Да знаешь, уж лучше быть с кодерской вышкой, чем фрезеровщиком, посмотревшим на ютубе ролик "делоем хоррар за десеть менут на юнете"
Ну да, подвигает ассетики по сцене за два часа и молодец.
https://www.youtube.com/watch?v=cnEr4P6gGWo&t=1s
Сегодня я делаю фабрику, а завтра фабрика делает мне игру. Учись у мастеров.
Я с кодерской вышкой. Ты покажи конкретно, где хуйню городят-то?
Лично я вижу, что ньюфаги у "бывалых" интересуются.
nyet
Только орки. И пару эльфов.
события с# усложняют архитектуру и логику без видимых преимуществ. Лучше использовать SendMessage
Как можно усложнять то чего нет
Это платиновый пост?
Тут ТОЛЬКО тролли. Ну, или иронизирующие. Суть одно и то же. И половина из них мемеры.
Зацени няшный код от корпораций. ARKit, хололензовский сдк, кинектовский и прочие штуки от больших ребят. Или тех-же юнитеков. Стилистики общей написания плагинов под юньку нет. Но есть понимание, что во-первых - нет перегруза с абстрактными классами. Полностью отсувуют реализации синглтонов и ебучих фабрик с фасадами. Зато есть контроллеры, которые обращаются к управляющему классу, и объекты с компонентами обращаются в эти контроллеры. Во-вторых любые реализации взаимодействия с уи-шными компонентами и прочим связанным с вызовом на конкретных го происходит через геткомпонент, а лучше - публичные unityevents. В-третьих никаких тегов, слоёв и сендмессаджей. Это вообще какое-то костыльное решение для быстрого прототипирования и дебага
Ну например компонент на пуле должен отправлять сообщение объекту с которым он столкнулся.
1. Очевидно это проще сделать просто с SendMessage и все. Если на объекте есть компоненты получающие это сообщение, они сработают, если нет - ничего не будет.
2. Как ты это сделаешь без SendMessage? Очевидно, подписка на события тут в принципе не может быть сделана. Можно использовать явно GetComponent<Health>() со столкнувшимся объектом и например отнимать ХП.
3. А если у тебя несколько компонентов обрабатывающих это сообщение, то единственный вариант использовать интерфейс с одним методом и как-то foreach (var comp in obj.GetComponents<IDamageable>()) comp.DoDamage();
Очевидно, что первый способ самый простой и с ним все компоненты изолированы друг от друга без зависимостей. Это идеальный вариант.
Геткомпонент и прямая ссылка на объект. А вы мастер в том, чтоб плодить сущности без их надобности
Отправка сообщений единственное правильное решение, о чем говорят сами разработчики давая такой инструмент.
Инструмент для возможности быстрой отладки и запуска методов сразу на куче компонентов. Отладки.. Отладки. Отладки.
Чем плохи синглтоны то?
Вон у MixedRealityToolkit-a майкрософтовского синглтон на синглтоне и проблем с ними я как-то не заметил.
>Зацени няшный код от корпораций
Ну лично из моего опыта, я пришел к выводу, что чем проще и чем меньше кода, тем лучше.
SendMessage делает многие сложные вещи простыми с минимум кода.
Этот паттерн не дает никаких преимуществ а только усложняет код и плохо сказывается на производительности. Вместо него можно просто делать поля статичным.
Mrtk потихоньку их выпиливает, вводя неймспейсы и классы уже в движок. Вот эти все темы с XR.WSA и прочее. Да есть в паре мест синглтоны, но они являются лишь контроллерами для выполнения каких-то методов со сцены. Те в свою очередь пользуются пару-тройку больших классов для спейшал мпюаппинга, войска рекогишнк и прочего инпута. На самом деле все красиво, но в некоторых моментах перемудрили Здравствуйте, коллега. И вообще, что сейчас происходит с ветками на гитхабе посвященным теме, этим всем обновлениями юньки/винды/беткам/очков - пиздец полнейший. То, что юнитеки отдельные mrtp версии пихают - уже говорит о чем-то страшном
Во-первых, https://docs.unity3d.com/ru/530/Manual/MessagingSystem.html
Во-вторых, SendMessage - это удар по производительности, т.к. ты вызываешь метод по строке, а тут уже и так становится понятно, что под капотом крутится подобие рефлексии. А также передаёшь аргументы как object. Из-за чего триггеришь лишние упаковки для value-type.
В-третьих, если ты себе инструменты для рефакторинга ломаешь, т.к. если ты поменяешь сигнатуру метода, то тебе надо будет руками пройти и все SendMessage поменять и проверить.
>>51919
Приведу пример, который у меня недавно на работе случился. Я сидел писал код, отвечающий за запекание текстур окружения на загрузочном экране. Код у меня был не привязан ни к чему. Из-за чего я один и тот же код спокойно крутил в редакторе и в рантайме. Внезапно пришла задача сверху, что нужно сделать отдельный прогресс-бар для запекания текстур.
Поскольку в тот момент я был в отпуске, кто-то взял задачу на себя. Не вдаваясь в детали разрабатываемого модуля, он просто вхуячил посреди пайплайна запекания такие две строчки.
UiManager.Instance.LoadingPanel.text = "ЗОПЕКАЕМ ТЕКСТУРЫ)))";
UiManager.Instance.LoadingPanel.progress += 0.15f;
Код редактора был сломан нахуй. Люди, которые работали в редакторе не смогли продолжать работать, а тот чувак так и не понял, что плохого в синглтонах. Ну сломался редактор, ну и чо - ПОЧИНИШЬ ЖЕ)))) ты же его писал)))000
Добро пожаловать в русский геймдев.
Ну да, в том и дело. Говорю ж - долбоёб.
Только при первом вызове, а потом кеширует функцию и тогда ее вызов ничем от обычного вызова не отличается.
Мамой клянусь!
Ты тупая чмоня, эвент менеджеры для кого придумали? Подписка не может быть сделана лол блядь. С кем я в один тред зашел, пиздец
Усложнение архитектуры
640x360, 3:00
Слушай сюда, n00b.
Пиши так как хочешь/удобно. Как только упрёшься в ограничения архитектуры, достаёшь паттерны и думаешь как они тебе помогут разрулить ту или иную проблему.
Ты по-любому по незнанке наломаешь дров, но ты и учишься, чтобы в будущем не ломать одни и те же дрова, а с каждым проектом становиться всё лучше и лучше.
Только практика поможет тебе понять, что не так с кодом и как дальше с этим жить.
Удачи.
Есть враг, есть точка, к которой он идет. Точка должна переместиться, после того. как враг до неё дойдет. Точка переместиться должна рандомно, но при этом не попадая за стену. Как сделать?
Чувак говорит, что лучше сделать один апдейт на игру, и вызывать другие псевдо-апдейты(просто функции) из него. Еще про кеширование трансформы. Почему они всю эту хуйню до сих пор не оптимизировали, вот что интересно.
Потому что они заняты важными фичами для заманивания артистов, а основная масса пользователей даже не знает что такое рефлексия.
Хватит форсить себя, полудурок ебаный.
В юнитиблогах эту тему обсосали уже, нахуя видео записывать? Особенно, когда нет исходников движка и что-то кукарекаешь с умным видом.
Не оптимизировали потому что ты полудурок ебаный, который не шарит в программировании и не понимает как крутятся шестерёнки под капотом.
сори за мат
Про трансформ ты жопой слушал что ли? А насчет вызова апдейт, старт и прочего говна посмотри на стек вызова этих функции, он идет из нативной среды ядра движка через прокси объекты с кучей проверок на каждый вызов + там скорее всего какие то уровни аспектов для логирования, синхронизации и еще какого нибудь служебного говна, которое пришлом девам в голову после прочтения 20 ПАТТЕРНОВ ПРОЕКТИРОВАНИЯ КОТОРЫЕ ДОЛЖЕН ЗНАТЬ КАЖДЫЙ ПРОГРОМИСТ. А еще, если бы ты уебок дошел до сборки проекта, то увидел бы настройки оптимизации и твой кусок говна из двух кубов, который ты называешь проектом, работал бы на 4 миллисекунды быстрее.
Но все это неважно, просто ни на сколько не важно, и не имеет никакого значения, потому что вы уебки второй тред подрядят пережевываете говно друг друга вместо того чтобы сделать хоть одну ебучую игру для плеймаркета.
Как же вы твари бесите меня, насрал бы в рот каждому кто еще спизданет про оптимизацию, архитектуру или ооп. Просто трясет нахуй.
Пиздец это чухло минут 5 не может понять что он приравнивает вектор к флоату.
Насрал в треде, можешь кушать
У него и лист еще бесконечный, охуеть просто. Почему какие-то говноеды, вчера начавшие писать код пытаются учить других?
> пора начинать брать деньги за консультации
> Почему какие-то говноеды, вчера начавшие писать код пытаются учить других
ОХУЕТЬ, ОН 300 КИЛОБАЙТ СЭКОНОМИЛ! НУ ВЫ ВИДЕЛИ!? ЭТО ЖЕ МОЖНО ЕЩЕ ПАРАГРАФ ТЕКСТА В ПАМЯТЬ ЗАПИХАТЬ! ВОТ ЭТО ОПТИМИЗОН!
Даун, теперь сделай первый вызов не в первом же фрейме. Кэшируется у него блядь.
Лол, да. Я и сам охуел. Что-то здесь нечисто, но пусть это будет магия кеширования, ладно.
NavMesh
Бери только те точки, которые за стеной. Либо заранее считай, либо как-то разбивай множество по-умному.
В прошлом треде мелкобуквенный ананас кидал свой ассет, который в навмеше определял "за стеной" точка или нет. Или сам поищи (тред ещё не смыло), или дождись пока он вкатится.
Ты вопрос-то конкретизируй. Если тебе нужны катсценки, то лови
https://www.youtube.com/watch?v=7SsqUb9FgW8
Книгу из шапки почитай. С такими запросами даже она у тебя "вау" вызовет.
Спасибо, смотрел гайды на ютубе о MovieTexture, но никак не импортировалось видео. Попробую по оф.гайду. Чё-т хуй знает, почему сам не додумался его посмотреть, лол.
Ты ебанутый. В треде движка обсуждают движок, а не игры
кокой злой. впрочем, всё так и есть.
Тебе надо не снизить, а повысить, так как твой плагин требует апи 24. В настройках для билда ищи.
Значит не используй Tango.
>2к17
>катсцены на майе
Вот нахера юнитеки так старались и пилили тебе божественный Cinemachine?
Это ARCore какой-нибудь или дейдрим?
Не могу удержаться и ссу на тебя еще раз https://blogs.unity3d.com/ru/2017/08/25/community-stories-cinemachine-and-timeline/
>> Не могу удержаться и ссу
>К доктору обратись, это энурез.
Не могу я к доктору - если я расскажу о своих проблемах и о двачах - обоссыт
гайды многодетней давности. Мувитексчур -
тяжеловесное неповоротливое говно. Тебе сюда https://docs.unity3d.com/Manual/VideoPlayer.html
Сомневаюсь. Я ее видел(совсем немного), вроде ничего супер интересного нет.
Я анон, который вопрос задавал. У меня идея возникла следующая: Можно провреять рейкастом, есть ли стена между точкой и мобом и, если есть, то перемещать её перед стеной.
определи рандом внутри нужной тебе зоны. и... Зачем спавнить спавнить что-то вне нее, чтоб потом подгонять как раз внутрь этой зоны? Это же идиотизм какой-то
Флажком.
Ну прикол в том, что у меня очень много лвлов в игре будет и я хочу потом не запариваясь об этом, делать сами лвла. Ну, чтобы мне не пришлось ничего делать, кроме как ставить самих врагов, сундуки всякие, сам лвл.
Че? Нет, конечно. Я имел ввиду, что мне будет впадлу зону спавна точки выставлять каждый раз.
По какому-нибудь закону автоматом выставляй точки.
Зачем агентом? Плодите сущности, сударь.
Если эти комнаты достаточно простой геометрии, то ничего не мешает вполне таки обрисовать границы чем-то вроде мешика по точкам углов помещения(меш и не нужен, нужны координаты точек в углах и все)
Зачем мне навмеш, если у меня простенькая 2д игра, с самым простейшим поиском пути?
Комнаты прямоугольные?
Раньше у юнити было просто и чисто API. Сейчас я смотрю на Playable и на Job System и охуеваю: что это за говно блядь.
>Сейчас я смотрю на Playable и на Job System и охуеваю
Это считай плагины. Как и uNet, как и UI. Можешь своё запилить. Главное, чтобы они новую версию шарпа подрубили и нет фреймворка. Тогда я с удовольствием запилю какой-нибудь плагин.
Короче, я видимо реально не умею вопросы задавать.
>Точка переместиться должна рандомно, но при этом не попадая за стену. Как сделать?
Вот вопрос)))
Берёшь минимум, берёшь максимум, ебошишь рандом между минимум и максимумом. Минимум и максимум определяешь во время загрузки комнаты.
>>52330 (Del)
>1. Рейкаст в рандомную сторону от врага. Смотришь на расстояние до столкновения и ебашишь рандомную точку между врагом и столкновением(догадаешься как сделать?)
Спасибо большое, это то, что мне было нужно.
>2. Если у тебя тайловая карта, то простейший пилишь поиск пути. Из этого вытекает и получение всех точек до которых можно дойти, и определение того, есть ли путь до нужной тебе точки.
Это бы не подошло, т.к. у врага может появиться точка, например, за домом и она будет являться проходимой, но он туда идти не должен.
Да, я и сделаю рейкастами.
>Чтобы это исправить достаточно пометить точки непроходимые для врагов, которые при этом могут быть проходимыми для игрока.
Дык, если они заагрятся на врага, им надо будет выйти из комнаты, чтобы преследовать его. Ну и поиск путей в таком случае тоже нужен, т.к. мили враги должны использовать его, чтобы обходить всякие столы, тумбочки и т.д.
А рейкаст не будет попадать в дверной проем, например, и они не будут выбегать из комнаты? Или я не понимаю чего-то.
Вообще на это очень маленький шанс, но я просто добавлю коллайдеры в дверные проёмы в тот же лэер, в котором находятся стены.
Ха блядь! Я по одному только инпут филду на 2:48 сразу догадался, что эта игра сделана на юнити. Вот серьёзно: всё, что сделано с использованием стандартных ассетов, выглядит одинаково, и внутренние ограничения на стандартные ассеты - те же кнопки или инпутфилды - меняют дизайн игры узнаваемым образом.
Я пока что умею споттить юнити безотказно по заставочке юнитовской и кнопкам с инпутфилдами. Какие ещё фичи движка выдают его с головой?
Стандартное освещение/материалы. Глянцевый унреал энгине сразу видно, например.
Аааа, так вот где эта галка. Я искал ее в инспекторе объекта, на котором висит аниматор, а она на клипе. Спасибо.
Да не похуй ли? Рядовой игроман о таких вещах не задумывается, главное чтобы игра норм была
>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:
Там мануал по старой версии юнити. Вопрос, появилась ли сейчас такая функция, если да, то как называется и используется?
Сам с этим долго ебался. Короче. Выделяешь стрелочку к анимации. В инспекторе настраиваешь переход. Там снизу такая синенькая область, ставишь её на минимум и галочку с "exit time" снимаешь.
>Я пока что умею споттить юнити по стандартным ассетам
Ебать ты Шерлок
Фон кпонопчек можно менять, никаких ограничений нет
Юнити даже детектить не нужно. 90% игр от нонеймов, и всякое говно запиленное на коленке от мажоров, как правило на юнити
>Фон кпонопчек можно менять, никаких ограничений нет
Дело не в фоне, дело в том, как кнопочки реагируют на нажатия.
А что мешает запилить своё кастомное поведение кнопкам чтобы никто не догадался? кому бля это в здравом уме надо
>критикуют кнопочки
>значит, хотят замаскировать поведение! Надо бы дать совет, как это сделать!
Не вся критика требует ответов. Знаешь, иногда можно просто смотреть на что-то и получать удовольствие от увиденного.
Че в мануале из шапки треда пишут, то и делаю, не выёбывайся
Оно хорошо для лепки кактсценок и для перемещения болванчиков. А для управления игроком аниматор подходит больше.
Ты путаешь с таймлайном.
Playable скорее больше подходит для процедурной анимации, без который в больших проектах достаточно тяжко.
Animator - это монолитный кусок.
Нет, если тебе хватает пропертей и не нужно контроллировать анимации из кода
Блять т.е. от idle к run. Но энивэй, иногда всё-равно зависает анимация на run, хуевый баг какой-то
Модер, почисти мои посты короче, заспамил все к хуям
Лучше на ноль не убирай, оставь 0.1 секунду, а то смотреться ущербно будет.
Ну дык запили стори с самого начала. Образование есть? Когда программировать начал? Как вкатился? По вакансии или заметили? Как работа? Доставляет или рутина? Сам же знаешь, что рассказывать :)
> Так я не понял про аниматор, че зашквар что ли? Работает же, мне сложных анимаций и не нужно в платформере
Если у тебя там полторы анимации, то забей.
Ну давай сначала определимся каким именно образом у тебя объект куда-то движется. Аниматором? Геймконтроллером? Силой риджидбади? Транслейтом?
У меня похоже было на бэтке. Откатился со стабильной версии - отпустило.
Да? Ну тогда похуй, спасибо. У меня последняя версия с поддержкой 32битов, мне некуда вкатываться
>>52465
Транслейтом.
Нахуй тебе rb, если velocity.magnitude хавается стандартным чарактерконтроллером? Но ты нахуевертил свой, так что теперь либо твой велосипед нужно разбирать, либо костылить. Выбирай.
Дык у меня игра 2d, поэтому я и свой сделал.
Это в процессе разработки осталось :)
>>52492
Это самое первое, что я в жизни написал. Но спс, поправлю.
>>52479
Так а всё-таки, можете объяснить, почему у меня такая хрень происходит? Причем баг этот идет только в сторону, которой ноги поворачиваются. Ну т.е., если поставить (vector2.right, latetonow), то соответственно, при ходьбе вправо это будет.
> Так а всё-таки, можете объяснить, почему у меня такая хрень происходит?
Для этого надо разбираться во всех твоих велосипедах, вплоть до аниматора, который ты не показал.
И, кстати, определения типа
> творится какая-то неведомая хуйня
> почему у меня такая хрень происходит?
не сильно проясняют твою проблему.
Заливай на гит, посмотрим. А так на гуще гадать — толку мало.
>не сильно проясняют твою проблему.
А, дык я приложил скриншот с инеспектором. Там Rotation. Стрелочками справа указано направление движения. Наверное надо было уточнить.
Ладно, ты, судя по всему, парень новый, так что давай попробуем сначала.
У тебя движения задаются чем? WASD'ом? Если да, то кто тебе мешается на этот самый WASD повесить поворот в нужную сторону?
Как вариант - унять амбиции и грузить кнопки не сбоку, а прямо над полем ввода.
> Внезапно обнаружилось, что кнопочки-то будут грузиться ПОД любым УИ, а мне надо их грузить НАД любым УИ
Рор, лэйаут зависит от позиции в иерархии под канвасом. Ничего там дочерним делать не надо.
1. Плавность поворота. Сейчас он охуительно выглядит, реально.
2. Я вообще эту игру хочу под мобилку сделать и там джойстиком будет управление задаваться. Просто пока-что я на компе всё тестирую, чтобы проще было.
> Плавность поворота
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, туда и крутишь своего болванчика.
А как из Input взять их под поворот?
У меня единственная идея, которая была, пиздец ущербная.
если deltaX>0 transform.rotation =, ну ты понел
> А как из Input взять их под поворот?
Ну блин, я ж тебе скинул
> Vector3 direction = (target.position - transform.position).normalized;
> Quaternion lookRotation = Quaternion.LookRotation (direction);
> transform.rotation = Quaternion.Slerp (transform.rotation, lookRotation, Time.deltaTime /тут коэфициент поворота*/);
target.position откладываешь от своего позишина, учитывая оси и минусы.
Хотя .normalized тут, наверное, и не надо. Это кусок из моей 3д-херни, где плавный поворот работает. Если зуб перестанет болеть - попробую в 2д попробовать.
Можно ли на яблочных девайсах поставить моё приложение не публикуя его в маркете и не имея ентрепрайз сертификата? Вариант с добавлением тестовых девайсов тоже не подходит.
Кейс такой - на мероприятие придут люди и им нужно показать апп, те у кого андроиды просто скачают и поставят его, как быть тем у кого аплы?
Если нормальных вариантов кроме айтюнс нет, то вопрос - как долго обычно публикуются приложения?
Спасибо что дочитал до ентого места..
А там на яблоках просто подрубить по юсб и кинуть скомпиленный файлик нельзя?
Я просто яблок никогда не ел, но вроде должно быть всё просто.
> , Time.deltaTime /тут коэфициент поворота*/);
Если фреймрейт скачет, то интерполяция будет дерганой. Лучше использовать захардкореное значение.
Можно и так.
судя по тому что я читал можно только на своем девайсе со своего девелопер аккаунта.
На разные девайсы при наличии ентерпрайз сертификата. Либо если добавить их в тестовый пул своей дев. группы, с ограничением 100 девайсов в год на группу.
Предлагать людям на мероприятии джейлбрейкаться тоже не вариант.
Т.е. безнадега, вся надежда что я чего-то не так понял.
Я нашёл, в чём дело. Я создавал копии объекта в пуле, но не прописывал им родителя в виде канваса. Из-за этого кнопки не появлялись на экране, собственно.
УИ - это ад. У меня накожено меню и полторы панельки внутриигровые, и я внутренне содрагаюсь, сколько взаимодействий нужно будет тестировать, когда увеличится количество всего этого говна. И ведь, сука, нельзя просто чисто и раздельно всё сделать, всюду столько исключений из правил кроется, что я просто хуй знает.
>>52458
>>52460
Сначала пришел в инди компанию, где начальник играет в геймдев разработку. Имел за плечами среднего качества вышку по ит-направлению и опыт уровня /gd/ около двух лет.
В целом было весело, делал прототипы всякие. Но через пол года мне предложили уйти (я доебал писателя и геймдиза, пытаясь донести до них, как работают текстовые квесты). Через две недели нашел другую вакансию, связанную с vr/ar разработкой. Год работаю там, делаем не игры, а btb презенташки всякие на юнити, но какая разница. Иногда интересные кейсы попадаются, иногда рутина, иногда отбитые заказчики. По моему опыту считаю, что вкатиться в юнити макакинг просто, нужно лишь иметь средние знания шарпов и пару проектов, чтобы показать (не обязательно даже допилиных).
Ты прошаренный. Подскажи что делать чтобы люди работали на меня ЗАПРОЦЕНТЫ. Есть какие-нибудь хитрости может?
Где работаешь? Сколько получаешь?
Я зарабатываю уже на протяжении 3 лет.
Начинал с реверс-инжиниринга игор, а потом чудом вкатился в геймдев. Теперь выкатиться сложновато.
Заклинания, заговоры, настойки приворота, блять, что угодно! Не хочу и не буду чужие игры делать. С какого хуя я должен работать над чужими играми если своих ИДЕЙ жопой жуй.
наканецта!
Я пытаюсь, братан. Но и мечтаю что однажды у меня будет кто-то на кого я смогу свалить половину работы.
Прикрутил unity IAP, сделал кнопку, в плеере запускается фейкстор, покупается, все ок.
Делаю билд, залил в стор, поставил на тел - запускую - нихуя, описания товара нет, цены нет, при нажатии выпадает нульпойнтер на хер знает что, хер знает где. Второй день пишу логгер чтобы понять хотя бы где ошибка.
Кто имеет успешный опыт прикручивания этого говна - поделитесь, а? Делал все по туториалам юнити.
1280x720, 0:42
http://dropmefiles.com/iQobg
Может найдётся умелец, который перепилит проект, убрав все баги и прочий щит. Что бы на будущее для нубов хороший пример был. Кто если не мы будем подымать с колен индигей девелопинг?
> собственное инди
"Хуяк-хуяк и в продакшен"? Для собственной игры нужен художник, моделлер, дизайнер, композитор, да дохера кто нужен, вплоть до маркетолога. А это всё упирается в деньги.
Можно, конечно, быть человеком-оркестром, но тогда игру будешь делать 10 лет и все эти 10 лет питаться дошиком и запивать водой из крана.
> по мануалу из шапки треда
Там мануалы местами кривые, потому как писались ещё при царе Горохе и на новых версиях юньки могут вести себя странно.
Я по тем же мануалам делал тетрис, так пришлось допиливать.
Тебе может ещё презентацию запилить надо было?
Давайте просто разберемся, чего там подправить надо, или где нормальный мануал взять, багов дохуя. Не бойтесь архив качать, там нет вишмастеров
> Тебе может ещё презентацию запилить надо было?
Обычного бэндикама хватило бы с головой.
> Не бойтесь архив качать
Ну сча скачаю, хули.
Пацаны, не качайте, у меня юнити сломалась от этой хуйни.
Ебать, болванчик мало того что подпрыгнул в стратосферу, так ещё и когда приземлился - провалился сквозь первый слой кирпичей.
Ну теперь нашёлся бы профи, который смог бы запилить марио без багов.
Сейчас вот такой вот мануал нарыл, пойду смотреть:
https://www.youtube.com/watch?v=CAPVBTKk3Ww
Может после просмотра сам что-то вкурю.
Вообще накидайте пожалуйста годных ссылок или лучше готовых проектов с платформерами и прочим 2d щитом, змейки, тетрисы, квесты, кликеры и прочее, у кого что есть, если не жалко, можно на почту - maQncterejiANUSgmatdEilPUNCTUMcV8yom Если сильно годные 2d проекты жалко отдавать за просто так, пишите свои предложения так же на почту. А вообще, я за то чтобы мы сплотились все, и помогали другу другу, чтобы было больше действительно годных игр, а не той недоделанной параши, которую нынче пачками выдают школьники и прочие лентяи. Нам нужен хороший мануал по вот этим всем техническим основам, на которые по сути не так много времени и уходит, главное чтобы без багов были. Разъебаться с ними и уже отдаться непосредственно геймдизайну
Это я понял, но кто напишет, ты напишешь? Я не смогу, я нуб. Поэтому и прошу профи
> ты напишешь?
Может и напишу тетрис от скуки за вечер написал в своё время, но пока сижу с дикой температурой и соображаю хуже обычного. Даже свой проект Тауэр дефенс не открывал уже несколько дней.
Физон для аркадки написать - неделю, даже нуб справится. Возьми офишиал гайдпро картошку с канала юнити.
Графон, локализация, ЮИ, левелдизайн - вот где пердолинг, и никто тебе никаких гайдов не напилит.
Спасибо. Вот это вроде годнота:
https://www.youtube.com/watch?v=wGI2e3Dzk_w&index=1&list=PLX2vGYjWbI0SUWwVPCERK88Qw8hpjEGd8
Просто блять, надо шапку треда тогда перепилить, хули там делают кривые мануалы? Надо ей заняться
>>52622
Ок бро, поправляйся там.
>>52623
Так я о чём и толкую
>техническим основам, на которые по сути не так много времени и уходит
>Разъебаться с ними и уже отдаться непосредственно геймдизайну
Я рылся в мануале у них на сайте, но чё-то не наткнулся, о чем ты толкуешь, кинь ссылку?
Картошка старая как говно, мож уже и по новее есть чего, зря я ее вспомнил.
Проблема всех юнити-мануалов по аркадкам - правильно высчитать стоит игрок или летит в воздухе. Все остальное просто решается физикой ригибоди2д.
Неужели за годы макакинга не оброс связями и знакомствами? Может быть в твоем окружении есть люди кто хотел бы запилить собственную игорь? На почве этого можно было бы слиться в стихийном потоке коллаборации.
рассказывай про зарплаты на всех этапах, что на собеседованиях спрашивали.
Интересно еще про первые дни, вот пришел ты, что тебе дали из задач, насколько торопили по времени, помогали ли?
Во всех компаниях своя специфика, но наверняка есть база, которую нужно знать обязательно, что это? Документация и уроки с сайта юнити, или есть дефолтные книги, или еще что?
Вот запилил я морской бой и простую ТД, с графеном из бесплатного ассетстора и примитивов, все работает, но код — говно. (Делал часть по туториалам, но все равно потом заново переписал по-своему). Стоит подучить документацию и идти на джуна?
Тестовые задания были?
Очевидный OBS
Не достаточно финансов, чтобы лезть в залупу и тратить деньги на собственный проект. В свободное время пилю всякое, но дропнуть работу и пытаться мутить что-то своё стрёмно.
>>52645
Зарплата от 50(на первой работе) до 100(сейчас).
На первой работе просили натаскать шутан из ассетов и логику для пары пушек написать, на второй писал в качестве тестового расширение для редактора.
Код везде и у всех говно, приходит с опытом.
и в альфу и в бетту пробовал, однохуйственно.
адбы пока нету, не прикручено.
Выбрасывает Пурчез фейлюр, нульпойнтер эксцепшион, вроде как из недр IAPButton
там обычный код из примеров.
кнопка и листнер
а ты заводил торговлю через юнити иап? все работало без оверпердолинга?
вернусь с командировки, попробую логирование нормальное сделать, вернусь в тредж.
Ну бля, типичный юнити тред.
Я хочу останавливать текущую корутину (или анимацию, я хз) и возобновлять её по требованию с того места, где её остановили.
Мне что, запускать корутину, проверять, достигнут ли буль паузы, если да, то останавливать её и брать оставшееся количество кадров, сохранять до возобновления, и при возобновлении начинать корутину заново с остатком кадров?
И что этот таймскейл сделает? Все скрипты с тайм.дельтатайм будут нули получать или что?
> И что этот таймскейл сделает?
А что обычная пауза делает? Останавливает всё.
> 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.
Это слишком просто. Тут точно какой-то жуткий подвох кроется, юнити ж кривая.
Ты не заставишь меня не писать велосипед!
Но серьёзно, это слишком просто. Что значит время здесь? Вот есть апдейт. Каждый фрейм он вызывается у всех, разница между фреймами в секундах это дельтатайм.
Вот есть у меня инпут с клавиатуры. Я поставил таймскейл на 0. Когда может произойти апдейт, который поймает инпут?
Ты совсем безруки и не можешь посмотреть документацию?
> 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.
Оно всё так написано, что вопросов остаётся больше, чем ответов. Ладно, фиксед апдейт не вызывается. Все анимации и движения в фиксед апдейт закидывать надо, чтобы таймскейл = 0 работал безупречно? И все дельтатаймы тогда всегда должны быть как deltatime * (выражение) использоваться?
А инпутфилды? Они же с самыми разными апдейтами внутри сидят. Из-за этого таймскейла они не отвалятся?
Это такой тралленг тупостью?
Всего одна строчка, блять, возьми напиши её да проверь что будет.
Ну и на этом спасибо. Доброй ночи.
Чувак, я заводил инапы, только по своему опыту я не использую примеры. Я ебашу так.
Кривой ты, потому что ни разу не видел движки и игры ни разу не писал.
VR/AR. b2b презенташки. Да вы сударь, выходит, что мой коллега. Сколько лет опыта в этой теме? Есть устройства мало характерные для сферы, с которыми общаешься?
> VR/AR. b2b презенташки
Это когда вокруг всё летает и прыгает, а голос за кадром говорит какая наша контора охуенная?
На какой высоте расположен УИ и как поменять эту высоту?
> На какой высоте расположен УИ и как поменять эту высоту?
Ты вообще читал как UI работает?
вот тебе страница из документации
https://docs.unity3d.com/Manual/UISystem.html
На скрине в самом верху Rect Transform видишь? Как думаешь, что это?
И да, там ниже есть ссылочка на туториал, ознакомься.
От изменения высоты камеры ничего не меняется. Когда камера смотрит прямо вниз, то неправильная область нажатия для кнопки на середине экрана где-то, когда поворот под 50 градусов, то область съезжает за пределы экрана.
>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.
Ну охуеть теперь я всё знаю.
У меня есть конкретная проблема. Ты мне предлагаешь "ну иди бля книжки почитай, обучайся". Ты понимаешь, что это так не работает?
> У меня есть конкретная проблема
Которую ты объясняешь примерно как "Доктор, у меня живот болит, что со мной?"
Ты понимаешь что у твоей хуйни может быть дохера причин? Откуда я знаю что ты там нахуевертил? Откуда я знаю хреначил ли ты UI раньше и работало ли оно, а теперь не работает? Заскринил бы хотя бы сцену, иерархию.
Я хуею, не могут ничего толком объяснить, а потом удивляются почему им не говорят "плюнь через плечо и всё заработает".
Поставил clipping planes в камере с 1000 (дефолтные?) до 100, перестал видеть неправильную область для кнопки.
> перестал видеть неправильную область для кнопки
Мне интересно как у тебя вообще вылезли "неправильные области", если UI проецируется с канваса прямо на экран.
Ты в следующий раз кидай скрины, это ж не сложно, а понимание проблемы увеличивает в разы.
Говорю же, от высоты и наклона камеры видимость области зависела. Очевидно же, что дело в том, что УИ имеет какую-то высоту в "реальном мире". Похоже, эта высота где-то в районе 800-1000 по z
Олсо, по скринам вообще бы нихуя не было понятно всё равно. Ну, допустим, один скрин, где мышка на кнопке и кнопка подсвечивается, другой, где мышка не на кнопке, и кнопка серая, и третий, где мышка в определённой области, но кнопка подсвечивается. Что ты из этого решишь? Что я, долбоёб, залепил громадную кнопку с коллайдерами, и все части этой кнопки без коллайдера игнорирую?
> УИ имеет какую-то высоту в "реальном мире"
Нет, она имеет только привязку к канвасу.
> высота где-то в районе 800-1000 по z
Высота это Y, а не Z.
> по скринам вообще бы нихуя не было понятно
Всё стало бы охуенно понятно. Может ты вообще кнопку из-под канваса вытащил или ивэнтсистем удалил из "ненадобности", а может у тебя там и вовсе всё кромешный мрак.
>Высота это 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.
т.е. у них камера доходила до места, где УИ "хранится", и после него камера уже видеть не могла УИ.
>Может ты вообще кнопку из-под канваса вытащил
Кнопка работает, весь функционал правильный, но у неё есть дополнительная неправильная область нажатия. С чего бы вдруг ты решил, что я удалил себе ивентсистем?
> где УИ "хранится"
Это называется канвас, да.
Вообще скачай книгу из шапки, там отдельная глава под UI, там теории ровно 10 страниц (со 138-ой страницы), и то страницы со старым ГУЕМ из 4-ой версии можно пропустить.
Можешь подробнее объяснить? Че за триггеры анимации?
У меня есть выстрел, он в 6 кадров происходит. Можно ли как-то запилить, чтобы пуля вылетала всегда именно на первом кадре?
Дай человеку рыбу, и он будет сыт один день. Научи человека ловить рыбу, и он будет сыт всю жизнь.
Пиздешь
- Алло, это сервисцентр? У меня тут...
- Сейчас я посоветую вам прочитать одну книгу, и вы будете сыты на всю жизнь!
Ага. На выставках, экспозициях, в музейчиках. оно и есть. И почти все это на юньке и чсх делается(блоагдаря приемлимой 3д-шке и тому, что производители делеза быстро пишут под него сдк-шки)
Без костюма?
Не. Драйвера писать, CV библиотеки, распознование образов и очень много работы с интерфейсами
Ребятки, вот скажите, юнити действительно настолько кривой, что чтобы сделать Осану, нужно потратить более, чем год?
Юнька из пелёнок тебя учит заходить на их сайт и смотреть чё там завезли.
Значит, дело не в массе, очевидно же.
С wheel collider там вообще жопа ещё с 4-ой версии.
изначально никто не шарит. просто приходит все с опытом - пол-годика поавриться и если не совсем кран - все понятно становится
наконец-то игори меня отпустили и я вернулся к погромированию. бамп. мои попытки воспроизвести это окончились этим и какая-то хуита в итоге.
Ну что ты, бэтман? Напишешь?
>>52637
>правильно высчитать стоит игрок или летит в воздухе. Все остальное просто решается физикой ригибоди2д.
Ну способов это сделать несколько, насколько я понимаю, потому что вот мои способы работают с багами. Что за картошка то блять? Кинь ссылки на мануалы, пожалуйста
Анонас, как ты переключаешься по сценам, мой хуюнити зависает после команды апликатион лоад левел. Сцены в билд сетингс добавил.
> Ну что ты, бэтман? Напишешь?
Лол, а ведь я даже набросал локация с трубами и кустиками, хуйнул персонажа, написал контроллер, а потом удалил всё к хуям, потому что подумал что оно нахуй никому не нужно.
а я таки нашел бумажку объясняющую что там.
http://runevision.com/thesis/rune_skovbo_johansen_thesis.pdf
если кому интересно почитать. глава 6
Скачал пачку книг и видео туторов из разряда делаем фпс шутер, делаем ртс, делаем рпг, делаем настолку и т.п.. Но у всех тупо начинается с того что дают ссылку где скачать уже готовый ассет или можно сказать сделанный на 99% проект и потом по ходу книги начинают размышлять о дизайне и прочей ерунде. Или разбирают 1%-2% кода из проекта.
А что-нибудь максимально подробное есть от начала и до конца без использования стартер китов и сделанных уже проектов есть?
Дык юнити это коммерция и маркетинг. Купи ассет, продай ассет, запишись на курсы. Игры делать это только мешает.
Из шапки книгу попробуй.
Если забить на переключение по сценам, и просто перемещать камеру на одной, какие минусы в этом?
Спрашиваю, томушта не все текстуры в новую сцену прогружает, а как исправить не ебу.
Как перестать писать велосипеды и начать писать игры?
Устроиться к ИП Андрей Иванович очень даже просто, если ты разбираешься в юнити. Там поработаешь год и можно будет идти в более серьёзную конторку.
>Устроиться к ИП Андрей Иванович очень даже просто, если ты разбираешься в юнити.
ИП Андрей Иванов хочет чтобы я делал всю работу по 18 часов в сутки за 15к рублей в месяц.
Портфолио вон
Зп 300кк/наносекунда
Ваши предложения
тебе на cgpeers, давече видал там много годноты
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”
но тут не упоминается, что изображение обязательно.
Нахуя так жить, котаны?
> Нахуя так жить, котаны?
Документация в юньке не полная. Так что пока ставится юнька - все бегут за лубрикантом.
По заданию: перед нами поле 10 на 10 ячеек.
На поле расставлены блоки (непроходимые) - сделать авто генерацию уровня, но обязательно обеспечить хотябы один вариант к выходу.
На карте есть вражеские объекты 1 и 2 с секторами видимости - они перемещаются по карте (в базе со скоростью игрока +- Random для увеличении скорости врага и усложнения.
На карте есть точка Н и ВЫХОД . В точке Н появляется наш герой (управление - клавиатура и мышка)
Наша цель не попасть в зоны видимости (секторы) объектов 1 и 2 и добраться до выхода.
При попадании на сектор обзора врага - враг стремится к нашему игроку, при коллизии с нашим игроком - конец игры.
Перед основной сценой используйте меню начала игры и завершение уровня.
> Появилась возможность вкатиться в геймдев
> при полном отсутствии опыта
Мде.
А вообще — реально вполне. Покури вот этот гайд по диагонали. Там много того, что тебе не нужно, но и до жопы того, что нужно.
https://unity3d.com/ru/learn/tutorials/projects/2d-roguelike-tutorial
И да, враги тоже рандомно ставятся на свободные клетки или их позиция задана изначально?
Да, вообще — полный ноль. Был опыт только написания простых скриптов bat/cmd. Но я в принципе не против попробовать.
>>53422
> враги тоже рандомно ставятся на свободные клетки или их позиция задана изначально
То, что будет проще. Для начала, я так понимаю, лучше сделать уровень и врагов статичными, тупо один уровень игры. А потом уже "улучшать", если время останется.
>до жопы того, что нужно
Как я понимаю, мне нужно следующее:
1. Перемещение игрока.
2. Коллизии со стенами.
3. Коллизии с врагами.
4. ИИ врагов (движение по уровню, определение коллизий).
5. "Зрение" NPC (приближение к игроку в радиусе действия, лимитированный обзор) - пока что самое непонятное из этого списка.
6. Главное меню и завершение уровня.
> Перемещение игрока
Несколько строчек.
> Коллизии со стенами
Ещё проще.
> Коллизии с врагами
Так же.
> ИИ врагов
Херня.
> "Зрение" NPC
В одном скрипте с ИИ.
> Главное меню и завершение уровня
Это вообще смешно.
И да, двигаться тебе как надо? Как в шахматах, то есть одна клетка — одна позиция?
> Да, вообще — полный ноль
Это куда нынче берут с полным отсутствием опыта и сколько обещают платить? Я такое тестовое задания за вечерок бы написал.
> В одном скрипте с ИИ.
Мне гораздо проще было бы найти уже готовый проект, похожий на задание, в котором я бы мог просто потыкать в код/скрипты и отредактировать то, что нужно.
Сейчас пытаюсь пройти https://unity3d.com/ru/learn/tutorials/projects/2d-ufo-tutorial, чтобы появился хоть какой-то опыт работы с движком и создать часть того, что нужно по заданию.
> И да, двигаться тебе как надо? Как в шахматах, то есть одна клетка — одна позиция?
>> На карте есть вражеские объекты 1 и 2 с секторами видимости - они перемещаются по карте (в базе со скоростью игрока +- Random для увеличении скорости врага и усложнения.
Я так понимаю, всё должно происходить реалтайм, перемещение не "ступенчатое", а плавное.
Написал я твою херню, но пока без UI и враги пока двигаются не совсем так, как хотелось бы. Может завтра доделаю, если не забуду.
1432x700, 0:44
> завтра
А ладно.
Мобы медленные, но это чтоб было видно что они преследуют игрока. Можно ускорить.
Прикрутить генерацию уровня и готово твоё задание.
Ну и модельки какие-нибудь хуйнуть, лол, а то шарики бегают за капсулой среди кубиков.
забей на вакансию. Ты если и сделаешь это за 4 дня, то в первый же день или на интервью все зафейлишь. Они ждут человека не с 4-х дневным опытом.
Да вот и я не пойму куда это берут таких. Причём явно же ещё что-то спрашивали перед тем как задание дать.
хотя нет, не забей, охуенный экспириенс, все равно, даже если и выпрут на собеседовании. Делай, короч, если и дальше планируешь вкатываться.
Алсо, сколько обещали и насколько крута контора/что делают?
Но, видимо, со знанием шарпов. А тут же случай совсем нулевой.
прост ))
Ничего личного, анончик. Ассеты крутятся - лавеха мутиться. Но пару лет, а то и месяцев такой работы, и тебя начнёт мутить тебя самого. Не лучше ли работать водителем трамвая, а по вечерам играть в старые добрые игры 70-ых-80-ых?
Я предлагаю анонам разные варианты. А насчёт водителя автобуса, это конкретный человек Joel Yliluoma aka Bisqwit.
1032x714, 0:17
сделал забавную прыгающую жопу на этом блендинге кривых. импульс жопы, кстати, высчитывается из движения ног. контролер двигается физоном. надо ещё чего нибудь ебануть.
>>53230
но я устроился на такую работу на которой можно почти нихуя не делать и хочу делать игры. а потом в один прекрасный момент я прихожу в себя сваривая раму очередного велосипеда.
>>53490
чет дохуя. у него небось другие качества были.
Unity это маркетинговый инструмент в первую очередь.
Пидораха, прекращай мечтать, у тебя там говяжьи анусы остывают.
Так оно ж не доделано, лол. Видишь вон шарик иногда заходит в кубик? И визуал надо дотягивать.
Лучше спроси чего не ясно — поясню.
я и делал. делал контролер для сетевого дрючева, обнаружил что юнити не обновляет велосити у обычного чарактер-контролера если игра свернута. репу почесал, решил попробовать другие имплементации контролера. сделал контролер через физон. пока делал контролер задумался что "а клево, тут же и правда велосити есть". на тестовом контролере ебанул чтобы шарик наклонялся в сторону куда велосити чтобы проще было дебажить. а потом "а хули бы не приделать ноги", сделал 1D интерполяцию у кривых, персонаж стал забавно семенить шариками по земле. потом задумался что что-то хуево что стрейфится не может, сделал хуевую 2D интерполяцию. потом "что-то говно какое-то, нука попробую интерполировать в полярной системе кординат", получилось хуево. копнул глубже, сделал хуйню эту, стало клево. потом накидал быстренько самописную 1D пружину, инверсивную кинематику, значения кривых стал хватать чтобы жопа качалась. получилась прыгающая жопа. и я чето довольный стал. теперь уже думаю что а не забить бы на воровство анимаций, сам то я их все равно не хочу делать. может процедурными их поделать.
>>53523
лол у этой хуйни же сорцов дай боже строк на 150
Чувак, пиши сам. "Списать домашку" тут не прокатит, или ты по каждому вопросу рабочему на сосач бежать будешь? Если попадёшь.
Держи, чо. Шарики уже в стены не залезают, но оно всё равно сырое. Хотя тебе даже на пользу пойдёт, пока допилишь — что-то поймёшь.
К тому же это только скрипты, придётся по ним ещё и понять что там на объектах висит, тоже полезно будет.
Я бы ещё кое-какие магические числа вынес в переменные, но похуй, сам сделаешь если надо.
И да, код не просто так в скринах. Будешь ручками перебивать — больше запомнишь.
Хикканы же.
как-то скучно на 65 то. ни генерации уровня, ни поиска пути, даже восклицательного знака нету сигнализирующего что "вас заметили".
Ну оно и писалось под чашку кофе. Хочет допиливать — пусть допиливает.
Гармонический.
Полный ноль на этих двух скриптах никуда не уедет, а уже тем более обосрётся на собеседовании на первом же вопросе по коду.
Так что один хуй придётся учить.
Завидовать чему, лол? 60-ти строчкам ебли с трансформом без какого-либо другого сурса?
Да ты сам недалеко ушёл от того нулёвого, раз думаешь что там какие-то тайны вековые написаны.
65 строчек. Это, конечно, работа, и ещё какая работа, но люди и большее за бесплатно делали для других. If all, это то, к чему общество должно стремиться. Если все всем всё за бесплатно делать будут, это уже утопия будет. Хорошее в людях надо поощрять, а не гнобить.
Мне нужно взять спрайт и заменить пограничные пиксели на другой цвет. Сделать границу, то бишь. И ещё поменять размер спрайта, растянуть его.
Где смотреть это?
дрочит небось
Ты же все описал, просто сделай то что ты описал, и все.
Ну, давай разберём по частям написанное.
Тебе нужно сменить "пограничные" пиксели. Если я всё правильно понимаю, ты хочешь ОБВОДОЧКУ?
Тогда тут всё просто, берёшь и дрочишь вертикальные и горизонтальные линии пикселей, опрашивая: ЕСЛИ У ЭТОГО ПИКСЕЛЯ АЛЬФА РАВНА 1, А У СЛЕДУЮЩЕГО РАВНА 0, ТО СЛЕДУЮЩЕМУ ЕБАШИМ ЦВЕТ.
Гугли в сторону: texture.GetPixel, texture.SetPixel
В идеале, конечно же дёрнуть анус все пиксели в какой-нибудь буффер, при помощи texture.GetPixels, чтобы не проебать тонну времени на обоссаную маршализацию, но это совсем другая история.
Ну, а растянуть можешь через поле Scale у компонента Transform.
Просто жить без гайдов, не правда ли?
>Гугли в сторону: texture.GetPixel, texture.SetPixel
Спасибо, вроде, оно.
>Ну, а растянуть можешь через поле Scale у компонента Transform.
Ну, это как бы очевидное решение, но я про сами спрайты спрашивал. Но если подумать, оно мне и не нужно, проще будет создавать новый спрайт поверх старого с нужной границей.
Лол, кто-то от 60-ти строчек так порвался, что до сих пор зашиться не может.
Малышка, это пишется минут так за 10, завидуешь что ли?
не юзай GetPixel и SetPixel если важна производительность, эта хуйня очень медленная
>>54076
Попробовал делать границу.
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));
Но эта херь рандомным образом обрывает цикл так, что половина пикселей оказывается незакрашенными, причём случайная половина, может цикл не начаться, а может наоборот закончиться раньше, чем надо. Проблема на моей стороне?
>>54076
Попробовал делать границу.
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));
Но эта херь рандомным образом обрывает цикл так, что половина пикселей оказывается незакрашенными, причём случайная половина, может цикл не начаться, а может наоборот закончиться раньше, чем надо. Проблема на моей стороне?
Что такое, девочка моя, когда ты что-то спрашивал — тебе не ответили, а тут хуяк и кому-то помогли?
Поплачь и всё пройдёт.
1278x720, 1:51
Поясните, в юньке можно использовать System.Threading чтобы отпараллелить какую-нибудь жирную задачу в отдельный поток или оно не заработает/не будет собираться/отвалится на каких то платформах? Или в юнити только корутины можно для такой хуйни использовать? Меня просто парит что штуки в корутине будут в основном потоке и это может вызвать какие-нибудь пролаги анимации или другие неприятные глитчи...
А вот эту хуйню нельзя в юнити шейдером делать, кстати? Ведь шевеление пикселей такое, как я понял, по сути на CPU идет, по идее видюхи с шатанием текстур должны лучше справляться, не? Или там начинается дрочево с тем, что нужно знать цвет соседнего пикселя и гробгробкладбищепидор?
У меня есть один спрайт из текстуры, но вместо того, чтобы теребить старый спрайт, я создаю новый прозрачный спрайт поверх старого с нужной закрашенной областью. Я так думаю, шейдеры таким же образом устроены, только хитрее.
У шейдеров прикол в том, что видюхи умеют ахуенно распараллеливать работу с пикселями. То что ты в цикле делаешь, оно делается с каждым пикселем по очереди, а шейдер - в идеале - делает всю работу с каждым пикселем одновременно. Минус в том, что по дефолту в шейдере у тебя есть данные только про текущий пиксель, не соседние (однако можно как параметр дать дополнительную текстуру и исходя из данных в ней трансформировать текущую). Но я в юньке шейдеры никогда не писал, так шо скорее теоретизирую.
Звучит интересно, но мне лично не очень полезно. Я хочу вообще вместо границ связанные с фракциями изображения использовать, скажем, для одной крылья, для другой чешуя и т.п. Надо будет потом посерьёзнее глянуть на шейдеры, с первого взгляда на колдовство лютое похоже.
оно будет работать. советую пользоватся и тем и тем.
Да! Конечно! Я был бы очень признателен! Ну надо все-все нюансы, чтобы марио подбирал гриб, выростал, стрелял и т.д.
Примеры с кнопками не сработали, написал коротенький скрипт покупки товара, подрубил adb к блюстакам:
Есть плюс - инициализируется вроде ок, высасывает названия и цены товаров с гуглплея.
Но при нажатии кнопки купить - в логи вылазит пикрелейтед.
Какого хера?
На форуме юньки предлагают реинстолить ИАП(сделал 10 раз уже по-всякому - сторого похуй.)
Хелп ме плиз!
>объяснялся подробно процесс создания полноценный игры
Объясняю.
Просто и без задней мысли создаешь сцену, ставишь на ней геймобжекты, пишешь скрипты. Дополнительные сцены делаешь по мере надобности.
Моделишь модели, рисуешь/пиздишь текстуры, настраиваешь материалы.
Делаешь озвучку.
Поздравляю, игра готова.
>Дальше ты узнаешь что игры бывает сетевые, с микротранзакциями и с локализацией.
И понимаешь что все надо делать заново.
Локализация, микротранзакции и режим для нескольких игроков непосредственно в игру не входят, тащемта, если речь не про сетевую игру изначально.
И делаешь заново, и так до получения результата.
Конечно не входят. Как и сохранение и загрузка, и туториал и всякое говно.
А потом говорят что Юнити говно и игры на юнити говно.
>заново
Кстати про "заново". Если тебе надо перепердоливать готовую функциональность для добавления чего-то нового, то ты проебался на уровне дизайна.
Пример: у меня есть набор скриптов, которые симулируют орбитальную механику. Есть другой набор скриптов, который рисует что-то вроде карты, расставляя на сцене схематические изображения планет, кораблей и всего такого. Есть третий набор скриптов, который ресует "реальный мир", где кораблик вращается вокруг огромной планеты.
Так вот, для добавления функциональности "кораблик может сесть на планету" мне понадобится модифицировать только последний набор скриптов, добавляя в первые два только косметические изменения. Я бы назвал "набор скриптов" сценой, но вообще это одна сцена, на которой в разных слоях работает все что нужно.
Для добавления аэродинамики в атмосфере мне понадобится только дописать скрипты, которые считают силы для аэродинамики.
Так же для всего остального.
Если у тебя это не так - ты пишешь хуйню, иди читай книги по ООП.
inb4: Ряяя программирование нинужно ddp лудше ко-ко-ко пок.
> Если тебе надо перепердоливать готовую функциональность для добавления чего-то нового, то ты проебался на уровне дизайна
Скорее "на уровне архитектуры", но так-то да, всё верно.
При грамотном подходе на игру можно налепить хоть небо, хоть Аллаха.
Есть одно приложение и есть MSSQL бд.
Все бы ничего, но при вызове SQL StoredProc, юнити начинает бешенно обмазываться GarbageCollector. Доходит до абсурда - 10 персонажей, исполняющие каждые пол секунды StoredProc, жрут ресурсов больше чем Camera.
Что я делаю не так? Чому IDbCommand.ExecuteReader() забрызгивает меня мусором? Как сделать, чтобы правильно?
if (dbcon == null)
dbcon = new SqlConnection(connectionString);
if (dbcon.State != ConnectionState.Open)
dbcon.Open();
using (IDbCommand dbcmd = dbcon.CreateCommand())
{
dbcmd.CommandText = string.Format("EXEC [dbo].[Proc] @Param={0}", param);
dbcmd.ExecuteNonQuery();
}
То что они вводят новый инструмент который нихуево повысит производительность. Я тоже не до конца досмотрел.
Они наконец пересмотрели свою убогую реализацию системы компонентов и вводят костыльное подобие нормального ECS подхода.
>Они наконец пересмотрели свою убогую реализацию системы компонентов
Разве? По-моему они просто добавили новый фреймворк для написания "высокопроизводительного кода". Раньше для этого приходилось самому писать свои решения. А сам юнити апи остаётся прежним, что немного печалит.
В настройках билда есть галочка Force Single Instance - она нормально работает, если билд уже нормально запущен, но если по exe-шнику клацать ентером как ебанутый, то все равно успевает открыться несколько окон - как это фиксить?
А если я загружаю игру, то как мне поставить на сцену игрока и камеру? Куда копать?
Платиновый вопрос что ли? Я просто еще не прикасался к Save/Load, не знаю как цивилизованные люди делают.
> Я просто еще не прикасался к Save/Load, не знаю как цивилизованные люди делают
Бинарная сериализация.
Тривиально, так же как и в любой игре не на юнити. Грузишь игрока, спавнишь, говоришь камере "следи!". Всё.
>Поясните пожалуйста, как в играх управляются с объектами Игрока и камеры? Если убрать возможно сохранятся и загружаться, то достаточно создать их в самой первой сцене, и поставить флаг "не уничтожать", так?
Ответ на твои вопросы находятся в этой книге "Unity в действии Джозеф Хокинг", а ответы на будущие вопросы находятся здесь "Паласиос Х. - Unity 5.x. Программирование искусственного интеллекта в играх - 2017".
Начал изучать с этих материалов https://habrahabr.ru/company/microsoft/blog/236125/ но тутор старый и версия соответсвенно, и некоторые моменты, ввиду своей неопытности в среде/языке - не понимаю.
> некоторые моменты, ввиду своей неопытности в среде/языке - не понимаю
Значит не с того начал.
Посмотри в официальных туториалах видосы по roll a ball и space shooter (вроде так называются), освоишь необходимый минимум, а потом уже приходи за платформерами.
как я посмотрел, там в форме видео-роликов и на английском.
Может быть есть подобные уроки, но в форме текста? И на русском?
> там в форме видео-роликов
Это даже удобнее для начала.
> и на английском
Он там настолько элементарный, что даже мой кот всё понимает.
> Может быть есть подобные уроки, но в форме текста? И на русском?
Если знаешь шарпы хотя бы на уровне имбецила, то качай книгу из шапки.
Как вы без английского живёте? На русском языке же ничего нет кроме старых советских статей. А если и есть, на английском всё равно лучше версия - то ли из-за качества переводчиков, то ли из-за того, что это и не перевод вовсе. За державу обидно, это да
> с английским совсем беда
Хосспади.
Понимаешь что тут написано? Если да, то смело можешь смотреть.
Не смотря на мою любовь к державе, дам два чая этому сударю.
Действительно без английского никак. Везде лучше материалы на английском.
Я пытаюсь написать генератор, который бы случайно выбирал один из таких префабов и вытаскивал на сцену. Потом, если срабатывает триггер, объект удаляется, и вместо него на сцену вытаскивается другой префаб.
1. Можно ли как-то через скрипт C# вытащить на сцену префаб?
2. Можно ли как-то объединить префабы, чтобы скрипт рассматривал только вот этот набор?
>2. public GameObject prefab1; public GameObject prefab2;
А если префабов 200?
Можно ли как-то еще, чтобы не прописывать каждый руками?
Спасибо, анон.
В паблик классе объявляется паблик класс. Еще утром я думал, что так делать вообще нельзя.
Как я понимаю для этого нужен белый ip, но как другие разработчики делают соединение для обычных пользователей, когда у них нет белого ip? Какой-то дополнительный сервер нужно делать? Или так вообще не получится и нужно обязательно делать Клиент-Сервер.
Пикрандом.
Лень объяснять. Просто скажу, что тебе нужен PUN:
https://www.photonengine.com/en-US/PUN
Он очень прост в освоении. Бесплатно до 20 игроков онлайн. За 100 баксов можно купить 200 игроков перманентно. И так далее.
>14/10/17
Проблема была не в смотрении на объект, а в том, что нужно было смещать камеру на определённую величину (нужен катет "на земле", а мы знаем высоту камеры и угол её поворота + нужно зум камеры учитывать, который как обратное отношение нормальной высоты камеры к усечённой зумом высоте), сохраняя прежний угол. Да и решил через геометрию уже. Надо только поворот вокруг оси Z ещё учитывать, чтобы не только по игреку смещать.
Ищи.
16 Calls = 6 ms. Ебануться, товарищи. Что делать?
> Кто-нибудь мне может объяснить, почему обычный вызов SQL процедуры, даже не возвращающий значение, такой, блять, медленный, даже при простейшем ExecuteNonQuery?
Ты про какую субд? В орахле, помнится, можно было указывать что функция deterministic
Я про любую. Функция на сервере не делающая вообще ничего (заглушка), нереально тормозит из-за Mono, даже при использовании последнего System.Data из 4й версии .NET
Не использую Дебаг.Лог
Вот тебе, подержи произведение сумрачного гения создателей MONO Develope, которое ставит на моей идее на лету брать данные из БД жырный крест
Ты читаешь из БД в апдейте? Я, конечно, в БД не разбираюсь, но ИМХО, БД надо читать один раз и записывать один раз, в начале и в конце и, скажем, если сохраняешься. Это ж большая длиннющая стринга, как ты с ней не ебись, если каждый фрейм с ней что-либо делать, то она обязана тормозить.
В корутине, раз в секунду.
Твои слова имеют смысл, но есть ньюанс: я вообще не возвращаю значений, там нет стринга, там вообще ничего нет.
Нет там ничего. Это просто так реализована на уровне Моно работа с БД (как я понял). Короче, офигенно жаль что оно такое медленное.
Сделай свою читалку БД, как вариант. Заодно отформатируй стрингу так, чтобы удобнее всего было в БД информацию искать.
Всё что пишется на C# в итоге может быть написано на US?
Переходи на сишарп. Две недели голову поломаешь, а потом всё это говно в крови у тебя будет.
Я веб макака и JS мне нужен для работы, так еще и если буду в нем хорошо разбираться, то и рост будет на ней же. А запил простой игры - это в свободное время, не хочется дрочиться с 3 разными инструментами параллельно.
Зачем тебе создавать класс в классе, совсем с ума сошел? Тебе дали метод адейт пиши в нем.
Деплоишь на heroku приложение вся задача которого это хранить список подключенных к нему айпи и созданных "пати", на клиенте соответственно выводишь этот список пати и подключаешься к уже известному айпи.
>Это конфликтно?
Да, очень. C# изучай. Не нужно прямо углублёно изучать.
https://unity3d.com/ru/learn/tutorials/s/scripting
Как то это жестко. Я и так родной System.Data юзаю с формированием на стороне Моно класса StoredProc со своими параметрами и т.д. юзаю, и что то мне подсказывает, что лучше чем его создатели, я не смогу написать интерфейс общения с БД.
но на всякий случай: куда копать, с чего начинать?
Юнитовский жс это изоморфная версия старого стандарта ecmascript, от которой в твоей работе веб макакой тебе не будет никакого профита если ты конечно до этого ничего не знал ни про переменные, ни про циклы, операторы и прочее что есть в любом языке. Но даже и при этом не будет. Если хочешь прокачать скилы именно в жс, то бери любую геймдев жс библиотеку/фреймворк и делай на нем. В юнити тебе в любом случае придется много сталкиваться с с# кодом на форумах, а транслировать его со стаковерфлоу с одного язык на другой, для макаки это тот еще труд.
Использовать-то начинаешь, но у юнити свои пространства имён, со всеми вытекающими.
>А юнити накладывает на C# какие-то ограничения?
Нет, но там используется C# 3.0 и .net 3.5. Хотя они уже начинают вводить более новую версию шарпа и .net фреймворка.
Сейчас последняя версия шарпа 7.0
Мне то не нужно. Я решил игру сделать, но оказалось для этого нужно программировать, но программирование - это пиздец. Я вроде основы почитал (ну там циклы всякие, точки с запятыми, скобочки) - включаю официальный тутор по роглайку, и в первой же серии с кодом нихрена не понимаю. Чувак там юзинги в начале переписывает, классы в классе объявляет и описывает - пиздец одним словом.
Кроме циклов по минимуму нужно знать только логику апдейтов и то, как указывать переменные. Рогалику вообще ничего не нужно, кроме циклов и "смены кадров". Банально делаешь карту мира, делаешь первый кадр и логику, которая будет создавать следующий кадр.
Я это тоже почитал. Просто не хочу заниматься придумыванием своих кривых велосипедов, а хочу делать все по науке, как взрослые дядьки. Но эти дядьки переписывают юзинги (я так и не понял, зачем, там вроде и так все должно работать) и объявляют классы в классе.
Юзинги как раз и обозначают созданные взрослыми дяденьками велосипеды. Не сцы, там и важных только для работы с УИ, Collections.Generic и ещё по ситуации.
Это как бы используемые скриптом компоненты из базового багажа. Для листов там, словарей, для работы со спрайтами и текстурами и т.п. Не во всех скриптах нужно же это, вот оно и подключается только там, где нужно.
> Но эти дядьки переписывают юзинги
Шта? Юзинги подключают пространства имён, только и всего. AI, UI, EventSystems и т.д. То есть, чего для обычного макакинга обычно не надо. Только и всего.
> а хочу делать все по науке, как взрослые дядьки
И чтоб вот так вот сразу, да? Чтоб хуяк-хуяк и научился.
Ты на сложность туториала по рогалику смотрел? Там было написано "базовая"? Нет, не было. А вот на туториале "Roll a Ball" именно так и написано.
Отсюда вывод какой? Правильно, начинай с малого.
У меня используются First person и Third person камеры. Стоит ли их объединить в один скрипт GameCamera, добавить туда CameraMode и через Editor-скрипт скрывать поля в зависимости от выбранного режима камеры? Или же лучше вынести их в разные скрипты FirstPersonCamera и ThirdPersonCamera? В камере от 3го лица используется коллизия, таргет и другие поля, которые не нужно камере от 1го лица.
> объявляют классы в классе
Где ты там это увидел? Пальцем ткни. Просматривал я тот туториал — не помню там такого.
https://www.youtube.com/watch?v=bvvaqAbpPjc&t=60s
Сериалайзбл атрибут - это [SerializeField]? Или я что-то путаю? Но зачем тогда включать пространство имен систем? Оно же и так работает. И зачем ему переуказывать рандом? Что поломается, если он этого не сделает?
>>55107
>И чтоб вот так вот сразу, да? Чтоб хуяк-хуяк и научился.
Ну да, а что, нельзя? Если начинать с малого - нихрена не успеется.
>>55113
На второй минуте - класс Count.
только юнити с ним регулярно крашится.
> Если начинать с малого - нихрена не успеется
А если начать со сложного и нихуя не понять — вот тогда всё успеется, ага.
> Но зачем тогда включать пространство имен систем? Оно же и так работает. И зачем ему переуказывать рандом? Что поломается, если он этого не сделает?
Потому что туториал делался под версию 4.6, сейчас это устаревший шаг.
> На второй минуте - класс Count
Он его объявляет и сериализует чтобы рулить им через инспектор.
>А если начать со сложного и нихуя не понять — вот тогда всё успеется, ага.
Вот я и пытаюсь понять - чтобы все успелось.
>Потому что туториал делался под версию 4.6, сейчас это устаревший шаг.
Под 5 версию, там просто сказано, что на 4.6+ можно сделать все то же самое с минимальными отличиями. И что конкретно устареший шаг - подключение система или указание рандома? Или рандом указывается только из-за подключения система?
>Он его объявляет и сериализует чтобы рулить им через инспектор.
И как это вообще работает? Как используется эта конструкция, если к ней нужно из других классов обращаться? При всяких наследованиях, дочерних классах и прочем?
> Вот я и пытаюсь понять - чтобы все успелось.
Ты бы ещё начал курить интегралы до того как цифры выучить. Не еби мозги и начинай сначала. Все так делали и ничего, не поломались.
> И что конкретно устареший шаг - подключение система или указание рандома?
и то и другое.
> И как это вообще работает?
В инспекторе у тебя появляется класс, как же ещё?
Ты пока всё это спрашиваешь — уже бы половину того же "Roll a Ball" посмотрел бы, узнал бы раз в 10 больше.
>В инспекторе у тебя появляется класс, как же ещё?
В смысле все объекты класса, объявленные в коде или как?
Ты пока всё это спрашиваешь — уже бы половину того же "Roll a Ball" посмотрел бы, узнал бы раз в 10 больше.
>Ладно, уговорил. Пойду уроки сделаю и буду про шарик смотреть.
> В смысле все объекты класса, объявленные в коде или как?
В смысле все поля вложенного сериализованного класса будут в инспекторе отображаться в свитке, а не просто ячейками. Так удобнее и эргономичнее.
а можно просто написать нормальный интерфейс вместо пиздилиарда наноклассов просто чтобы стрелочку в инспектор запихнуть.
А, блять, так это свиток и есть. Пишешь класс в классе, пихаешь в него нужные поля, вот тебе они и под стрелочкой.
мудила, я говорю что так делать не надо. я говорю что надо писать нормальный инспектор и нормальный код вместо того чтобы множить сущности ради простой фичи в инспекторе.
https://docs.unity3d.com/ScriptReference/EditorGUILayout.Foldout.html
> я говорю что надо писать нормальный инспектор
Хоссади, откуда такой максимализм? Если тебе надо свернуть всего 4 поля под свиток — нужно пидарасить целый ГУЙЛэйаут? И кто тут сущности плодит?
Я ж объяснял нахуя автор туториала это делает, а не говорю только так и надо делать.
Глаза б сначала протёр.
да, надо пидорасить свой инспектор, если уж дошел до того что пишешь говно чтобы порадовать глаз. большая ли разница где плодить сущьности? плоди сущьности правильно. в правильных местах.
не каждый туториал юнити учит тому как надо делать. если учишь фиче то учи ещё и применять её.
>>55119
> [SerializeField]
этот артибут говорит о том что это говно надо сериализовать. юнити сериализует только публичные поля в инспекторе, которые вообще можно менять из инспектора. если укажешь этот атрибут приватному полю то оно начнет отображатся в инспекторе и сериализоватся юнити.
если хочешь узнать больше про сериализацию то почитай это
https://docs.unity3d.com/Manual/script-Serialization.html
и особенно это
https://forum.unity.com/threads/serialization-best-practices-megapost.155352/
>И зачем ему переуказывать рандом?
у юнити свой класс рандома есть со своим специфичным говном
>хочу делать все по науке, как взрослые дядьки
>Ну да, а что, нельзя? Если начинать с малого - нихрена не успеется.
не набьешь шишек - не поймешь как избежать больше шишек. набивая шишки с середины будешь обьебыватся на самом базовом говне до самого конца.
>которые вообще можно менять из инспектора.
Ты забыл добавить, что значение публичного поля насильно переписывается значением из инспектора, т.е. задача начального значения в скрипте вообще ничего не даёт.
> да, надо пидорасить свой инспектор
Окей, только нахуя ты мне это рассказываешь? Найди автора туториала и ему это втирай. Не я его снимал.
йеп. забыл. назойливое юнити любит сохранять поля даже когда передумал и написал там другое значение. и создает объекты даже если не создавал их.
и другие прелести сериализации юнити с сериализацией наследуемых классов и прочим говном. ну да ладно все это понятно из ссылок которые я дал.
>>55140
я всего лишь продолжаю линию беседы. я не настолько радикален. мне достаточно чтобы тред узнал.
Может уже что-то такое есть, чтобы не тратить время?
>Если начинать с малого - нихрена не успеется.
Лол. Это как начинать учить матан с двойных интегралов, а потом недоумевать.
Если кому важно - родной юнити иап не дружит с юнити 2017.2, живите на 2017.1, только старая школа, пацаны!
Пик рандом релейтед.
как блять стать альфа тестером в гуглплеее? что за ебаный цирк на каждом шагу!
Это ты еще с iTunesConnect не работал, там еще больший цирк. А как стать тостером - читай внимательно формочки дашборда, там все расписано.
var min = -30f;
var max = 50f;
var value = 40f;
var axis = (value to axis) = 0;
var value = (axis to value) = 40;
Там должна быть функция, которая выдаст нужное значение. В первом случае значение 0, во втором 40.
640x360, 1:15
линейное преобразование это называется
(value-minvalue) совмещаем нули
(value-minvalue)/(maxvalue-minvalue) нормализуем до 0..1
((value-minvalue)/(maxvalue-minvalue))*2.0-1.0 приводим до -1..1
Извиняюсь, если ошибся, давно этим не баловался
Ну и в обратную сторону
x -1..1
(x+1.0)/2.0 приводим к 0..1
minvalue+((x+1.0)/2.0)*(maxvalue-minvalue) дорисовываем сову
Спасибо.
System.Collections.Generic.Dictionary<string, int> двачую = new System.Collections.Generic.Dictionary<string, int>()
нунитралль
Я так понял что он через поиск на графе, а не через матрицу реализован. Мне не понятно как навмеш создает такую такие полигональные фигуры для навигации?
какую нахуй матрицу то? разумеется любой навмеш будет на графе. сам навмеш это просто визуализация графа где члены графа являются конвексными фигурами. ты что-ли хочешь узнать как делается навмеш? могу рассказать, хули.
Ну типа на твоем пике каждый красный/зеленый куб это элемент в двумерном массиве, и если он с чем то пересекается то становится невалидным для прохода. Я таким способом представлял вэйпоинты в А*. Мне непонятно зачем нужны эти черные грани и каким способом они образуются. Если что то знаешь то поясни.
разумеется я знаю, я же написал это говно.
ты дурак чтоли. навигация происходит не по вокселям, а по центрам конвексных фигур. очевидно что эти линии это грани между этими фигурами. и из-за того что они конвексные между разными фигурами может быть только одна грань. в этом вся хитрость навмеша. он уменьшает размер графа который перебирается чтобы найти путь по нему.
образуются они каким-либо методом триангуляции как правило и объединением треугольников. или в моем случае они образуются поиском ноды для всех углов нормали которых смотрят вовнутрь, ограничиваясь углом до нормали где угол это угол между следующей и предыдущей ноды в списке.
Я слишком тупой все равно не понял какой они дают профит. Если навигация идем по графу из этих фигур, то зачем здесь нужны воксели?
они грань, понимаешь? они грань между фигурами. когда находится путь между фигурами то берутся их грани. эти грани образуют "туннель" с правой и левой гранью. и зная правую и левую границу пути можно найти самый короткий путь.
гдето у меня был набор картинок. я уже рассказывал как это работает.
вот смотри:
1 - конвексная область и её грани
2 - граф из конвексных бластей
3 - путь между областями через одну промежуточную область
4 - путь между гранями соединяющими эти фигуры. самый короткий путь находит алгоритм воронки.
а воксели нужны чтобы вообще создать эти фигуры. они не участвуют в процессе навигации.
Так, более менее представил как это происходит. А как получить фигуру по мировой позиции? Я представляю перебор всех фигур и проверять вписывается ли туда точка.
И у этого всего подхода есть называние или это такой кастомный поиск придуманный дэвами из юнити?
> А как получить фигуру по мировой позиции? Я представляю перебор всех фигур и проверять вписывается ли туда точка.
ну а как ещё то. ну можно ещё оптимизировать поиск, ограничить перебор фигур. например у меня это делается простенько. весь мир делится на чанки, а в чанках есть грид. в этом гриде ссылки на все области которые попадают в этот грид. так что проверяется не все 20-30 фигур, а 2-3.
>И у этого всего подхода есть называние или это такой кастомный поиск придуманный дэвами из юнити?
дурак чтоли. это все придумали давным давно по отдельности и у каждой детали этого процесса есть какое-то свое название. конкретно поиск пути https://ru.wikipedia.org/wiki/A* который придумали давным давно
если интересно то для создания навмеша не обязательно проводить триангуляцию. достаточно сделать все фигуры конвексными. у меня например сделано что-то вроде того что можно почитать в этом интересном тексте. http://upcommons.upc.edu/bitstream/handle/2099.1/16508/Ramon Oliva.pdf правда у меня не создаются новые эджи, а вместо этого берется самые близкие к нормали правые и левые видимые ноды.
1024x768, 0:28
Объясните как сделать фаст слоты (2д рогалик), я сделал инвентарь, по сути просто массив итемов, но что собой представляют слоты быстрого доступа - хз
> я сделал стул но не знаю как сделать табуретку
Они чем то принципиально отличаются? Тот же самый массив итемов.
Да я тупой, но стой подожжи.
Если я его сделаю просто таким же массивом, то это будут доп слоты, а не быстрые, или мне надо просто передавать ссылки с объектов в этот массив?
2 цистерны чая тебе
Ты когда первоначальные многоугольники строишь из сетки, упрощаешь их через тот Ramer-Douglas-Peucker алгоритм из статьи, или что-то еще делаешь?
йеп, через него. хотя конечно много хуйни можно нагородить в алгоритме упрощения линии. упрощать приходится в два прохода, сначала с очень небольшим отклонением, а потом с нужным. иначе это слишком деформирует линию.
ну и чтобы упростить приходится сначала находить все отрезки для упрощения и флажками помечать какие сегменты уже были упрощены, чтобы не пытаться одни и те-же места несколько раз упростить.
Понял, спасибо, анон.
Я так понял, нужно как-то спроецировать позицию игрока на луч из камеры? Но у меня не получилось это сделать правильно. Я не могу просто взять дистанцию от игрока до цели, потому что в логике кода используется луч от камеры и мне нужно скорректировать его origin позицию, чтобы потом получить правильную дистанцию.
youtu.be/_HF0QHGsq1s
Подскажите, почему частицы не отображаются? Почему пиктограмма есть а самих particles нету. Как это можно пофиксить?
Ты тупой?
На самом деле в юнити используется питон с шарпоподобным синтаксисом, так что делая на нем игры ты вряд ли потом сможешь перекатиться в тот же wpf или еще куда. Лучше бери pygame, там чистый питон. Сможешь потом писать программы для микроконтроллеров и другие крутые вещи. Эта хуйня сейчас как раз набирает популярность.
Да на этом пайгейме ничего, кроме пакмана или марио не запилить, насколько я знаю. А я хочу свою тульпу перенести в 3Д мир.
К анону выше добавлю, что девы юнити потихоньку перекатывают его на хаскель платформ, поэтому советую начать изучать хескель чтобы в будущем не остаться без штанов.
Донт вори, фиксанул.
Ну короче, как спроецировать вектор Player на вектор Camera по направлению к Target.
Да ну, брось, кто ж тебя тут обманывать будет?
Enable code folding, вась.
Скачай учебник по векторной геометрии и не иби господам монокль.
1)ты вообще хуиту порешь, 2)проекция вектора на вектор
Отличается тем, что это форк моно 11 летней давности. Там множество костылей с тем, чтобы он мог работать под юнити. Также есть некоторые классы, которые адекватно не работают, т.к. дохуя платформ имеют свои особенности. Если интересно, то этот форк открыт и можешь почитать сорсы тут: https://github.com/Unity-Technologies/mono но тебе это делать рано
Энивей, особо мозги не делай и пиши код. На месте разберёшься.
Ладно, пока перепробую всевозможные варианты. Если не получится, тогда попробую расписать проблему человеческим языком.
Деблод, автовывод типов есть в любом современном языке. И тут дело не только в эргономике, а если нравится по два раза части кода переписывать, то дело твое.
Какой ты молодец.
Меняй проигрыватель на выигрыватель.
Нет ты.
Я бы тебе сообщил определение запятых, но, думаю, сам найдёшь. Как и определение ортогональных векторов.
Нравится, когда я меняю типы, то мне не надо педалиться в 90 местах меняя одну и ту же хуйню.
Кстати это причина корявой работы дотнетовских библиотек. Майкрософтовцы вообще офигевают от происходящего и никак не могут договориться как к этого монстра застваить общаться с Universal Windows Platform
Это так жирно, что я обоссал монитор.
camera_pos - позиция камеры
camera_dir - направление камеры
new_camera_pos - искомый вектор, новая позиция камеры
(всё это Vector3)
Нужно как-то провести перпендикуляр от позиции игрока и найти новую позицию камеры.
В школе теорему Пифагора и тригонометрию не учили?
Астанавись!
Что ты пытаешься сделать, никак не пойму?
Почему нельзя камеру впидорить потомком к игроку?
на персии, как и всегда
>Мне нужно получить правильную дистанцию от игрока (player) до цели (target)
>>55922 (Del)
>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>
Может кто знает и кому не впадлу подсказать. Как реализовать флип для врагов относительно игрока (см.видео)?
В голову приходят только громоздкие решения, может есть что-то простое?
Спрашивайте свои ответы.
У самого вопросов много, но гуру на дваче не сидит.
Это адепт велосипединга, не мешай ему познавать дзен.
Тысяча благодарностей. Подскажешь ещё одну вещь?
https://youtu.be/j8YkUt7bveY
Выстрелы должны лететь в точку, где был игрок на момент выстрела.
В endMarker должны быть зафиксированы координаты один единственный раз.
Ловлю ступор на этом моменте, понимаю что решение простое и кроется в синтаксисе, но вот хоть убей не могу сообразить как пофиксить
Прикол в том, что endMarker - это ссылка на объект, а тот объект, на который эндМаркер ссылается, меняется (он же игрок, ага). Мне лень открывать юнити, чтобы посмотреть, можно ли копировать так, но сделай endMarker = new Transform(playerCoords.transform); Как вариант - сделай new Vector3(playerCoords.transform.position.x, ~y, ~z)
Хотя трансформ это монобихевиор, вроде (и потому его нельзя создать просто через new), так что лучше сразу использовать Vector3 для startMarker и endMarker, т.е. сохранять в маркеры не трансформы, а transform.position (которые являются Vector3).
До чего ж популярная тема, на реддите каждую неделю презентуют новый генератор шаров.
>>56152
>Давай сюда код, подебажим за тебя.
Спасиб, братишка, но я уже вкинул весь код что имеет значение. Просто посреди левого метода две структуры DateTime с разными значениями (например, год 2014 и год 2015) получают одинаковое значение. Ни потоков, ни переопределений нет. Причем, в watch цифра не подкрашивается красным, мол переменная поменялась. Просто меняется значение и все.
Ну его на фиг, я эту дату для отсчета времени в стратежке использую. Лучше запилю свой MyDateTime, все равно мне тот избыточный функционал не нужен с високосными годами прочей поебенью.
Сможешь.
От целевой платформы зависит. WebGl кушает ресурсы сильнее. Standalone - norm. Под андроид много жрет. Но на 2д то все равно хватит.
Насколько хорошо нужно сишарп изучить, прежде чем приступать к юнити? Так то я программировать умею но вот сколько уделить этому времени лучше всего? Изучить основные конструкции и сразу переходить к юнити или лучше позадрачивать его подольше и потом это окупится?
640x360, 1:05
У меня просто есть два варианта как поймать кадр, либо проверять NormalizedTime анимации каждый кадр и ловить нужный, либо через эвент вызывать метод на нужном кадре. Как будет лучше?
Я вот на java, c, c++ писал. Перешел на c# - вообще разницы не заметил. такая же хуйня получается
Я в этом дед. Начал, когда это не было мейнстримом.
Сейчас все делают майнкрафты и майнкамфы
Даже не интересно как - то.
извините, у меня бушприт
Каких текстов? Сорцы? - Заперто :)
Я от квадратов перешёл к процедурке всего сущего.
Кстати, нодовые редакторы - это хорошая штуковина, но я слишком уж привык к ковырянию шейдеров. Да и лень свой нод редактор писать....
Покажи хоть что получается, а то кажется мне, что я эти пикчи уже где-то видел.
Зачем тебе процедурная генерация? В каких играх, кроме клонов майнкравта, её можно использовать?
Оть глупенький. Не дорос видать, раз такие вопросы задаёшь.
Оглянись, придурок, она везде... Везде фракталы.
А вообще репутация у неё явно сильно подпорчена на фоне недавних высеров типа NMS. Но не обязательно делать упор именно на повсеместной процедурности контента. Да, местами она уныла (в большинстве случаев это связано с неумением ей пользоватся или дозировать её), невыразима. И это действительно так, куда не посмотри...
Но ведь есть примеры, когда эта 'технология' (или 'фича' - называй как хочешь) действительно разбавляет картинку и вообще, в целом, делает её более правильной. Повторюсь - игры выглядят стерильно, процедурка же вносит в виртуальные миры крупицу хаоса. Не того хаоса,
даун
Какие это игры выглядят стерильно? Люди собственными ручкам как раз более интересные пейзажи создают. Другое дело что не все могут позволить себе таких людей.
Да почти все. В большей или меньшей степени, конечно.
Да, люди, но все они пользуются процедуркой.
Ты знаешь хоть об одном инструменте для создания контента? Она там везде.
Это глупый спор по сабжу, в котором один вовсе не понимает сути. Другое дело, если тебе интересно всё это узнать, но это же борда,
камон
Ну ладно, ты прав. Просто как-то много тут людей которые этим занимаются, вот я и решил узнать. Никто не пилит свои системы диалогов/квестов, например.
Я бы для диалогов и квестов написал бы нодовый редактор... Но мне лень.
Фантазируй. Ты же можешь комнату разбить как хочешь, но тебе нужно то, что поможет тебе.
В твоём случае - это функция, которая, НАПРИМЕР, скажет, где поставить стену.
Т.е ты просто можешь поменять свой рандом на результат работы шума, его комбинаций, модуляций и тд. Особенно, если карта генерируется 1 раз при старте уровня, например.
Тут сколько хочешь усложняй систему.
Да всё что угодно можно для этого использовать.
http://www.gridsagegames.com/blog/2014/06/procedural-map-generation/
Это как точка опоры.
Я помню была статья, где парень генерировал подземелья при помощи ИИ. Сейчас и не найду уже...
Если что-то всплывёт интересное - я бампну в нить.
текстов откуда черпалось вдохновение, если такие есть. или сам чего интересного расскажи. как кстати сферы то генерировать? куб выпучивать до состояния сферы?
по моему без нодовых редакторов процедурной генерации не запилить нормально.
видел разве что тут. я давно уже выкладывал, с тех пор особо не менял это говно. разве что всякую мелочь добавил типа разделения наборов 2д координат в соотношении, ноду которая бы смещала синусойду по инпуту. дольше всего, кстати, возился с модификаторами высоты. чтобы можно было участки карты выравнивать, или сморщивать.
как закончу с тем чтобы заставить ИИ работать по сети нормально то вернусь наверно к этому генератору, хотя-бы простую эрозию почвы надо добавит, кустики там симпатичные поискать, камни, цыферки красивые по выбирать. а то не было времени воспользоваться тем что сделал.
кстати если лень нодовый редактор писать то можешь схватить редактор нод юнити, который для меканима используется. UnityEditor.Graphs который.
>>56205
над этим ещё работать и работать. за основу кстати взял вороного, чтобы ещё его ещё переиспользовать потом для некоторых фич.
покажи хоть что сделал то, интересно же.
т.е. игрок бьет НПС, вызывает у них метод, а кого именно он ударил он не знает
Можно ли сделать класс Enemy, наследовать от него конкретные классы врагов, и каким-то образом получать потом ссылку на скрипт который наследует от Enemy? Это возможно?
А, всё. Я узнал про виртуальные методы, и они решили проблему.
Блять, стараюсь задавать в тред только те вопросы которые кажутся самыми сложными, но в результате всегда сам их решаю довольно быстро, зато бьюсь часами над всякой хуйней которая с первого взгляда кажется простейшей
Да просто с интернета же. Все подряд бумажки про процудурку на шарах, или как не выстрелить себе в ногу превращая квадрат в шар. Нет, реально, я все пальцы отбил себе обгугливая это по 10-12 страниц результатов.
А вообще есть книжки хорошие... (прикрепляйтед 1 и 2)
Вообще вдохновение черпал из Space Engine, потому что мне хотелось по такой же вселенной полетать на кораблике. (Потом, правда, в SE появились корабли)
Да, я знаю про дефолтный граф, но даже не пытался поковырять его.
Да, куб. Только не прямой подход: У меня всё считается в Clip Screen Space, а потом происходит магия 2D => 3D.
А я написал.
Я бы с большой радостью показал бы хоть что-нибудь, но я сижу под НДА, поэтому особо показать ничего не могу.
В Unity in action SendMessage приводится в качестве первого варианта для связи между ГО. Затем, конечно, поясняется его хуевость, но всё равно, способ запоминается.
Отставить. Нашел кнопку Scaling Mode
Вот только как это дебажить? Я пробовал ставить брекпоинты в точках где может вызваться параллельный код но дебагер их игнорит: кажется, он только 1 поток видит (MS VS). В call stack криминала не видно
ПС. закоментил потенциальный коллбек, а переменные все равно меняются.. И нет, я присваиваю объекты не по ссылке а по значению.
Печалька..
Двигаю объект с помощью Rigidbody.velocity.
Задача, прекратить двигать объект, когда он достигнет определенной координаты по оси Z.
Я пробовал делать через while, но у меня все зависало и вообще все плохо.
Учусь кодить целую неделю.
Небось public полями обмотался и теперь сосёшь. Используй проперти и дедовский дебаг.
Например,
MyDate m_myDate;
MyDate myDate
{
get { return m_myDate; }
set
{
m_myDate = value;
Debug.Log(m_myDate); вот это называется дедовский дебаг
}
}
Если у тебя в консоли не отключен стектрейс, то вообще будет красота.
Боль. Я по сути работаю только с текстурками. Всё остальное рассчитывается через матрицы.
if(Rigidbody.position.z == myValue)
Rigidbody.enabled = false;
От балды написал, мб не работает.
А циклом while, ты лочил основной тред, в котором крутятся скрипты юньки, поэтому всё и висло.
> Я пробовал делать через while
В апдейте? Ёбу дал? Такое говно разве что в корутине делать можно, и то в приличном обществе за такое по ебалу бьют.
> while в апдейте вообще не используем?
Смотря при каких условиях. Твой апдейт прорабатывается раз в кадр, и если ты там замутил, например, while (true), то будь готов к тому, что всё зависнет нахуй, потому как следующий кадр не наступит пока не обработается предыдущий.
Хм. My bad, окей.
При компиляции на андроид возникает такая ошибка, как можно исправить?
Win32Exception: ApplicationName='C:/Users/Самсунг/AndroidSDK\tools\aapt.exe', CommandLine='package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/Users/Самсунг/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
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.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
При компиляции на андроид возникает такая ошибка, как можно исправить?
Win32Exception: ApplicationName='C:/Users/Самсунг/AndroidSDK\tools\aapt.exe', CommandLine='package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/Users/Самсунг/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
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.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
Тэкс. Нашел место парарелльного вызова.
Есть код
balance = getDemandSupplyBalance(price.getProduct());
Дата меняется в getDemandSupplyBalance.
НО! Я рассчитываю что должен сначала выполниться метод price.getProduct() а затем getDemandSupplyBalance. Правильно?
А по факту, получается getDemandSupplyBalance как то скрыто и неуловимо для брейкпоинта вызывается где-то при загрузке стека price.getProduct() и меняет этим дату. Потом getDemandSupplyBalance нормально вызывается, но уже с неправильной датой.
UnityEngine.Debug:Log(Object)
Market:getDemandSupplyBalance(Product) (at Assets/code/Logic/Market.cs:593)
Storage:getProduct() (at Assets/code/Utils/Storage.cs:252)
Market:simulatePriceChangeBasingOnLastTurnDate() (at Assets/code/Logic/Market.cs:694)
Game:simulate() (at Assets/code/Logic/Game.cs:509)
MainCamera:Update() (at Assets/code/Panels/MainCamera.cs:119)
Как так то? getProduct прост как блин:
public Product getProduct()
{
return product;
}
он ничего не перегружает, не переопределяет и не вызывает статических инициализаторов. Хуйня какая то.
Алсо, нельзя сделать что бы юнити консоль отображалась в ms vs? А то в во время дебагинга Юнити подвисает и консоль не видна.
Тэкс. Нашел место парарелльного вызова.
Есть код
balance = getDemandSupplyBalance(price.getProduct());
Дата меняется в getDemandSupplyBalance.
НО! Я рассчитываю что должен сначала выполниться метод price.getProduct() а затем getDemandSupplyBalance. Правильно?
А по факту, получается getDemandSupplyBalance как то скрыто и неуловимо для брейкпоинта вызывается где-то при загрузке стека price.getProduct() и меняет этим дату. Потом getDemandSupplyBalance нормально вызывается, но уже с неправильной датой.
UnityEngine.Debug:Log(Object)
Market:getDemandSupplyBalance(Product) (at Assets/code/Logic/Market.cs:593)
Storage:getProduct() (at Assets/code/Utils/Storage.cs:252)
Market:simulatePriceChangeBasingOnLastTurnDate() (at Assets/code/Logic/Market.cs:694)
Game:simulate() (at Assets/code/Logic/Game.cs:509)
MainCamera:Update() (at Assets/code/Panels/MainCamera.cs:119)
Как так то? getProduct прост как блин:
public Product getProduct()
{
return product;
}
он ничего не перегружает, не переопределяет и не вызывает статических инициализаторов. Хуйня какая то.
Алсо, нельзя сделать что бы юнити консоль отображалась в ms vs? А то в во время дебагинга Юнити подвисает и консоль не видна.
>>56305
>>56299
>>56167
>>56123
Блэт, какой же я дегрод, пиздец просто
У меня этот метод getDemandSupplyBalance() в простыне watchа был вписан, оттуда вызывался и ломал логику при дебагинге. Пиздец я в шоке.
А вообще, суть была в том что бы этот (оче тяжелый) метод не вызывался 100500 раз за тик, а только тогда когда дата сменилась.
Ок, переместил в другую папку, теперь немного другая ошибка :
Win32Exception: ApplicationName='C:/AndroidSDK\tools\aapt.exe', CommandLine='package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
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.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
Ок, переместил в другую папку, теперь немного другая ошибка :
Win32Exception: ApplicationName='C:/AndroidSDK\tools\aapt.exe', CommandLine='package --auto-add-overlay -v -f -m -J "gen" -M "AndroidManifest.xml" -S "res" -I "C:/AndroidSDK\platforms\android-25\android.jar" -F bin/resources.ap_', CurrentDirectory='Temp/StagingArea'
System.Diagnostics.Process.Start_noshell (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process)
System.Diagnostics.Process.Start ()
(wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
UnityEditor.Utils.Program.Start (System.EventHandler exitCallback) (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:44)
UnityEditor.Utils.Program.Start () (at C:/buildslave/unity/build/Editor/Mono/Utils/Program.cs:28)
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.Android.PostProcessor.Tasks.BuildResources.CompileResources (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.Tasks.BuildResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
UnityEditor.Android.PostProcessAndroidPlayer.PostProcess (BuildTarget target, System.String stagingAreaData, System.String stagingArea, System.String playerPackage, System.String installPath, System.String companyName, System.String productName, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry)
UnityEditor.Android.AndroidBuildPostprocessor.PostProcess (BuildPostProcessArgs args)
UnityEditor.PostprocessBuildPlayer.Postprocess (BuildTargetGroup targetGroup, BuildTarget target, System.String installPath, System.String companyName, System.String productName, Int32 width, Int32 height, System.String downloadWebplayerUrl, System.String manualDownloadWebplayerUrl, BuildOptions options, UnityEditor.RuntimeClassRegistry usedClassRegistry, UnityEditor.BuildReporting.BuildReport report) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/PostprocessBuildPlayer.cs:186)
UnityEditor.HostView:OnGUI()
Причем, при вызове метода из watch он не прерывается на брекпоинтах
я новичок в юнити и делаю sampleговношутер (да-да), вопрос таков: как сделать так, чтобы руки + пушка двигались за камерой, как в топ шутерах.
буду благодарен, если накидаете годных моделек с анимациями.
> как сделать так, чтобы руки + пушка двигались за камерой
Parent your Camera to these objects and use transform relatively?
https://youtu.be/jeH0AF1un-g
Мои мысли по ней:
Итак, выявленные проблемы:
1. Враги преследуя тебя, находятся в стене. Решение: Во время генерации путей запилить коллайдеры всех объектов в 2 раза толще. Это заёбно, но других способов пока-что не вижу. Надо подумать над оптимизацией этого процесса.
2. Динамичность. Игра слишком тактическая, пока-что. Решение: Нужно увеличить скорость передвижения игрока, отдалить камеру, забалансить хп/урон.
3. Если враг подойдет вплотную, то ты не сможешь по нему стрелять, т.к. пуля летит из пистолета прямо. Решение? (Возможно оно не нужно)
4. Однообразные смерти. Есть разные смерти под разные виды оружия, но сами смерти однообразны. Я думаю, что смерти по-любому надо разнообразить, т.к. игрок будет зачищать большое кол-во врагов одной пушкой. Для основных пушек (пулевое, колящее, дробь, ударное) надо запилить по несколько анимаций смерти. Для всяких огнемётов-плазмоганов и прочего, анимация может быть одна и та же. Типо челик разваливается на плазму, или бегает горящим, потом от него остаётся лишь пепел.
5. Шум. Делать его вообще или нет? Если делать, то мне не нравится моя идея реализации. Надо вместе посидеть подумать.
6. Укрытия. Появилась идея, типо если ты стреляешь из-за дивана, то по тебе урон проходит меньше, ну и если враг из-за дивана, то тоже меньше.
7. Враги ближнего боя. Я запилил им механику удара без хитбоксов: После замаха определяется дистанция игрока. Если игрок попал в дистанцию, то урон проходит. Тут есть минус, он заключается в том, что игрок, находясь за спиной у врага ближника получит урон. Фиксится это легко, но вопрос стоит ли? Типо враг же все-равно так или иначе на тебя будет смотреть.
8. Стрельба сквозь стены. Фиксится легко. Просто проверять есть ли стена между игроком и местом, откуда вылетает пуля.
https://youtu.be/jeH0AF1un-g
Мои мысли по ней:
Итак, выявленные проблемы:
1. Враги преследуя тебя, находятся в стене. Решение: Во время генерации путей запилить коллайдеры всех объектов в 2 раза толще. Это заёбно, но других способов пока-что не вижу. Надо подумать над оптимизацией этого процесса.
2. Динамичность. Игра слишком тактическая, пока-что. Решение: Нужно увеличить скорость передвижения игрока, отдалить камеру, забалансить хп/урон.
3. Если враг подойдет вплотную, то ты не сможешь по нему стрелять, т.к. пуля летит из пистолета прямо. Решение? (Возможно оно не нужно)
4. Однообразные смерти. Есть разные смерти под разные виды оружия, но сами смерти однообразны. Я думаю, что смерти по-любому надо разнообразить, т.к. игрок будет зачищать большое кол-во врагов одной пушкой. Для основных пушек (пулевое, колящее, дробь, ударное) надо запилить по несколько анимаций смерти. Для всяких огнемётов-плазмоганов и прочего, анимация может быть одна и та же. Типо челик разваливается на плазму, или бегает горящим, потом от него остаётся лишь пепел.
5. Шум. Делать его вообще или нет? Если делать, то мне не нравится моя идея реализации. Надо вместе посидеть подумать.
6. Укрытия. Появилась идея, типо если ты стреляешь из-за дивана, то по тебе урон проходит меньше, ну и если враг из-за дивана, то тоже меньше.
7. Враги ближнего боя. Я запилил им механику удара без хитбоксов: После замаха определяется дистанция игрока. Если игрок попал в дистанцию, то урон проходит. Тут есть минус, он заключается в том, что игрок, находясь за спиной у врага ближника получит урон. Фиксится это легко, но вопрос стоит ли? Типо враг же все-равно так или иначе на тебя будет смотреть.
8. Стрельба сквозь стены. Фиксится легко. Просто проверять есть ли стена между игроком и местом, откуда вылетает пуля.
>Подскажите, где и что еще не так, кромет ого, что я обозначу ниже
HOTLINE EBANIY
Остальное, пили так как считаешь нужным. На коммунити лучше не смотреть, ибо ТЫ делаешь игру, а не коммунити.
Просто не хочется чужие ошибки повторять. Мало ли кто-то на чем-то обосрался, подскажет.
Мы и планируем что-то вроде хотманямирки, только без убийств с первого удара. Хотим запилить гринд в виде покупки вооружения, прокачки, вот это всё.
А где, если не секрет? и в чем работа состоит?
Ну, в смысле, локально, в ватной, или удаленно, на гейропу?
Если знаешь зачем и как делаешь - можно.
> естественно в корутине
Тогда пиши, почему бы и нет? Кукареки про "так низя" и "говнокод" не слушай.
Ещё не получилось справиться, буду очень рад объяснениям
Я позавчера только начал юнити изучать, до таких тонкостей еще не дошел, но мне кажется, что озвученный вариант не столь практичен, удобен и прост как список тегов.
Нет, просто в треде одни ньюфаги, что они, сами себе хамить будут?
Если нужны глобальные Properties для GO, создай отдельный класс (скрипт) с нужными полями и лепи на объекты, хватать можно через GetComponent<>()
Правда, это примитивный и довольно медленный вариант если у тебя СТОТЫЩЬ объектов и запросы идут почти каждую секунду/фрейм. Впрочем, запрос тега тоже не без потерь.
Ну, надеюсь, что меня не пидорнут, но так и быть расскажу.
Работаю в Herocraft. Пишу игровую логику, редакторы, шейдеры. В общем всё то, что нужно текущему "секретному" проекту.
Ну, тут скорей всего у тебя беда в самом устройстве. Ковырни в сторону adb. Чтобы через консоль сам девайс был виден. Я давно с андроидом не работал, поэтому сорян.
>>56514
Видимо тут собрался один молодняк, а не пропёрженые плюсовики-затейники, которых обоссывали и обоссывают, а они типа как ДЕДЫ в армейке себя ведут.
>>56518
Завтра.
С Apple-устройствами ещё хуже, браток.
Понял.
По зп, увы сказать не могу, ибо НДА.
Вкатился спонтанно. Искал другую контору, в которой не будут лепить говноказуалки. Так вышел на них. Коллектив охуенный. Подход к работе идеальный для меня.
Опыт чуть больше, чем 3 года.
Охуенно.
Как думаешь, имея полгода практики и 2-3 завершенных проекта, реально куда-нибудь вкатиться на джуна? Социалка/общение на хорошем уровне.
Никогда раньше не кодил, но не так давно попробовал, и неожиданно для самого себя, стало нормально получаться. Код, который казался каким-то дремучим лесом 2 недели тому назад уже сейчас выглядит для меня вполне понятным + пока что, все задачи, которые я себе ставлю в своих небольших проектах, я реализую достаточно быстро с помощью гугла.
Я понимаю, что вопросы идиотские, и все зависит от обстоятельств. Просто никогда не работал в айтисфере + я весьма великовозрастный.
А ты готов работать (не пинать хуи дома на диване, а ежедневно, в офисе, по 40 часов в неделю, где с тобой будут обращаться аки с дерьмом 20-летние мальчики (а иногда даже и девочки), взваливая на тебя самую нудную работу) первые полгода забесплатно? Если готов - то да, в принципе можно вкатиться куда-нибудь джуном.
>не будут лепить говноказуалки
Я ничего такого не хочу сказать, а ты не именно этим сейчас занимаешься?
А что не так? Копит бабло и скилл, со временем м.б. уйдет и своего Cuphead'а захуячит.
мимоанон
Не работать забесплатно. Любой труд должен быть оплачен, это золотое правило всех нормальных коллективов. Хотя на первое время нужно соглашаться на скромную зп, канешн.
> А что не так?
То, что он назвал контору, которая лепит казуалки, конторой, которая их не лепит.
Так речь была о том, что анон искал контору не про казуалки, а пришел туда.
Кстати, анон-разраб, можешь написать зарплатную вилку для мимохуя без опыта в геймдеве, но с 5+ лет опытом в ойти вообще?
Витуху обжимал.
Кресты, питон, шарп, есественна, на жаве небольшой опыт (но только как скриптящего qa), паттерны, ООП. Официально работаю qa-инженегром, хотя временами это напоминает программиста или продакт менеджера, когда приходится полоскать мозги кодерам на счет того, что делать надо не только на основе того, что в джире написано, но и руководствуясь здравым смыслом.
Дома ради фана пилю свой космосим с орбитальной механикой.
И антивирус отключить?
Предлагаю Coroutine edition.
>Не работать забесплатно. Любой труд должен быть оплачен, это золотое правило всех нормальных коллективов. Хотя на первое время нужно соглашаться на скромную зп, канешн.
Как и труд конторы по его обучению и превращению из говна в человека, который способен делать что-то полезное.
Дели свою текущую зарплату на 5 и на 3 - получишь нужную тебе вилку.
Пытаюсь реализовать столкновение двух автомобилей - игрока и опонента. У обоих есть Box Collider с Is Trigger = true.
Сделал проверку на OnTriggerEnter и OnTriggerExit. Завел отдельную булевую переменную, которая определяет, что пока объект не покинул коллайдер бокс другого объекта, повторно код для столкновения обрабатывать не надо. Переменная статическая! И все равно Unity считает, что столкновение происходит каждые четверть секунды. Как выйти из ситуации? Какую логику лучше использовать для обработки столкновений?
>Котики, у меня иногда из-за ошибок код уходит в while(true){}. Можно ли как то вывести редактор из бесконечности иначе чем через убивание процесса?
Бля не тот тред
Начал осваивать движок, прошёл курс сишарпа.
Хочу попробовать сделать тайловую карту по которой бегает герой.
Нашёл пачку уроков по таким вещам.
И столкнулся с проблемой.
Вот например один из уроков:
https://youtu.be/70sLhuE1sbc?t=19m12s
Я отмотал на время. когда там начинают писать код.
И там добавляют в меню возможность делать тайлы.
Повторил я этот код и у меня в итоге возникает ошибка в виде пикрелейтед.
И я не понимаю почему - там же явно коду объясняется что такое WaterTile! Почему он не понимает, что это такое?
Незнаю даже, компания "Rock star" какая-то. Там по англ всё. Хер её знает.
Tile странным образом не происходит из Tilemaps (серенькие = no use)
Вы видите копию треда, сохраненную 18 сентября 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.