Вы видите копию треда, сохраненную 15 апреля 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: >>489738 (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
Я начну: Сабнавтика.
Тиранни, Раст, Блицкриг, Пилларс оф Этернити. Вообще поддерживаю. Вот у уечепидоров куча примеров, а у нас что? Нажо собирать библиотеку успешных игр и продвигать как пример успешности юнити.
Ну, я на андроид игру делаю. Сделал билд на 2018 версии, размер файла уменьшился на 6 МБ. Но была проблема со скриптами. В одном скрипте была ошибка, я её исправил, но юнити упорно отказывался видеть изменения. Пришлось реимпортнуть папку со скриптами.
Может есть ещё какие-то проблемы...
>Как ты игру сделал даже не представляю, спиздил у кого-то с гитхаба?
Сам навелосипедил почти 17 loc
>ставишь на узел тег названия страны и на юнитов вешаешь разрешение ходить по узлам с тегами своей страны
Но это же хуйня. Стран может быть пара сотен, + союзники, по врагам тоже можно ходить. Куда проще было бы фильтровать узлы в нормальном предикате, а не сравнивать по каким то тегам с названиями
>>498596
На гихаб пиздуй, там и движки есть и готовые игры https://github.com/SWY1985/CivOne
>>498607
Если только оче нужна поддержка c# 7, иначе - нахуй ее, глючит
Вопрос - я включаю анимацию ходьбы юнита через m_Animator.SetFloat("Forward", m_ForwardAmount, 0.1f, Time.deltaTime);
Но при каждом следующем использовании этого метода юнит бежит все быстрее и быстрее. ЧЯДНТ?
> Но при каждом следующем использовании этого метода юнит бежит все быстрее и быстрее
Ну само собой, ты же метод несколько раз вызываешь.
Я как-то раз додумался корутину из апдейта вызывать, можешь представить что там было.
Можешь ждать окончания этой анимации, например.
Нормальный ли вариант сделать одного игрока типа хоста, и чтобы координаты для этих шмоток считал он, отправлял на сервер, а он всем остальным. Так, по идее, если он отрубится, то мы передаём это на следующего игрока и теперь считает он. Вот такой велосипед. Нормас или хуйня? насколько сильно хуйня, я не особо в клиент-серверной параше разбираюсь
Чему бы на сервере не считать? Или сразу на всех клиентах?
> Пишу мультиплеер
> я не особо в клиент-серверной параше разбираюсь
Может сначала туториалы по мультиплееру покурить, не?
Ну деньги то в unity ушли, я надеюсь они там смогут это посмотреть
А ну сейчас спустя 40 минут отмена покупки прошла. Ну блять, сраный роскомнадзор
Есть динамическое риджидбади2Д. Я хочу сделать так, чтобы при падении оно уменьшалось в размерах. Рассчитываю через лерп, но во время изменения размеров все начинает дико тормозить. Я уже все испробовал, не понимаю в чем дело. Может кто из гуру подскажет, куда копать?
код покажи че ты там понаписал. может дебаг лог забыл убрать из апдейта или ещё какую хуиту
Текстуры лошадиных хуёв и модели коней.
Дешевле сначала игру сделать, а уже потом оптимизировать.
Блять, ну написано же, епт твою мать.
https://docs.unity3d.com/ScriptReference/EditorGUILayout.ObjectField.html
Вот, в видеорелейтед, видна разница, как они падают. Я не представляю в какую сторону гуглить, что происходит? При скейле обрывается расчет физики или что-то подобное?
public class test : MonoBehaviour {
// Use this for initialization
void Start () {
StartCoroutine(ScaleObject());
}
// Update is called once per frame
void Update () {
}
IEnumerator ScaleObject()
{
float scaleDuration = 5; //animation duration in seconds
Vector3 actualScale = transform.localScale; // scale of the object at the begining of the animation
Vector3 targetScale = new Vector3(3f, 3f, 3f); // scale of the object at the end of the animation
for (float t = 0; t < 1; t += Time.deltaTime / scaleDuration)
{
transform.localScale = Vector3.Lerp(actualScale, targetScale, t);
yield return null;
}
}
}
Вот, в видеорелейтед, видна разница, как они падают. Я не представляю в какую сторону гуглить, что происходит? При скейле обрывается расчет физики или что-то подобное?
public class test : MonoBehaviour {
// Use this for initialization
void Start () {
StartCoroutine(ScaleObject());
}
// Update is called once per frame
void Update () {
}
IEnumerator ScaleObject()
{
float scaleDuration = 5; //animation duration in seconds
Vector3 actualScale = transform.localScale; // scale of the object at the begining of the animation
Vector3 targetScale = new Vector3(3f, 3f, 3f); // scale of the object at the end of the animation
for (float t = 0; t < 1; t += Time.deltaTime / scaleDuration)
{
transform.localScale = Vector3.Lerp(actualScale, targetScale, t);
yield return null;
}
}
}
1128x802, 0:03
renderQueue. сам же перевести можешь. https://docs.unity3d.com/ScriptReference/Material-renderQueue.html
>https://docs.unity3d.com/ScriptReference/Material-renderQueue.html
Допустим. Но если у меня в 3д ГУИ картинка наслаивается на панель, мне дополнительный шейдер делать на каждый слой? Как то это тупо. В одном шейдере ведь не может быть разных renderQueue
Алсо, придется искать текстуры для переписки стандартного шейдера 3д текста - он, суко, поверх всего рисуется
>В одном шейдере ведь не может быть разных renderQueue
они же вроде в материале ещё настраиваться могут? хотя я не проверял работает или нет
>он, суко, поверх всего рисуется
всегда можно изменить пространство отрисовки канваса на ворлдспейс, или камера спейс же
>всегда можно изменить пространство отрисовки канваса на ворлдспейс, или камера спейс же
Я, в данном случае, использую 3Д Текст, без всяких канвасов. Или он устарел и не стоит им пользоваться?
ну это. с разморозкой, да. это ты там какую-то экзотическую хуиту творишь. там конечно шелухи побольше, но и контроля побольше. и очередность отрисовки на канвасе управляется позицией обжекта в иерархии.
Окей, попробую переделать.
Но другой вопрос - почему у меня текст проваливается в серую панель? Это ЮИ текст на паниле в канвасе с мировыми координатами. Z координата - 0. Так и должно быть или я где то обосрался? Матриал - дефолт ЮИ.
* на панели, текст - дочерний объект по отношению к панели, ессно.
Если честно то хуй знает что ты там понакрутить успел. Покрути координаты, скейл элементов и прочую хуйню. Там много чего можно покрутить.
Кстати а чего ты вообще решил все это в мировых координатах то ебошить? Может сделал бы отдельную камеру которая рисовала бы только UI, двигал бы там все эти надписи через код переводя кординаты из мировых в скрин спейс, имел бы себе отдельный менеджер который за все это отвечал бы.
Как это не видно? Видно же, что правый объект дергается и медленней падает.
>>498803
>не удалось воспроизвести ни с 2д ни с 3д. хуй знает че ты там понаписал.
Но я же привел код, это единственный код в сцене. Ты не мог бы скинуть свой скрипт для правого шара, а лучше залить куда-нибудь весь проект, если не сложно?
Начал рисовать вручную в зебре, но потом осознал, что придется вручную сажать травку и раскрашивать и забил хуй. Так же пробовал импортировать карту высот, но как начинаю что-то фиксить, то все идет по пизде.
>Если честно то хуй знает что ты там понакрутить успел. Покрути координаты, скейл элементов и прочую хуйню. Там много чего можно покрутить.
Да вроде хуйни не делал. Прост в мировых координатах, как я понял, ЮИ элементы - обычные полигоны, вот их и вмазывает z-fighting
>Кстати а чего ты вообще решил все это в мировых координатах то ебошить?
Ну, сам ЮИ у меня поверх камеры рисуется, только всякая хуйня из сцены в мировых.
>>498816
>двигал бы там все эти надписи через код переводя кординаты из мировых в скрин спейс, имел бы себе отдельный менеджер который за все это отвечал бы
Чет дофига переусложнений, пересчитывать координаты сотен объектов при каждом движении камеры, вообще охуеть.
Кстати, изменение render queue нихуя не помогает - сделал панели 2000, тексту - 3000, также пидорасит. Только увеличение z на 0.0001 помогает
>Да вроде хуйни не делал. Прост в мировых координатах, как я понял, ЮИ элементы - обычные полигоны, вот их и вмазывает z-fighting
внутри канваса у них нет з-файтинга
>Чет дофига переусложнений, пересчитывать координаты сотен объектов при каждом движении камеры, вообще охуеть.
да ну брось каких сотен. ты там буквы по отдельности чтоли рисовать собрался. очевидно что отрисовку наоборот нужно отключать если камера слишком далеко, а если близко то и рисовать нечего.
>>498842
там не совсем так просто всё с очередью отрисовки. как видишь она вполне работает. просто для прозрачных и непрозрачных объектов по разному.
вообще че ты там творишь? че у тебя там пидорасит то? говорю - перенеси на отдельный слой который рисует только UI. То есть у всех элементов UI поставь Layer: UI и сделай камеру которая рисует только этот слой.
а хотя. перечитал твой вопрос и подумал над контекстом. тут и правда проще всего будет просто приподнимать немного UI нарисованный в ворлд спейсе.
вообще твои странные проблемы можно было бы решить иным способом. завести ТРИ камеры! одна рисует карту, вторая рисует UI а третья хопа и юнитов!
да ну не пизди, у меня был прототип в котором было аж пять камер. иметь лишние камеры вполне себе решение если хочется что-то поверх чего-то рисовать. например хопа и вот тут я рисую кликабельное превью карты в лобби. команда 1 выбирает чанк, а команда 2 выбирает чанк за пределами сферы первой команды. а карта вообще на другом слое за три пизды.
>внутри канваса у них нет з-файтинга
У меня - было см текст на панельке >>498811
>>498854
>да ну брось каких сотен. ты там буквы по отдельности чтоли рисовать собрался. очевидно что отрисовку наоборот нужно отключать если камера слишком далеко, а если близко то и рисовать нечего.
>
Куча провинций, юнитов, хз что я еще добавлю
В принципе, я решил свои проблемы - таки нашел текстуру для нового шейдера 3д текста который риcуется не поверх всего а в порядке. остальное по Z поднял на 0.001
Осталось только разобраться...
>говорю - перенеси на отдельный слой который рисует только UI. То есть у всех элементов UI поставь Layer: UI и сделай камеру которая рисует только этот слой.
Не, я пока оставил старый 3д текст с новым шейдером. Он прикрепляется к объекту без всяких канвасов - просто и удобно. Там еще и лоды прихуячены..
>вообще че ты там творишь?
Куча элементов в одной плоскости проваливаются друг в друга
>У меня - было см текст на панельке
да он загорожден у тебя наверняка чем-то или ещё какая проблема. если префабами пользуешься то ты учитывай что у них очень сильно разный скейл в ворлд спейсе и скрин спейсе.
>Куча провинций, юнитов, хз что я еще добавлю
да ну брось у тебя на скриншоте даже сотни надписей нет. как бы пересчет пространства то не такая хитрая операция как можно подумать. лучше бы менеджер завел. вот захочешь ты например завести кручение карты. и че? это ты на каждом повороте будешь говорить каждой провинции "поверни свою надпись"? чем-то эта идея попахивает.
>Не, я пока оставил старый 3д текст с новым шейдером. Он прикрепляется к объекту без всяких канвасов - просто и удобно.
так ты это. спавни всю эту хуйню сразу с канвасом. или добавляй эту надпись в какой-то единный канвас для надписей. новый UI же здорово. там тебе и нормальный автоперенос по словам и бест фит и разрешение нормально меняется.
>Куча элементов в одной плоскости проваливаются друг в друга
по моему у тебя просто хуйня поверх юнитов рисуется. рисуй юнитов поверх всего.
>да ну брось у тебя на скриншоте даже сотни надписей нет.
Так это ж тестовая версия. Так то весь мир долго генерируется. Да и безумие это. но потом таки сделаю - надо чтобы значок армии оставался постоянно размера при любом положении камеры.
>>498866
>или ещё какая проблема
Похоже. В другом случае очередь отрисовки норм работает.
>>498866
>вот захочешь ты например завести кручение карты
Низахочу. В этом жанре камера не крутится.
Зато, может быть сделаю систему чтобы текст названия страны вписывался в размеры страны. но некогда. И сложна.
>Так это ж тестовая версия. Так то весь мир долго генерируется.
так если надписей много то они вообще не должны отображатся до определенного уровня зума же. тебя не просто так ругают за интерфейс же.
>Низахочу. В этом жанре камера не крутится.
да ну не ври. вон например в Stellaris вполне себе крутится. это у тебя пока карта плоская и хуевая смысла крутит мало. а вдруг у неё карта высот появится, горы, деревья? а тут нате, крутить нельзя. или можно но только вместе с надписями.
>так если надписей много то они вообще не должны отображатся до определенного уровня зума же
А зум и есть, через ЛОД. Мне пересчет этих сотен(тысяч) объектов не нравится. Лишнее, пока и так работает.
>>498870
> это у тебя пока карта плоская и хуевая смысла крутит мало. а вдруг у неё карта высот появится, горы, деревья?
Вообще, у меня была идея добавить мою же генерацию высот с пикрила, но это вряд ли. Надо работу искать, а с Патреона едва 15 баксов приходит.
Перепишу если что, а заранее универсальные механизмы делать - зло. Рефакторинг в данном случае почти ничего не стоит.
> пока из эксперементальной фазы не выйдет какая то функция "graphics jobs"
Она что, всё ещё в экспериментальном режиме? Охуеть, третий год уже пошёл.
Так дело не только в коде может быть.
Ты в RigidBody не менял ничего? У тебя там gravity поди другое выставлено
пиши разрабу что вышла 2018 версия юнити, в которую как раз завезли jobs.
Где можно посмотреть примеры, как организованы проекты юнети у белых людей?
Поддвачну вопрос. А то везде лишь громоздят гору велосипедов и подпирают ее костылями.
Как раз из-за впн платеж и не проходил, я его вырубил и все ок стало, потом снова поднял, чтобы в самой юньке ассетстор открылся, а в браузере он и так работал слава богу.
>>498724
Да почему секрет, взял corgi engine, rex engine и pro camera 2d, нарадоваться теперь не могу, я ведь столько времени ебался велосипедил свои костыли, вместо того чтобы делать игру.
Очевидно, что в документации юнити, в примерах проектов.
На сайте в официальных туториалах от самих разрабов юнити.
https://blogs.unity3d.com/ru/2018/05/10/launching-3d-game-kit-explore-and-learn-unity-in-3d/
Ну вот например, тут тебе и контроллер персонажа, и боёвка, и двери, и шейдеры
https://docs.unity3d.com/ScriptReference/Serializable.html
Сейчас вот создал класс с таким атрибутом и с приватными переменными - в инспекторе их не видно.
Получается, эта хуйня нахуй не нужна?
Суть этого аттрибута в том, чтобы показать возможность сериализации всего класса, а не его полей. Ты скорее всего путаешь с [SerialiseField]
Создай не монобихувир класс с этим аттрибутом и без него, после чего сделай публичную переменную этого класса в другом скрипте и сравни результат.
Спасибо, сейчас проверю.
он для класса который не наследуется от монобихейвора же. сериализация в юнити имеет свои особенности. можешь почитать про неё в этом посте. https://forum.unity.com/threads/serialization-best-practices-megapost.155352/
>Что там с Unity Entity Component System? Уже можно пользоваться?
Аноньчики, ответьте, плиз...
Есть класс Item, который ни от кого не наследуется. Там поля с именем, весом и т.д.
В папке Resources/Items лежат префабы, состоящие из пустых геймобджектов с прикреплённым классом Item.
На сцене висит скрипт, который делает вот это:
public List <Item> allItems;
void Start () {
allItems = new List<Item> (Resources.LoadAll<Item> ("Items"));
}
Юнька на меня ругается, говорит что
> Assets/Scripts/ItemController.cs(21,40): error CS0311: The type `Item' cannot be used as type parameter `T' in the generic type or method `UnityEngine.Resources.LoadAll<T>(string)'. There is no implicit reference conversion from `Item' to `UnityEngine.Object'
Если же Item унаследовать от монобихэвиора, то всё работает безо всяких ошибок. Но мне от него наследоваться не надо. Как быть?
оно ж тебе пишет - могу грузить только UnityEngine.Object.
унаследуй его от обжекта а лучше скриптабл обжекта и убери нахуй префабы нафиг тебе полноценный геймобжект со всем вагоном стандартной фигни?
> унаследуй его от обжекта
Пробовал, тогда префабы выдают пикрилейтед. Хотя в консоли никаких ошибок нет.
> а лучше скриптабл обжекта
Да вот и я всё больше склоняюсь к тому, что придётся курить что это за тварь. Постоянно обходил его стороной, максимум на офсайте видео по нему посмотрел. Но, видимо, день настал.
И ещё вопрос.
Вот есть у меня префаб айтема, например зелья. У него есть поле, например amount.
Вот загоняю я этот префаб в лист игрока и в лист, например, ящика, который можно облутать. И если я изменяю это поле в зелье игрока, то оно же меняется и у зелья в ящике. То есть меняется поле самого префаба, а в листе только ссылки на префаб. Само собой, мне надо чтоб каждое зелье было отдельно от другого.
Скриптэйблобджект мне в этом поможет? Или изначально надо было брать не лист, а какую-нибудь другую хуергу?
не, скриптабл не поможет. тебе нужно что-то типа пар, типа
public struct ItemSlot
{ public ItemInfo Item; public int Count; }
и соответвенно список таких слотов в ящике
Спасибо ананасам за ответы или это был один, слава богу не сильно много нахуевертил, думаю перепишу довольно быстро.
Есть немного. Проблема в том, что нужен договор оферты на русском, а у них на сайте он только на английском
https://unity3d.com/ru/legal/monetization-services-terms-of-service
Может кто уже выводил деньги и у него есть договор на русском.
Блэт, у меня с начала года более 5к просмотров было из Америки, мог долларов 30 заработать, пичалька
Алсо, можно же в Facebook опубликовать приложение, как идея?
Это ты блять 7к зелеными за 10 дней нахуячил?
Это что за игра у тебя такая, да ты, блять, больше чем создатель Iconoclasts в месяц хуячишь
аргх ебучая сериализация в юнити. сраная срань которая не может сериализовать ридонли поля. хуйня случилась и бегай потом ищи почему.
>>498970
скачай и попользуйся, что же ты.
>>498977
заведи свою базу данных предметов. что же ты. на префабах только интерфейсы держи через которые настоящие айтемы с ними взаимодействуют.
>>498992
так ты каждый итем как экземпляр класса заводи. редактируй не то что в префабе, а то что создано по этому префабу.
> заведи свою базу данных предметов
В чём её хранить? В скиртблобжухкте? Что легче всего для нуба?
> так ты каждый итем как экземпляр класса заводи
Да, это я уже понял. Как раз упёрся в стулья, на какой сесть чтоб хранить данные о предмете.
Можно в SO, можно sqlite прикрутить
>В чём её хранить? В скиртблобжухкте? Что легче всего для нуба?
йеп. в скриптабл обжекте. там тебе дают волшебную сериализацию юнити. и там есть фича - оно может сериализовать ссылки на объекты в проекте. лучше не придумать чтобы связать кучу цыферок, картинок, префабов и прочего в одну кучу. например на картинке простенький прототип чего-то такого. я могу сказать хуяк заспавни мне предмет номер такой-то. и там ещё отдельно спавнилки могут подправить цыфры с таких на другие.
но на самом деле конечно тебе ещё придется полезть в дебри создания интерфейса для своих кастомных окошек в юнити чтобы воспользоватся этим могуществом. так что у тебя два стула. либо велосипед делать, либо взять готовое и делать игры. какую пилюлю выберешь?
>Да, это я уже понял. Как раз упёрся в стулья, на какой сесть чтоб хранить данные о предмете.
лол ну ты всегда можешь воспользоваться любой другой сериализацией. если у тебя какая-то своя особая структура папок в проекте то хули, XML сериализацию приделай.
Уговорил, чертяка. Значит всё таки нарушу свой целибат и нормально разберусь с этим дерьмом.
Сука, как же всё хорошо было пока не упёрлось в этот инвентарь, его отображение в окне-инвентаре и т.д.
Как нубу, тебе объясняю: делай игры, а не думай, в чем хранить нужно. Что первое в голову придет - в том и храни.
>скачай и попользуйся, что же ты.
А я уже нашёл, что она не production-ready, так что нахуй надо.
В 2д платформере, если персонажа упереть в стенку и пытаться идти в неё, он как будто на долю секунды проваливается в неё и потом откидывается обратно, и так много раз.
В общем надо, чтоб он в стенку не мог входить, лол.
Вдруг сталкивался кто.
Такая вот хуйня с out of scope
Где посоветуете посмотреть/почитать? Хочу грузить сцены с проприетарного сервака. Мамка денех даст.
Именно, что без namespace {} вообще!
Сработало, когда перетащил с папку, где сидел другой скрипт, к которому хотел обратиться
С общим неймспейсом из разных папок, а вообще без неймспейса только из одной что ли?
Да вот я и попробовал хранить в префабе, но хуйня получается. Сейчас курю скриптэблобжект, пока не сильно понимаю как мне его натянуть на свой инвентарь, но то наверное я уже просто вареный. Отложу до понедельника.
бамп вопросу блеть!
Читай про AssetBundle. Именно их загружают. Примеров дохуища. Тебе нужно будет только разделить контент игры на бандлы.
Получилось, спасибо.
> Проверку на нуль можешь добавить
Оказалось что не надо, если ничего не нашлось, то Remove не ругается, ему просто похуй.
По вопросу не помогу, но очень советую отказаться от магических чисел и всё держать в переменных. Ну и переменные лучше с маленькой буквы обзывать, даже лучи.
Тогда var можешь убрать
>>499122
>Пускаю луч из точки нажатия на экран и двигаю объекты, но когда двигаешь их близко, считывается только одно нажатие, второе просто пропадает.
Нихуя не понятно чего ты хотел
Алсо, если кто пользуется incremental compiler - где их сайт? Не могу найти, а он похоже ломает что то у меня
>Алсо, можно же в Facebook опубликовать приложение, как идея?
Плохая идейка. ВКонтакте тебе дадут хоть какой-то трафик на старте, а в Фейсбуке крутись как хочешь. Да и денег в социалках нет. Лучше продолжай работать с мобильными платформами.
>>499130
https://www.youtube.com/watch?v=9Oh-U9UzRQs&feature=youtu.be
Когда подвожу пальцы на телефоне близко, один касание пропадает, когда отвожу появляется. На видео видно.
на видео водно, что левый принимает позицию правого. Может, телефон не всиле распознать 2 кацания, если они близко? И переключается на одну точку.
После последнего крупного апдейта win10 (с вопросами про cortana и пр.) у юнети отвалился Debug.Log()
У меня 4.2.f2
Попробуй уменьшить зону касания в игре. Ты ведь получаешь сырые данные, сделай так, что бы зона касания была меньше, нежели телефон рапортует. В этом случае управление будет чуть более чувствительным к изменению, но пропадать не должно.
Device multitouch-то поддерживает?
Он не меняет позицию, он удаляется. А удаляется он потому, что касание пропадает.
Хз анон, тут помочь не могу - гугли. Просто первое, что пришло в голову
Первый раз о таком слышу, ибо нуб
что там вообще может в более современных крошится лол. ты что? линуксойд? макоёб? как ты это смог?
Да
>что там вообще может в более современных крошится лол
В 2017.3.1f1 постоянно грохался редактор при drag&drop
а это то как у тебя могло случится лол. даже без переписывания редактора? ну ты это. попробуй 2018 чтоли. а то охуеть аж 4.2.f2. даже не 5+ а 4 где были все эти платные фичи.
public ScriptName ScriptName;
void start()
{
ScriptName.StartCorutine(NameCorutine())
}
не работает
public ScriptName ScriptName;
void start()
{
StartCorutine(ScriptName.NameCorutine())
}
RectTransform myRectTransform = crossHair.GetComponent<RectTransform> ();
myRectTransform.anchoredPosition = new Vector2 (newX, newY);
Но пизда не рыпается
Так то что я написал работает
Ты его на полпиписьки сдвигаешь, я думаю
window.GetComponent<RectTransform>().anchoredPosition = new Vector2(150f, 150f);
Покупать все подряд, чтобы изучить и понять а надо ли оно тебе вообще, это негуманно.
https://youtu.be/aFxucZQ_5E4?t=21m29s
И на этом моменте автор меняет направление юнита, если он близок к точке хотя бы на 0.2. Но что делать, если игра лаганёт и из-за большого Time.deltaTime враг перескочит точку? Как это фиксить?
21^30 таймкод момента
Кстати, да )))
Решение на пике. Самой гуйной пиздюрине надо задать pivot внизу слева. Так и raycast стреляет с теми же настройками
Проебал майскую распродажу и лепишь отмазки про "дороговизну стульев"? )))
Я вот закупился до упора. Мамка денег дала
Приложить силу могу и хреновина летит, куда надо, а вот с isKinematic и скоростью вообще не двигается с места
GameObject fireBall = (GameObject)Instantiate(fireBallPrefab);
fireBall.transform.position = fireBallSpawn.position;
Rigidbody body = fireBall.AddComponent<Rigidbody> ();
Vector3 dir = (target.position - fireBallSpawn.position).normalized;
dir.Scale (new Vector3 (300f, 300f, 300f));
body.isKinematic = false;
body.useGravity = false;
body.AddForce (dir);
//body.velocity = dir;
> с isKinematic вообще не двигается с места
это может быть связано с тем, что isKinematic это пометка "не двигаться с места"
Некоторые считают, что стандартный молоток от фирмы производителя "Совок" не самый лучший для забивки гвоздей на 7, только на 5. Стоит ли брать?
Никак не могу, схлопнувшиеся Ori and The Blind Аorest and Hollow Knight все еще в кошмарах снятся
А кроме этих игр?
>"А чо бля, кроме этих двух, продавшихся миллионами и ставшими бессмертными хитами - нет чтоль ничё? Ха, так и знал - сдуулся, ссученок!"
И вообще, чой-то троглодит делает утром майского воскресенья вне пещеры?
Да нет, я уже убедился, что 2D в юнити отлично работает.
Стартанул пустой проект. Добавил террейн, добавил шарик. Шарику добавил ригид боди. Камеру привязал к шарику и подвигал, так чтобы смотрела как в стратегиях сверху под углом.
В гугле нашел, вот такие ответы.
Мне нужен Camera.ScreenToWorldPoint и Vector3.Lerp. Ну позиции курсора вроде считываются и шарик двигается.
И похоже у меня перепутаны Y и Z на террейне или хуй проссыш. Шарик постоянно прыгает, а должен по плоскости кататься. Или камеру я неправильно навертел. Помогите.
Я тупой, спасибо! Убеждал себя, что если-мол сам задаю скорость, то это isKinematic.
Заработало!
> Убеждал себя, что если-мол сам задаю скорость, то это isKinematic
Чё чё? Искинематик это если ты движение задаёшь не через риджидбади, а через трансформ.
дык ясен хуй блэть
Нахуя? Повесь на дочерние объекты скрипт, который будет мерцание выполнять (хоть через коуртину, хоть через Update) и потом просто запускай его.
Можешь там параметров накидать - когда /через сколько прекратить и т.п.
Объект окрашивается в красный, потом начинает мерцать и потом снова становится белым (ну то есть по сути неактивным, но действие потом запилю). Было бы удобнее с 1 скриптом который рандомно выбирает 1 дочерний объект и работает с ним, после чего повторяет то же самое но с другим. Это ведь реализуемо?
Ну так один скрипт и будет, просто на объектах будет его инстанция. У тебя вообще один дочерний будет, его копии - инстанция префаба.
В скрипт логику мерцания пихай и вызывай когда и как надо
PomorgatIPrerestat()
MorgatDolgo()
Хм, ну пока выглядит почему то сложнее. Ладно, завтра попробую так. А для будущего - почему моё дерьмо не заработало? Оно как бы и красит объект, но в цикле где должно быть якобы моргание ничего подобного и нет. Другие объекты тоже не окрашиваются.
В риджидбади смени с дискретного на непрерывный режим
Каждый раз улыбаюсь, читая, как местные ноускиллы бомбят от ошибок в коде, который они даже осознать не в силах.
При этом в редакторе игра работает так как надо ВЕЗДЕ.
gravity.ApplyGravity(transform);
Второй скрипт
public void ApplyGravity(Transform receiver)
{
...
receiver.GetComponent<Rigidbody>().freezeRotation = true;
}
Почему это работает, если мы передаем не GameObject, а только его transform?
>Почему это работает, если мы передаем не GameObject, а только его transform?
Они, по сути, не отделимы в Юнити. Subtle differences возникают в редких случаях.
Конечно, при желании можно отделить - но не надо.
Он будет всегда срабатывать, если объект входит в зону триггера несколько раз. Отключай после первого раза, если нужно
x86_64 попробуй
>Отключай после первого раза, если нужно
Так и делаю. Но что значит "входить несколько раз". Иногда срабатывал 2, иногда 3 раза
>Subtle differences
А с точки зрения языка программирования как это реализовано?
Типа по умолчанию передается объект класса?
Да, я знаю что можно засунуть в родительский объект, хуё-моё, но разве никак нельзя rotation order изменить?
Шёл 2018-ый год, а до сих пор приходится обмазываться костылями в виде пустых родительских объектов чтоб рамки не складывались.
>Повернул я свой объект точнее - дохуя объектов на 90 градусов по оси Х и словил gimbal lock.
Так не используй системы ротации с gimbal lock, используй Quternion'ы - для того и сделаны
audiosource.volume += fadeStep работает глюкаво
Делайте через отдельную переменную
Пример отсюда по убавлению громкости может работать или не работать
https://forum.unity.com/threads/fade-out-audio-source.335031/
Такое ощущение, что read-modify-write прямо на audiosource.volume да еще в каждом фрейме сбивался и звук не убавлялся. У меня версия 2017.4.2f2
В последнем посте я подправил подстройку через отдельную переменную (adjustedVolume) и так заработало.
ЗЫ я не Борис если чё
>>498803
Не могу победить дерганья при скейле. Ребзя, помогайте, хоть наведите на мысль. Создал чистый проект, видеорилейтед. Падают астероиды, слева на право:
1) Скейлится, без интерполейта в риджидбоди.
2) Скейлится, с интерполейтом в риджидбоди.
3) Не скейлится, без интерполейта в риджидбоди.
4) Не скейлится, с интерполейтом в риджидбоди.
Видно, что плавно движется только 4-й. Камера следует за ним же, но это равноебуче, я пробовал вешать ее и на остальные.
Скрипт скейла и камеры прикрепил в пикчах.
Как сделать так, чтобы камера следовала плавно за астероидом, а он при этом падая, увеличивался в размерах без дерганий?
Я, может, не понимаю каких-то базовых вещей, но подозреваю, что дело тут в работе интерполейт. Ибо 1-й и 3-й астероиды хотя бы ведут себя более-менее одинаково. А поведение второго вообще мне непонятно. Может как-то можно покадрово дебажить, что именно в какой момент происходит?
Корутину убрал. Прописал в апдейте:
transform.localScale = Vector3.Lerp(actualScale, targetScale, Time.deltaTime);
Картина примерно такая же.
Понятно, но как фиксить, как гуглить, где хоть почитать теорию про это? Как работает интерполейт, как в него попасть при скейле? Есть вообще какие-то методы отладки синхронизации в юнити?
я откровенно неибу в чем твоя проблема. на, хули. http://rgho.st/8ztj9tMgq
шарики падают, верхний становится больше. нука поломай это.
Здесь камера внутри скейлящегося объекта. Попробовал сделать так в своей демке, работает отлично. Спасибо большое, ты натолкнул меня на мысль, которая может помочь.
Но насколько это правильный подход, класть камеру в объект? Мне бы хотелось иметь возможность плавно переключаться между несколькими объектами. При таком подходе это какие-то костыли получаются.
камера заперенчена к не скейлящемуся объекту, а к объекту без компонента который его скейлит. но одна хуйня так как сам видишь что они неподвижны относительно друг друга. что у тебя там пошло не так - а хуй его знает. поломай это и расскажи как поломал, а мы посмотрим.
если думаешь что дело в том что камера заперенчена то на, хули. http://rgho.st/7zzlLxBK6 будем считать эту хуиту контролером камеры.
>Но насколько это правильный подход, класть камеру в объект?
так себе подход. хуевый какой-то.
>>499431
Не слушай этого долбоеба, он хуйню несет, у тебя проблема в камероконтроллере. Ты третим параметром передаешь дельтатайм x4. Время в секундах, которое потребовалось для отрисовки последнего кадраhttps://docs.unity3d.com/ru/530/ScriptReference/Time-deltaTime.htmlТебе-же надо передавать значение от 0 до 1https://docs.unity3d.com/ru/530/ScriptReference/Vector3.Lerp.html Как это делать - решать тебе.
>но как фиксить, как гуглит
У Brackeys есть видос про "following camera". Так там тоже дергалось в начале, после от разобрался, в какой из апдейтов ставить ( Update, FixedUpdate, LateUpdate - я не помню)
Дерзай!
gopnek detected
>Не слушай этого долбоеба, он хуйню несет
Ну так все правильно сказал - у него десинк, ибо LERP неправильно работает. Точнее, работает как надо - по неправильным данным.
Я, кажется, что-то понял. Дело в этой строчке:
transform.position = follow.transform.position + cameraDelta;
Мне нужно, чтобы камера при всем этом начинала плавно следовать за объектом. Подозреваю, что нужно smoothDamp использовать, так? Как лучше это сделать, чтобы камера с запозданием перемещалась?
>>499445
>>499447
Спасибо, анончики, я посмотрю, а то совсем уже голову сломал.
слушай, ты уже утомил. думай давай своей головой. http://rgho.st/8D8dh9RJb на тебе плавное перемещение камеры.
предвидя твою глупость - можно написать Vector3 = Vector2. И наоборот. И тут я использовал это чтобы убрать Z у позиции камеры. это не слишком то оптимально, но в общем-то похуй.
Это точно не размер файла, так как он весит 20КБ.
каком обсере? ты, ебалашка, в "состоянии осознать", что выбор папки - нетривиальная инженерная задача?
А в чем прикол, если оно весит в разы больше теперь?
Алсо, если я буду генерировать мипмапы, размер увелчится сильнее, но на размер билда это не влияет.
Где эти объемы данных хранятся-то?
Потом на выходе игры похерят её? Или как это работает? Сталкивался кто?
Никаких подводных. Что купить, что спиздить - на выходе получишь просто папку с файлами. Некоторые даже скидываются по 5-10 человек и покупают, если ассет дорогой.
У меня вот папка с ассетами на 6 гиг, ни один из них не купил правда там и бесплатные есть. Но я их и не пиздил, какие-то наш художник покупал, какие-то геймдизайнер, а мне через коллаборейт достались, они ж в папке проекта лежат.
Есть какие-то компромиссы и уловки, чтобы и сил затратить немного и нормально смотрелось.
Например, вот хочу я сделать уровень "строительный магазин". Мне нужны модели полок - это легко. А вот всяких товаров и так далее, огромное множество. С этим возникают проблемы.
Ну, или может есть какие-то игры, которые выкрутились из этого, сделав всё красиво, но затратив мало усилий, и на них можно равняться?
> Как замутить приемлемый графон в своей игре, если ты программист, а 3д моделлингом почти никогда не занимался?
1) научиться в 3д-моделлинг
2) нанять 3д-моделлера
3) не ебать себе мозг и пилить прототип, а уж когда будет готова игра — выполнить пункт 1 или 2
И что, у меня будет, например, лабиринт из серых параллелепипедов (типа, магазин, ок да) и так на всю жизнь и останется? Код и внутриигровой текст то я уже написал весь.
Если начать дрочить моделлинг, ну, скажем, 3 часа в день, через сколько приобретается навык для инди разработки, чтобы хотя бы не вырвиглазно было?
> И что, у меня будет, например, лабиринт из серых параллелепипедов (типа, магазин, ок да)
Ну на стадии прототипирования так и делается, да.
> Если начать дрочить моделлинг, ну, скажем, 3 часа в день, через сколько приобретается навык для инди разработки
Ну тут смотря насколько ты дебил/недебил.
Вон парень из нашей команды тридэёбство освоил за неделю на вполне вменяемом уровне (правда он сам по себе художником был и до этого, только 2д), а через год уже творил аки боженька.
А у предыдущего было 4 года стажа, а лепил как будто из говна и соломы.
> Какой-то у вас разброс слишком большой
Чому? Я ж говорю — наш товарищ за неделю наловчился на уровень "норм", затем через год (не задрачивания именно 3д, а вообще, у него и своих хлопот хватает) уже был на уровне "бог". Второй ананас тебе сказал про месяц именно задрачивания, но явно не про уровень бога.
А про ассеты — ну хуй знает, ассеты не изменятся если ты попросишь "ну вот тут бы чуть-чуть вот так".
Да и вообще определись, тебе скилл или ассеты.
Да мне... сделать хоть что-то на каком-то уровне.
Понятно, что набивка скилла потом поможет и окупит себя в будущем, но это же нужно потратить столько времени на дрочку чего-то, что может и не понадобиться тебе после этого.
Ежели он юнПограммист, то по-дефолту, первое куда он должен был обратиться - в ассет стор. По той причине и не предлагаем. И вообще, лучше не в сторе искатьт.к. там 3д - помойка, а в каких-то модельстоках, хотя и там за-безплатно, редко что выцепишь.
> но это же нужно потратить столько времени на дрочку чего-то, что может и не понадобиться тебе после этого
Ну вот для этого есть второй стул — искать скилованного братишку, который будет за еду/бабос тебе пилить что надо.
Или третий — юзать ассеты, но там найти картошечку в куче дерьма не всегда получается в нужные сроки.
Чот по-моему ты школьник, а не погромист. На двух стульях одной жопой пытаться усидеть - очень хуевая идея, а еще учти, что третий стул - маркетинг - требует больше первых двух вместе взятых.
Я не пытаюсь, а просто спрашиваю. Вдруг у вас есть тут эталон типа: "Вот, тут парни не сделали почти нихуя, а картинка получилась норм. Вот как они это сделали. и тд"
"не сделали почти нихуя, а картинка получилась норм" - это только хороший агент, но найти такого - такой же актив, как и все остальное, и, естесно, все равно не бесплатно.
сочетание цветов - уже давно расписано в этих наших тырнетах https://flatuicolors.com/ например©Павук
Ну,как хочешь, так и юзай. Я тебе дал молоток. Как им кудрявые гвозди забивать - тебе решать.
Так тебе нужно один раз моргать случайным объектом или запускать периодичное моргание?
И нахуя тебе рекурсивно корутину стартовать, чем тебя while не устаивает?
dds - родной директиксовский формат текстур. по сути тупо дамп видеопамяти с текстурой. плюсы - быстрая загрузка в виду отсутствия перекодирорвания, сжатия(есть хардваерное, но его не учитываем) и прочих ништяков, встроенные мипы и т.д. минусы - размер в виду тех же причин.
Двачую одеквата. Особливо по пункту 3
Слушай, а может анимацию навесишь?
>директикс
Тут 90% анонов пилят мобилкодрочево. Там директикс неприменим.
Остальные пилят кроссплатформу. Там тоже актуальнее опенгл.
Тут такая тема, что директикс потихоньку в прошлое уходит.
>Тут такая тема, что директикс потихоньку в прошлое уходит.
Ага, сука тупая, он 20 лет как в прошлое уходит. Его OpenGL с десяток лет назад "победил", а потом еще и Вулкан 3 года назад.
Все чего=то его побеждают, побеждают - а он, год за годом полнее и жирнее.
Толко от графического АПИ если большинство игор сливает пиксельной дрисне по геймплею.
>Тут 90% анонов пилят мобилкодрочево. Там директикс неприменим.
несовсем точно написал. формат то родился в дх, еще в первых версиях, но стал дефакто стандартом в виду широкой поддержки на уровне железа.
Наверное потому Rise of Tomb Raider и FF15 на DX12? а не но победившем Вулкане? Потому как "слил гыыы"
Тупопидар мамкин
> и FF15 на DX12?
Это тот порт, лицензионная копия которого тормозит на 20% по сравнению с пираткой? И вообще это халтура и обман десятилетия, столько контента не дошло. Верните Стеллу ааааааааа
Да с content size fitter-ами в основном. Я думаю. элементы скукоживаются в 0 или не хотят по размеру контента становиться. уже час сижу над этим.
А не пойти ли тебе нахуй, животное?
15 лет в программаче, десяток лет в рисоваче, 4 года в моделлинге. И это, сука, ЕДИНСТВЕННЫЙ способ пилить игры, а не быть обоссаным школокириллом с ДИЗДОКАМИ. Пропорции опыта могут быть разными, но либо ты в соло умеешь всё, либо путешествуешь нахуй.
Ого, получилось что реально годное сделать за все время?
Фанбаза есть? Стало хоть что-нибудь минимально популярным?
да никто и не напрягался на самом деле только сейчас решил открыть юньку, что-б глянуть че там могло быть сложного.
отклеилось
Пилю диплом - программа оценивает какую дозу получил бедолага, подержав в руке кусок урана ну да, они ж на улицах везде лежат. Возникла подзадача:
нужна утилита которая позволяет задать модель помещения в котором произошёл казус и позу человека в этот момент времени.
Пока пишу редактор позы человека.
По сути, мне нужно взять модельку человека, согнуть ей руки и ноги в нужную позу, опционально посадить за стул/стол. Потом нажать на кнопку и получить json с положениями костей и их ориентацией.
Юнити мне показалась оптимальным вариантом. Плюс лет 6 назад игрался с ней.
Будьте добры, ответьте на вопросы:
0) Есть ли что-либо прям готовое под мой случай? Мне не нужны никакие анимации и прочее, только редактор по сути.
1) Я хочу кликнуть на руку и потягать за ползунок, поменять её позу. Это задача инверсной кинематики, верно?
2) Как переключаться между инверсной кинематикой и прямой кинематикой?
3) Как при клике на collision box отдельной части тела рисовать ползунок? (хз как называется, выглядит как три ортонормированных луча rgb)
4) во сколько мне обойдется заказать код для подобного?
От моей первой пошаговой стратегии со смешными спрайтами, нарисованными в лагающем фотошопе.
>>499810
Лол, всё было хорошо, пока я был маленьким и делал корявые игрульки сам. Потом полез в КОМАНДНУЮ ИНДИ РАЗРАБОТКУ и наглотался невероятных хуёв, когда сидят по 10-15 хуесосов и пиздоболят на тему игры мечты, но никто ничего не делает. Потом хардкорный моддинг для вк3, было очень круто, но в итоге Лига Легенд убила нахуй все такие проекты. Потом семь лет коммерческой разработки тупо за деньги, никакого геймдева, рисовач в свободное время. Сейчас вот достаточно задрочил тридач, чтобы пилить рпгшку полностью самостоятельно, чего и вам желаю. Алсо, юнити это неебически удобная среда, разве что минет не делает, пока игру пилишь, мне бы такую, да в моё тяжёлое детство.
Мой тебе совет: пиши диплом и не усложняй. Никто твоё кривое юнети-поделье не оценит, а времени потеряешь много.
Твой вопрос про позы звучит примерно как "Как делать пиздатые анимации?"
Да, инверсная кинематика. Под это есть пиздатые ассеты, но за деньги
Респект тебе, о, Анонче!
DrawLine (или как там её), создание панелек/моделек/чего хочешь из кода, превращение координат с гексовой доски в нормальные мировые.
Такбля, ебался полторы недели со своими скриптами, почти закончил (нужно только "вслепую", то бишь без тестирования, анимации прикрутить как-то), и вдруг обнаружил, что в половине игр (например, эти ваши into the breach) для скриптов внешних используют lua какие-то. В первый раз их вижу, лёл. Там чистенько, аккуратно, но, сука, я уже несколько недель облизываюсь на свой собственный скриптинг и ПОЧТИ ЗАКОНЧИЛ теперь надо ещё анимации курить, эх
Есть у вас какие-нибудь советы по lua? Если юнити как-то просто их умеет читать, то я их как-нибудь имплементирую параллельно своим скриптам.
>создание панелек/моделек/чего хочешь из кода, превращение координат с гексовой доски в нормальные мировые.
это все есть. карта генерируется, юниты создаются, бегают и стреляют. нужно тупо визуалзировать "тактическию информацию" куда можно стрелять.
не вижу твоей игры, Чад, которая в топе в стиме.
Ну вот у меня, например, пиздец вместо тактической информации. Беру сами гексы и меняю их цвет, чтобы информацию отразить. Дохуя разных стейтмашин, но этот пиздец работает и даже не тормозит. +в зависимости от стейта включаю/выключаю проверку на ивенты (типа нажатия клавиш/мышки/кнопок на панели). Так что В ПРИНЦИПЕ это не тактический оверлей, а тот же самый мировой, но при этом подкрашиваю несколько объектов в другой цвет + меняю привычное взаимодействие на особое. Планирую потом шейдеры/модельки поверх спавнить, чтобы красивее было и чтобы не зависеть от особого состава моделек.
буду наверно поверх рисовать отдельных слой гексов, включать их и назначать цвет по необходимости. в принципе линии мне не нужны, все по гексам.
Думаю, рисовать линии выйдет дешевле + много путаницы, если будешь на каждый гекс иметь по две модельки. Не слишком хитрый подход, к тому же. А шейдеры ещё дешевле выйдут. Но решать и воплощать в жизнь всё равно тебе, лул.
> диплом - программа оценивает какую дозу получил бедолага, подержав в руке кусок урана
Ну и дипломы у вас.
соль в том, что это малый кусок диплома, но его нереально обойти. как в пасте про 1 байт, никак. И я потрачу слишком много времени чтобы замутить камеру, сцену и так далее с нуля.
нашел вот такой ассет: https://assetstore.unity.com/packages/tools/animation/umotion-pro-animation-editor-95991
вроде бы то, что нужно. но как заебашить управление с IK и FK пока непонятно.
Если кто хочет халтуру сделать -пишите на
1.switch - Переключат какой-то bool. и публикует это событие в EventAggregator.
2.EventAggregator - Хранит событие.
3.Manager - читает событие, и как результат что-то делает(например добавляет очки)
Но при этом switch и Manager, не должны знать друг о друге.
Я читал вот эту статью, но я не понимаю как это работает
https://habr.com/post/212055/
Помогите разобраться
Что именно ты не понимаешь? В статье и так приведен самый простейший из возможных пример.
оче старая статья. конкретно в юнити реализовали нативно третий вариант в виде EventSystem (новый гуй например работает на ней)
https://unity3d.com/ru/learn/tutorials/topics/scripting/events-creating-simple-messaging-system
Ну например там есть класс UnitDiedEvent. Это отдельный компонент или где он должен находиться?
Это не компонент, а просто класс. Находиться может где угодно.
> EventSystem (новый гуй например работает на ней)
Но ведь только если ты к гую привязываешь какие-то события, не? Типа там на button нажал - хуяк и метод вызвался.
А так если просто добавить надпись "Ваня хуй", то eventsystem вроде и не нужен.
Нужно задать объекту некоторые свойства из другого объекта. Конструктор применять не советуют. Start() не может иметь аргументов. Как быть?
Мало того, Start() ведь выполняется не сразу после создания объекта, правильно? А в следующем кадре.
var NewObject = Instantiate(Prefab);
var some_component = NewObject.GetComponent<SomeComponent>()
some_component.Foo = 1;
some_component.Init();
> Мало того, Start() ведь выполняется не сразу после создания объекта, правильно? А в следующем кадре.
Чтоб прям сразу-сразу используй Awake ()
В меканим создай триггер или булеву переменную, сделай переход в нужную анимацию, по клику мышки активируй триггер или задавай нужное значение булевой переменной.
>https://assetstore.unity.com/packages/tools/animation/umotion-pro-animation-editor-95991
Его я и имел ввиду, когда говорил, что есть пиздатые. Этот сделал австриец, судю по говору в видосах.
Есть еще Final IK эстонца из Тарту. Тоже дельный, но за те же деньги. И ты пропустил майскую распродажу. Оба были в полцены я купил оба
Если тебе нужна только одна поза, то можно, наверное, стопкадром из анимации выбрать. А их есть много и бесплатно в сторе.
Я невполне понимаю, какого конечного результата ты хочешь добиться этими позами.
Может подскажешь тогда как реализовать подобное - есть префаб с ГУИ, он привязан к объекту. По нажатию на объект нужно выводить этот ГУИ, т.е создавать объект на сцене. Если закрыть его то ещё какое то время до уничтожения ГУИ со сцены нужно иметь возможность снова нажать на тот объект для вызова этого же окна. После уничтожения через какое то время снова можно нажать на объект для вызова того же префаба но по новой, для новой генерации. Извиняюсь за кривое объяснение.
Даже ебаный торус смогло вырезать в кубе, создав пару сотен полигонов за долю секунды, а с одной платформочки вырерать другую не может. Халп!
кстати на тему. покажу клевую хуйню. https://www.youtube.com/watch?v=RXpIwdk8Z60
пробилдер не трогал, ничем помочь не могут.
Как я понимаю, гуй висит на объекте стауионарно, а не спавниться.
На объект вешает скрипт ShowGUI
В нем делаешь public ссылку на твой гуй (Canvas, Panel или что у тебя там)
В том же скрипте имеешь OnMouseDown()
В ней активируешь объект, что прописан по ссылке
Корутиной деактивируешь его через заданное время
Что я забыл?
>Есть ли какая-то альтернатива без использования 3д редакторов?
Нет, это всё полумеры. Тебе религия не позволяет скачать любой редактор и посмотреть пару туторов как им пользоваться?
"А могли бы игры делать..." (С)
И я про то же. В скрипте прямая ссылка на гуй
И я про то же. В скрипте прямая ссылка на гуй
лан я еблан, уже разобрался. А активен ли этот объект который я вызываю как проверить? поиск по тегу с последующий активСелф почему-то не срабатывает.
ro b
Не надо ничего искать! Проверяешь:
public Canvas myGUI;
if(myGUI != null)
{
myGUI.SetActive(true);
StartCoroutine(ShutUpIn5Sec());
}
IEnumerator ShutUpIn5Sec()
{
yield return new WaitForSeconds(5f);
myGUI.SetActive(false);
}
Вообще все эти Find для лузеров. Чоткие поцаны юзают ссылки через public
Что тебе мешает сделать в скрипте private bool guiActive?
Если труъ, при ни след.слике закрываешь. Если false, то активируешь
первое работает и в редакторе и в игре, второе только в игре
Суп, котаны.
Делаю первый пробный проект на унити, почти получается, но сегодня весь день проебал себе мозг только с одним вопросом - как, сука, как считать ебаный счет.
Ситуация простая - игрок внизу поля, сверху падают бомбы. Когда бомба уходит за границы экрана и исчезает, то нужно счет++ и обновить на экране. На какой объект закидывать скрипт подсчета очков и как отслеживать бомбы, которые появились, упали и исчезли? Няша авансом
>Когда бомба уходит за границы экрана и исчезает, то нужно счет++ и обновить на экране
посмотри где находится граница экрана в мировых координатах и посмотри не улетела ли верхняя граница баунд-бокса ниже чем эта граница, если пользуешься ортогональной камерой.
>На какой объект закидывать скрипт подсчета очков и как отслеживать бомбы, которые появились, упали и исчезли?
очевидно что спавнить и уничтожать бомбы и считать хуйню может один и тот-же объект. он же и UI может управлять.
а вообще пошел бы ты с такими вопросами знаешь куда? на сайт юнити. и посмотрел бы экзамплы.
> На какой объект закидывать скрипт подсчета очков
Похуй, хоть на сами бомбы (только поле static ебашь) хоть на пустой геймобджект, который у тебя типа геймконтроллером будет.
> как отслеживать бомбы, которые появились, упали и исчезли?
OnBecameInvisible, например, или под игровым полем размести пустой геймобджект с коллайдером и на него привесь OnTriggerExit, в котором пропиши Destroy(other.gameObject), а на самих бомбах повесь OnDestroy и плюсуй свои очки.
Или плюсуй прям с того коллайдера, на котором OnTriggerExit
Короче, вариантов дохуя.
ассет стор же есть. если прогер, то лишняя двадцатка найдется. ну как "двадцатка", я в ассеты косаря три вложил. главное тут если что-то меняешь - делай это с умом, т.к. легко что-то толковое превратить в полное говнище (зато художественно самовыразиться). если ассет дорогой, то это переоценный оверинжиниринг. удели время на слепое изучение ассортимента. например, можно купить комплект 3д-деревьев за 10 баксов, или генератор деревьев за 5.
>private bool guiActive
Пописял тебе в рот
https://docs.unity3d.com/ScriptReference/GameObject-activeSelf.html
мне тоже этот вопрос был интересен. с одной стороны, спасибо. а с другой:
> просто папку с файлами
что, простите? просто файлы? и там не будет просто отчета с твоим id'ом, например?
> и там не будет просто отчета с твоим id'ом, например?
Лол, нет. Только в твоём профиле ассет появится в списке купленных, чтоб если ассет обновился - тебя об этом уведомили.
> юнити это неебически удобная среда
hcr по 10 секунд не бесит? если сравнить удобство с фотошопом - нет ощущения, что юнити говно?
> нет
вот если я игру скомпилил с функцией сбора статистики - мой ид в игре точно будет. я вообще не понимаю, могут ли тут пруфы быть. может, сам юнити где-нибудь обмолвился-де "мы ничего такого не делаем"? на чем основано твое мнение?
rolf
* reLoad быстрофикс
> мой ид в игре точно будет
Папка с ассетом нигде не кричит "я ассет, пасаны!" Может ты это сам написал. Или ты думаешь что в офисе юнити сидит армия макак, которая каждый билд сверяет с базой ассетов?
> на чем основано твое мнение?
На пикрилейтеде, например. Один из билдов вполне себе висит в стиме и приносит на хлеб с маслом палить я его, конечно же, не буду.
я ничего, а ты? мамку твою могу извинить. мне интересно что 15летПрограммач + 10летРисовач про оба пункта ответит.
Это - другой Антон
> палить я его, конечно же, не буду
палить и необязательно. более того, тебе же повредить может. но пруфы у тебя жидкие (почему их такими считаю - выше писал) - особенно если говорить именно про id аккаунта.
> сидит армия макак
когда ассеты скачиваешь, юнити показывает какие файлы новые и какие - общие. независимо от их местоположения, по хешу контента. попап "calculating assets hash" опять же. армия макак врядли нужна для уже автоматизированной работы. по факту - до поры до времени юнити на это забивает.
я сегодня в магазине сравнивал мороженное и желатиновых мишек. мороженное оказалось лучше. никто не знает почему. с субъективными ощущениями всегда так.
> но пруфы у тебя жидкие
Ну я тут не убеждать пришёл, а на вопрос ответил. Или ты думаешь что я товарищ майор юнити-разлива и всё жду когда ты спиздишь ассет чтоб тебя повязать?
Если хочешь успокоить своего внутреннего параноика — купи и не парься.
При этом ещё час назад все функции исправно работали.
дружище, я ассеты покупаю (потому что про западный и штатовский копирайты читал и потому что воровать нехорошо). вопрос у меня был не тот, на который ты не можешь ответить. мою надежду найти спеца по кишкам юнити ты не оправдал, благодарю за потраченное время.
Ну значит мистика. Хотя вот недавно у меня слайдер исчез, в иерархии есть, галочка стоит что активный, а его нет. Забил хуй, лёг спать, утром проснулся, запустил - всё нормально.
Скомпилировал заново (причем изменений никаких не производил) - всё на месте. Проверю через час, лол.
> мою надежду найти спеца по кишкам юнити ты не оправдал
Да я и не претендовал.
> и потому что воровать нехорошо
Дык и я не воровал, я уже писал что они мне достались от группы ребят, с которыми я работал и которые сами залили их в проект, а потом были и не против если я их себе оставлю.
> благодарю за потраченное время
Да не за что.
при лужкове такого не было
Да, с юнькой иногда классическое "Перезапустии и все пройдет" срабатывает, но очень редко, т.к. чаще всего - это оплошность человека, а не машины
Кстати, если у тебя бэтка, то советую откатиться на стабильную версию. Там порой и не такое бывает.
Хэх, такое и на стабильной относительно часто бывает
https://www.youtube.com/watch?v=S3pjBQObC90
Если же отдельно и даже чайлдом другого объекта, то норм.
Короче, вопрос про то, как повращать перед рожей айтим из инвентаря
там из кода только это
void OnMouseDrag()
{
float rotX = Input.GetAxis ("Mouse X") rotationSpeed Time.deltaTime;
float rotY = Input.GetAxis ("Mouse Y") rotationSpeed Time.deltaTime;
transform.RotateAround (Vector3.up, -rotX);
transform.RotateAround (Vector3.forward, rotY);
Debug.Log ("rotating");
}
Так вот, если этот объект со скриптом весит на FPC, то OnMouseDrag() не в вызывается вообще
и при отключенном FPC тоже
смотри, немного знаний английского и смекалки тебе помогут https://docs.unity3d.com/ru/530/ScriptReference/MonoBehaviour.OnMouseDrag.html
мое вангование: у тебя нет коллайдера на обьекте к которому ты крутишь скрипт
Есть коллайдер. Тебя подвёл твой русский: я же писал, что если объект не чайлд, а отдельно, то крутится
лол, даже не поленюсь, юньку запущу, шоб глянуть че там такое
ну у тебя на тех объектах висят коллайдеры которые либо просто выше по иерархии, либо больше
Удалось найти только туториалы про редактор лиц ((
Еще примеры: Crossout, Robocraft, Sims (дом), Spore, Angry birds с машинками.
Дело было не в коллайдерах. С ними всё норм. И, кстати, у коллайдеров нет иерархии.
Мешало rigidbody на parent. Причём при любой комбинации UseGravity и isKinematic. Rigidbody на самом объекте не мешает его крутить, опять же, если на parent его нет.
Туториал - это нечто конретное. А твоя задача - нет, ее можно реализовать хуилионом совершенно разных способов.
Ты наверное сможешь найти туториал по какому-то одному конкретному способу, но подумай, нахуя тебе это, если твоего абстрактного мышления понять это не хватает.
я бы такие туторы тоже посмотрел. к взаимодействию объектов, я уверен, много подходов есть. вот у меня есть генератор уровней. есть стометровки с самопальными joint-компонентами. есть спавнер блоков, который joint'ы ищет - иногда из-за него лаг случается. надо переделать. единственная мысль - при awake джоинта искать спавнера в родителях. а в туторе могут других мыслишек подкинуть.
Подкидываю мыслишку: закрой нахуй юнити, и не открывай, пока не сделаешь на любом языке абстрактный сериалайз/десериалайз всех сцен на любой момент времени.
MyYobaScript script = transform.parent.GetComponent<MyYobaScript>();
if(script != null) script.ShowMyZalupa();
Нет, просто не знал.
> как это работает?
Монобехэвиор ковырял? Тебя и ебать не должно как это работает, просто прими это как факт.
А если уже тебе пиздец как интересно почему это работает именно так — это будет тебе домашним заданием.
Вопрос: как мне сделать по-людски, сдвинув меш к пивоту, т.е. вниз?
Хочу голову крутить и ею бросаться, что при таком сдвиге получается криво.
%парентить в empty и сдвигать там не хочу%
Это пиздец. Лишь бы игры не делать.
Ну в туторах могут быть приемы, которые я смогу применить. Еще я уверен что есть какие то частые грабли.
Как ты в блендере играть собрался? Я же примеры в конце написал. Нужно чтоб объект был создан в игре и им можно было играть.
спасибо. таймлайн, кста, уже потыкал - норм штука. синмаш, судя по тутору, пригодится.
Ёбаный рот етого казино.
да ты верно дебил. до того как ты их импортировал и после.
импортируй ка давай куб с стороной в один юнит. и посмотри. может поменялось чего! вот удивительно то будет!
Хуя ты прям помог, импортировл куб со стороной в юнит и сразу всё заработало, заиграли фанфары, мамка пирожков испекла, друзья звонят, поздравляют.
ну и че? куб то перестал быть кубом, или че? что поменялось? давай, мы тут с тобой делаем базовую науку - наблюдение.
...
Да оказался обсёр где-то при триангуляции во время экспорта. Вместо чекбокса при экспорте соединил все вертексы руками. Всё нормально.
На Ubisoft работаешь, антон?
Классы компилятся в бальшую дллку, которую можно заранее набить, а всякую мелочь типа новых юнитов и ребаланса нормальные люди обновляют через какой-либо формат данных.
Ээ, ну как бы да, "цвет вертексов", но в файле геометрии, а не в текстурах - такое есть?
Я хочу просто чтобы дезигнер хуярил коллайдеры/споты под партиклы/итд в своем редакторе, а в юнити-реализацию оно оборачивалось через код.
>придумал идею для хоррор-рогалика с пушками и процедурными канализациями
>пока пилил базовую часть, решил что все идеи - говно
>начал пилить другую хуйню
О, очередной разработчик 2д параши с программер артом закукарекал. Много вас таких за последние пару лет повидал, унылее петухов не сыскать. Никаких амбиций, никаких стремлений, только вечные поклепы унылой шаблонной хуеты и пуканье в тредике. Удивительно, как ты вообще додумался готовый движок использовать, а не сел сначала писать диалект лиспа под себя. Ты жалок и смешен.
>Никаких амбиций, никаких стремлений
>и это мне говорит мамкин червь-пидор, накупивший да напиздевший ассетов
Как отвратительно.
Но ведь ты даже с готовыми ассетами не сможешь работать, мань. Ты не можешь в постпроцессинг, ты не можешь в шейдеры, ты не можешь такой графон как на вебм, ты не можешь в оптицизацию, не можешь в генерацию, ты вообще ничего не можешь кроме как двигать своего пиксельного аниме рыцаря по мануалам из гугла. Ты - бесполезный кусок червя-пидора, не нужный ни одной уважающей себя конторе, да и самому себе скорее всего тоже. Будь я на твоем месте - я бы давно ригидбадимувнулся в окно, нахуй ты вообще нужен?
> не нужный ни одной уважающей себя конторе
вот это система ценностей! комплексуешь, что можешь только на дядю работать, а без указки тебе даже готовые шаблоны не помогут игру сделать? не комплексуй, бесполезного хуйла на этой планете 99%, ты просто такой же как все. это нормально.
Чего-ты застеснялся-то на вопрос ответить? Испугался, что укажут на твое место?
Жидкий тролль какой-то пошел, хлюпкий да пидарковатый.
ах так то вопрос был. нет, я не хуйло. ты хуйло. этого ожидал? ну, все по плану идет - давай свою многопроходочку.
с таким гигантом мысли мне не совладать. сдаюсь.
что за хуйня у тебя в голове то? как собрался реализовывать все это - так и храни. о какой части ландшафта речь? карта высот, карта чего? как float[] храни, нахуй
Планета с гравитацией. Изменение ландшафта как в Astroneer, при этом "висячие в воздухе" воксели падают под воздействием гравитации.
Вообще не ебу как это реализовывать, вот за советом пришел.
интересно, как такое на юньке вообще сделать. недавно видел ассет про физику, где камни трескались под давлением колес. ассет про воду (с волнами на gpu) тоже видел. про сыпучие пески ничего кроме партиклов с коллайдером не видел. подозреваю, что как там реализовано - так и надо оставлять.
лол ну почитай про marching cubes.
вообще лучше пойди возьми готовое, пилить воксельный движок даже зная что делаешь это на добрые пол годика в лучшем случае. спизди какой-нибудь Voxel Farm или что-то в этом духе.
>>500583
я не слишком развивал тот проект, если он тебя интересует. сделал в нем эту фичу с тем что можно применять модификаторы к уже готовым картам и решил на этом остановится. и доделать уже важную фичу в моем сраном навмеше.
на самом деле я могу весь тред засрать тут своими велосипедами. у меня накопилось много всякого забавного говна. на немножко. (а игр нет)
Может можешь посоветоваит какой-нибудь литературы напрямую или косвенно связанную с геймдевом (процедурные генерации там, всякое такое)
В пример можно привести джпег формат, где одинаковые пиксели в блоке хранятся в виде начала блока, конца и самого значения. Но у тебя так майнкрафт получится.
на самом деле это такой мастер-план. в самом начале я поставил цель "сделать процедурный мир с большим упором на ИИ" и не забил.
как приделаю пару полезных фич к навмешу то вернусь к основной цели. этот микроскоп оказался очень полезным, им можно сваи забивать, не то что гвозди.
>>500598
пожалуй нет. не могу. так как большинство того что я реализовал имело под собой краткое описание из какой-нибудь статьи, а не какой-то огромный багаж знаний.
но вообще если интересно то основная идея взята из этого текста http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/ там все приятно и с картинками. я просто приделал к этому нодовый редактор всяких там шумов и хуйни которые бы накладывались по маскам биом.
>>500599
неа, там ещё интересней чем может показаться. это процедурная анимация.
я как-то почитал немного про то как сделана анимация в overgrowth и подумал что хуево что зайчик бегает только вперед-назад но не вбок. а как блендить такое? нужна какая-то хитрая интерполяция. ебанул бленд филд примерно как у меканима где в качестве ноды выступают 2 кривые - движение ноги вбок и в сторону (скриншот). сделал экспорт кривых с готовых анимаций, потягал их пол вечера. по земли стали елозить шарики. потом приделал на энной высоте жопу, к жопе небольшую инверсивную кинематику, стало похоже на ножки. потом чуть интересней - я стал высчитывать предполагаемую акселерацию исходя из текущего движения пятки и эта акселерация стала толкать пружинку под этой жопой. что и делает эти покачивания жопы вверх-вниз.
у меня нет видео что там дальше. но дальше я сделал эти покручивания бедра в такт шагу, сделал множественную пружину где каждый следующий сегмент влияет на предидущий, чтобы типа жопа прыгала, но башка не прыгала так сильно. и на этом закончил. потратил наверно неделю на этот клевый прототип.
решил что если в моем проекте будут шагающие танки то определенно воспользуюсь этой хуйней.
есть тут кто юзает magica voxel?
как центр модели(pivot point) настрить (передвинуть в центр объеката) в самом юнити нету инструмента,и в проге тоже.
я заебался выражать через пустой объект,это как-то неправильно.
помогите раку ебаному
посмотри proBuilder (он нынче бесплатный), другие редакторы. сам я спокойно живу и без редактирования пайвотов, но кнопку "pivot to center" по одному из ассетов явственно помню.
> я бы тоже жил,но у меня есть моделька машины,у которой должны крутиться колеса,а когда центр нихуя не в центре колеса они крутятся как земля вокруг солнца по орбите.вообще странно,что такого простого инструмента нет в юнити,типо есть pivot to center,однако он только в редакторе показывает нормально,когда речь доходит до вращения,он естественно сбивается
помню делал игрушки на скирре и там была функция в редакторе
с разметкой проебался
ну у юнити куда не плюнь - везде что-то не так. посмотри, например, туторы по тряпочным материалам в юньке. или, например, "find reference in scene" есть в project, но нету в hierarchy. а еще как найти в иерархии все по произвольному коду - ну, конечно, написать свой скрипт. как кастомайзить хоткеи? написать свой скрипт. или вложенные префабы: мало того, что их нет, так еще и ссылка на под-префаб сохраняется при неведомом мне стечении обстоятельств. или поворот объекта внутри скейленного объекта приводит (не всегда) к искажению объекта, если оба рендерятся. меш-коллайдер в скейленном объекте пересчитывается (явно не на gpu) по 100мс, поиск по иерархии тоже при крайней необходимости, gc высвобождает драгоценные (нет) 20 метров за пару фреймов, от и до говеный ui ассет-стора и компиляция не работающая при включенном впн... быстро привыкаешь к этому говну и перестаешь его запоминать - а так в юньке на месте только самый базис. но есть и всякие удобные полу-документированные штуки (типа v и ctrl+shift+f).
когда отправил вспомнил, что нет возможности выровнять объекты, уронить объекты (роняются только при dnd из префаба). затосковал по 95му ворду, где можно было кучу кнопок вывести на экран и мышкой перемещать их между панельками (вот тут бы юнитивый воркспейс реально пригодился). ну и вдогонку еще косячки в памяти всплыли. слои сохраняются на уровни юнити (а не проекта), слоев 32 штуки и не больше, скейл не меняет радиусы у лимп и партиклов. и на фидбек уважаемым разрабам юнити срать. но ты держись, в 2018й (не пробовал) случилось (ли) подкомпиливание только измененного кода и (смею надеяться) нас покинул кеш ошибок.
>а без указки тебе даже готовые шаблоны не помогут игру сделать?
Там из шаблонов только текстуры из гугла и модель человека из конструктора. Все остальное я делал сам, а ты просто завидуешь что не способен в такой уровень разработки. Вечный рисовальщик пикселей для аниме рогалика, даже жалко тебя становится.
Так вот, написал я класс Item, прописал там поля, конструкторы, все дела. Отдельным скриптом, наследованным от ScriptableObject, описал лист этих самых айтемов (ItemList, например), затем третьим скриптом я из этого ItemList создал asset-файл, который лежит себе в папке и хранит всё что я в него засуну.
Как я понял, именно так это и работает.
Так вот, всё оно хорошо, но возникает вопрос.
Это мне что, под каждый список создавать такой asset-файл? Для списка игрока, для каждого ящика? А если у меня 100 ящиков, то это 100 таких скриптаблобджектов в папке будет?
Я, конечно, догадываюсь что скорее всего так оно и есть, потому что ну а как ещё. Но как-то оно странно.
Ну да, я могу через скрипт на ходу запихивать в списки из базы всё что душе угодно и пока обойтись одним файлом-базой, но в конце концов будет же возможность сохранения и где-то придётся их хранить.
> общую базу предметов
Хватит одного скриптабла, другим скриптом через референс к этому ассету ты просто наполняешь инвентарь сундука
> инвентарь игрока,
Юзай json, редактировать скриптаблы в рантайме нельзя
> другим скриптом через референс к этому ассету ты просто наполняешь инвентарь сундука
Не, это понятно, я так это и делаю. И сундук так наполняю и инвентарь. Проблема в том, что когда я нажму "сохранить игру" когда-нибудь, то надо будет куда-нибудь его содержимое всё таки выгрузить из памяти.
> Юзай json
Ну вот, ещё одну новую хрень курить. Ну да ладно, пригодится.
> редактировать скриптаблы в рантайме нельзя
Да вроде можно. Во всяком случае в общую базу (единственный скриптабл что у меня пока есть) я в скрипте через конструктор могу добавлять новые айтемы.
>Да вроде можно. Во всяком случае в общую базу (единственный скриптабл что у меня пока есть) я в скрипте через конструктор могу добавлять новые айтемы.
Сконпелируй и еще раз попробуй
>то надо будет куда-нибудь его содержимое всё таки выгрузить из памяти.
в json
>Ну вот, ещё одну новую хрень курить. Ну да ладно, пригодится.
Там ничего сложного. Ты по сути сохраняешь класс на жесткий диск, со всеми его переменными
https://docs.unity3d.com/Manual/JSONSerialization.html
> Сконпелируй и еще раз попробуй
Попробовал, добавляется. Ну и да и хуй с ним, не важно.
> Там ничего сложного. Ты по сути сохраняешь класс на жесткий диск, со всеми его переменными
Окей, спасибо, гляну что это за дичь. Уже хочу разобраться с этим сраным инвентарём и забить хуй пилить игру дальше.
Хотя хорошо что инвентарь оказался таким злоебучим, хоть что-то новое узнал.
>Попробовал, добавляется
А новые скриптаблы создаются? Я просто когда сам с ними знакомился, помню что на какой-то подводный камень наткнулся, и с тех пор редко их юзаю, в основном какие-нибудь настройки храню, которые игроку не нужны
> А новые скриптаблы создаются?
Ага. Я даже вот такую вот хуету написал чтоб ручками на каждый ящик свой файл не создавать. Чтоб по имени файла отдельный скриптабл был, откуда при загрузке подтягивать содержимое. Работает как нехуй.
Но если json зайдёт, то это не пригодится.
И правда, скриптаблам таки завезли сериализацию. Беру назад свое утверждение о необходимости использовать json
>You can serialize ScriptableObjects to Json with JsonUtility.ToJson, and save that to a file
Хотя стопе...
Давай почту
> Беру назад свое утверждение о необходимости использовать json
Но тогда я правильно понял, что действительно под каждый ящик надо держать свой скриптабл?
Если у тебя задача - схоронять содержимое ящиков в файл, то я бы сделал как-то так
> Юзай json
Странный этот ваш JSON.
Выдаёт хуй без масла, хотя список не пустой. Чего ему надо?
Попробуй вот такую хуйню, работает вроде чётко.
https://www.youtube.com/watch?v=C9WFOX6kDoo&t=7s
мимо_не_вникал
Да один класс захуевертить это и так понятно. Мне б список загнать. Можно, конечно, через цикл каждый элемент цикла загонять, но как потом его прочитать?
Ты видео нормально посмотри, там сторонний плагин используется, под видео ссылка на него есть.
Плагин это здорово, но разве "искаропки" json не хавает списки что ли? Если нет, то конечно придётся обмазываться плагином, но как-то это странно, я ж не многого прошу.
Короче, завернул список в отдельный класс. Работает, но как-то это костыльно.
Ну да и ладно, пока и так сойдёт.
Всем спасибо.
попробуй Json.Net для юнити.
https://assetstore.unity.com/packages/tools/input-management/json-net-for-unity-11347
стандартный очень прост и заточен под юнитовские геймобжекты и скриптаблы и вечно тупит на обычных.
Дали на работке проект, а там пикрил. Ниразу жо этого не видел такого пиздеца, подключение библиотек и объявление переменных в зависимости от платформы.
Я уже привык каждый раз спрашивать себя, когда чувствую возмущение по поводу чужой работы: "Мол, а может это ты петушок не шаришь?". Поэтому и прошу подсказок.
Проект собирали в последний раз под WebGL больше полугода назад, все работало, решили накатить обнову. И посадили за это дело меня джун-макака, до этого был чем то между Technical Artist и разработчиком, но разрабатывал только инструменты для таких же technical artist'ов. Никаких гитхабов и прочих систем контроля версий нету (пиздец а не галера) просто один проект под всевозможные платформы. Разумеется, это дерьмо выдает ошибки при попытке запустить в бравзере (abort(x) at error). Крч мне кажется, что это потому что какие библиотеки не зашились в проект и при попытке их вызвать происходит краш. Все это, разумеется из-за таких вот пре-процессинговых директив или нет?.
За наводку спасибо, но вроде и так получилось.
> Проект собирали в последний раз под WebGL больше полугода назад, все работало, решили накатить обнову
У меня под WenGL не компилится уже давно. Пару раз попытался разобраться в чём хуйня, а потом забил, всё равно только под форточки пишу.
Ну а про платформенно зависимую компиляцию вроде прилично написано, покури, может чего найдёшь. Я эту хуету использую только чтоб держать editor-скрипты для создания скриптаблов в папке с остальными скриптами и чтоб компилятор не ругался при билде.
>Я эту хуету использую только чтоб держать editor-скрипты
Ну вот и я. А так, если надо под разные платформы какую-нибудь логику, то просто разные ветки.
А по поводу объявления библиотек, так это вообще бред как по мне, фишка в том что линкер сам откинет те библы, которые не используются в случае чего. А по запросы "Unity platform dependent compilation" только уроки касательно синтаксиса по всей видимости для тех, кто читать не умеет, в официальном мануале все расписано. Вот и решил поинтересоваться у анона, а может и годный линк поймать.
где "там"? ты кто? аноним?
Так нормально, в принципе, но нахуй аж два раза то - наверное это автоматом сгенеренный код
Пришлось немного покурить эту тему, но по итогу это такое удобное говно, что я себе уже несколько ментальных пощёчин отвесил за то, что раньше в эту тему не залезал.
А я пришел к тому, что вообще все данные храню в одном scriptableObject, который сериализую в json, когда надо сохраниться.
Т.е. схема такая.
При начале новой игры scriptable десериализуется из "пустого" json, который содержит некоторые начальные данные.
В процессе игры монобехавиоры не содержат никаких данных, все данные хранятся в scriptable, монобехавиоры хранят ссылку на "свой" кусочек, модифицируя и зная только его.
Когда надо сохраниться скриптабле сериализуется в файл, при загрузке десериализуется назад.
Дополнительный охуенный плюс - совершенно похуй на смену сцен, потому что сцена только рисует то, что находится в скриптабле.
знаю что это такое только теоретически и повтыкав в код шедйера нихера не понил, решил попробовать любезно предоставленный экспериментальный шейдер граф. после еще одного дня за тыканием окошек и рисованием линий начал приблизительно понимать что это за херня и даже получил нужный результат, но внезапно оказалось, что со спрайтрендерером он не дружит в принципе(ибо называет параметры рандомно выставляя наружу только описание, а тому нужны _MainTex и _Color, попытки, как было предложено на форуме, изменить параметры в дебаге привели к вылетам 3 из 5 раз. те 2 раза когда не вылетело - не сработало.
пришлось вернуться к коду. благо понимания принципа осталось, вроде даже получилось то что я хочу ( снизу вверх - дефолтный спрайт, спрайт с узорной маской, спрайт со сплошной маской принципиально не отличающийся от просто задания цвета)
Твоё кунг-фу по описанию пока сильнее моего я даже не всё понял, хуёво быть мной, потому как я только-только ворвался в это дерьмо, но ты лишний раз подтвердил что это довольно полезная дичь.
var www = WWW.LoadFromCacheOrDownload("https://www.dropbox.com/s/xyz/level1?dl=1", 1)
вопрос, блэть, где этот кэш лежит?
нашол
> pivot to center
> они крутятся как земля вокруг солнца по орбите
https://assetstore.unity.com/packages/tools/modeling/mesh-combiner-and-pivot-editor-51142 вот на глаза попалось
меня было не остановить. запилил покраску мехов в кастомные цвета по шаблону
nice.webm
Подскажите, как можно "Добавить текстуру в текстуру", желательно с альфа-каналом. Не совместить два полигона с разными текстурами, а именно изменить существующую текстуру, смешав ей с другой по заданным координатам. Я знаю как это сделать попиксельно через скрипты, но это слишком медленно. Есть быстрый способ?
делай попиксельно через шейдер
если нужна именно отдельная текстура - генерируй отдельно через рендер таргеты.
https://docs.unity3d.com/Manual/class-RenderTexture.html
Благодарю, попробую RenderTexture. Но, похоже всё таки мне придётся изучать шейдеры, чтобы делать что то нестандартное.
>придётся изучать шейдеры, чтобы делать что то нестандартное.
это не так сложно как кажется. для эксперимента может поставить ShaderGraph + LightweightRenderPipeline(они еще слишком глючные для реального использования) в отдельном проекте. там удобно визуально рисовать шейдеры и уже понимая что происходит переводить в код.
Только такая, давно не юзал, так что за обновлениями не слежу.
> Где искать уроки? Видео, статьи, книги?
Если сможешь прочитать шапку, то может и хоть один урок осилишь.
ипать ты долбохрен
Да ладно тебе. Почему бы и нет.
первый варинт был 3д
он мог в расстановку тайлов
расстановку мехов
движение мехов
но так как в моделинге я ноль и хоть и смог в блендере сделать хекс, то двигать кубик вместо меха стало скучно. а найти спрайты мехов оказалось куда проще чем вменяемые модельки
Без обид ))
Мой потолок после 6-ти выходных
https://www.dropbox.com/s/0j7xpnm23338si2/2018-05-23 21-12-56.mp4?dl=1
Не стерпел? Л.О.Л.
наверно самолет
У армий, в принципи, могут быть следующие задачи:
-консолидировать армии
-уничтожать армии противника
-захватывать провинции
-гонять повстанцев
-пока все
До того, как столкнулся с нуждой импортировать модели, я банально брал папку ресурсов и создавал на компе пользователя её копию. Если добавить туда новые файлы, то игра их тоже как бы видит. Во время игры я либо подгружаю с компа файлы, либо из внутренней папки ресурсов, если запрещена подгрузка. Ну, логика понятная - соответствие папок внутренних и внешних.
А с ассетбандлами как это работает? Создаётся AssetBundles папка, и только из неё их можно загрузить? Оно совмещается с папкой ресурсов как-то? Какая там иерархия вообще?
Раскури Asset Bundle Manager для начала. В описании внизу он его тянет с гита. Но сейчас он уже в Asset store
https://unity3d.college/2017/06/04/use-assetbundles-assetbundlemanager-update-unity3d-games/
Сам начал неделю назад. Уже гружу сцены с сервака. Брат жив.
Мне так-то нужно только модели импортировать постольку поскольку obj, как оказывается, без анимаций и костей импортируется. Ну, раз и модели импортировать таким методом, чому бы и не прикрутить обычные форматы таким образом как альтернативу.
Спасибо за ссылку, покурим.
Попробуй открыть любой obj блокнотом. Там банально список вертексов с увишками. Ты можешь это как меш импортировать в рантайме очень даже легко, но ни костей, ни анимаций не будет внутри.
>>501072
>>501073
В общем, почитав, я ничего толкового не прочитал. Во-первых, юнити у меня старый (5.2 что-то там), ибо 32бита и нет возможности ничего поменять в этом плане Новые примочки мимо меня проходят, в общем.
Будет ли работать такое? В папку ресурсов для эдитора положу ассетбандлы, дам им расширение читаемое (тхт, например), создам из этого бандл When you create your AssetBundle, save it as a .txt file. Then load it as a TextAsset, and create the AssetBundle with AssetBundle.CreateFromMemory( textAssetRef.bytes )., и будто подгружать это в рантайме как обычный бандл, но из папки ресурсов. В папке ресурсов у конечного пользователя делать всё таким же образом.
Взлететь должно, думаю. Жуткий велосипед? Что я упустил из виду? Если юнити так и так бандлы читает тем же способом, что выше под спойлером, никакой разницы быть не должно, наверное?
мне тоже интересно. при постановке задачи я бы учитывал:
1. важность задачи - оборона пекина важнее атаки на петропавловск камчатский...
2. расстояние до цели (+скорость) - ...катапульта из хабаровска рванет защищать столицу, но штурмующая рио-де-жанейро конница продолжит покорять далекие земли...
3. вероятность успешного исхода - ...чтобы базирующиеся в пекине лучники не целились (из окопов) по сверхзвуковым бомбардировщикам, а метнулись атаковать ближайший вражеский аэродром.
все три фактора - числа от 0 до 1 (расстояние от 1 до 0). имеем список задач. сначала его фильтруем: 1 и 3 должны быть больше 0.2. сравниваем две задачи по сумме 1 и 3. если сумма отличается больше чем на 30% - берем лучшую задачу. если сумма примерно одинаковая - берем цель поближе. числа не надо делать одинаковыми на всю программу: хочешь безбашенную и самонадеянную нигерию - поставь ей x3 модификатор успешности.
далее я бы ввел генералов. им необязательно быть юнитами на карте, могут быть невидимой абстракцией. юниты сами по себе не воюют, только по приказу от генералов. так вероятность успешного исхода может случиться адекватная. т.е. надо захватить хабаровск, защищенный катапультой. три лучника строем пробьют оборону, а три лучника приближающиеся по-очереди также по-очереди и передохнут. это и есть твое "консолидировать армии". плюс, у генерала есть запрос. если у него есть пять лучников, то генералу нужно их защитить от гипотетической конницы - ближайший город знает, что строить надо копейщиков, а не шестого лучника. так же, на уровне генерала ты можешь модифицировать важность задачи: первый генерал про оборону, второй про атаку. чем больше городов юнитов - тем больше генералов.
в атакующих генералах легко идти от задачи. надо захватить город, поблизости есть два атакующих генерала. у первого атакующего генерала вероятность 0.1, у второго атакующего 0.15, но в сумме у них 0.5. говорим первому идти ко второму, второму стоять и ждать. они встретились - перекидываем юниты от первого ко второму. второй идет в атаку. первый телепортируется в ближайший город с запросом initalUnit.
у обороняющихся генералов тоже можно от задачи. штаты напали на канаду: проебываем виннипег, чтобы отстоять оттаву.
т.е. имеем маршала (контроллер генералов), который формирует список целей. имеем генералов, которые знают вероятность успешности действий. имеем юнитов, которые ходят за генералами. если маршал молчит - генералы действуют по своему усмотрению. т.е. если у нас мирное время и ничего не меняется, генералы стоят в городах и пишут запросы на новых юнитов. а если чехия напала на словакию, маршал увольняет всех генералов обороны - все юниты идут в атаку. список целей строим (ситуацию) стоим из: вероятность выжить, вероятность победить. чем ценнее победа, тем более агрессивную страну получим. если цена у победы ноль, то ии не развяжет ни одной войны (швейцария).
мне тоже интересно. при постановке задачи я бы учитывал:
1. важность задачи - оборона пекина важнее атаки на петропавловск камчатский...
2. расстояние до цели (+скорость) - ...катапульта из хабаровска рванет защищать столицу, но штурмующая рио-де-жанейро конница продолжит покорять далекие земли...
3. вероятность успешного исхода - ...чтобы базирующиеся в пекине лучники не целились (из окопов) по сверхзвуковым бомбардировщикам, а метнулись атаковать ближайший вражеский аэродром.
все три фактора - числа от 0 до 1 (расстояние от 1 до 0). имеем список задач. сначала его фильтруем: 1 и 3 должны быть больше 0.2. сравниваем две задачи по сумме 1 и 3. если сумма отличается больше чем на 30% - берем лучшую задачу. если сумма примерно одинаковая - берем цель поближе. числа не надо делать одинаковыми на всю программу: хочешь безбашенную и самонадеянную нигерию - поставь ей x3 модификатор успешности.
далее я бы ввел генералов. им необязательно быть юнитами на карте, могут быть невидимой абстракцией. юниты сами по себе не воюют, только по приказу от генералов. так вероятность успешного исхода может случиться адекватная. т.е. надо захватить хабаровск, защищенный катапультой. три лучника строем пробьют оборону, а три лучника приближающиеся по-очереди также по-очереди и передохнут. это и есть твое "консолидировать армии". плюс, у генерала есть запрос. если у него есть пять лучников, то генералу нужно их защитить от гипотетической конницы - ближайший город знает, что строить надо копейщиков, а не шестого лучника. так же, на уровне генерала ты можешь модифицировать важность задачи: первый генерал про оборону, второй про атаку. чем больше городов юнитов - тем больше генералов.
в атакующих генералах легко идти от задачи. надо захватить город, поблизости есть два атакующих генерала. у первого атакующего генерала вероятность 0.1, у второго атакующего 0.15, но в сумме у них 0.5. говорим первому идти ко второму, второму стоять и ждать. они встретились - перекидываем юниты от первого ко второму. второй идет в атаку. первый телепортируется в ближайший город с запросом initalUnit.
у обороняющихся генералов тоже можно от задачи. штаты напали на канаду: проебываем виннипег, чтобы отстоять оттаву.
т.е. имеем маршала (контроллер генералов), который формирует список целей. имеем генералов, которые знают вероятность успешности действий. имеем юнитов, которые ходят за генералами. если маршал молчит - генералы действуют по своему усмотрению. т.е. если у нас мирное время и ничего не меняется, генералы стоят в городах и пишут запросы на новых юнитов. а если чехия напала на словакию, маршал увольняет всех генералов обороны - все юниты идут в атаку. список целей строим (ситуацию) стоим из: вероятность выжить, вероятность победить. чем ценнее победа, тем более агрессивную страну получим. если цена у победы ноль, то ии не развяжет ни одной войны (швейцария).
>Попробуй открыть любой obj блокнотом. Там банально список вертексов с увишками.
я про это и говорил
>Во-первых, юнити у меня старый (5.2 что-то там), ибо 32бита и нет возможности ничего поменять в этом плане Новые примочки мимо меня проходят, в общем.
Это тупик же. У меня подержаный Lenovo X230 под геймдев, да и то с Win10 64-bit
Нормальнааа. Чем ниже характеристики у твоего компа, тем гарантированнее игра будет лучше идти на более сильных компах пользователей. Я ж не 2д платформер делаю, а файрэмблемклон, тут много оперативы и видюхи не надо.
Характеристики? Вот я и брал в Акихабаре не с nvidia, а ссаной Intel 4000
Но отрезать себя от ништяков неправильно
Система ассетбандлов притерпела много изменеий к лучшему
на пике всё, что нужно, чтобы загругить бандл асинхронно с сервака
528x352, 0:16
ок, а то я уже думал что совсем двинулся
чтобы легко менять скругление уголков, скорость рывка и гарнитуру для текста поверх бара. нет
БАМП!
не секрет. медленно но верно приближаюсь к своему тридцатнику. увлекаюсь всем этим наверно лет пять.
>>500649
но зачем? база предметов в скриптабл обжекте это база референсов на ресурсы. сами предметы можно сериализовать любым сраным методом. просто предмет должен содержать в себе поле "чертеж меня номер такой-то" и когда ты говоришь "хочу чтобы этот предмет появился" ты смотришь какой у него чертеж в базе данных, а потом суешь статы этого предмета в то что заспавнилось. ресурсы игры отдельно, предметы отдельно.
>>501070
лол ну вообще у тебя теперь проблемы которые можно обсасывать очень долго. вон почитай например http://hevi.info/tag/artificial-intelligence-in-real-time-strategy-games/
>http://hevi.info/tag/artificial-intelligence-in-real-time-strategy-games/
СЛОЖНААААА
Сделаю на ифах пока (уже сделал)
>>500579
>Как лучше хранить динамически генерируемый разрушаемый ландшафт? Планируется физика жидкости и сыпучих материалов.
В текстуре жи
>>500582
>Планета с гравитацией. Изменение ландшафта как в Astroneer, при этом "висячие в воздухе" воксели падают под воздействием гравитации.
Тысячи людей это делали и не доделали
Хочешь, сурцы мои посмотри https://github.com/Nashet/Interactive-Erosion
Алсо, зацени этого хуйца https://twitter.com/BioGridGame
>>500598
>Может можешь посоветоваит какой-нибудь литературы напрямую или косвенно связанную с геймдевом (процедурные генерации там, всякое такое)
Весь интернет этим завален, просто погугли. Если инглишь знаешь, конечно.
Тренируюсь на кубах, сделал анимацию скачков (за 60 фреймов z с 0 до 1 и обратно в 0), всё норм, ибо от 0 до 0, а вот захотел анимацию поворота и даже как-то не знаю, что делать. Базовые туториалы скурил, но там не объясняется, как вообще эти значения изнутри аниматора с перемещением в координатах совмещать.
Допустим, делаю анимацию поворота по z от 0 до 90 - в аниматоре при переходе к чему-либо 90 в последний момент в 0 обращается. Как мне не допущать разворота обратно? Ещё видел в каких-то видео, как использовали какое-то значение, выражающее, сколько моделька пройдёт игровых метров за время анимации, но в аниматоре я такого не нашёл.
Всё реально. Зависит от рук.
Невозможно. Забудь.
Ещё корованы можно реализовать, но это уже из области фантастики.
> Обпатился к несуществующей хуйне - завис
Схуяли? Про цикл — это да, но если обратился к несуществующей хуйне, то просто эксепшен выкинет.
Не сравнится с 3дс максом.
Хз, молча виснет. Может в другом дело
Оно, кстати, нигде в логах не пишет чему решило зависнуть?
Ещё одно преимущество древнего железа.
Если упростить вопрос, я хочу сделать анимацию поворота модельки. Что нужно в анимации сделать, чтобы при собственно повороте (скажем, при нажатии стрелки) поворот модельки был правильным и не сбрасывался?
Вот у объекта проигрывается анимация, ок. В анимации координата Х прибавляет 100 на последнем фрейме. В окне просмотра аниматора Х сбрасывается до нуля. Если объект стоит на Х = 0, сбросится ли Х до нуля по окончанию анимации?
> в последний момент
apply root motion должен помочь
> пройдёт игровых метров за время анимации
вот тут https://docs.unity3d.com/560/Documentation/Manual/nav-MixingComponents.html посмотри список "NavMesh Agent and Animator". а вот тут https://docs.unity3d.com/560/Documentation/Manual/nav-CouplingAnimationAndNavigation.html - есть пример кода, в т.ч. "Update position based on animation movement". хотя я бленд-анимашки не люблю из-за некрасивых переходов (может, варить не умею) и помню какой-то другой (из документашки) пример применения, где аниматор через слои копали - но найти я его не смог.
Спасибо, вроде оно.
https://docs.unity3d.com/Manual/RootMotion.html
>RootPosition(Y)
>RootPosition(XZ)
А у меня вместо высоты Z, мда.
Видимо, мне только в бленды дорога. Оно и к лучшему, наверное.
Имею сцену весом в 400 МБ даже в упакованном виде.
Так мне говорит Asset Bundle Manager.
Иерархии всё разложено по полочкам (пропы, хуёты, террейн). Каждая группа собрана чилдренами в "empty"
Получалось грузить сцену из бандла целиком. Теперь хочу по частям. То есть перетянуть с папку проекта, сделав из групп и подгрупп префабы. Их по частям запаковать в отдельные бандлы и грузить по логике появления (террейн, пропы, мобы).
Если у "контейнеров" (empty) координаты были (0,0,0), то так и спавнить.
Где я обосрусь с подливой? Грузить буду асинхронно.
если у сцены есть ссылка на префаб - префаб грузится вместе со сценой. т.е. пока не загружен префаб - не загружена и сцена. но если тебе нужно 400мб прогрузить перед тем как что-то показать - то так и надо. сделай сцену "лоадинг" и грузи сначала лоадинг а после асинхронно грузи нужную сцену. и не забудь про небольшую дырку между лоадинг-сцена загрузилась и мы начали грузить следующую сцену (в плеймоде и закомпиленной игрухе лоад сцены ведет себя по-разному).
Спасибо, анонче! Геймобжекты из иерархии, конечно, надо пидорнуть, если в планах их спантить.
У меня и есть (пока) сцена start, где тупо гуй с progressBar из слайдера. Сразу грузит бандл, показывая прогресс, и активирует из него сцену. Хотел бы и в самой сцене расставить триггеры, чтобы зашел, остановил время в игре, на панели показал, что что-то грузишь. Заспавнил, похерил панел, включил время и пошел дальше.
С дропбокса можно грузить по ссылке. А потренироваться можно и на локальном сервачке, я так думаю
Места 2 гига. Про ограничения в объёмах скачки не нашел
Нигде не обосрешься. Так и надо делать - компоновать сцену из бандлов. Хотя для объема 400 мегов это, наверное, излишне.
есть 2 спрайта для подсветки юнитов.
1. обычный спрайт с кружочком, если юнит выбран - SetParent(unit, false), SetActive(true). все ок, перецепляется между юнитами как положено
2. спрайт с анимацией - вращающийся кружочек(по кадровая). то же самое, но при наведении
(IPonterEnter - SetParent(unit, false), SetActive(true), IPointLeave - SetParent(uicontroller, false)m SetActive(false)
и вот он появляется нормально только первый раз. ворлдкоординаты растут с каждым следующим прикреплением на тысячи, локальные остаются (0,0,0). крепится к правильному объекту(видно в иерархии). больше нигде этот объект не используется. в чем, мать его, проблема?
ну я прост пропустил false во втором setparent, благодобря чему спрайт сохранял свои координаты и прикрепляясь повторно уезжал в ебеня.
У платформ всё в порядке с коллайдерами?
Двигаешься как? Силой через риджидбади? В апдейте? В фикседапдейте?
https://pastebin.com/2XS3J7v2
Ошибка: Assets/Scripts/PresistentManagerScript.cs(43,49): error CS0118: `System.IO.File' is a `type' but a `variable' was expected
Ты куда-то закидываешь System.IO.File (который тип, а не переменная). Скорее всего ты забыл System.IO.File.ReadAllText() или что там есть вообще, чтобы получить строку или что тебе надо.
Спасибо большое. Я слепой/тупой.
Пагни помогите. Как сделать чтобы ФПС контроллер не проваливался под текстуры на стыке генерируемых чанков. Если можно, то объясните попроще, а то я нуб.
лол да ну брось полно игр с клевым ИИ. разве что на фоне этого раздела можно кого-то впечатлить.
после того как приделаю к навмешу возможность регистрировать в нем какой-то контент чтобы искать его через навмеш и пару фич с навигацией типа "ищи эту зону" то наверно вернусь к этому проекту. в прошлый раз я таки сделал чтобы этот клевый контролер для ИИ синхронизировался по сети.
хотя конечно было бы здорово запилить какую-то форму гпу рэйкастинга.
могу ещё показать немного. ИИ клево бегает, прыгает и пригибается. и немножко более ранняя версия того контролера, но лучше видно че там ИИ думает.
>>501245
а ты не пиши бесконечные циклы. пиши чтобы оно само там делало эксепшен после дохуилиона итераций. на стадии написания прототипа бесконечный цикл это головная боль.
>>501442
как реализовал то все это?
>как реализовал то все это?
Я скачал готовый проект этого ютубера:
https://www.youtube.com/playlist?list=PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3
Для ознакомления решил сам побегать по ландмассу, но что-то у меня работает не так как надо.
используй эвенты
Набираешь в гугле "game AI free without sms" и читаешь, читаешь, читаешь и выбираешь понравившуюся архитектуру.
А можно просто на ифах сделать, стеной кода.
А жопу мне тоже ивенты подтирать будут? Анончик, помоги чтоб без этой хуйни. Ивенты это для девочек, а я хочу кодить как бородатый мужик.
1) Как делать нормальную генерацию, как в том же дудл джампе? У меня плеер либо не достаёт в какой-то момент до платформы, либо наоборот платформы слишком близко.
2) Как уничтожать все платформы которые не видит камера? То есть сгенерировал платформы вверх, игрок прыгает всё выше и выше, а те платформы что камера уже пролетела - удалять.
3) Хочу сделать механику прыжков такой же как и в DoodleJump, но что-то не догоняю как реализовать. В общем, у меня начинается уровень, игрок прыгает, пролетает через 2-3 платформы по Y во время прыжка, и затем улетает в ебеня со скоростью кометы. Как это исправить? То есть нужно сделать чтобы этот триггер не стакался (если игрок на платформе - AddForce.Impulse), после того как я пролечу через другие платформы, до тех пор пока не завершится анимация прыжка. Блять, я не знаю как это объяснить, просто запустите http://vseigru.net/igry-na-lovkost/21959-igra-dudl-dzhamp.html, и поймете что я имею в виду.
>Как уничтожать все платформы которые не видит камера
Прикрепи к камере коллайдер со скриптом, который уничтожает объекты при столкновении.
Сам нахуй иди. Ты предлагаешь совсем ебанутый вариант с еблей в анальную жопу. С таким же успехом я могу отнимать 1 от enemy.Count, каждый раз, когда умирает враг.
> Как уничтожать все платформы которые не видит камера?
void OnBecameInvisible () {
Destroy (this.GameObject);
}
970x526, 0:57
Так вот, насколько это безопасно? Есть ли какие-нибудь советы по безопасному устройству архитектуры мультиплеера? На что ещё стоит обратить внимание по части защиты от взлома?
Сама игра на unity (с#), сервер на php
Ну и говнокод.
Луч точно с тегом игрока?
А ивенты хорошая вещь, не в твоем случае, правда.
бородатый мужик
Он до ивентов не дорос
968x528, 0:31
И кстати, анончик, раз уж у меня тут такой каминг аут, то глянь на мою только начатую боёвочку.
С интерфейсом всё понятно, его делать буду позже, а вот с концепцией не определился. Сначала думал сделать полностью безучастный динамичный файт, за которым было бы просто приятно наблюдать (с прыжками на критах, уворотами, блоками, кучей fx и т.д.), а интерес заключался бы в большом количестве пассивных веток умений => большое кол-во возможных вариантов настройки героя.
Но сейчас начал потихоньку сомневаться в целесообразности такого подхода, ведь пилю один, а значит баланс у большого кол-ва пассивных умений сделать не смогу. Да и по всем канонам надо бы игроку дать решать что-то в игре, иначе заскучает.
Интересно твоё мнение, анон! Стоит менять концепт файта или двигаться в этом направлении? Может быть у тебя есть свежие идеи?
Сделай что б можно было кричать бойцуЖ Етух, что ле, не мужик, и т.д. Кто громче кричит тот и побеждает
Наверное, вещь хорошая, но я надеялся обойтись без нее для столь тривиальной задачи. На самом задал не тот вопрос изначально задал. Меня интересует 1) как лучше всего сравнить два объекта, например мертвый объект с каждым объектом из списка в данном случае 2) может ли колайдер одного и того же обьекта отличатся, если он получен из разных скриптов?
>лучше всего сравнить два объекта
Object1.Equals(Object2)
>2)
Нет, "Collider c;" это ссылка, объект всегда один и тот же.
Дай Бог тебе здоровья.
Да нет, всё же тупой.
Ты ебобо? Иди читай про ивенты на хабре, это сейчас со списка удалить надо,.потом еще звук воспроизвести, очки в стату добавить понадобиться, и как ты это собрался делать без ивентов? Никак, пидор.
Стало очевидно, что вся проблема, в том, что по какой-то причине, колайдер в списке отличается от колайдера, переданого в функцию RemoveEnemy, ибо фаза один срабатывает, фаза 2 срабатывает, фаза 3 нихуя не работает! Вопрос знатокам, в чём возможная причина сей оказии? инб4 ты тупой
Спасибо, пидор на добром слове, я обязательно изучу данный материал, но хотелось бы здесь и сейчас понять в чём причина нежелания скрипта подчинятся моей магии. Я ведь уже засунул хуй, так стазать, нужно доебать эту тварь до конца, а не говорить, ой у меня не стоит, давай завтра там, давай я изучу ивенты, а потом будем ебатся и так далее
Боги Юнити, экстрасенсы, духи предков, взываю вас о помощи.
Один и тот же обьект не равен сам себе, как такое может быть?
Верхняя часть выдает true, нижняя false.
в первом ты сам задаешь значение enemy внутри метода и тут же проверяешь. иными словами, у тебя написано: "x=2+2; if(x==4)" - всегда правду вернет, можешь if убрать.
а во втором случае ты смотришь ранее присвоенное значение. x!=4 бывает по следующим причинами: "x=2+2" не случилось, случилось "x=3+3", случилось (enemy хранит последний) сначала "x=2+2" а потом "x=3+3".
Дело в том, что объект один и тот же во всех трех случаях, но почему-то не идентичен для скрипта.
>>501561
Скрипт1 берет колайдер обьекта по вхождению в тригер, добавляет в список. Скрипт2 берет колайдер обьекта после того, как обьект потерят все hit points, вызывает функцию RemoveEnemy из скрипта1 и сравнивает эти два (на самом деле один) обьекта, Если обьекты идентичны, то обьект удаляется из списка. Но почему-то обьект не идентичен сам себе же.
// rise event on day passed
EventHandler handler = DayPassed;
if (handler != null)
{
handler(World.Get, EventArgs.Empty);
}
они разве параллельно вызываются?
подсказываю гугл https://answers.unity.com/questions/12878/how-do-i-zero-out-the-velocity-of-an-object.html или документацию https://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.html . выбирай сам, но тебе нужно для себя понять стоит ли выпиливать физику. я бы физику оставил и пошел по первому варианту.
> на самом деле один
ну тут или ты мне врешь, или я в https://msdn.microsoft.com/en-us/library/bsc2ak47(v=vs.110).aspx что-то не понимаю. зачем ты проверяешь похожесть объектов? чтобы можно было удалить похожего врага? попробуй сравнение по ссылке (==) - сработает? хотя, не пробуй - если у тебя объект не похож на (якобы) самого себя, то это разные объекты. хотя, попробуй-таки.
Нет, они вызвываются синхронно. Внутри ивента лежит список функций, которые вызываются по очереди.
более того есть старая архитектурная проблема шарпа - все может пойти попизде если в процессе вызова эвентов кто-то отпишется от этого эвента или объект будет удален
Нет
что лучше - молоток или отвертка?
апдейт нужон для постоянного отслеживания и изменения состояния а короутины для отдельных растянутых на несколько апдейтов процессов. разные же вещи.
Сейчас бы из параллельного потока от ивентов поотписываться.
вкатился из соседнего треда?
1680x1050, 0:25
Зачем мне врать, если мне нужно разобраться в чем причина такого поведения, что бы в дальнейшем я мог решить эту проблему, эсли столкнусь с ней еще раз. Оператор == я первым делом еще использовал, еще до equals, результат тот же.
> зачем ты проверяешь похожесть объектов? чтобы можно было удалить похожего врага?
Да, хочу проверять (после потери всего hp) есть ли такой обьект в списке (полученных объектов при попадании в триггер) и удалить его из этого самого списка. Но по какой-то причине объект (любой объект) при вхождении в тригер и при убийстве отличается. На самом деле, если бы небыл таким аутистом, уже забил бы и сделал другим путем, но я не могу, я должен понять почему этот объект сам себя не признает.
Еще раз вставляю вебм. Если рваг входит в триггер и "умирает", то количество врагов в списке не меняется, если враг входит и выходит за пределы триггера, то кольчество врагов в списке меняется, как и должно быть.
>Список содержит коллайдеры
>а проверка по геймобжекту
Сука, сделай list GO и храни ГО там и по ним чекай. Заодно на будущее - вдруг у объекта будет 2 коллайдера для головы и тела?
Да нет же, берет коллайдер у обжекта и сравнивает со списком, а сравнивать объекты я решил для дебагинга. Коллайдер один на обьект. За лист ГО спасибо, если можно, поподробнее, если нет - сам найду.
>Нет, они вызвываются синхронно. Внутри ивента лежит список функций, которые вызываются по очереди
Т.е. сначала заканчивается выполнение одной функции в очереди и затем выполняется следующая функция в очереди?
>Т.е. сначала заканчивается выполнение одной функции в очереди и затем выполняется следующая функция в очереди?
да. упрощенно эвент это тупо список делегатов и при его вызове идет foreach(delegate in list)delegate();
Спасибо. А то у меня баг какой то похож на перезапись списка из параллельных потоков..
Да, я потом понял через пару минут о чём речь и даже немного покраснел. Я сделал всё так, но результат остался прежним.
Скрипт врага, который передает gameObject в функцию RemoveEnemy
https://ideone.com/OyC3Fl
Скрипт коллайдера, колайдер является дочерним обьектом "игрока".
https://ideone.com/aX3UkT
KeyValuePair(TKey, TValue) Structure (System.Collections.Generic)
в C#6+ есть кортежи
Turple<T0,T1...>
Turple<int, string> a;
a.Item1 = 1;
в 7+ расширили до анонимных
и анонимные rjhnt;b типа
var a = (1, "test");
int b = a.Item1;
public (int, string) foo() { return (1, ""); }
(int a, string s) = foo();
если не ставил инкрементал компилер - объяви где нить темплейт
struct <T, T1> Pair
{
public T Item1; public T1 Item2
}
и юзай её
Tuple, да.
Короче проебался с синтаксисом анонимных кортежей
https://blogs.msdn.microsoft.com/mazhou/2017/05/26/c-7-series-part-1-value-tuples/
покажу рисование кругов вокруг сфер.
>>501448
а хуй знает че там у тебя. смотреть че там в его проекте не нравится фпс контролеру я конечно не буду. попробуй воспроизвести это в более маленьком масштабе. попробуй заимплементить свой фпс контролер с rigidbody в конце концов.
>>501450
лол ну если игрок у тебя один то сделай в каком-нибудь сраном синглтоне public static bool который бы говорил включен ли там в игруна фонарик. и обращайся из всех сраных мест туда.
>>501637
либо С#6+ либо сам себе ебани пару-тройку дженерик структов.
с чего вдруг? это же просто синтаксический сахар вокруг темплейт структурки
1) Как сделать смерть игрока если он падает с платформ на пустое пространство? Платформы генерятся вслед за камерой, а те что камера не видит - уничтожает. Короче говоря, у меня камера бежит по X, и в том месте где она - там генерятся платформы, а если игрок за камерой не успевает по платформам скакать - смерть. Так вот, как мне реализовать смерть игрока, если он попал в ту зону, где платформы уже уничтожены? Тут какой-то метод из юнити типа OnTrigger нужен или что?
2) Как сделать добавление очков единожды за платформу? То есть, чтобы очки начислялись за одно соприкосновение с платформой на каждую платформу. Вроде есть какой-то Once, но это вроде с анимациями связано. Но у меня прыжок это не анимация, а строка кода
пикрандом
1. так же как и платформам. а на OnDestroy повесь запуск геймовера/респауна/что там тебе надо
2. ну например
public ScorePlatform : MonoBehaviour
{
public int Score;
private bool used = false;
public int GetScore()
{
int score = used ? 0 : Score;
used = true
return score;
}
}
и при регистрации приземления
не Score = Score + 1; а Score +platform.GetComponent<ScorePlatform>().GetScore();
Спасибо анон, пойду накачу чайку за твое здоровье.
Делаю скрипт, который записывает в список GameObject все обьекты с тегом врага. После этого атакую те самые записаные обьекты, когда они теряют хп, они должны передавать свой gameObject в функцию и вызывать ее. Функция находится в скрипте тригера, который соберает эти попавшие обьекты в тот самый список и если gameObject убитого врага содержится в списке, то удаляет его из него. Всё. Но по какой-то причине не делает этого. Из нового, то что GetInstanceID() у обьектов всётаки равный, значит обьект один и тот же для скрипта, но почему-то
if (enemies.Contains(killedEnemy)) {enemies.Remove (killedEnemy);} не реагирует.
enemies это список всех зашедших в тригер врагов, killedEnemy это убитый и переданный в функцию враг.
По референцу тоже проверял, всё работает. Думаю единственным решением будет проверять на самом враге вошел ли он в триггер, и передавать gameObject врага в список только вот где его хранить и в этом же скрипте врага удалять себя из списка.
До этого хранил в скрипте дочернего тригера игрока, с которого и записывал обьекты в список.
Выяснилось, что всё таки в листе id не соответствует ни убитому, ни вошедшему обьекту, кроме того цикл выдает сразу три разных id, а List.Count сообщает о том, что обьект в листе всего 1. Чё нахуй вообще происходит? Почему в листе сразу 3 id? Помогите, Христом Богом молю.
Погоди, так ты пытаешься удалить GO убитого врага, а вот скажи - как враг умирает? Destory или Disable?
Да, я пытаюсь удали GO из списка. Врага из сцены удаляю через Destroy. Но я не думаю, что проблема в этом, ибо даже если не убивать врага, а просто проверять лист во время вхождения врага в тригер, цикл по enemies уже выдает эти три enemy GetInstanceID.
Я сделал через SetActive(false), нихуя не поменялось, обьект все равно не удаляется
Спасибо, это работает, но только с одним объектом за всю игру. Как сделать так, чтобы работали все платформы?
Я не он, но ты странный - создай префаб, повесь скрипт и спавни платформы с префаба
Уже исправил, но спасибо.
Скорее не он странный, а просто нубу даёт советы ещё более ёбаный нуб. И префабы тут не помогут, потому что
Score = Score +platform.GetComponent<ScorePlatform>().GetScore();
Cпециально выделил жирным. Каким хуем это должно работать у того дебила - я не ебу вообще. Что с префабом, что без префаба персонаж будет получать очки только с любой одной платформы в игре, будь это клон или оригинальный экземпляр, потому что присваивается метод из другого скрипта, а в этом методе значение равно
int score = used ? 0 : theAmount;
Это будет работать точно так же, как если бы я написал ScorePlatform.theAmount = 0/40/1000/etc;
Соотвественно, я получу 0/40/1000 при соприкосновении с любой одной платформой в игре, от остальных я не получу ничего, потому что там =, а не +=.
А причём тут это? Я говорил про
Score = Score +platform.GetComponent<ScorePlatform>().GetScore();
Этом дерьмо ни при каком желании очки не будет прибавлять, потому что тут
Score = Score + метод
А в этом методе значение равно 0 или любому другому. А прибавляться ничего не будет, потому что used = true, а потом возвращаем этот score, которому присвоен used. То есть мы как бы говорим "получи очки единожды за игру".
А не работает потому что метод писался от балды, на скорую руку. Так оно работать не будет, потому что из-за used = true ничего прибавляться не будет, потому что никакой прибавки в методе и нет. Соответственно, если мы выпилим used = true - мы не получим значения из прошлой строчки (то есть значение будет 0).
Вот на примере:
int score = used ? 40 : theAmount;
used = true;
return score;
В первой строке мы имеем значение "40", благодаря второй и третьей - мы его получаем ЕДИНОЖДЫ от любой платформы. Иными словами, нам нужна прибавка в методе. А её нет.
И если мы уберем вот эту хуйню "platform.GetComponent<ScorePlatform>().GetScore();" и поставим вместо неё значение, тогда очки будут прибавляться, но не так как нужно тому нубу.
Виновником всему этому - дебил, который этот метод писал. В методе должно быть +=, и проверка был ли игрок на этой платформе или нет. Вот и всё. А ваши костыли ебаные (которые вы создаёте с целью ШОБ ПОПРОЩЕ) работать не будут, потому что вы даже не проверяете как они будут работать.
Не уверен, что таки понял о чем ты, но вообще, бля,
if (!used) { код } решил был траблу заранее и понятно сразу стало что куда
>называет окружающих дебилами
>очки не будет прибавлять, потому что тут Score = Score + метод
Еще и картиночку прилепил, лел.
ты че несешь дубинушка?
1. Score в Score += метод это общий счет
2. Score в компоненте - это количество очков за платформу
3. used - метка использованния платформы.
4. и самое страшное Score и used в 2 и 3 индивидуальны для каждой платформы(я бы попытался тебе объяснить чрезвычайно сложные концепции типа и переменной, но это видимо слишком эдвансед тема)
Тебе ООП или ДОД решение? По ООП тебе достаточно завести поле у обьекта, в котором записан счётчик твоих посещений. По ДОД тебе нужно завести синглтон, который хранит все свойства всех обьектов в файле. Но читает не весь файл, а только те данные, которые относятся к читаемому свойству. Иначе говоря, когда ты обратишься к ДОД-объекту за количеством посещений, контроллер прочитает в базе данных счётчики посещений всех-всех объектов, найдёт твой и выдаст тебе инфу. Удивительно, но эта хуйня на 0.15 секунды быстрее, чем поиск метода в ООП.
Мне, пожалуйста, решение на Unity C#
Ну, короче говоря, нужно узнать посещал ли игрок объект или нет. Если не посещал - вывести одно, если не посещал - вывести другое.
*если посещал
Значит был ли вообще задействован объект в игре или нет. Если коллайдер/коллизия объекта не была задействована - сделать что-то, если была - вывести в дебаг что я уже это сделал. Так понятно?
void OnBecameInvisible() {
Destroy(gameObject);
}
Сука, что с ней не так? Это какой-то устаревший метод в моей версии или что?
Сам с неё горел недавно. Кто-то советует закрыть вкладку сцены, мол, "камера" сцены тоже считается за камеру, кто-то ещё какую хуйню советовал. По итогу забил хуй и поставил пустой прямоугольный коллайдер по периметру камеры (ортогональной, понятное дело) и уничтожал объекты по OnTriggerExit
Читал я это. Если запустить сцену, взять объект за оси и ручками гонять её за пределы сцены и обратно, то событие, которое прописано в OnBecameInvisible, работает как нехуй. А если запустить объект в свободный полёт, то он улетает за пределы камеры и пидорит в неведомые дали, даже не пытаясь чёто сделать после того как стал невидим.
> When running in the editor, scene view cameras will also cause this function to be called
Хех, значит правильно советуют
> закрыть вкладку сцены, мол, "камера" сцены тоже считается за камеру
вариант первый, простой. для трапеции с параллельными оси y нижней и верхней гранью
1. взять уравнения прямых(для этого нужны 2 точки прямой, например там где они пересекаются с отекающими прямыми снизу и сверху
2. испульзуя эти уравнения получить x координаты точек на прямой для заданного y искомой точки
3. проверить находится ли x точки между x координатами точек на прямой
вариант второй, для произвольного выпуклого многоугольника
1. получить уравнения прямой для каждой грани(нужны координаты углов строго по порядку)
2. подставить координаты точки в уравнение каждой грани и запомнить знак результата
3. если знак для всех граней (пропуская нули) одинаков - точка лежит внутре.
Попробую первый, спасибо.
У тебя всего 4 точки же. Возьми и заспавни в пределах 2 треугольников используя барицентрические координаты. (Когда стороны треугольника являются координатной осью). если хочешь какое-то хитрожопое распределение то вычисли площадь каждого треугольника и используй соотношение их площади для того чтобы узнать какой из двух выбрать для спавна.
Нашел вот такой ассет: https://assetstore.unity.com/packages/tools/modeling/probuilder-111418
Позволяет редачить сцену и создать её как список объектов.
Я могу затем написать скрипт, который сохранит их все на диск.
То есть, редактор из scene view создает объект для game view.
Задался вопросом: а возможно ли обратное - в game view например скриптом создать куб (для примера) и сделать его видимым в scene view как постоянный объект?
>>501977
>>501956
а хотя лол погоди я подумал целых 5 минут так как проблема то клевая.
смари, можно взять треугольник, сказать что 2 его стороны это оси обычной координатной плоскости. но одна её сторона наклонена. когда берешь рандомную координату, то если она выходит за пределы левого треугольника, то мы отражаем её координаты, чтобы они соответствовали координатам в правом треугольнике но как будто он левый. понял, да? мы по прежнему имеем квадратную координатную сетку, поэтому у нас не будет сраного распределения и координата всегда будет в пределах треугольника, поэтому не надо угадывать координату до тех пор пока она не появится в пределах треугольника.
интересно как эта хуйня называется, наверняка название есть.
Есть вектор v. На его залупе весит меш. Надо вычислить, какое вращение приложить, чтобы залупа вектора тыкала в [0, 1, 0]
Поясню, чтобы было понятно. Меш = голова пидора. Вершинки сидят со смещением к его очку-пивоту. Пивот могу занулить, но голова как на палке сбоку. Хочу выстроить ее вертикально, чтобы сдвинуть ебало в очку, где ему и место.
Повторяю вопрос. Position обнулён на [0, 0, 0] и запарентин. Центр головы находится по центру коллайдера на ней. Этот вектор надо выправить параллельно [0,1,0].
Как блэть?
И это я уже молчу про "патчи", которые починят одно, и сломают другое. Сссссука в рот ебал.
Зочем тебе эта?
тупая свинораха
Пусть есть две прямые: AB и CD (левая и правая).
Есть два стула - алгоритм с тремя рандомами и с двумя и математикой.
Все числа рандомные лежат в пределах от 0 до 1.
Алгоритм 1.
Суть: находим случайную точку на АВ, потом на CD и случайную точку между ними.
1) Генеришь rnd1.
2) Находишь точку P на прямой AB с координатами:
по Х: rnd1 (B_x - A_x)
по Y: rnd1 (B_y - A_y)
3) Генеришь rnd2
4) Находишь точку E на прямой CD с координатами:
по Х: rnd2 (D_x - C_x)
по Y: rnd2 (D_y - C_y)
5) Теперь есть прямая PE.
Генеришь rnd3 и находишь:
X: rnd3 (E_x - P_x)
Y: rnd3 (E_y - P_y)
Готово вы восхитительны!
Алгоритм можно упростить если брать середину отрезка PE.
Алгоритм 2: обойдемся 2 рандомами, так как вообще говоря это дорогая функция. находим точку P, решаем уравнение для прямой BD, подставляем туда Y точки P и находим E_x. Теперь находим случайную точку по Х между Е и Р
1) Генеришь rnd1.
2) Находишь точку P на прямой AB с координатами:
по Х: rnd1 (B_x - A_x)
по Y: rnd1 (B_y - A_y) - это Y координата нашей будущей точки
3) Вспоминаешь уравнение прямой: y=kx+b;
Работаем с прямой CD - находи k.
k_DC = (D_y-C_y)/(D_x-C_x)
4) Находишь b_DC:
b_DC = D_y - k_DC D_x
5) Из P_y = k_DC E_x + b_DC получаем: E_x = (P_y - b_DC) / k_DC
6) генерим rnd2 и находим координату по X: rnd2 * (E_x - P_x)
Пусть есть две прямые: AB и CD (левая и правая).
Есть два стула - алгоритм с тремя рандомами и с двумя и математикой.
Все числа рандомные лежат в пределах от 0 до 1.
Алгоритм 1.
Суть: находим случайную точку на АВ, потом на CD и случайную точку между ними.
1) Генеришь rnd1.
2) Находишь точку P на прямой AB с координатами:
по Х: rnd1 (B_x - A_x)
по Y: rnd1 (B_y - A_y)
3) Генеришь rnd2
4) Находишь точку E на прямой CD с координатами:
по Х: rnd2 (D_x - C_x)
по Y: rnd2 (D_y - C_y)
5) Теперь есть прямая PE.
Генеришь rnd3 и находишь:
X: rnd3 (E_x - P_x)
Y: rnd3 (E_y - P_y)
Готово вы восхитительны!
Алгоритм можно упростить если брать середину отрезка PE.
Алгоритм 2: обойдемся 2 рандомами, так как вообще говоря это дорогая функция. находим точку P, решаем уравнение для прямой BD, подставляем туда Y точки P и находим E_x. Теперь находим случайную точку по Х между Е и Р
1) Генеришь rnd1.
2) Находишь точку P на прямой AB с координатами:
по Х: rnd1 (B_x - A_x)
по Y: rnd1 (B_y - A_y) - это Y координата нашей будущей точки
3) Вспоминаешь уравнение прямой: y=kx+b;
Работаем с прямой CD - находи k.
k_DC = (D_y-C_y)/(D_x-C_x)
4) Находишь b_DC:
b_DC = D_y - k_DC D_x
5) Из P_y = k_DC E_x + b_DC получаем: E_x = (P_y - b_DC) / k_DC
6) генерим rnd2 и находим координату по X: rnd2 * (E_x - P_x)
ну и дополню, что везде можно сделать функцию в одну строчку если составить уравнения и посокращать всё. Я хз как часто тебе надо генерить точку между линиями. Если часто - второй алгоритм лучше так как рандом по умолчанию дольше сложения и деления несколькхи чисел
1064x780, 0:02
>>501945
на, держи. я внезапно понял что я и сам хочу эту хуйню. сам там оптимизируй че как там не сложная математика.
http://rgho.st/8czzdVGzh
Проблема не в этом. Предстать, как голова сидит на теде. У тела все меши просчитаны относительно к точке [0,0,0]
Теперь меш копируется, чтобы сделать её отдельной от тела (отстрелить к хуям нахуй блэть!). Её пивот так же останется там "внизу". То есть голова как на палке, если ее вращать. Анимация на неё более не распростаняется.
Мне эти головы по игре надо собирать, а они как на палках. Простое смещение их центра головы в [0, 0, 0] давало умеренно удовлетворительные результаты.и
Поэтому и хочу ту "палку", на которой голова, выстроить ВЕРТИКАЛЬНО, чтобы след.шагом сдвинуть меш к пивоту
Пойми, что если пидор лежал горизонтально, когда я ему отхуярил голову, то и меш головы будет висеть на "палке" (от пивота), висящей ГОРИЗОНТАЛЬНО.
Я их, сцука, навешиваю перед камерой, а они торчат в стороны. А надо выставить вертикально.
1160x760, 0:06
на здоровье, да.
>>502009
эй это же весело! вот задают на форуме интересный вопрос, а хопа придумал ответ. а потом хопа и придумал ответ ещё лучше. и идея понравилась и хули бы и не заимплементить. получение рандомной точки на произвольном ограниченном пространстве звучит как что-то полезное!
>>502010
в чем твоя проблема лол схему нарисуй или скриншот покажи
надо будет ебануть поиск пути который бы искал какую-то специфичную зону и заодно который бы искал путь за пределы какой-то специфичной зоны.
>>501294
Продолжаю делать анимации.
Приспособил под свои события пример из https://docs.unity3d.com/560/Documentation/Manual/nav-CouplingAnimationAndNavigation.html , но тут несколько проблем возникло.
Для теста пока что использую вместо lookat как в примере transform.LookAt. Из-за этого анимации как-то дёргаются. В примере используют anim.SetLookAtPosition и anim.SetLookAtWeight во время OnAnimatorIK() -- правильно ли я понимаю, что это то же самое, что и я использую, только "дружелюбное" к анимациям?
Так как двигаю кубы, то анимация у меня для прыжков, и с каждым прыжком из-за остановок с блендами высота куба немного набирается т.е. анимация прыжка не до конца проигрывается. Как нормальные люди такое решают? Первая мысль - разбить анимацию прыжка на взлёт и падение, и проигрывать падение когда значение высоты максимальное пока значение высоты не опустится до нужной позиции. Но я ж нуб, на словах описать легко, а как это воплощать в жизнь? Мне переменные высоты в аниматоре хранить как-то, снаружи их высчитывать или что?
у меня зоны и до этого были, просто мало инструментария было для того чтобы их указывать. теперь вот захотел сделать побольше методов указывающих че где.
и не за сто баксов а бесплатно. для всех бесплатно.
>и не за сто баксов а бесплатно
Дык поэтому и дал тебе ту ссылку
В ассет сторе полная за 100
На его сайте есть и free
И видел, и пробовал. Мне динамичное обхождение препятствий не надо пока.
Чего тебе-то не достаёт?
бесплатная версия разве что грид ебанет. зачем оно? там конечно есть всякое говно вроде навигации по тому что ты там ручками сделаешь или совсем что-то смешное вроде навигации по точкам соединенным линиями, но все это баловство.
>Чего тебе-то не достаёт?
много чего. кое что я и сам не заимплементил пока что.
из того что есть у меня:
чтения сплат мапа у террейна для указания стоимости пути
отдельной генерации пути который чтобы преодолеть надо пригнутся
генерации соединений с прыжками
генерации укрытий
а ещё в бесплатной версии нет локал авойденса насколько я помню.
я конечно могу ещё перечислить дохуилион всего что хотел бы видеть сверх этого. например возможности регистрировать что-то на навмеше чтобы искать это в достижимом пространстве учитывая стоимость перемещения. или ту фичу как у юнити с особыми зонами которые бы имели ссылку в навмеш из компонента и переключали его проходимость из компонента. или наоборот чтобы навмеш имел ссылку на этот компонент и тогда можно было бы получать путь, но с оговоркой "если хочешь пройти по этому пути то надо переключить хуйню в этом компоненте". тогда можно было бы сделать например чтобы ИИ сначала сходил вставил ключ, чтобы дверь открылась рядом. или какую-то форму гпу рэйкастинга в конце концов. все это здорово если хочется сделать какой-то клевый ИИ.
а что этот бесплатный астар? хуита какая-то.
944x756, 0:16
вообще - хуй знает. я стремлюсь к своим идеалам. все мои идеи эволюционировали многократно по мере достижения новых высот. что-то где ИИ имел бы те-же возможности что и игрок и мог бы надрать ему жопу. но не за счет уменьшения возможностей игрока. в краткосрочной перспективе что-то где один игрок бы командовал болванчиками как например в маджести, а другие игроки пытались проникнуть к этому игроку на базу и нажать кнопку. в долгосрочной что-то с самостоятельным миром. например чтобы игрок слонялся по руинам а его преследовали терминаторы. чтобы они сами высылали подмогу, ломали стены, могли пользоваться предметами, обходили сбоку, пользовались укрытиями, имели цепь командования и вертолеты с прожекторами и десантом.
и чтобы в траве могли прятаться во время боя. чтобы вот хопа потерял из вида терминатора, побежал в сторону где последний раз видел а он хопа нашел рядом густую траву по пояс, сел и сидит, проходиш мимо а он вскакивает и стреляет.
вообще мелкие прототипы половины этого я сделал, например чтобы ИИ пользовался предметами, цепь командования, укрытия. показывал видосики в треде. но чтобы сделать такое заебись определенно нужно иметь более крутой способ получения, хранения и применения информации о мире. как доделаю то что перечислил в том что хотел бы видеть то наверно вернусь к своим прототипам.
хотя конечно много что можно ебануть сверх этого.
Чинил через увеличение Z координаты. Там разве другая камера в webGL?
Анонче, да воздастся тебе за дерзания твои!
Тоже думаю над ИИ, но в сторону "чтобы тёлка дала"
Нахуя тебе там вообще глубина? У тебя же карта плоская. Рисуй слоями, без з-теста.
Но гипотетически карта может быть объемной. Да и там в 3д все, хочется 3д.
А поднимать выше я координату не хочется - и так видно что флаг не на своей плоскости находится а висит выше
Алсо, вот демка, таки запилил юниты ходящие по карте, почти как у взрослых: https://nashet.github.io/Prosperity-Wars/WEBGL/index.html
>сообщи
Нет, я тогда мгновенно перекачусь с годота на говноюньку и запилю игру, и про HXGI никому не скажу, чтобы конкуренты не успели воспользоваться годнотой!
Вылажу на этех выходных
Я протистую!
Сама версия норм, только вот монодевелоп в ней ведёт себя как уебан. Если ебошишь на студии, то накатывай.
>>502384
>>502392
Это потому что вы не гуглите. Такая проблема со многими англоязычными программами есть. Нужно использовать хотя бы одну комбинацию клавиш НА АНГЛИЙСКОЙ РАСКЛАДКЕ - ктрл+в, ктрл+с, любую - до любого другого действия. Тогда и только тогда комбинации клавиш будут работать. Как вариант - переключите стандартную раскладку клавиатуры на английскую, чтобы при открытии любой программы сразу английский работал. Японская раскладка тоже сойдёт. Любая латинице-базовая, т.е. иероглифы поддерживаются лучше, чем кириллица, лёл.
>Японская раскладка тоже сойдёт
тут обосрался с подливой
У меня Lenovo X230, купленый в Акихабаре. На нём японская win10 64-bit
И та же хуйны с ctrl+v
Винда =/= раскладка. У тебя при загрузке моно какая раскладка загорается, RU, EN или JP?
Пересесть на другой движок и съебать из треда.
тебе бы шумы сделать (в фотошопе) и наложить их картой высоты. и текстура.
Ты пидор.
Издержки процедурной генерации. Даже пубг этим страдает. Есть специальный софт, который все это устраняет, но можно и руками.
>Но гипотетически карта может быть объемной.
Когда она станет объемной твои надписи станут залезать под горы, потому что все буквы в одной плоскости. Для 3Д тебе придется другой способ рендера текста делать.
а ложить надписи на горы после того как они станут обьемными, но все равно рендерить их поверх всего, кроме юнитов? не?
я конечно могу сделать CustomEditor для него и реализовать отображение элементов этого листа. но тогда я не могу воспользоваться CustomPropertyDrawer которые уже по человечески написаны для содержимого этого листа. как воспользоваться CustomPropertyDrawer для листа который не сериализуется?
От создателей Копателя Онлайн и Блокады 3D? Васяны вышли на новый уровень, теперь они нашли ассеты оружий и пропов в высоком качестве.
Слышь, бля!
>Игра была разработана на игровом движке «Unity 5», что безусловно дает ей колоссальное преимущество.
КАЛАСАСАЛЬНА!
Так никто не делает. Тебе нужен террейн едитор.
Пидор - ты, Tarkov использует последний stable билд из 5-линейки.
а я делаю.
вообще, после вечера фрустрации и выражения недовольства ебаной сериализации юнити которую делали нелюди, я пришел к выводу. можно заняться той-же хуйнёй что делают эти мудаки. тоесть не делать наследование-хуедование, сделать один сраный тип, сунуть в него пару значений и значение из энама говорящее какого типа эта хуйня и рисовать его значения используя сраный свитч. но это просто ебаный цырк и я такое могу делать только потому что разница между наследниками это пара float
применил EditorGUI.PropertyField для Quaternion и юнити выдало мне эту хуйню. и тут то я узнал что у юнити нету человеческого метода рисовать в инспекторе кватернионы.
>>502683
для кого сложная?
>человеческого метода рисовать в инспекторе кватернионы
Ты всегда можешь предложить свой инновационный метод рисования четырехмерных векторов.
что же такое игры?
>>502698
иновационный метод рисования четырехмерных векторов это ебануть все четыре оси в одну строчку, так-же как это происходит с Vector2 и Vector3.
ну а для кватернионов могли бы уж сразу сделать рисовалку в eulerAngles. прямо как у трансформа в инспекторе.
я, конечно, сделал. но задумался почему не сделали за меня.
Что это вообще такое? Я выпустил три тайтла, заработал на хату и тачку, нахуй тебе хуйней всякой заниматься, что это вообще лол.
Игры то были 3д? Иначе не считается!
>какая раскладка загорается, RU, EN или JP?
Только родная японская по дефолту. Никаких других клавиатур не ставил. В других "англоязычных" прогах (редакторы, Visual studio) такой хуйни не замечал.
Для справки: в японской винде латиница по дефолту. Для кракозябров надо переключать
>могли бы уж сразу сделать рисовалку в eulerAngles
Кватернион -не ротешник, а МЕРА вращения.
Куда твоя рисовалка показывать-то будит?
Ну, сделай выделенный сервер, чтобы игроки сами хостили сервера.
Школота тупая, хуйни с вики начитается и верещит с умным видом. Юнитискрипт год назад уже похоронили
https://blogs.unity3d.com/ru/2017/08/11/unityscripts-long-ride-off-into-the-sunset/
Ну а сразу так спиздануть не мог, сраный выебонщик за решеткой? Я думал у меня фактическая ошибка в суждениях, а тут бля сука лишь частность.
Ты же элементарного найти не можешь, беспомощная собака, куда ты суешь морду в погроммирование.
Ты мне еще указывать будешь куда лезть? Я в программировании был пока ты еще формочки в борланде клеил, салага.
Ок, спасибо.
>Я в программировании был
>Нихуя не знает, не может нихуя найти, задает детские вопросы
>Стыдно позорится перед всеми
>Сидит в своем манямирке за скриптовой решеткой
>Думает, что другие должны в первый же день разбираться как он
>Не понимает, что люди не сразу осваиваются с новыми вещами, потому что ничего кроме юнити не пробовал
>потому что ничего кроме юнити не пробовал
Я все движки пробовал и тестил, а ты просто жрешь то что тебе двачеры скажут.
Забыл дополнить. Свет должен включаться на полсекунды. Допустим, нажал E, свет включился и сразу же сам отключился.
Схуяли я жру что мне двачеры советуют? Мне приходится жрать то, что на работе скажут.
шарп подхватывается крестовиком за полчаса-час пролистывания книжки троелсена. стандартную библиотеку можно подтянуть походу.
Я тоже с JP по дефолту сижу. Чтобы хуйни не было, первым делом при открытии моно ктрл+ц, ктрл+в, ктрл+с. После этого дела все комбинации работают, как надо.
Нет, я не защищаю моно. Просто видел много программ, в которых не просто комбинации, клавиши просто не работают без предварительного танца с бубном. Ух, сколько я с Gauntlet игрой бодался
собственно можно сделать сборку на любом .net языке и подлинковать её к юнити, но писать на C++.clr может только очень сильный извращенец. это же нереально стремный пиздец у которого с плюсами меньше общего чем у c#
Бред. Много топовых тайтлов на юпити написаны на с++. Я встречал в сети свободный интрпретер, но сейчас не могу найти.
Есть у меня в пространстве залупа, которую я через Vector3.MoveTowards двигаю к другой залупе. И всё вроде бы хорошо, но вот что заинтересовало. Я могу двигать её только с определённой скоростью. А можно ли без велосипедов задавать не скорость, а время? То есть, условно говоря, прописать "будь там-то через 2 секунды", а уже от этого оно само посчитает необходимую скорость.
Высчитываешь расстояние, делишь на время и получаешь скорость.
Ничего никогда на юнити не делал, просто скроллил.
блэть, я-то думал, что допфишка какая-то, чтобы конусный источник выглядел как реальный фонарь
1080x796, 0:27
>>502706
ха-ха. не первое лето я читаю подобные комментарии. время когда школьники активируются. чё покажешь?
>>502717
>Кватернион -не ротешник, а МЕРА вращения.
че предлагаешь то? переименовать Rotation в Rotation Measure?
>>502730
чего на UE то не перекатишься? там тебе кресты. так то в юнити никому ничего кроме C# нахуй ненужно. можно подключать конечно свои библиотеки но это сомнительное удовольствие.
воопшем-то только логику. собираешь в обычную дллку, поверх неё делаешь managed сборку(на любом .net языке) с прокси monobehaviour которые дергают функции из либы. учитывая что нормально встроенные типы передать в unmanaged либу не получится - то еще развлечение.
подозреваю то, о чем ты слышал - это il2cpp который переводит нетовский il в код на сях, который уже компилится в нативный для платформы, которые не поддерживают .net
Вот за это спасибо, анон!
Есть еще аддон за бабки, чтобы IES профили (характеристика реально существующей лампочки, можно качать на сайтах всяких филипсов и дженерал електриков) использовать:
https://assetstore.unity.com/packages/tools/photorealistic-lights-ies-59641
> public string name;
и
> public string name
> {get; set;}
И так и так это строка, которую я могу вертеть из других классов. Так в чём разница?
вторым аргументом время в float, быстрофикс
> if (Input.GetKeyDown(KeyCode.Mouse0))
Если чё, для этого есть
> if (Input.GetMouseButtonDown(0))
Можешь без корутины. Делаешь флоат, каждый тик апдейта прибавляешь к флоату тайм.дельтатайм, если флоат выше 0.5, то вырубаешь свой фонарик. При включении фонарик обнуляешь флоат, чтобы таймер сбрасывался.
Потому что корутины быстрее апдейтов. ему выше в треде посоветовали закорутинить Но с такой мелочью неважно, я думаю.
Это я знаю. Первое - поле, второе - свойство.
Это всё заебись, только вот
> И так и так это строка, которую я могу вертеть из других классов. Так в чём разница?
Проперти - это как метод, только проперти. Ты можешь в get засунуть что хочешь, прямо как в метод. Допустим, get { а++; return a; } set { a = value; }, и каждый раз, как будешь требовать свою проперти, она будет увеличиваться на 1
Олсо, интерфейсы не принимают переменные, только проперти.
первое - поле(field)
второе - свойство(property)
принципиальное отличие поле - это тупо переменная в классе.
пропертя - это переменная и два метода - get и set т.е.
public string name {get;set;}
это тупо синтаксический сахар для
private string _name;
public string _get_name() {return _name;}
public void _set_name(string value) { _name=value;}
это открывает тебе 2 фичи
1. можешь написать свой сеттер/геттер
например
private int _n;
public int n { get => _n; set => _n = value < 0 ? 0 : value; }
2. у геттера и сеттера свой уровень доступа, например ридонли свойство
public int n {get; private set;}
в контексте юнити еще свойства не попадают в инспектор. приходится писать свой редактор.
>>502927
private void Update()
{
if(mousedown && !light.enabled)
StartCoroutine(light_off());
}
private IEnumerable light_off()
{
light.SetEnabled(true);
yield return new WaitForSeconds(0.5f);
light.SetEnabled(false);
}
первое - поле(field)
второе - свойство(property)
принципиальное отличие поле - это тупо переменная в классе.
пропертя - это переменная и два метода - get и set т.е.
public string name {get;set;}
это тупо синтаксический сахар для
private string _name;
public string _get_name() {return _name;}
public void _set_name(string value) { _name=value;}
это открывает тебе 2 фичи
1. можешь написать свой сеттер/геттер
например
private int _n;
public int n { get => _n; set => _n = value < 0 ? 0 : value; }
2. у геттера и сеттера свой уровень доступа, например ридонли свойство
public int n {get; private set;}
в контексте юнити еще свойства не попадают в инспектор. приходится писать свой редактор.
>>502927
private void Update()
{
if(mousedown && !light.enabled)
StartCoroutine(light_off());
}
private IEnumerable light_off()
{
light.SetEnabled(true);
yield return new WaitForSeconds(0.5f);
light.SetEnabled(false);
}
А быстрая запись get; set; просто быстрая запись, обычно тебе бы нужно было дополнительную переменную использовать, но с быстрой записью не надо.
еще одна мелочь
для валуе типов возвращается копия значения. соответственно полям структуры нельзя присваивать значения. например
transform.position.x = 5 пошлет тебя нахуй, потому что Vector3 - структура а не класс.
у многих тупо привычка, ибо стиль программирования на шарпе предполагает свойства, некоторые фичи стандартной библиотеки(включая сериализацию и прочую привязку свойств к чему либо) завязаны на свойства, интерфейсы завязаны на свойства, ну и потом в случае необходимости автосвойство {get;set;} разворачиваяется по необходимости в просто свойство с кастомным геттером/сеттером.
кстати в 8.0 собираются добавить поля в интерфейсы.
> у многих тупо привычка
Была такая догадка, но она была быстро отброшена. Как оказалось - зря.
Всем спасибо за ответы на идиотский вопрос.
Я сделаю фишку в игре. Каждый левел будет начинаться просто полетом в стратосферу.
На налима как ходил? Удилища грузилом крепил?
В смысле когда ты поворачиваешь колеса влево-вправо (стиринг), а не полное поступательное вращение вместе с колесом вокруг оси при езде? Потому как последнее вообще смысла не имеет.
Коллайдер при привязке к кабине устанавливается по дефолту под 90 градусов. Вопрос не о повороте. Видно же на скрине что не по оси колеса коллайдер. И вот как это пофиксить.
Модификацию через пропёрти можно, если надо, перехватить в субрутине. То есть класс может отслеживать, что в его пропёрти делают. Типо делаеть set {} и в нем проверяешь, что тебе лезит в очко. Ести неформат, то просто игноришь или выдаёшь обрабатываемое исключение
Если просто public, то любая хуемразь может модифицировать, и класс этого не заметит.
В серьёзнос прогроминге тебя обоссут да чисто public, вместо пропёрти. В юнети всем пох. Здесь игры делают
Что-то не могу найти. Это в VS или в Unity?
Ее еще нет вроде
зы. пока делал скрины, выпили инкрементал компилер для теста. таки без него юнити может только в C#6.0 сразу поотваливались conditional switch и анонимные кортежи.
с#6 им мало
мы тут год назад во всю на огрызке от C#4 писали, где даже инициализаторов свойств не было, а им блжад уже локальные функции подавай!
Корутина - это тот же самый обычный метод, но который возвращает IEnumerator (и который должен съйилдить хотя бы раз). В апдейте вызывай, но убери её саму из апдейта.
Как открыть панель с компилером?
Все эти новомодные языки пиздецки раздисциплинировали кодеров. Вот в старом добром Паскале корутину нужно было бы описывать строго вначале хостовой рутины, перед блоком begin ... end; И это охуенно! Это дисциплина, не дающая кодеру стрелять себе в ногу.
StartCoroutine(SegodnyaEbemMamkuOPa());
....
}
IEnumerator SegodnyaEbemMamkuOPa()
{
yield return new WaitUntilSheSleeps(10f);
// nobody gives the fuck
while(1)
{
Trash();
yield return new WaitForSeconds(0f);
}
}
Анон, если те папка разрешит, можешь апдейт сделать корутиной
IEnumerator Update()
{
LetsFuckMyOldSistah();
}
Спишем как неудачную попытку выразиться предельно политически корректно
>вполне валидное применение локальной функции.
>вот только поддержки локальных функций у него нет
из года в год все хуже и хуже, кстати. прошлым летом треды с юнити тоже дай боже недели по 3 жили.
Бумп вопросу.
Заметил, что OnPointerEnter регистрируется только для части юнита. Сначала подумал, что полгон колайдер хуево генерится(юниту рантайм выставляется спрайт а по спрайту создается колайдер), посмотрел - все ок, но для составного полигона событие срабатывает только для первого многоугольника. 2 часа тыкался пытаясь разобраться что за хуйня. В результате помогло удаление/добавление рейкастера. с теми же параметрами(там параметров то целых 2). хотя до этого менял второй параметр(макс количество проверок) во все стороны.
Да нехуй делать. Покупаешь воксельный скан сцены, шлифуешь напильником, хуяк хуяк и готово.
нажми ктрл-шифт-пробел и посмотри наконец на типы параметров старткороутин
в уеч тред иди
лучше скажи че ты там делаешь, так как скорей всего ты маешься хуитой.
так то да, можно. например смотри - я заимплементил хитрую растеризацию на гпу.
но ты учитывай что перемещение данных на видеокарту и обратно само по себе требует время, так что если ты там собрался сотни мегабайт перемещать то я бы не советовал.
>>503145
слушай, ты какой-то отбитый. может все-же шарп сначала подучишь, туториалов там посмотришь?
>>503144
шутку про тролейбус из батона думаю мы все знаем.
хотя, а причем тут ЮНИТИ? графоний от 3d редактора зависит, блендер там , майя, а не от движка
>так как скорей всего ты маешься хуитой
Верно, вот есть такая хуйня, думал сделать расчет горизонтального объема торгов, 72 часа -300к элементов, 12 мб вес на харде, хз сколько в памяти. Пока просто интересуюсь, но в будущем, когда будет время и желание, хочется график как на пикрелейтед, с объемами и плавным ресайзом.
ну такое то особо без проблем. ты только учитывай то совать и изменять информацию довольно легко, а вот объединять и вытаскивать довольно трудно. потому что все происходит одновременно и синхронизировать проблемно.
>>503184
лол где эта хуйня, какое-то время назад тут поднимался интересный вопрос про формирование процедурных linq запросов. смотри как клево! ух! linq - благо!
но вообще что за хуйню ты понаписал то? чейто?
>графоний от 3d редактора зависит, блендер там , майя, а не от движка
От расчета света. А это шейдеры, которые хитровыебанно рендеряд твои материалы
>но вообще что за хуйню ты понаписал то? чейто?
поиск пути для робадов. ранее использовал тупо дейкстру(ибо надо было чего дебажить и нужны все доступные клетки для подсветки) теперь дошел уже до реальной реализации а в ней проблема с тем, что на поворот робада тоже тратятся очки движения.
первое выражение рекурсивно получает все возможные пути с учетом поворотов, второе из этого списка отсеивает только самые короткие.
IEnumerator корутина должна возвращать. Не нумерейбл, а нумератор.
нихуя, как обычно перепутал плюс с минусом. но вот теперь то уже точно алайв
>var list = run_list.Select(i => i.coord).Distinct().Select(coord => new path_target{..}).ToList();
Да ты охуел. Мозг же сломаешь от количества точек.
потому и разбил на строки
зы. работает, даже посчитало что быстрее зделать шаг назад и потом повернуться чем идти напрямую через ландшафт
> чтобы перемещался не сам объект, а только его камера
Если в этом вашем юнити есть локальные координаты, то тебе надо двигать локальные координаты камеры, которые локальны относительно родительского объекта.
Ответ отрицательный.
Нет, когда я пришёл на эти земли, народ питониан уже вымер. Не довелось с ними породниться.
О, спасибо, пойду кочать.
Придется писать, лень качать ассеты.
Хуевенько, говененько.
Спасибо за совет, все заработало, батя похвалил.
>503345
как обычно - ставишь git/svn/что там тебе нравится, ставишь в юнити сохранять мета файлы текстом, заводишь репозиторий и впиред.
в платной версии там вроде есть что-то еще, но я особо не смотрел
Внезапно сервисом Collaborate
зачем? меня вполне устраивает git с которым я работаю уже наверно лет 10
Да. Он меня бесит. Уебать охото.
Мне показалось, что у него на шее петля.
У меня скрипт движения камеры заваливает горизонт, а нихуя не понятно почему.
Что ты говоришь одно слово, как какой-то там мудрец в просветлении.
В школе много задали читать на лето?
>лучшего 3D и 2D игрового движка современности
Проиграл что-то.
Пикрелейтед - вся суть юнити.
На ютубе.
У меня юнити вообще даже не установился.
linq не предназначен для выскогопроизводительного кода игр, тупая ты свинораха, это для продакшена с большими тимами где читабельность важна и кодомакаки меняются каждый день.
>linq
>в играх
>с реал-тайм бюджетом в 16ms
Впрочем, если ты делаешь говноВН или ты YandereDev (ему персонально можно) - тогда похуй, соси
1400x918, 0:10
зоны теперь могут содержать в себе обжекты и возвращают их при поиске пути через них. агент сначала ломится к зеленому квадрату, видит что у него на пути какая-то хуйня, а хуйня ссылается на координату кнопки. когда агент заходит на кнопку то она переключает bool внутри обжекта который референсится при поиске пути. и тогда агент хопа и понимает что ему можно ходить по синей зоне и идет к зеленому квадрату.
абстрактненько. можно ведь любую хуиту сунуть которая будет появляться только при поиске пути через конкретно это место.
>>503190
лол интересно как ты дебажиш такие конструкции когда что-то идет не так. реализовал бы нормально, с heap и прочим говном.
>>503293
лол а как же вижуальное погромирование?!
>лол а как же вижуальное погромирование?!
Я лучше буду писать на DirectX, чем ебаться с этими блупринтами.
Презираю linq.
Поцоны, хочу сделать управление на босе, чтоб игрок мог бегать(скользить) только вокруг оси боса. Но с одним условием, чтоб после того, как я отжимаю кнопки управления, игрок еще немного скользил по поверхности по этой же оси, собственно по этому RotateAround мне не подходит. Подскажите как такое реализовать?
Возможно по формуле
(x-a)^2 + (y-b)^2 = r^2
можно высчитывать местоположение игрока.
А инерцию наверное надо реализовать через определение ускорения игрока на момент отжатия кнопки и сделать передвижение по этому ускорению так, чтобы оно плавно стремилось к нулю.
640x360, 0:12
Спасибо, я понял твой намек сделать через RotateAround и просто поменять gravity в InputManager
тут юнети не при чём. Так вращать всегда будет криво
ой не тот хоткей двач зачем ты так. продолжение:
прибавь к радианам сколько там тебе надо.
получи вектор обратно:
Vector2(Mathf.Cos(radian), Mathf.Sin(radian))
экзампл надо?
1000 и один способ сделать "по-другому", столкнувшись с юнитевскими багами. Понятное дело, что в здравом уме не стоит юзать юнет, а если хочешь гибкости, то сразу качаешь тмПро.
Просто такой подход, "не нравится что-то дефолтное, качаешь ассет или пишешь своё". Мне норм.
960x612, 0:42
А то там только 3.5 и 4.6 а у меня дллка только 2.0 поддерживает (https://github.com/gkngkc/UnityStandaloneFileBrowser)
Так мусор сам Юнити и создает. Он создает какие-то служебные файлы к ассетам, которые я добавляю в проект и сам же на них бугуртит. -_-
А тебе обязательно самую новую версию Юнити юзать?
ты добавляешь левые файлы. (например винда добавляет Thumbs.db если в папке есть картинки) юнити создает к ним мету. потом левые файлы удаляются/меняются, юнити проебывает метаданные и начинает нести хуйню.
пересобрать либу под новый дотнет не вариант? там же вроде исходники есть
Где ты там в катящихся шариках вектора увидел? Там элементарщина же.
векторы мастхев для любого движения, безотносительно юнити
Что значит "знать"?
Линию пересечения двух плоскостей движения объектов, каждый из которых задан векторами position и velocity, нарисуешь?
>Сам выбрал себе работу юнитимакаки у мобилкопидарасов.
Но у юнити нет альтернатив, что поделать.
Делаешь логгер синглтоном и из любого места дергаешь Logger.Instance.Print("ya pokakal")
Юнити безальтернативная, увы. Наличие возможности например купить готовые сплайны с редактором перевешивают все недостатки с точки зрения бизнеса. Я вообще год за Cocos2D в конторе топлю, уеч слишком велик для наших говноигрулек.
Можно подумать, у тебя кокос не будет хуйню делать. У меня, кстати, юнька работает отлично, все косяки, которые встречались, были только из-за моего кривого кода.
Я хотя бы могу узнать что именно он делает, а не работать с недокументированным чёрным ящиком. Ты не представляешь как в уече помогает доступ к исходному коду. Возникает вопрос - смотришь код - вопрос решается.
> У меня, кстати, юнька работает отлично, все косяки, которые встречались, были только из-за моего кривого кода.
Ну это пока. До тех пор пока ты не наткнулся на ещё одну функцию что ведёт себя не так как указано в документации.
Тридегеометнию, линал, тервер, теорию графов.
>Я хотя бы могу узнать что именно он делает, а не работать с недокументированным чёрным ящиком.
Ну, так и посмотри
https://blogs.unity3d.com/2018/03/26/releasing-the-unity-c-source-code/
Мальчик, ты вообще в курсе что это просто банальная прослойка между .NET и нативным кодом? И что UnloadSceneAsync уходит прямо в нативный код? Разумеется не в курсе, иначе бы не гнал хуйню.
Enam? если ты про енум то его можно использовать снаружи через имя класса
public class A { public enum E { ...} }
public class B { public A.E e; }
зы. можно канешна еще кастовать енум к инт, но это хороший способ отстрелить ногу
так и сравнивать
public class A { public enum E { e1, e2} }
public class B {
public A.E e;
public void Foo(){
if(e == A.E.e1) do_something();
else if(e == A.E.e2) do_somthing_other();}
}
Хм, кажется понял, спасибо
Живи дальше с этой болью
Делать AAA Multiplayer rpg/action, сам скорее всего не справишься, по этому ищи команду на Gamedev.кг
Раньше проходил какой-то тутор аля "СДЕЛАЙ ШУТЕР И СТАНЬ ОЛОЛО ГЕЙМДЕВЕЛОПЕРОМ С БОРОДОЙ С НУЛЯ", но как-то не особо пошло. Хочу в этот раз хорошо усвоить все основы и не торопиться, благо время есть.
float py1 = a1.y - b1.y;
float px2 = a2.x = b2.x;
float py2 = a2.y - b2.y;
2 часа мучений блжад. почему элементарное пересечение прямых блжад не считается. сука.
У вас там отдельный кружок по корявому задаванию вопросов?
"Не считается" это как? Что выдаёт?
Space Shooter, оттуда же.
все уже считается, пост был отправлен уже по факту исправления. 2 часа мучений из-за = вместо -. хоть бы варнинг какой выдало
960x612, 0:17
я знаю. от этого горит еще сильнее.
зато у меня теперь есть отличный рейтрейсер на гексагональной сетке, который проверяет только len*2 гексов.
Не сами SetPixel, SetPixels просаживают, а texture.Apply
ах хоткеи двача интересно как их отключить лучше бы капча была
делал чтобы из текущей сцены сохранялся массив геймобжектов в скриптабл обжект. получился хуй. но лол юнити мне пытается что-то сказать и я не совсем понимаю что
она говрит "тип объекта неправильный", какого типа GameObjectLibrary и что ты пытаешься туды сунуть?
лол да знаю я что он неправильный. на самом деле он правильный. он имеет тип геймобжекта и суется в него геймобжект и я его обратно получаю. но сериализацию оно разумеется не пережвает. просто этот обьект находится в проекте, а то что я пытаюсь в него сунуть находится в сцене. а юнити такое не делает.
Шейдером.
FindObjectofType юзать не хочу так как он медленный. Вот если бы кеширование к нему прикрутить.
Всё. Запилил.
Через Threading, с помощью Threadpool. На самом деле всего один поток пока что, который либо постепенно пишет в базу чтоб не превышать рейтлимит, либо извлекает пару лямов позиций. Я вот хз что будет если приложение снять через диспетчер, поток тоже умрет?
да, поток умрет. если тебе нужно завершить его корректно - кидай треду с ним Interrupt() и лови ThreadInterruptException внутре
Вы видите копию треда, сохраненную 15 апреля 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.