Это копия, сохраненная 14 июня 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Прошлый тред: https://2ch.hk/gd/res/394374.html (М)
Официальный сайт: 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
GameObject boo = ...;
Polozhit(boo.GetComponent<ItemObject>());
А вообще проиграл от сочетания руssкости, говна на скринах и отсутствия знаний.
>GameObject boo = ...;
Вместо трех точек подставь метод, которым ты gameObject получаешь, балбес.
Пометь подбираемые предметы тегом, pickable к примеру, и проверяй тег рейкастом.
...сделай менеджер предметов в сцене, который сразу имеет ссылки на компоненты всех подбираемых предметов, при подбирании работай с предметом через менеджер
у тебя спрайт в иерархии камеры а не сцены, вытащи его от туда(слева, под камерой) и назначь заного позицию 000
а камера в какой позиции?
а тфу ты бля, этож сцена и в игре говоришь в все видно, тогда я не ебу погугли, это у тебя какие то поломки
попробуй кликнуть 2 раза на кнопку 2D
да гуглил уже. у меня помимо этого, рамок камеры нет, но вроде в прошлом треде объяснили как немного по-другому подгонять текстурки
либо у тебя разумный компьютер, который тебя нарошно тролит, либо ты не смотрел даже никакого базового гайда, ты с такими темпами не дойдешь даже до кода. 1 час потратить на какой то гайд по юнити или несколько дней на расспросы в этой помойке? хммм
в гизмос рамка камеры может быть
в этом-то и дело, что я по урокам делаю. только у них там сразу все нормально, не так как у меня. и никто даже не говорит о том, что может быть как-то иначе
потому что не может быть. значит вариант 1ый тебя тролит твой пк
а ничетак. хоть показать есть что.
только ты какой-то хуйни наворотил на мой вкус. как инвентарь то организовал? просто складываешь в пустой геймобжект выключенные геймобжекты при поднимании чтоли? никакой базы данных не организовывал чтобы мочь дестроить обжекты или спавнить их в процессе игры из ничего? нахуй ты при поднимании конвертацией то занимаешься?
чувак это окно Scene в 2D режиме(ортографический режим), публичной камеры в СЦЕНЕ никакой нет, она есть в игровом окне в котором у него все ОК. это проблема со сценой и только у него
да не обязательно десятки тысяч итемов. надо как минимум иметь возможность связать юнити с всякой абстрактной хуйнёй. чтобы вот был предмет, они имел бы ссылку на то как он выглядит, или какую-то форму ключика вроде айдишника, или стринга который бы указывал на префаб. чтобы была возможность сказать какомунить статичному классу-манагеру "хуйня заспавни мне такой предмет", или "хуйня заспавни мне такой предмет, вот что должно лежать внутри". иначе как предметы то в мире спавнить нормально? сплошная боль будет без этого.
может не делать персонажа как 10 этажный дом?
бляяяяяяя персонаж должен быть до 2ух метров если это человек и до 10 если это неебический сттрайдер из халфлайф, иначе физика идет по пизде
а нахуй твой инвентарь вообще описывает коллекцию геймобжектов? как собрался хранить предметы не имеющие физического представления? или как ты собрался создавать предметы в процессе игры? как собрался делать сохранение / загрузку с таким срамным подходом то?
(другой анон) хачу напомнеть чта ита идни дев!111111 ты на идне прешь? фсёёё тоби пизда
инди и хуинди - разные вещи
Суть такова. Пилю РТСку, запилил движение с использованием NavMesh'а, (реализованы выделение рамочкой и кликом, А-клик и движение "на муве"). Но проблема вот в чем - если юнитов много, то когда первые доходят до точки клика они останавливаются, а другие пытаются пройти сквозь них, толпятся и иногда водят хоровод.
Как сделать что то в роде squad-move, как в старкрафте/варкрафте, например?
Альтернативный вопрос: как сделать полковую систему, как в Total War, например? Когда много болванчиков объединены в построение и ходят вместе, но когда доходит до боя дерутся по отдельности, и снова возвращаются в строй когда перестают драться.
>>01885
одно дело быть валенком и иметь план, другое дело быть валенком и плана не иметь.
>>01889 (Del)
чайлд monobehavior, да?
>>01917
ты набрел на самый ужасный топик в юнити - навигацию.
сквады ясен хуй это просто юниты с иерархией. есть один мегаюнит-сквад, а он командует всеми юнитами вокруг себя чтобы они были там или сям относительно него.
остановку я даже не знаю как сделать, можно попробовать сделать что-то вроде 2д системы частиц где ближайшие частицы бы отталкивали и притягивали друг друга в каких-то пределах и через это можно было бы решить все проблемы формаций и толканий пользуясь частицами как маской для передвижения юнитов внутри сквада, а глобальную навигацию всего сквада отдать юнити. но с такими велосипедами охуеть можно.
1 ый вопрос гуглится
а построения незнаю, ртс это слишком запарно по мойму, как по коду так и по остальному контенту. Во первых я уверен и это гуглится в 5 сек, в том же поисковике проектов(ссыль в оп) можешь найти ртски и посмотреть как у них сделано например. Мне кажется как то так должно быть: класс полка в момент стычки каждому своему юниту подыскивает пару из вражеского EnemyPolk.GetFreeUnit(). Или еще пиздаче, в момент стычки создается класс Boynya который будет в себе уже разбивать юниты на пары и контролировать сражение совмещая данные из двух и более полков. Хотя я никогда даже не интересовался РТС и это все возможно убогий костыль по этому лучше погугли причем желательно на инглише.
>публичной камеры в СЦЕНЕ никакой нет
Мда, чем же тогда рендерится сцена в окне редактора? Камера в сцене есть и она может не видеть объекты из-за clipping'a.
Нюфань,слушал бы что тебе умные люди говорят. Переключись в 3д и увидишь где камера сцены находится.
Ты даун, пройди нахуй документацию читать. Записал бы для тебя вебм, но даже время лень тратить на такого инвалида.
зависит от определения грамотно. а примеров fps в гугле хоть жепой ешь, уверен есть и тот который подойдет тебе
удачи
>Как в юнити грамотно реализовать поворот рук на нужный вектор у персонажа при прицеливании?
Инверсная кинематика.
Либо используешь встроенную:
https://www.youtube.com/watch?v=EggUxC5_lGE
Либо используешь плагин:
https://www.youtube.com/watch?v=rE4nE5tMdnI
Тоесь не хранить меши или воксели, а упрощенные данные, что у такого-то здания есть комната а с такими-то стенами, комната б - с такими-то дверьми, комната цэ - с таким-то декором - в рантайме уже собирать меши, это же использовать для модели повреждений, пасфайндинга, итд.
Тебе в любом случае придется хранить префабы для объектов в комнате. Волшебной кнопки "нарисовать стул как я хочю" не завезли.
Мне не нужно рисовать стул, мне нужен лежащий в бд граф всех комнат и стен хрущевки, чтобы нпц сычев мог из своей сычевальни добраться до выхода из подъезда, воспользовавшись при этом пожарной лестницей если обычную завалило попаданием артиллерии, и чтобы интерьер и соседи стримились только на 2 комнаты вдоль его пути, а не загружались на весь коммиблок.
Где почитать про физику в юнити?
unity docs, unity scripting api
у юнити есть невероятная особенность - целевой угол поворота встроеной инверсивной кинематики не совпадает с поворотом костей в руках и вместо этого там какая-то магия аватаров и прочее. советую в руки сунуть геймобжект чтобы совать в него оружие, а потом сделать кнопку чтобы сунуть целящуюся руку в нужное направление и вместе с этим повернуть геймобжект в руке в нужное направление. если хочешь потом дам.
>>01945
называет он не подкопотную камеру. в сцене то и правда есть скрытая камера которая рендерит сцену. можно получить если залезть в Camera.current или Camera.allCameras или там вроде ещё чето было
>>02017
можно. но с этим охуеешь делать это хорошо. я редко советую пользоваться ассетами но конкретно тут и правда лучше ими воспользоваться. https://www.assetstore.unity3d.com/en/#!/content/48977 конкретно этот местами даже лучше того что может предложить УЕ. кстати у юнити в роадмапе были Physics Animation но по моему только для 2д.
Конструкция не двуногая и нужна для проверки работы генетического алгоритма.
По факту просто ноги прикрутить к телу.
Все можно, уже разобрался.
Всё-равно никто там не ответит.
А игра таки на юнити.
Обнаружил, что после 28 ноября обрывается статистика ADMob.
Игра хуйня, чисто для практики, поэтому только сейчас увидел.
Игру скачивают, но кликов и копеек после 28-го нет.
У них там изменилось что-то с января 2016 ?
Вижу, что не было привязки к какому-то Firebase, м.б. это причина?
Вроде тогда в ноябре ещё какое-то письмо приходило об изменениях а я проигнорировал.
Если с последним еще более менее ясно, то возможно ли реализовать первые две функции c# скриптами? Нужно чтобы вся эта ебала работала на андроиде и ios
ну раз тыжпрограммист, берешь и гуглишь
unity fbx runtime import или unity asset bindles
и
unity qr reader
Берешь раз в секунду (полсекунды) изображение с камеры (есть в доках)
Далее берешь опенсорную либу по анализу изображений (скорее всего на C, ибо скорость и все такое, так что придется помучиться с плагинами)
Скармливаешь ему картинку с камеры, получаешь qr код
с помошью юнити WWW качаешь архив с инета
Распаковываешь
Если архив оформишь в виде ассет бандла то проблем нет
профит
Если выходишь в AssetStore лучше оставь каждый ассет отдельно. Нормальные ребята сами потом решат как им уложить данные для своей игры.
>>02108
Если ты на iOS и Android сможешь нативные либы накатать, то скан QR наебашить будет не проблема, думаю. Ну а скачивание моделек и т.п. есть в юнити из коробки.
Короче, вот тебе стартовая точка:
https://docs.unity3d.com/Manual/PluginsForAndroid.html
https://docs.unity3d.com/ru/530/Manual/LoadingAssetBundles.html
>>02051
Насколько помню, гугловцы выкупили Firebase и там залупа началась какая-то. Дальше я уже не разбирался.
>>01986
Насчёт фреймворков не знаю, но почему бы самому не написать это дело? Если ты этим интересуешься, то скорей всего должен-то знать классику уровня MVC. Вот этого >>02008 разумиста не рекомендую слушать, т.к. у Unity есть API для генерирования всяких мешей в рантайме. Ярчайший пример -- это координатная сетка, которую ты видишь в GameView. Она не дёргается из префаба, а генерируется на старте.
мимоПРОбыдло
> каждый ассет отдельно
В смысле текстуры не сшивать? Тогда получится дохуя текстур.
И вообще. Насчёт этой модульности. Если, например, какие-то две стены не встают бесшовно и требуют дополнительный элемент для сокрытия шва (который есть отдельным префабом), люди сами должны догадаться его впихнуть? Или я как-то должен пояснить? Или они не догадаются и будут жаловаться, что не стыкуются префабы?
> Нормальные ребята
Там не все нормальные. Как-то видел, когда разглядывал чужие паки, кто-то там ныл, что ассет хуёвый, потому что ведро его не вытягивает. А там какой-то йоба-пбр интерьер был дохуя детализированный.
>API для генерирования всяких мешей в рантайме
Кажется я начинаю понимать, почему у значительной части юнити игор хуево с производительностью.
Первое видно в режиме ScreenSpace - Overlay, второе - в режиме ScreenSpace - Camera.
Как совместить?
Есть вариант добавить вторую канву для трехмерных объектов, конечно, но что-то мне подсказывает, что можно сделать проще.
Лэйер можно создать свой. Его присвоить сфере и камере, которая ее будет рендерить. Другая камера ее не будет видеть.
Ну так поделись, если понимаешь.
Стойпогодь.
Мне надо, чтобы камера, которая сейчас рисует 2d иконку, рисовала еще и 3d объект, и чтобы 3d при этом был частью интерфейса, а не болтался внутри сцены.
Да вот я вычитал
>В течение срока действия настоящего Соглашения Вы соглашаетесь и признаете, что если вы являетесь пользователем Unity Personal и превысили вышеприведенные пороговые значения, Вы утратите право на использование Unity Personal и должны будете либо приобрести Unity Pro, либо уничтожить все копии Unity Personal, которые находятся в Вашем распоряжении или подконтрольны Вам, а также прекратить распространение любого контента лицензиата, созданного с помощью программного обеспечения.
Если я правильно понял, если я вдруг хайпанул и заработал больше 100к, тогда иду и башляю им 2850$ за 2 года и хайпую дальше, и так им и отстегиваю пока моя игра в продаже, верно?
да. Что в общем-то не так уж страшно, учитывая, что игра в продаже может быть и не одна, а сумма от этого не увеличится
transform.scale
Энейблить модифиер и перезапекать навмеш как то _ресурсоёмко_, особенно если делать большие карты.
Разбить меш на куски, соединённые линками и енеёблить линки уже лучше, но сработает только для преград в узких проходахДля двери сойдёт, но всё же
Сталкивался.
Это такой лютый пиздец, что даже не рекомендую пытаться. А если под мобилки делаешь -- просто забудь.
https://docs.unity3d.com/Manual/class-NavMeshObstacle.html
А галку Carve не пробовал использовать?
>Pixel Perfect
Кому это говно нужно, кроме кучки полоумных менеджеров? В вебе вас обоссали, вы теперь в геймдев лезете?
Правда это Carve ресурсоёмко, что на двери его пихать не буду. Да и в плане механики выходит криво.
В общем, для того, чтобы игрок в ответку бросил предмет, он должен приложить импульс силы больше чем импульс от нпс.
В общем-то геймплей работает, но согласитесь, что это как-то через жопу.
Как сделать по правильному?
В чём проблема? Обнули импульс в любой из моментов на выбор: когда предмет пойман, когда в руках, перед тем, как бросить.
Анон, ты же понимаешь, что если бы я знал как обнулить импульс, то не задавал бы вопросов.
В общем, включаю Is Kinematic когда предмет оказывается в руках. Вроде бы помогает.
Пилю вот "завернутую" карту, решил хитровыебаться и исполнить ее в виде трех дополнительных камер, которые, по сути, должны друг-друга дополнять.
Можно ли сделать так, чтобы все, что остается за террейном камера не рендерила, а просто отдавала эту часть экрана другой камере?
Все просто, в настройках камер clear flags ставим на dept only. Все пашет.
Не понятно, если я за год заработал овен 100к, тогда оформляю подписку, ну а при истечении этого года в последующие года у меня не выходит больше 100к, тогда могу отписаться или как? Или я им пожизненно становлюсь обязан платить, пока игра продаётся?
Тут весь тред зарабатывает больше 100к в год, тебе обязательно помогут с этим вопросом.
Ну они что-то как-то не исчерпывающе написали в соглашении, я хз, может кто-то задавался уже вопросом, хотя бы из любопытства, в поддержку им писал может быть...
Если курсор на Text, то скроллинг не работает, то есть Text перекрывает рейкаст Canvas
Как это пофиксить можно?
Там какая-то хуйня с event.use или чем-то таким, я бля хуй его знаит
>Как создавать объекты через Instantiate, чтобы был массив этих объектов?
for(;;)
{
anusy = Instantiate(anus_prefab);
}
>как присвоить массиву эти объекты?
ПРи помощи оператора присваивания =
private List<GameObject> objs = new List<GameObject>();
...
GameObject obj = Instantiate(orig_obj, new Vector3(0, 0), Quaternion.identity);
objs.Add(obj);
...
foreach (GameObject obj in objs)
{
// сравнение
}
констракте
Любой из твоих говноскриптиков уместится на А4. Тебе надо понять, что происходит в Start() позже в Awake(), OnEnable() и т.д. и в Update() позже в FixedUpdate() и прочих
Разобраться в своиствах и методах твоих говно-гэймобджектс, чтобы ими манипулировать. Осознать смысл GetComponent<>, который будешь юзать постоянно.
Сисярпа в юнети надо настолько мало, что лэвел особа и не на чем прокачать
Хотя можно прицепить всю эту парашу к камере(она следит за кубом) и в центре каждой платформы сделать объект при столкновении с которым будет создаваться очередная платформа. [/spкак же по дебильному я пишуoiler]. Теперь подумаю как удалять весь этот мусор...
или засру тред тупыми вопросами
Опять же я проебался. Клон этого объекта не идёт в public GameObject, хоть название в инспекторе одинаковое. хз тогда как...
Сорян, захожу в тред раз в неделю.
Будут проблемы. Вот давай подумаем вместе. Ты собираешься в pixelperfect, собираешься растром рисовать картинку в игре или "вектором"?
Очевидно, что растром, т.к. плагин для векторного графона брать не будешь.
Сколько разрешений экранов есть? Сколько пикселей на дюйм у этих мониторов будет?
Сколько наборов графики тебе придётся держать и менеджерить?
Да, это фича такая.
Когда ты делаешь объект чилдом какого-то объекта, то дочерний объект начинает жить в координатной сетке по отношению к родительскому объекту. Да, получается весёлая штука уровня сетка внутри сетки внутри сетки и т.д. То, что ты видишь в инспекторе называется локальная трансформация.
https://docs.unity3d.com/Manual/class-Transform.html
Зачем это сделано: http://gameprogrammingpatterns.com/dirty-flag.html
Спасибо, няш! Пул запилил, сейчас продолжу начатое.
Что это за хуйня? Unity 5.6.
Я престарелый аутист, но думаю вот это тебе подойдет для ознакомления:
https://unity3d.com/ru/learn/tutorials/topics/scripting/update-and-fixedupdate
Спасибо, анон, теперь все стало очевидно, ведь я говнокодил в Update.
Также посылаю лучи ненависти авторам Playmaker, которые поленились сделать галочку под fixed update в основных нодах.
По клику на кнопке работает, а так нет. Пишет, что Animator does not have an AnimatorController, но я его создал, засунул туда анимацию и прикрепил все к модели.
#pragma strict
var Ball: GameObject;
function Start () {}
function Update () {
if(Input.GetMouseButtonDown(0)){
Ball.gameObject.GetComponent(Animator).play("anim");
}
}
}
Попробуй сисярп
public GameObject Геймобжект
Void OnMouseDown{
Геймобжект.GetComponent<Animation> ().Play("Название анимации");
}
Ехала документация через справку:
OnCollisionEnter OnCollisionExit OnCollisionStay OnTriggerEnter OnTriggerExit OnTriggerStay
https://docs.unity3d.com/ScriptReference/Collider.html
На пике один и тот же мат, справа на модели, слева на юнитивском плейне.
самофикс, вдруг кому пригодится
var animator : Animator;
function Start () {
animator = GetComponent(Animator);
}
function Update () {
if(Input.GetMouseButtonDown(0)) {
animator.Play("anim");
}
}
Я другой аутист. Зачем тут вообще апдейт. Чистая физика симулируется сама. Или ты детектишь? Тогда православнее OnCollisionEnter etc
Playmaker не предлогать
Допустим у меня есть пушечное ядро 2D.
Оно должно взрываться при столкновении с поверхностью или с врагом.
Я вешаю коллайдеры на ядро (циркл 2д), врага (бокс 2д) и землю (бокс 2д).
1) Есть ли принципиальная разница, что из них делать триггером? У меня сейчас триггеры висят на враге и на земле, а на ядре просто коллайдр.
2) Где лучше обрабатывать процесс столкновения? Сейчас у меня OnTriggerEnter2D на враге вызывает метод его уничтожения, а OnTriggerEnter2D на ядре вызывает метод который его взрывает. Правильно ли это, или нужно вешать все это дело в скрипт ядра, и там уже вызывать нужный метод other-объекта?
Понятно, что работает и так, но не хочу говнокодить, хочется узнать о хороших практиках.
Я не хотел его перегружать инфой. Но ты прав. Так еще православней
Еще православней через events. У тебя где-то менеджер всех ёбаколлизий отдельно от объектов и ёбаядер. Когда происходит столкновение, каждый участник вызывает ивент TyChyoCykaDoebalsya(). Сообщает, кто до него доебался. Менеджер решает, что с ними делать
Так ты соберёшь все решения в одном месте. И, кстате, говнокодить придется и по нескольких скриптиков навешивать на объекты. Но это в плюс, ибо хоть какая-то структура
А есть ссылки на живые примеры такой реализации? Я пока в юнити полный нуб и даже пока не понял для себя, как делать скрипты которые вообще не привязаны ни к какому объекту, чтобы в них использовать "общие методы". Например, чтобы какое-то глобальное событие на сцене запустить вроде смены дня и ночи по таймеру.
По официальным видосам, как я понял особо хорошим практикам не научишься, там в основном принцип "работает и ладно". Для реального проекта малоприменимо.
Просто создай какой-нибудь Canvas и привяжи скрипт туда. Сами по себе скрипты это обычные ассеты, которые ничего не делают
Из этого самого Canvas вполне можно делать глобальные вещи, просто делаешь там референс на нужный объект и работаешь с ним:
public GameObject huita
Потом открываешь в инспекторе свойства Canvas и переносишь нужный объект на поле "Huita", и из скрипта можно работать с этим объектом напрямую
>А есть ссылки на живые примеры такой реализации?
я учусь у него. Без суеты прорабатывает все детали
https://www.youtube.com/playlist?list=PLwyZdDTyvucwjwqucleVQB7U12H2JPvg5
за 8 долларов его игра на стриме с исходниками
Ты бы показал мыло для начала.
Всем спасибо, всё работает. С тангент спейс наебался. Даже хуй знает, что это.
У меня как правило гейм-объекты заранее не существуют, а создаются из префабов, поэтому их нельзя в паблик свойство заранее определить.
Точнее можно, но это же будет префаб, а не его конкретная реализация, если я правильно понимаю.
Приходится в скрипте префаба события обрабатывать.
Но все равно спасибо.
>>03568
>>03541
Вот есть у меня различные снаряды, например: пушечные ядра, бумеранги и ракеты.
Я сейчас для каждого из них делаю префаб. При этом они все ведут себя похоже, т.е. скрипты различаются минимально.
Можно ли как-то создать префаб-родитель который будет хранить основные свойства и методы, а у потомков уже дописывать что мне нужно?
Или если есть разные типы врагов допустим.
Как вообще такие механизмы реализуются в Юнити?
С общем скрипте, где спавнишь, задаешь после Instantiate свойства (эддфорс-хуёрс и т.д.)
В чем конкретно должны быть различия? Наверное, бумеранг закрутить. Так это тоже физика. Включить другой свист в аудио.
Ну допустим у меня система части к ракете прикреплена, а в бумеранге она вообще не нужна.
Ее получается отключать по-умолчанию, и включать после Instantiate только если я создаю ракету?
Например, няша , во время игры кликает в любую точку пространства, после чего спавниться новый object на месте клика(и,если мышка остаётся нажатой после клика), this object можно сразу перемещать , двигая курсор(после завершения нажатия, object остаётся на том месте, когда он был в момент завершения клика) ,спасибо.
Я диванный, но подозреваю, что в событии онКлик, при создании инстанса объекта ты записываешь его и текущее положения мыши в приватные переменные. А дальше на событии онДраг (или онИнпут, я точно не помню) ты отслеживаешь MouseToWorldPoint и меняешь соответственно координаты объекта из переменной согласно движениям мыши.
Ну и на событие которое отпускает кнопку мыши вешаем обработчик, который возвращает текущий объект в исходные координаты, после чего очищаешь переменные.
Я нуб, может тебе кто опытнее что-то получше подскажет.
Что с этим ебанным ассетстором? Почему он спрашивает логин-пароль, когда я там и так есть, но не принимает мои логин-пароль? При этом, когда окно логин-пароля закрываю он что-то пытается скачать, а потом просить перекачать.
Не знаю, на сколько это важно, но игра Джвадэ. Есть два объекта: один родительский, другой дочерний. У обоих скрипты: в родительском ставится скорость вдоль оси X, в дочернем вдоль оси Y. Хочу добиться следующего поведения конструкции: родитель гоняет по оси X а из него вырывается дочерний объект и перемещается вдоль оси Y относительно родительского.
Что получил: оба объекта как и нужно ездят вдоль оси X, но вот дочерний объект не ездит вдоль оси Y до тех пор пока не останавливается родительский объект (а он стопарится при смерти игрока).
Как делал:
Пробовал ставить в дочернем объекте
velx = rb2d.velocity.x;
rb2d.velocity = new Vector2(velx, vely);
или просто
rb2d.velocity = new Vector2(0, vely);
Пробовал пёхать эту дрянь как в функции Update(), Start() по одиночке, так и в обе сразу. Результат одинаковый.
Отмечу также, что отдельные куски кода дочернего объекта работают, как например transform.position
Помогите, люди добрые, игруня на финальном этапе, а эта дрянь спать спокойно не даёт.
А vely ты что присваиваешь?
Он же у тебя должен по оси Y ездить?
В твоем коде, насколько я могу судить ты просто присваиваешь ту же самую скорость по x объекту еще раз. Само собой она остается той же самой.
Скорее всего дело в том, что скорость у тебя задается относительно мира, а не относительно объекта. То есть скорость родительского и дочернего объектов равны и они движутся оба одновременно с одинаковой скоростью. Поэтому когда ты останавливаешь родительский объект, то дочерний и начинает у тебя двигаться с той же скоростью, что и двигался родительский.
vely - фиксированная скорость типа public. Определяю в коде, оптимизирую в редакторе сцены.
В velx попадает скорость объекта, которая у него уже есть, так как скорость сетится как Vector2(velx,vely), очевидно, что я не хочу менять скорость дочернего объекта вдоль оси X, а вот вдоль оси Y она у меня не сетится вообще, и объект начинает движение вдоль OY после остановки по ОХ - в этом и проблема.
И да, если скорость задаётся относительно мира, то всё должно быть ОК, т.к. скорость движения всей конструкции относительно мира по OY изначально равна 0, а я дочернему объекту даю в коде vely (что не срабатывает до остановки по OX)
>>03850
Наверно я пишу не очень понятно, по этому постараюсь описать ситуацию:
У меня есть труба, которая смотрит вверх - это родительский объект. К нему прикреплена (находится внутри него в иерархии объектов на сцене) струя воды - дочерний объект, которая сдвинута вниз, под землю.
Труба движется на игрока вдоль оси X, а вода должна вылетать из трубы вдоль оси Y, при этом конструкция стопарится по OX, если игрок умирает. Фрагмент кода, что я скидывал - для струи. velx символизирует скорость, которую изначально получает струя от трубы как дочерний объект, а vely - должна устанавливаться, но устанавливается только после смерти игрока, и в этом вся проблема.
Я проверил у себя на демо проекте, действительно не получается двигать таким образом дочерний объект относительного родительского.
Нужно почитать про поведение дочерних объектов. Может не с помощью велосити его двигать а трансформ.позишн или как-то так?
Я попробую потом еще и если что-то получится, то отпишусь.
1152x572
>>03852
Смотри, такое решение тебе подойдет? Возможно не идеальное, но по-другому не знаю как сделать:
public class ChildController : MonoBehaviour {
public float velY;
private Vector2 v;
private GameObject parent_obj;
// Use this for initialization
void Start () {
}
private void Awake()
{
parent_obj = transform.parent.gameObject;
}
// Update is called once per frame
void Update () {
v = transform.parent.transform.position;
v.y = transform.position.y + velY;
transform.position = v;
}
}
1152x572
>>03852
Смотри, такое решение тебе подойдет? Возможно не идеальное, но по-другому не знаю как сделать:
public class ChildController : MonoBehaviour {
public float velY;
private Vector2 v;
private GameObject parent_obj;
// Use this for initialization
void Start () {
}
private void Awake()
{
parent_obj = transform.parent.gameObject;
}
// Update is called once per frame
void Update () {
v = transform.parent.transform.position;
v.y = transform.position.y + velY;
transform.position = v;
}
}
>>03865
Анон, спасибо тебе за ответ. Я сам думал на счёт подобного решения (через transform.localPosition), только с использованием Time.deltaTime*vely. Сейчас собственно вижу, что решение даёт рывки, что никак не вписывается в общую картину.
Буду пробовать модифицировать либо искать другие решения, а может, ещё кто чего посоветует. В любом случае, спасибо, что не остался равнодушным.
Не за что, думаю, что через Mathf.Lerp у тебя получится добиться плавности. Добра.
Короче, сделал анимацию в блиндыре с помощью rigify, wgt-кости удалил, всё чистенько экспортировал fbx, ну и потом соответственно импортировал его в unity.
Вот в чём проблема:
начал настраивать т-позу этой анимации и у меня юнити начал умирать, кадров 2-3 в секунду
хз что такое, впервые такое
там выяснилось, что где то я нихера не почистил wgt, в fbx объекте находилось 104 меша и 108 объектов которых юнити генерирует при импорте модели/анимации
НО!
во второй анимации где объектов 1 меш( по сутичистый от wgt костей) та же самая история
еле могу выйти из режима редактирования т-позы, кнопка прожимается несколько минут
т.е. дело не в этом.
Гуглил - мало, что дало, считай ничего.
Что ето такое, аноны, ваши предположения.
Короче я добился плавности эмитируя сеттинг скорости путём сдвига на некоторое deltaY в FixedUpdate, палю годноту:
x = RainbowBody.transform.localPosition.x;
y= RainbowBody.transform.localPosition.y;
RainbowBody.transform.localPosition = new Vector2(x, y+((ymax-ymin)/RSpawnTime*Time.deltaTime));
ymax-ymin/RSpawnTime - определение скорости через минимальную и максимальную альтитуды пути, где RSpawnTime время, за которое объект преодолевает это расстояние. Ну и вишенка Time.deltaTime - дельта счётчика времени.
Полагаю rigidbody2D.velocity примерно так и делается.
Надеюсь, вам это пригодится, как пригодилось мне.
Чоткий поцан выкладывает файл на обменник, что бы другие поцаны пасмарели. Хули тут на пальцах объяснять-то.
Еще лучше- даешь исходник блиндыра
Как прикручивать код C++ к Юнити? Обычными DllImport? Или есть получше варианты?
Нету, только дллимпорт
Такой что бы каждую минуту от 1000 отнимал 10.
Обычный таймер я делал, по типу
А = А - 1*Time.deltaTime
А вот что бы ровно каждую минуту отсчитывало, как сделать?
Или прикрутить точно такой же таймер, но просто при показе счетчика в игровом поле обрезать до целых чисел.
Думаю можно как-то так:
private int myCount;
private function Awake() {
mycount = 1000;
Invoke("MyDecreaseCount", 60f);
}
private function MyDecreaseCount() {
myCount-= 10;
Invoke("MyDecreaseCount", 60f);
}
Так ты же с таймером уже работал.
Запусти таймер в Awake, а в Update проверяй сколько времени прошло, думаю так.
private int hui = 1000;
...
StartCoroutine(Counter());
...
IEnumerator Counter()
{
while (hui > 0)
{
hui -= 10;
yield return new WaitForSeconds(60);
}
}
Спрайт нарисуй.
я знаю, что ебланский вопрос, но я гуглю, там всякая хуйня и сложно. сам я головой думать не могу, так как по сути всю игру я сделал по подобию.
>как сделать конец игры как можно проще?
void OnTriggerEnter(Collider kallayder)
{
SceneManager.LoadScene("Menu", LoadSceneMode.Additive);
}
AVE UNITY! DEUS VULT
> коллекцию недоделок
New project
New project2
New projectjbjdkjbker
New pr
New
Test
@
Большая часть из них - пустые.
Ну ты и бабка
спасибо, а как можно еще конец игры самым простым способом сделать. у меня есть бар, в котором есть типа сердечки. как сделать, чтобы выходило начальное меню, когда эти сердца кончаются?
и да, можешь вообще объяснить, что мне делатьс этим. то есть скрипт я запихну, а что за коллайдер, и в каком это случае выйдет меню, когда дойду до определенной точки?
бляя, я все понял, я тормоз
Ну, в общем, поделитесь мудростью экспорта/импорта фбх.
Была похожая задача, нужно было через кастомный ипортер открыть несколько сотен файлов и экспортнуть их, написал скрипт, который все делал, там ничего сложного, но конкретно подсказать, что там и как не могу, поскольку уже давно было, а я на блендер перешел.
Но кстати, в чем проблема кинуть файл прямо в проект? Юнити на лету максовский формат конвертирует, потом добавляешь "модель" в сцену, отдельные меши будут потомками, их в сцене достаточно вынести за пределы родительского объекта и сделать префабом и все - дальше можно его использовать. На счет пивота опять же классический трюк - делаешь в юнити пустышку, а объект кидаешь в нее, корректируешь положение, все, трансформ пустышки и будет твоим пивотом/ориджином, делаешь префаб, используешь.
Не усложняй.
Да нет, я хочу ЛЮДЯМ сделать. Себе бы я абы как сделал. А я хочу, чтоб было всё чинно, благородно.
>Анон, ты же понимаешь, что если бы я знал как обнулить импульс, то не задавал бы вопросов.
Есть несколько вариантов.
1. Обнулисть велосити.
2. Дать импульс, направленный в противоположную сторону от текущего.
Смотря что ты хочешь делать.
Нужно понимать, как работает выделение памяти и GC в .net и unity. Желательно уметь в LINQ. А если хочешь делать игры, то придется еще постигнуть линейную алгебру, паттерны проектирования, SOLID. Знать, чем отличается значимые переменные от ссылочных, и какие подводные камни могут быть с этим связаны. Можно еще покурить дженерики, но с ними нужно осторожно, GC их не любит, и если сделать все криво, то может начать кашлять.
Что касается самого шарпа, то если у тебя есть нормальное образование за плечами, с теорией алгоритмов, дискреткой, матлогикой, и пайтон не единственный язык, ан которым ты что-то когда-то писал, то проблем быть не должно.
Там еще есть нюансы работы с ресурсами, но это скорее про знание движка, чем про программирование.
Почему?
мимо нуб с linq в .net 2.0
А если я на .net 6.0 перекачусь?
Игра у меня основана на подобии БД (в смысле ОЧЕ много связанных объектов)
что-то тред загнивает, только этот хрен с дорожками что-то показал.
>>04485 (Del)
на самом деле конечно же это не так и в геймдеве лучше обходится всеми доступными инструментами, но не на всех промежутках жизни проекта.
>>04504
большая часть LINQ генерирует какое-то неебическое количество мусора в процессе. он хорош чтобы ускорить создание прототипов, но в итоге в готовом проекте его всякую клевую хуйню лучше убирать.
>что-то тред загнивает, только этот хрен с дорожками что-то показал.
Ну раз хочешь я на днях свою стратежку в разработке покажу, как новую версию релизну. Она без графония впрочем, совсем.
Тут еще как раз садик и вот за ним типо школа стоит со спортзалом большим
выглядит конечно уебищно, но ты продолжай, получается хорошо. Главное персонажей кубами не делай и все ок будет.
Не надо, лучше подскажите чем можно быстро настругать кучу квартир для зданий?
Охуеть, это двери?
А ты плотник?
Я новичок в Unity. Однако скачал сам движок до выхода Visual Studio 2017 - с версии 2015. Когда я узнал о том, что в версии 2017 удобнее работать, я удалил 2015 версию и скачал 2017, однако Unity, поскольку является независимой, осталась.
Обучаясь оcновам и не только Unity, я дошёл до момента, когда пора бы уже прикоснуться к скриптам. Так вот Unity предлагает мне лишь среду разработки MonoDevelop, а я хочу работать в Visual Studio 2017 (привык просто).
Переустанавливать винду я не пробовал, просто искренне надеюсь что нужного мне результата можно добиться проще.
Буду очень признателен тому кто мне поможет.
Сразу говорю графона нет. Да и геймплея пока мало - можно набижать на соседей или просто отращивать экономику. В Викторию играл, тамошняя экономика меня не устраивает.
Что есть:
Рандомногенерериуемая карта с провинциями
население
базовое производство\торговля\потребление
изобретения
часть реформ (с голосованием)
миграция\ассимиляция населения
можно набигать на соседей
Есть webGL демка: http://nashet.github.io/EconomicSimulation/WEBGL/index.html
Или можно скачать скачать тоже самое для PС, Mac, Linux, будет быстрее работать - https://github.com/Nashet/EconomicSimulation
Отдельный тред стоит пилить?
Да, скорее всего так.
Но я попробовал так сделать - и ничего хорошего у меня не получилось. Вероятно где то в папке Visual Studio лежит нужный мне файл или что то, однако я не знаю где это находится. Теперь это является моей проблемой, если данный способ является правильным
Пробовал Edit>Preferenses>ExternalTools ?
Если студию руками ставил то может понадобиться юнити-аддон. Или проще юнити обновить\переустановить она сама все сделает.
Спасибо большое! твой совет мне помог - всё работает как надо
С Юнити идёт интеграция с студией (см. галочки при установке), тебе надо её только поставить.
>>04760
я хотел, хорошо сделал. приятно видеть что в разделе что-то происходит.
как генерацию карты то устроил?
меню с таксами имеет повторяющиеся пункты?
как прокручивать карту?
и конечно здорово сделал перетягивающиеся элементы интерфейса, но чего они за пределы своей рамочки то могут уезжать?
>чтото двощь не хочет мои скриншоты. сделал растеризацию террейна через компьют шейдоры. доволен.
>
А я все мечтаю сделать симулятор водной эрозии на шейдерах, с тектоникой, каким то терраформингом и падающими метеоритами
>>04833
>как генерацию карты то устроил?
Генерирую карту в пнг (без всяких Вороновских и пр., просто рандом и волновой алгоритм). Пнг потом в меш перевожу. Пока с артефактами, потом пофикшу. Зато можно использовать карты из Виктории и пр. параходных игр.
>>04833
>меню с таксами имеет повторяющиеся пункты?
Да, это известный мне баг
>как прокручивать карту?
WASD или стрелки
>и конечно здорово сделал перетягивающиеся элементы интерфейса, но чего они за пределы своей рамочки то могут уезжать?
Они не должны. Скрин поехавшего интерфеса не прошу, но скажи хотя бы название окошка поехавшего и что за разрешение у тебя?
А, или ты может быть полноэкранный режим не включил? Тогда да может ехать малеха.
>А я все мечтаю сделать симулятор водной эрозии на шейдерах, с тектоникой, каким то терраформингом и падающими метеоритами
сделай, это же всё весело. как минимум узнаешь что-то новое, как максимум сделаешь себе клевый велосипед чтобы кататься на нем. хотя у шейдоров такая документация как будто это какое-то тайное знание. по каким-то крупицам информация разбросана.
> Пнг потом в меш перевожу.
как меш то строишь, кстати?
>Они не должны.
я не заметил разницы между полноэкранным и не полноэкранным. почти все кнопки которые расположены в гриде зачем-то можно перетягивать налево-направо за край окошка в котором они. ты бы просто прокрутку чтоли сделал.
>как меш то строишь, кстати?
Читаю растровую картинку и фигачу полосочки из полигонов пикрелейтед. Потом округляю меш глючным способом
>>04897
>я не заметил разницы между полноэкранным и не полноэкранным. почти все кнопки которые расположены в гриде зачем-то можно перетягивать налево-направо за край окошка в котором они. ты бы просто прокрутку чтоли сделал.
А, я понял. Это стандартное поведение view port, надо починить, да. Да и вообще нормальные таблицы найти или самому запилить.
public struct Date
{
int blya;
public Date(int date)
{
this.blya = date;
}
public Date(Date date)
{
this.blya = date.blya;
}
public int getDate()
{
return blya;
}
internal void StepSimulation()
{
blya++;
}
......
}
использование:
Date date;
date.StepSimulation(); //Хуякс, значение blya не растет а скидывается в ноль
Да, я знаю что изменяемые структуры это плохо, но в моем случае со структурами удобнее (автоматически делает копирование полей при присвоении)
public struct Date
{
int blya;
public Date(int date)
{
this.blya = date;
}
public Date(Date date)
{
this.blya = date.blya;
}
public int getDate()
{
return blya;
}
internal void StepSimulation()
{
blya++;
}
......
}
использование:
Date date;
date.StepSimulation(); //Хуякс, значение blya не растет а скидывается в ноль
Да, я знаю что изменяемые структуры это плохо, но в моем случае со структурами удобнее (автоматически делает копирование полей при присвоении)
>Читаю растровую картинку и фигачу полосочки из полигонов пикрелейтед. Потом округляю меш глючным способом
как-то странно делаешь. я в общем-то делаю примерно то-же самое, но перед разглаживанием делю все куски на отрезки где уголки имеют как минимум трех соседей, которые следует разгладить и потом уже сглаженную часть применяю к обоим её соседям.
чет двач совсем перестал отправлять картинки. сплошная ошибка постинга. http://i.imgur.com/XF6aBU1.jpg
>Да и вообще нормальные таблицы найти или самому запилить.
ты там уже улетел куда-то в невиданные мной края с таким гуи, даже не посоветовать ничего.
чего, кстати, континенты то такие однообразные получаются? почти все прямоугольные. ты бы хоть при рандомной генерации начиная с краю удалял 6-10 регионов дополнительно чтобы получалось больше полуостровов. раз уж озёр не сделал.
>>04903
в общем и целом они неизменяемые. там конечно есть хитрые читы местами но по большей части лучше такого не делать. это же валуе тупе как всякие int float bool, при присвоении структа ты его копируешь, а при изменении значения в нем создаешь новый с измененным значением.
>структура
>date
Держи, велосипедист: https://msdn.microsoft.com/ru-ru/library/system.datetime(v=vs.110).aspx
>чего, кстати, континенты то такие однообразные получаются? почти все прямоугольные. ты бы хоть при рандомной генерации начиная с краю удалял 6-10 регионов дополнительно чтобы получалось больше полуостровов. раз уж озёр не сделал.
В будущем запилю несколько континентов, морские провы и пр. Все сразу не сделаешь, а так работает и ладно.
>>04909
>как-то странно делаешь. я в общем-то делаю примерно то-же самое, но перед разглаживанием делю все куски на отрезки где уголки имеют как минимум трех соседей, которые следует разгладить и потом уже сглаженную часть применяю к обоим её соседям.
Хмм. Что у тебя белые и черные лини на пике значат? А синие? Полигоны и? Исходники своей работы не открываешь?
>>04909
>в общем и целом они неизменяемые. там конечно есть хитрые читы местами но по большей части лучше такого не делать. это же валуе тупе как всякие int float bool, при присвоении структа ты его копируешь, а при изменении значения в нем создаешь новый с измененным значением.
Спасибо, а то для новичков это нифига не очевидно. Я же гуглил перед тем как спросить, пишут что все норм, не желательно но можно. Вот и верь гуглу теперь )
>>04911
>Держи, велосипедист: https://msdn
Спасибо конечно но у меня же тут свой средневековый в том числе мирок генерируется.. Хотя может и стоит стандарт использовать. Пишут что потянет MinValue is equivalent to 00:00:00.0000000 UTC, January 1, 0001, in the Gregorian calendar.
>>04913
>Почему разработчики игр про симуляцию даже не пытаются в дизайн?
Например, потому что симуляторы и так сложно пилить, а пилят их как правило энтузиасты (порой вообще не прогеры как автор Space Engine например) в то время как ААА конторы успешно продают пресс Х то вин для одноклеточных
>В будущем запилю несколько континентов, морские провы и пр. Все сразу не сделаешь, а так работает и ладно.
кстати, ты сделай хоть какую-то форму отображения актуальных соседей
>Хмм. Что у тебя белые и черные лини на пике значат? А синие? Полигоны и? Исходники своей работы не открываешь?
белые - отображают соседство между областями. соединяют их геометрические центры.
черные - актуальные границы.
пунктирные - границы перед упрощением.
полигоны там вообще никак не отображаются, кроме как заливкой всей области цветом сразу. впрочем у меня зоны конвексные, для создания всех треуголников достаточно соединить центр и сторону.
а почитать можешь свободно. https://www.assetstore.unity3d.com/en/#!/content/85181 оно давно на ассетсторе лежит бесплатное.
я правда в последней версии слегка поломал навигацию где у уровней несколько этажей.
в этой горе мусора скорей всего тебя заинтересует Generation/Graph/GraphIterator.cs где хитро сделаны шагающие квадраты и в той-же папке GraphTriangulator.cs где можешь почитать про разбиение контуров на конвексные области. оба правда где-то на границе читабельного написаны. если хочешь потом в картинках расскажу.
>Спасибо, а то для новичков это нифига не очевидно.
лучше почитай про Boxing/Unboxing в шарпе, про гарбаж и как к этому относятся структы.
Нужно нарисовать многоугольник. Для этого я сначала спрашиваю, сколько вершин человеку надо, затем истанциирую по два InputField'а для абсцисы и ординаты, хуе-мое. Здесь проблем никаких, проблема возникает в том, что, если указать меньшее число вершин, чем уже задано, ненужные InputField'ы остаются, а Юнити выдает ошибку о том, что такого индекса нет.
Так хули, блядь? Казалось бы, все верно, не прописывать же inpFields = null; , Destroy() выглядит логичнее.
ты чего там понаписал то. давай лучше целиком покажи. инпут филды то зачем дестроишь, просто сделать публичный массив не?
https://www.youtube.com/watch?v=g4j8WvC1Ct4 вон смотри например, тут рисуют цветные фигуры
>кстати, ты сделай хоть какую-то форму отображения актуальных соседей
Предполагается что это будет интуитивно понятно, когда границы провинций\стран будут отрисовываться текстурой. (и сглаживание перестанет глючить)
>>04915
>а почитать можешь свободно. https://www.assetstore.unity3d.com/en/#!/content/85181 оно давно на ассетсторе лежит бесплатное.
Спасибо. Забавно что наши алгоритмы делают противоположную работу - твой упрощает растр до меша для навигации, мой пытается усложнить растр что бы он не выглядел так угловато.
Кстати, твой алгоритм работает на любых, самых наркоманских сочетаниях точек в растре? Вложения цветов и все-все-все? Пикрилейтед потянет например?
>Предполагается что это будет интуитивно понятно, когда границы провинций\стран будут отрисовываться текстурой. (и сглаживание перестанет глючить)
чтобы это было интуитивно понятно надо чтобы это хоть в какой-то форме отображалось бы. сделай хоть фильтр как в стелларис "отображать соседних ребят".
>Кстати, твой алгоритм работает на любых, самых наркоманских сочетаниях точек в растре? Вложения цветов и все-все-все? Пикрилейтед потянет например?
я уж постарался чтобы он не запнулся на всякой хуйне. он даже такое может. http://polariton.ad-l.ink/8nnBxQBYY/image.png
правда триангуляция может затянутся если такую хуйню сувать.
надо бы опимизончик в этой части попробовать сделать.
реальное ограничение по количеству цветов это количество положительных интов, именно так оно хранится в процессе.
Проблемы с отрисовкой нет, LineRenderer жи. Проблема в лишних InputField'ах, которые остаются от уже типа несуществующих вершин. На пиках видна моя проблема.
У меня есть int для количества вершин и лист InputField, который инстанциирует в два раза больше этих самых полей. Задается количество вершин, прописываются координаты, парсятся, если могут, строится многоугольник.
https://pastebin.com/r8mB6F5j — собственно, весь код. Извиняюсь, что в несколько постов пишу.
Лол, сегодня как раз хотел наконец начать уже пилить свою глобальную дрочильню, зашел посмотреть как процедурные карты генерить в Unity, а тут оказывается уже во всю кто-то делает.
Какую БД используешь?
Как организована система спрос-предложение?
Насколько она ООП-ориентирована?
>с экономикой основанной на симуляции агентов
Чем отличается от потребностей страт в вике? Агенты, это я так понимаю, участники рынка отдельные (гос-во, фирмы, потребители)
Некоторые замечания:
Система с делением страт не очень, получается что все рабочие, все капиталисты (какие капиталисты-то кстати, если игра судя по всему в сеттинге средневековья?) прямо в сговорах состоят. Почему бы не использовать принцип вики?
Слабо представляю себе масштаб карты, но мне кажется вот эти здоровые провы - уродливый пережиток параходов. Почему не использовать хексы? Я сам хз, может это сложно, конечно, но у меня масса претензий ко всем существующим на данный момент глоб.стратегиям именно из-за вот этой системы пров и сопряженными с ними условностями.
Вообще, есть масса идей, определенные скилы в SQL и программировании на C# и главное желание, так что если хочешь, можем связаться.
Я бы не стал вручную инстантиировать всякую хрунь.. У меня например таблицы строятся на создании охулиона кнопок, но я их из префаба беру (и из пула) так что они не уничтожаются по сути а делается SetActive(false) (прячет);
>>04922
>чтобы это было интуитивно понятно надо чтобы это хоть в какой-то форме отображалось бы. сделай хоть фильтр как в стелларис "отображать соседних ребят".
Что то я засомневался, понимаю ли я о чем речь. Речь ведь о соседних (вражеских) провинциях?
>>04922
>реальное ограничение по количеству цветов это количество положительных интов
Круть. Если получится добавить это в свой проект (когда буду реальные армии делать заместо абстрактных) это мне спасет кучу времени и нервов. Тем более что я ничего в графах не понимаю.
>>04926
> зашел посмотреть как процедурные карты генерить в Unity, а тут оказывается
Хочешь читай, хочешь форкай, хочешь присоединяйся.
>Какую БД используешь?
Увы, практически никакую. В меру глючные списки и словари и LINQ (которая, как многие говорят тормозит по крайней мере в .net2.0)
>>04926
>Как организована система спрос-предложение?
Я пробовал разные подходы, сейчас - это соотношение реально купленного за прошлый тик к отосланному на рынок за прошлый тик.
>>04926
>Насколько она ООП-ориентирована?
Много публичных полей и прочей грязи в коде, но я борюсь с этим ) Сегодня 50 косяков на codacy исправил
>>04926
> Агенты, это я так понимаю, участники рынка отдельные (гос-во, фирмы, потребители)
Да
>>04926
>Чем отличается от потребностей страт в вике?
Основное отличие - Попы покупают товары внутри группы (жизненно важные, повседневные товары, роскошь) не в фиксированном порядке а в порядке сначала дешевые. Ну и я хотел бы что бы агенты вели себя более адекватно, если полочится.
Допишу щас
Я бы не стал вручную инстантиировать всякую хрунь.. У меня например таблицы строятся на создании охулиона кнопок, но я их из префаба беру (и из пула) так что они не уничтожаются по сути а делается SetActive(false) (прячет);
>>04922
>чтобы это было интуитивно понятно надо чтобы это хоть в какой-то форме отображалось бы. сделай хоть фильтр как в стелларис "отображать соседних ребят".
Что то я засомневался, понимаю ли я о чем речь. Речь ведь о соседних (вражеских) провинциях?
>>04922
>реальное ограничение по количеству цветов это количество положительных интов
Круть. Если получится добавить это в свой проект (когда буду реальные армии делать заместо абстрактных) это мне спасет кучу времени и нервов. Тем более что я ничего в графах не понимаю.
>>04926
> зашел посмотреть как процедурные карты генерить в Unity, а тут оказывается
Хочешь читай, хочешь форкай, хочешь присоединяйся.
>Какую БД используешь?
Увы, практически никакую. В меру глючные списки и словари и LINQ (которая, как многие говорят тормозит по крайней мере в .net2.0)
>>04926
>Как организована система спрос-предложение?
Я пробовал разные подходы, сейчас - это соотношение реально купленного за прошлый тик к отосланному на рынок за прошлый тик.
>>04926
>Насколько она ООП-ориентирована?
Много публичных полей и прочей грязи в коде, но я борюсь с этим ) Сегодня 50 косяков на codacy исправил
>>04926
> Агенты, это я так понимаю, участники рынка отдельные (гос-во, фирмы, потребители)
Да
>>04926
>Чем отличается от потребностей страт в вике?
Основное отличие - Попы покупают товары внутри группы (жизненно важные, повседневные товары, роскошь) не в фиксированном порядке а в порядке сначала дешевые. Ну и я хотел бы что бы агенты вели себя более адекватно, если полочится.
Допишу щас
>какие капиталисты-то кстати, если игра судя по всему в сеттинге средневековья?
Не совсем. Изначально планировался сеттинг от ололо диких племен до капитализма, коммунизма и ядерной войны. Есть даже тип экономики - нат. хозяйство. Сейчас я только на капитализме сосредоточился, остальное закомментил до лучших времен.
>>04926
>Система с делением страт не очень, получается что все рабочие, все капиталисты прямо в сговорах состоят.
Какие сговоры?
> Почему бы не использовать принцип вики?
ЕМНИП в вике такой же принцип.
>>04926
>Слабо представляю себе масштаб карты
Пока тормоза будут в разумных пределах
>>04926
> Почему не использовать хексы?
Хексы выглядят угловато и однообразно. А тут - провы могут быть любой формы, как рандому захочется. Да и можно карты из модов\игр от пароходов использовать.
>>04926
>Вообще, есть масса идей, определенные скилы в SQL и программировании на C# и главное желание, так что если хочешь, можем связаться.
Можно на гитхабе https://github.com/Nashet пообщаться
Или можешь прямо в трекер идеи слать https://waffle.io/Nashet/EconomicSimulation
>какие капиталисты-то кстати, если игра судя по всему в сеттинге средневековья?
Не совсем. Изначально планировался сеттинг от ололо диких племен до капитализма, коммунизма и ядерной войны. Есть даже тип экономики - нат. хозяйство. Сейчас я только на капитализме сосредоточился, остальное закомментил до лучших времен.
>>04926
>Система с делением страт не очень, получается что все рабочие, все капиталисты прямо в сговорах состоят.
Какие сговоры?
> Почему бы не использовать принцип вики?
ЕМНИП в вике такой же принцип.
>>04926
>Слабо представляю себе масштаб карты
Пока тормоза будут в разумных пределах
>>04926
> Почему не использовать хексы?
Хексы выглядят угловато и однообразно. А тут - провы могут быть любой формы, как рандому захочется. Да и можно карты из модов\игр от пароходов использовать.
>>04926
>Вообще, есть масса идей, определенные скилы в SQL и программировании на C# и главное желание, так что если хочешь, можем связаться.
Можно на гитхабе https://github.com/Nashet пообщаться
Или можешь прямо в трекер идеи слать https://waffle.io/Nashet/EconomicSimulation
Ок, попробую через SetActive. Надеюсь, хотя бы этот костыль будет работать.
Ну, хотя бы я узнал, где в Юнити скрипт на скроллящиеся панельки.
>Увы, практически никакую. В меру глючные списки и словари и LINQ (которая, как многие говорят тормозит по крайней мере в .net2.0)
По-моему, использование БД в ГС - неизбежность. Можно конечно использовать JSON-ориентированные БД, не заморачиваясь с SQL, что теоретически может облегчить и модификацию (JSON можно и с SQL интегрировать тащемта), но БД нужна обязательно. К тому же лучше сразу набросать модель БД, максимально унифицировать ее, чтобы оставить больше возможностей для расширения и согласовать с ОО-моделью, используемой в механике игры. Кстати, я так понимаю функция сохранений тут не реализована? Сохранять скорее всего тоже придется в БД. Если ты конечно не собираешься пилить только одноразовый online (учитывая, что такие игры ориентированы в основном на аутистов, такой формат вряж ли подойдет)
>Я пробовал разные подходы, сейчас - это соотношение реально купленного за прошлый тик к отосланному на рынок за прошлый тик.
Хм, т.е. спрос-предложение неразрывно связаны причем в рамках одного тика? И стокпайла как такового нет? Как и понятия доставки и торговых путей? (привет ограбленным корованам и разбитым дорогам) Алсо, то что Trade не нажимается это баг или просто пока не прикрутил торговлю?
>Основное отличие - Попы покупают товары внутри группы (жизненно важные, повседневные товары, роскошь) не в фиксированном порядке а в порядке сначала дешевые. Ну и я хотел бы что бы агенты вели себя более адекватно, если полочится.
Не совсем понял этот пункт. А как в вике сделано? Там же тоже попы покупают товары, на которые им хватает денег - в первую очередь базовые потребности, потом комфорт, потом роскошь. Я не спорю, что в вике экономика не очень, но вроде так она и работает, теоретически.
Еще несколько вопросов:
1) По производствам. Вижу, что у тебя есть апгрейд зданий, но не очень понимаю, он только кол-во увеличивает что ли? Просто, если брать тот же GPS там была такая классная фишка (которая правда не работала, как и все в этой игре) как качество товара. Я думаю соотношение Цена/Качество/Доступность - эта троица, которую вполне можно реализовать в рамках игровой условности. Есть идея как, но она не вполне увязывается с походовым типом игры, хотя можно придумать что-нибудь;
2) Собственно походовость. Чему равен ход? Просто год это очень много для того, чтобы запилить полноценную экономику, особенно на позднем этапе (начиная с времени, актуальному середине 19го века это уже становится слишком оторванно от реальности). Все ГС со сложной экономической системой идут, в условном конечно, но реальном времени. Я понимаю, что ходы легче (хотя система ивентов тоже норм), но может тогда вообще убрать дату, сделать ее условной и считать просто по ходам, оставляя все на воображение игрока (учитывая, что это не исторический симулятор).
Алсо, это очень круто, что ты делаешь мир рандомным, земляшка реально заебала в ГС, можно широко юзать какой-нибудь опенсорсный ворд-генератор, чтобы кастомизировать мир (названия компаний например генерить).
>Увы, практически никакую. В меру глючные списки и словари и LINQ (которая, как многие говорят тормозит по крайней мере в .net2.0)
По-моему, использование БД в ГС - неизбежность. Можно конечно использовать JSON-ориентированные БД, не заморачиваясь с SQL, что теоретически может облегчить и модификацию (JSON можно и с SQL интегрировать тащемта), но БД нужна обязательно. К тому же лучше сразу набросать модель БД, максимально унифицировать ее, чтобы оставить больше возможностей для расширения и согласовать с ОО-моделью, используемой в механике игры. Кстати, я так понимаю функция сохранений тут не реализована? Сохранять скорее всего тоже придется в БД. Если ты конечно не собираешься пилить только одноразовый online (учитывая, что такие игры ориентированы в основном на аутистов, такой формат вряж ли подойдет)
>Я пробовал разные подходы, сейчас - это соотношение реально купленного за прошлый тик к отосланному на рынок за прошлый тик.
Хм, т.е. спрос-предложение неразрывно связаны причем в рамках одного тика? И стокпайла как такового нет? Как и понятия доставки и торговых путей? (привет ограбленным корованам и разбитым дорогам) Алсо, то что Trade не нажимается это баг или просто пока не прикрутил торговлю?
>Основное отличие - Попы покупают товары внутри группы (жизненно важные, повседневные товары, роскошь) не в фиксированном порядке а в порядке сначала дешевые. Ну и я хотел бы что бы агенты вели себя более адекватно, если полочится.
Не совсем понял этот пункт. А как в вике сделано? Там же тоже попы покупают товары, на которые им хватает денег - в первую очередь базовые потребности, потом комфорт, потом роскошь. Я не спорю, что в вике экономика не очень, но вроде так она и работает, теоретически.
Еще несколько вопросов:
1) По производствам. Вижу, что у тебя есть апгрейд зданий, но не очень понимаю, он только кол-во увеличивает что ли? Просто, если брать тот же GPS там была такая классная фишка (которая правда не работала, как и все в этой игре) как качество товара. Я думаю соотношение Цена/Качество/Доступность - эта троица, которую вполне можно реализовать в рамках игровой условности. Есть идея как, но она не вполне увязывается с походовым типом игры, хотя можно придумать что-нибудь;
2) Собственно походовость. Чему равен ход? Просто год это очень много для того, чтобы запилить полноценную экономику, особенно на позднем этапе (начиная с времени, актуальному середине 19го века это уже становится слишком оторванно от реальности). Все ГС со сложной экономической системой идут, в условном конечно, но реальном времени. Я понимаю, что ходы легче (хотя система ивентов тоже норм), но может тогда вообще убрать дату, сделать ее условной и считать просто по ходам, оставляя все на воображение игрока (учитывая, что это не исторический симулятор).
Алсо, это очень круто, что ты делаешь мир рандомным, земляшка реально заебала в ГС, можно широко юзать какой-нибудь опенсорсный ворд-генератор, чтобы кастомизировать мир (названия компаний например генерить).
>Не совсем. Изначально планировался сеттинг от ололо диких племен до капитализма, коммунизма и ядерной войны. Есть даже тип экономики - нат. хозяйство. Сейчас я только на капитализме сосредоточился, остальное закомментил до лучших времен.
Тоже так хотел, но мне кажется начало игры будет гиперунылым и до средневековья дропнет даже самый терпеливый. Ну либо придется наполнять йоба контентом, уровня параходов и уходить от экономической механики.
Для того, чтобы тестить экономику средневековье как раз самое оно, но лучше кастомизировать старт, чтобы сразу уже были некоторые предприятия. Капитализм довольно сложная штука, лучше сначала хотя бы обычный товарооборот организовать.
>ЕМНИП в вике такой же принцип.
Да, я просто проебался. Думал в вике попы еще четко разделены по алайнам. В принципе, да, это чистые виковские попы и есть.
>Хексы выглядят угловато и однообразно. А тут - провы могут быть любой формы, как рандому захочется. Да и можно карты из модов\игр от пароходов использовать.
Не согласен. Можно же использовать региональность. Т.е. прова также будет какой угодно формы, но состоять из множества хексов. Игрок сможет тогда расширять регион, вводить иерархию регионов (город-провинция-страна) четко отчерчивать границы при мирных договорах, будет иметь смысл войны за мелкие участки. Можно будет запилить условный гонконг или гибралтар, например, обозначать ОЭЗ, ДМЗ, линии фронта и.т.д. В будущем можно запилить уровневые хексы - город, представленный одним хексом на глобальной карте, раскрывается множеством на локальной. Да и вообще возможности кастомизации увеличиваются в разы.
>Пока тормоза будут в разумных пределах
Кстати, а почему так тормозит-то? Что там ресурсы так жрет? Или плата за браузерность?
Алсо, можно использовать не хексы а пазлы. Но это, конечно, гораздо сложнее.
Господи, ебать я тупенький. list.Count() выдает количество ячеек в листе, но индекс-то, блядь, на единичку ниже будет. Ну теперь-то с колен привстанем.
Расслабься, тебе все равно не светит заработать 100к$. Твой уровень - тупые вопросы в юнити треде.
>какие капиталисты-то кстати, если игра судя по всему в сеттинге средневековья?
Помнишь, откуда?
/Впринципе для моего текстого квеста он абсолютно подходит и MVS пока качать не вижу смысла/
Не работают хоткеи от слова совсем. особенно бесит Ctrl+C,Ctrl+V. Код программки заточен на кучу переходов от сцены к сцене поэтому прошу советов как заставить иххоткеиработать.
забыл написать, что не работают они на обеих раскладках.
Естественно слезу, но с моим интернетом качать 8ГБесли не больше пока очень сомнительно.
Есть три числа и есть сумма этих чисел и я нихуя не понимаю, почему получается именно такая сумма. Ведь если их сложить, то ничего похожего не получается.
Дебаг кода ниже выдает:
1.046729 -9.06542 -2.71028 -10.72897 1.046729
9.06542 -2.71028 -10.72897 должны давать 4,37383
но никак не 1.046729
Где я ошибаюсь?
void OnMouseDrag()
{
mouse_x = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)).x;
myrotation = Camera.main.ScreenToWorldPoint (transform.position).x - mouse_x - offset.x;
transform.rotation = Quaternion.AngleAxis (myrotation * rotationSpeed, Vector3.forward);
Debug.Log (myrotation+" "+offset.x+" "+mouse_x+" "+Camera.main.ScreenToWorldPoint (transform.position).x+" "+(Camera.main.ScreenToWorldPoint (transform.position).x - mouse_x - offset.x));
}
Есть три числа и есть сумма этих чисел и я нихуя не понимаю, почему получается именно такая сумма. Ведь если их сложить, то ничего похожего не получается.
Дебаг кода ниже выдает:
1.046729 -9.06542 -2.71028 -10.72897 1.046729
9.06542 -2.71028 -10.72897 должны давать 4,37383
но никак не 1.046729
Где я ошибаюсь?
void OnMouseDrag()
{
mouse_x = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPoint.z)).x;
myrotation = Camera.main.ScreenToWorldPoint (transform.position).x - mouse_x - offset.x;
transform.rotation = Quaternion.AngleAxis (myrotation * rotationSpeed, Vector3.forward);
Debug.Log (myrotation+" "+offset.x+" "+mouse_x+" "+Camera.main.ScreenToWorldPoint (transform.position).x+" "+(Camera.main.ScreenToWorldPoint (transform.position).x - mouse_x - offset.x));
}
>1.046729 -9.06542 -2.71028 -10.72897 1.046729
>9.06542 -2.71028 -10.72897 должны давать 4,37383
Что ты несешь то?
-4,37383 может быть?
Нихуя не понятно.
А вообще когда затык - лучше забей на задачу и займись другим, а эта решится сама собой
мимо кодю 18 лет
> когда затык - лучше забей на задачу и займись другим, а эта решится сама собой
прям две цистерны чая тебе.
мимоиндидев
Заебись совет. Ну да ладно, меню пока поделаю.
У тебя второе число скорее всего отнимается, а не прибавляется
Потому что если у второго числа нет минуса как раз получается 1.046
На пике плоский меш (символизирует провинцию.) Нужно по периметру меша наложить текстурe границы (полосочка такая 20х80 скажем, с рисунком границы, как вверху пикрила).
Я правильно понимаю что текстуру прямо на этот меш накладывать нельзя- ее растянет по всему мешу как ни крути UV?
Вместо этого наверно надо зафигачить еще меш (белые треугольники) и на одну сторону треугольников наложить текстуру? (Ну или, может быть, прямоугольники должны быть где у меня белые треугольники)
Более простого способа реализации наверно нет? Да и лагать сильно не будет (текстура будет меняться со временем)
А зачем границы векторные, ты хочешь зумить эту хуйню во весь экран? Просто можно же всю эту провинцию вместе с границей нарисовать прямо в текстуре и обойтись одним прямоугольником.
Хм, интересный подход. Но дело в том что форма провинций не рисуется заранее а генерируется рандомно каждый раз (в виде png файла) а потом переводится в меш.
Поэтому надо таки накладывать текстуру границ на некий неизвестный заранее меш.
Вот тут - верно?
>Я правильно понимаю что текстуру прямо на этот меш накладывать нельзя- ее растянет по всему мешу как ни крути UV?
у тебя же формы провинций не меняются. сгенерируй список из Vector3 по краям провинции и рисуй красивые линии по этим кординатам. это же можно по разному использовать. например менять толщину линий у провинции под курсором.
>у тебя же формы провинций не меняются. сгенерируй список из Vector3 по краям провинции и рисуй красивые линии по этим кординатам. это же можно по разному использовать. например менять толщину линий у провинции под курсором.
Тоже вариант. Но хотелось бы в 3д, что бы бит мапингом обмазаться и всеми прелестями текстурок. Зум опять же есть. Что имеешь ввиду под >рисуй красивые линии
Какой то 2д метод/класс? Я знаю только Debug.DrawLine и тот кривой какой то.
Спасибо!
Рисуешь несколько спрайтовых молний на прозрачном фоне, тянешь спрайт от точки А до точки Б, меняешь спрайты в рандомном порядке. По-моему даже в фотошопах кисти-молнии есть.
> Лицензию чекни
Чёт не нашёл. Но в термс оф юз на сайте сказано, что так нельзя делать. Если я правильно перевел.
Поищи те, которые можно. Если планируешь этим зарабатывать, лучше озаботиться заранее, чем дождаться, когда тебя пидорнут из стора и лишат дохода.
Так ведь и выходит, что те, которые можно - хуита. Мне их в яндекс картинках брать, чтоль? А хорошие нельзя. И камеры хорошей у меня нет.
Какая-то безвыходная ситуация.
> I have used the textures on a 3D model/scene. Am I allowed to sell the model/scene and textures as a bundle?
> Yes, under the following condition: You have customized the textures for the 3D-model or scene, and you are selling the model and texture in one package. Please add the following text in the documentation accompanying the model: "One or more textures on this 3D-model have been created with images from Textures.com. These images may not be redistributed by default. Please visit www.textures.com for more information."
Так всё же можно, выходит? Да?
Предлагаешь дрочить сабстансы? Ну нахуй.
Суть я уловил, спасибо.
А есть ли способ динамически "тонировать" спрайт в юнити, то есть закрасить его определенным цветом? Молния она же "мерцает", и не хотелось бы на каждый оттенок рисовать отдельный спрайт.
В идеале было бы удобно нарисовать форму на прозрачном фоне и закрашивать ее рандомным оттенком.
C#
Вообще в Unity нет Javascript, там UnityScript, от поддержки которого скорее всего скоро откажутся. Почти все последние официальные туторы выходят на C#
Спасибо.
Дай Аллах мне больше мотивации для изучения С#. Довольно таки сложно вкатываться в программирование...
Удвою.
Вопрос контактного расчета uv. Поэкспериментируй. Можно треугольники порезать еще.
>Вопрос контактного расчета uv
Что за контактный расчет?
Смотри, у меня меш (рандомно генерируемый) состоит из квадов как на пике 1, из 4х вершин. На края нужно наложить текстурку границы провинции.
Координаты текстуры можно задавать только в вершинах, так? Я же не могу сказать текстуре: вот ляг тут в вершине а потом еще немного отползи и хватит, а весь меш не закрашивай. Так вроде не получается.
>Можно треугольники порезать еще.
Я пока пытаюсь создавать отдельный меш по краям провинции, пик 2, но пока не оче с алгоритмом кое-где
MyWarbandInfo наследует MonoBehavior?
Если да, то используй GameObject.AddComponent вместо вызова конструктора. Компонент в юнити не может "висеть" просто так, не являясь частью объекта, насколько я знаю.
Делай инициализацию в void Awake(), а не в конструкторе, создавай компонент через gameObject.AddComponent ("FoobarScript"); и только после этого добавляй его в массив.
Сделай массив из game object, добавь каждому компонент
То, что у тебя в конструкторе MyWarbandInfo, перемести в функцию private void Awake() {}; Она исполняется автоматически при создании компонента.
Сам конструктор удали и никогда больше не создавай в наследниках monobehaviour, юнька от этого болеет.
MyWarbandInfo должен быть прикреплен к какому-нибудь gameObject, чтобы теребонькать функции Awake, Start, Update, FixedUpdate и все остальные. Юнити делает это самостоятельно, тебе надо только создать gameObject и добавить к нему компонент MyWarbandInfo.
Для этого есть два пути. Либо ты создаешь объект внутри сцены, и прикрепляешь к нему скрипт с помощью кнопки AddComponent в редакторе (в этом случае все остальное юнити сделает самостоятельно), либо создаешь GameObject (var go = new GameObject();) и вызываешь функцию go.AddComponent() из какого-нибудь другого объекта, например GameController.
А вообще я тут пивас пью и немного в дрова, так что сорян за неизящный слог.
Генерируй треугольники границы.
Создай отдельную сцену с менеджерами всякой хуйни, и подгружай-выгружай другие сцены
но зачем? LineRenderer сам линии нарисует и текстурку наложит. ты бы лучше не велосипеды писал а игры делал.
Я пробовал, но у меня фигуры сложные - одной линией не нарисуешь. Да и сложно алгоритм написать что бы точки шли строго в определенной последовательности, а без этого LneRenderer узлами завязывается
да легко там всё. у тебя же грид. например возьми marching squares, или любой другой метод который бы выдал тебе контур покрасивей. сделай список из отрезков, соедини все отрезки исключая их из имеющегося списка. получишь список координат по периметру. это явно проще чем то что ты там задумал.
Не держи CharacterStats как MonoBehaviour, очевидно же.
Массив тоже должен лежать в геймобджекте, и для этого геймобджекта надо вызвать NotDestroyOnLoad.
Юнити хорош тем что наличие редактора значительно упрощает отладку чего-либо. И для рогалика хороший выбор, если только не существует специальных движков для рогаликов.
Хинт: обычные .NET объекты не убиваются при смене сцены. Тебе нужно MonoBehaviour только для чего-либо на сцене, либо для получения вызовов из Юнити.
Кое как впихнул marching squares в генератор, пикрил.
Появились дырки в местах где сходятся 3 или 4 цвета.
Вероятно, дырки из-за того что я использовал "одноцветный" marching squares, т.е. каждая точка либо соответствует анализируемому в данный момент цвету либо нет.
Теперь, походу, придется в эти http://catlikecoding.com/unity/tutorials/marching-squares-5/ дебри погружаться, я ж там потону нафиг. Хотя не, там какой то велосипедный код фиксированный на 4х цветах. Мне как то монохромный алгоритм фиксить надо...
так ты сделай для всех случаев где уголки чтобы у тебя возвращались 2 отрезка а не 1. для диагональных можно и сразу все 4
>так ты сделай для всех случаев где уголки чтобы у тебя возвращались 2 отрезка а не 1. для диагональных можно и сразу все 4
К своему стыду, я не очень уверен что понял что ты имеешь ввиду, но эти отрезки вроде у меня уже были и я нафигачил заплаток в дыры. И вуаля, все работает норм, без дыр, даже выглядеть карта стала как то профессиональнее что ли, менее васянски. У меня, правда, были более округлые границы, но это вроде как можно будет усовершенствовать в будущем посредством интерполяции.
Спасибо тебе, анон. Если я еще смогу на новый меш еще и границы стран наложить будет вообще здорово.
Кто знает где можно накачать хороших анимаций для гуманоида?
я говорю что marching squares же строятся на 4 элементах в гриде в форме квадратика. для угловых можно поменять способ построения. чтобы вместо 1 линии там было 2 и весь результат был лесенкой. но это разумеется исправит проблему островков кторую ты заметил ранее. потом когда ты уже построил всю эту хуйню можно поделить имеющееся на отрезки где края имеет больше 2 соседей. а потом к этой линии применить любой алгоритм упрощения линии. например алгоритм Рамера-Дугласа-Пекера.
хотя ты там уже сделал что-то и стало лучше чем было.
>>06035
в ассетсторе есть огромные паки с мокапом. у https://www.mixamo.com/ есть несколько бесплатных паков хороших.
зайди на mixamo > store. там есть Pro Rifle Pack, когда я последний раз смотрел он был бесплатным и он довольно неплох. и вообще я тебя уже послал куда надо, тут тебе не гугл.
NinjaRipper может вытаскивать анимации?
хотя вообще тут даже marching squares не нужны будут лол. чего это я. можно просто перебирая всех соседей узнать есть ли линия, или нет. в зависимости от стороны можно ещё и направление получить чтобы знать что с какой стороны.
Учи JS и вкатывайся в web-макакинг.
Ребят, накатил этот ваш юнити, начал делать Roll a Ball по официальному гайду, превозмогая собственное незнание инглиша, и столкнулся с вот какой бедой на пикрелейтеде. Что можете посоветовать, геймданы?
Ну вот ещё проблема - поиск по документации из коробки ни работает. Ну что это за фигня? Почему даже по официальным мануалам нельзя нормально заниматься, а нужно бороться с глюками движка и среды разработки? Зачем весь этот пердолинг? Юнити делает меня грустить.
Мужики, помогите. У меня есть 2d - объект, игрок расручивает его на телефоне свайпом вдоль оси z. Мне нужно знать на какой угол повернулся объект за один Update.
у меня получилось, внезапно помогло вот это https://docs.unity3d.com/ScriptReference/Quaternion.Angle.html
Это у тебя MS VS выдает? Возможно, старая версия MS или Unity. Или мусор какой то в проекте.
Переустанови\пересоздай проект
>>06141
>Ну вот ещё проблема -
Чта? Нафига ты в браузер полез?
For those that don't have it, install Visual Studio. It's now free for many users.
Make sure Visual Studio Tools for Unity is installed and the configuration is done.
As djradon mentioned, the standard shortcut is CTRL+ALT+M,CTRL+H for Unity Documentation Access
>Зачем весь этот пердолинг? Юнити делает меня грустить.
Юнити любит подглючивать, но жить можно. У тебя скорее всего ошибка на твоей стороне.
Делал всё как в официальном мануале. До этого не пердолил ни студию, ни юнити, всё из коробки стоит. Браузер со статьёй из документации должен открываться при выделении слова и нажатии ctrl + '. Но вот уже в двух местах хуета какая-то. Такие вещи лично меня очень демотивируют.
List<EdgeHelpers.Edge> res = new List<EdgeHelpers.Edge>();
foreach (var checkingEdge in edges)
{
//if neighbor has checkingEdge add it in res
foreach (var comparingEdge in neighbor.edges)
if (MeshExtensions.isTwoLinesTouchEachOther(meshStructure.vertices[checkingEdge.v1],
meshStructure.vertices[checkingEdge.v2],
neighbor.meshStructure.vertices[comparingEdge.v1],
neighbor.meshStructure.vertices[comparingEdge.v2])
)
res.Add(checkingEdge);
}
return res;
Где meshStructure - это стандартный Юнитивский Mesh выполняется 10 секунд и аллоцирует 2.5 гига памяти. гроб гроб пизда кладбище
Тот же код где meshStructure это
public class MeshStructure
{
public List<Vector3> vertices;
public List<int> triangles;
}
Выполняется за 0.7 секунды и 480 КБ, лол
Вывод - разделяйте использование unity API и логику, заодно и многопоточность можно будет запилить
List<EdgeHelpers.Edge> res = new List<EdgeHelpers.Edge>();
foreach (var checkingEdge in edges)
{
//if neighbor has checkingEdge add it in res
foreach (var comparingEdge in neighbor.edges)
if (MeshExtensions.isTwoLinesTouchEachOther(meshStructure.vertices[checkingEdge.v1],
meshStructure.vertices[checkingEdge.v2],
neighbor.meshStructure.vertices[comparingEdge.v1],
neighbor.meshStructure.vertices[comparingEdge.v2])
)
res.Add(checkingEdge);
}
return res;
Где meshStructure - это стандартный Юнитивский Mesh выполняется 10 секунд и аллоцирует 2.5 гига памяти. гроб гроб пизда кладбище
Тот же код где meshStructure это
public class MeshStructure
{
public List<Vector3> vertices;
public List<int> triangles;
}
Выполняется за 0.7 секунды и 480 КБ, лол
Вывод - разделяйте использование unity API и логику, заодно и многопоточность можно будет запилить
Демотивируют - не делай.
Чет я сумбурно написал. Суть такова: обращение к Mesh.vertices[] в цикле дает огромные лаги и трату памяти. Вероятно, потому что меши хранятся в видео памяти или бог знает где еще. Те же самые действия с копией меша в виде обычного (не Unity) класса работают на порядки быстрее.
Нет эффекта
>А мог бы документацию посмотреть
Я даже видел это, и не раз. Но я не предполагал что копируется весь массив (видимо, при каждом обращении, даже на чтение) да потом еще и где то застревает по пути к мусорщику (как мне показалось). Думал, элемент копируется.
>Такие вещи лично меня очень демотивируют.
Чет у меня аж пригорело с этого нытика, баги(хотя там скорее не баги, а собственная криворукость) его блять демотивируют, нахуй ты тогда вообще в разработку вкатился? Пиздуй рисовать или 3d моделить если совсем мозгов нет, там все легко и просто, чистый монотонный, физический труд по передвиганию мышки без напряжения головного мозга, только не ной потом, когда тебя нейросеть нахуй заменит.
Иди-ка лучше просто C# поковыряй.
LOD не подходит т.к. надо убирать множество мешей, а не менять на упрощенные.
Штатному LOD'у можно задать один уровень и поставить исчезновение на нужной дистанции.
Оу, спасибо.
Ну я сказал "например". Может я захочу сделать один тайл размерами 50х50 "сантиметров". Можно ли это как-то поменять?
Ты в курсе, что если измерять размеры двух объектов в метрах, и их же в попугаях, то соотношение не изменится?
Можешь мысленно дописать после цифры 5 что тебе угодно, хоть метры, хоть дюймы, хоть локти.
Ну вообще-то изменится. Если я сейчас натыкаю тайлов в сцену, то у них будут координаты (1.7623545234, 0.000000123). Меня такое не устраивает, я хочу иметь координаты у первого тайла (0, 0), а у второго (0.5, 0), к примеру.
Если у тебя спрайты, тыкаешь на спрайт (не на объект, а на сам спрайт в юнити), там есть значение "Pixels per Unit". Правь как тебе удобно.
Воо, это то что нужно.
И че мне делать? Как обычно 3д физика + навмеш? Или по-другому лучше(мне же третье измерение нахуй не нужно, просто тупа лишние вычисления будут -> ниже производительность)?
>Игровой объект.
Не совсем
>>06751
>Что такое префаб, если коротко?
Шаблон объекта. Из него создаешь кучи клонов
.>>06759
>не же третье измерение нахуй не нужно, просто тупа лишние вычисления будут -> ниже производительность
Там копеечная разница, и еще не известно в чью пользу, если ты не на Нокию 3110 пишешь.
Лучше бы ты код писал а не занимался оптимизацией
Да я уже пишу, я уточнил просто.
Пилю в данный момент примитивный шутер, но с возможностью ловить предметы, которыми стреляют враги. То есть, спавнятся враги с разными статами, у каждого из них должен быть свой механизм спавна предметов, которыми он будет стрелять. Игрок один и должен иметь возможность поймать любой предмет, когда он в зоне досягаемости, схватить, и кинуть в ответ.
В данный момент есть кривой прототип, в котором вся логика зашита в предмете. Предмет проверяет, находится ли он в зоне досягаемости, включает себе гравитацию, вычисляет силу броска самого себя.
1) Не пиздец ли это? Снарядов то в игре будет достаточно, и каждый из них несет основную тяжесть игровой механики.
2) Как правильно организовать скрипты и обмен данными. Чтобы поменьше всяких глобальных переменных, которые хуй пойми кто переменил. Как максимально инкапсулировать?
>Как максимально инкапсулировать?
Ну берешь такой и инкапсулируешь. В смысле прячешь логику сущности в ее классе.
>>06778
>Чтобы поменьше всяких глобальных переменных, которые хуй пойми кто переменил.
Обмажь все private, где надо readonly и static
>>06782
>А я вот не могу код писать. Потому что наперед думаю, что говно напишу
Это нервное. Не припоминаю случая что бы я выстрелил себе в ногу кривой архитектурой. Это может иметь смысл в ну оооочень больших проектах.
> Тоже бы оптимизацией занялся, но на пека разрабатываю, хз есть ли смысл оптимизировать на пекарне.
>>06784
> Это нервное. Не припоминаю случая что бы я выстрелил себе в ногу кривой архитектурой. Это может иметь смысл в ну оооочень больших проектах.
Таки да. Это по сути прокрастинация - мог бы игру делать, но делаешь в результате что угодно, только не игру.
В первом качество хорошее, но я что-то не уверен насчёт производительности на мобилках. Вторая камера должна же сильно просадить фпс на слабых устройствах? Второй вариант выглядит хуже, но по идее должен быть гораздо производительнее.
https://www.assetstore.unity3d.com/en/#!/content/78608
https://www.assetstore.unity3d.com/en/#!/content/86481
Не могу поделить логику между сущностями.
Вот снаряд. Снаряд совершает действие "полет" за счет внешних факторов (animation event, ЛКМ). Или это рука игрока/нпс совершает действие по броску снаряда?
> Не припоминаю случая что бы я выстрелил себе в ногу кривой архитектурой.
А вот я, кажется, смог. Так наговнокодил, что с одним нпс у меня механика работает, а с двумя уже дикие баги. Они один и тот же предмет у себя из рук вырывают, лол.
>Или это рука игрока/нпс совершает действие по броску снаряда?
Рука дает команду лететь (передает сообщение, типа снаряд.лететь()), снаряд летит сам (наследуя полет от кого-нибудь)
>>06791
>Они один и тот же предмет у себя из рук вырывают, лол.
Так это ж не архитектура виновата, наверно. Запили проверку какую. Или угори по хардкору - добавь мнотопочность и блокируй снаряд при помощи Lock (на самом деле не надо)
> Это по сути прокрастинация
А я просто в голове продумываю игру и думаю о том, какой я молодец. Правда, наконец-то я написал дисдок, и уже понял, что я не молодец нихуя, а в кое-каких моментах игроку просто нахуй не нужно играть в мое говноподелие.
Куда кидать текстуры, помеченые как roughness, specular? Вот отсюда, например: https://www.textures.com/download/substance0030/127099
Albedo и normal map применил, уже очень ничего выглядит, но даже близко не так, как скомпиленный материал там. А мне хочется хотя бы приблизительно так. Для этого хотя бы height и ao надо, их понятно куда, но они не импортируются.
Делай в опен-сорсных аналогах. Либо экспортируй в общий формат и отслеживай, чтобы никаких пометок в файле не было.
>>06853
>А я просто в голове продумываю игру и думаю о том, какой я молодец.
Вот это самый верный подход. Кроме отыгрыша в голове ничего и не нужно, остальное - суета.
За манямир дошик не купишь.
>>06855
Юнити не использует metallic/roughness, она использует спекуляр. В опциях материала, наверху, можешь выбрать спекуляр-шейдер или metallic/smoothness шейдер.
Файлы должны быть в png или подобном lossless формате.
Я так понимаю, что файл с сайта - это материал для сабстанса. Если на встает на юнити, юзай сабстенс дизайнер/пейнтер, и из него уже примеряй материал и компилируй текстуры/мапы.
Чем отслеживать? Обычным блокнотом? А там всякая метаинфа?
фрустум куллинг работает по умолчанию, окклюжен куллинг настраиваешь сам. У камеры есть также параметр far clipping plaens, это разве не то, что тебе нужно?
Не, мне выборочно нужно было меши прятать. Сделал через LOD
Кстати, вот чего я не понял - дальность отрисовки ЛОДа задается в процентах, эти проценты - это что от чего?
Кватернион описывает вращение объекта на угол theta вокруг оси, заданной через вектор. Прими это за аксиому и не заморачивайся. Кватернионы позволяют вращать, не задумываясь о порядке эйлевских угров. Чтобы повернуть в обратном направлении, просто умножаешь на конъюгированный кватернион. Кватернион (0, 0, 0, 1) означает, что вращения нет.
Недостаток кватернионов против 4х4 матрицы в том, что нет перемещения в пространстве.
Есть что-то сравнимое с этим вот?
https://www.youtube.com/watch?v=qdXT-BFz27k
ссыль на ассет в описании к видосу. Стоит 70 енотов. Мамка денег даст.
Ольтернотивы есть?
Пожалуйста :3
В чём причина и как исправить, не меняя у неё все шейдеры?
>Кстати, вот чего я не понял - дальность отрисовки ЛОДа задается в процентах, эти проценты - это что от чего?
Бимп вопросу
А, там жи написано:
The percentages in the LOD bars represent the fraction of the bounding box height relative to screen height where that LOD level becomes active.
Лол, поэтому у меня в WEB Gl LODы странно себя ведут..
Скрипт1. виртуал метод "бегать"
Скрипт2. овверрайд "бегать" в Скрипт1
Я въехал, спс.
И еще вопрос, как эту карту рендерить только в радиусе Х клеток от персонажа?
>66x66
Размер текстуры должен быть равным степени двойки, иначе юнити растянет их до нужного значения. Степень двойки это 2 4 8 16 32 64 128 256 512 и так далее.
Имбицил, юнити для 3д игор, ну куда ты с пикселартом лезешь. Используешь инструмент не по назначению - страдай.
Чтоб не ломало у тебя картинку масштабируй кратно целым числам. А не 3.6х как сейчас.
>называет кого-то имбецилом
>заявляет, что он ещё и хамло на аналогичный ответ
Ну я уже понял, что шестеренки в твоей голове не варят, мог бы не отвечать.
Тогда внимательнее смотри первую часть ответа. Юзаешь инструмент не по назначению - велосипедь и не ной в тредах.
>>07296
Пиксельные спрайты действительно должны быть равны степени двойки в размерах. А ещё посмотри вот это >>387130
>>07312
>>07340
Он только изначально для 3д был, сейчас в нем 2д вполне себе. Как минимум все победители недавнего Microsoft Challenge в 2д, 5 из 10 honorable mentions тоже. И другой всякой 2д годноты на юнете полно. Так что твой аргумент инвалид.
А вообще, идите-ка нахуй оба отсюда, псы.
>Пиксельные спрайты действительно должны быть равны степени двойки в размерах
Они у меня и так в степени двойки.
>А вообще, идите-ка нахуй
Так и делаю, подготовил эти скрины для реддита, посмотрим что там скажут. Тут, очевидно, адекватного ответа можно не ждать.
Он используется в одной довольно популярной в своих кругах игре.
Но нахуй всё равно иди.
С каким блядь зумом, там нет никакого зума, это скрин игры со стандартными настройками камеры. Вы уже заебали придумывать причины, которые не соответствуют действительности.
myPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath(...);
но когда пытаешься собрать exe, то выдаёт ошибку так как UnityEditor это чисто эдитор и не собирается в exe. Втф?
А с чего ты взял, что стандартные настройки камеры идеальны для твоей хуиты? Попробуй изменить зум камеры в превью - будет пидорасить в прямом эфире.
Тебе нужно регулировать зум камеры так, чтобы каждому пикселю твоего ебучего спрайта соответствовало целое количество экранных спрайтов.
Нет, конечно.
Если хватит терпения, то доведешь проект до альфы и дропнешь, охуев от сложности дальнейших изменений.
>охуев от сложности дальнейших изменений
Скорее охуев от сложности запиливания графена. Кодить всякое я люблю.
Кодить всякое сильно отличается от доведения проекта до релиза.
Нашел твой пост и ответ, который тебе помог. Я тебе об этом, тупой плешивый пёс, и говорил. Я тебе даже ссылку на ответ в пикселяч-треде дал, там по ветке мог дойти до того же самого. Но нет, блядь, пока всё по полочкам тебе не разложили, не разжевали, ты нихуя сам не разобрался.
Так что продолжай идти нахуй.
>но когда пытаешься собрать exe, то выдаёт ошибку так как UnityEditor это чисто эдитор и не собирается в exe. Втф?
C путями обосрался, небось. Или написал тут непонятно
В первой сцене у меня уже по дефолту стоит персонаж, если перенесу во вторую сцену, то норм, потому что там его нет по дефолту. Но если вернусь в первую, то там будет уже 2 игрока. Один из второй сцены, а другой который есть по дефолту в первой сцене.
Я хотел сделать удаление одного при переходе в первую, но если я захожу из главного меню в первую сцену, то у меня удаляется мой перс и ВСЁ. А если отключить этот скрипт удаления и включать при переходе со второй в первую, то скрипт почему то не включаеся (он висит в первой сцене).
Может у вас есть мысли как решить мою проблему? Четвёртый день колупаюсь, а уже сроки подходят
Сериализуй данные и при запуске сцены создавай копии тех.
Убери игрока из первой сцены, добавь объект-GameController, который будет спавнить игрока из префаба. Статы игрока типа здоровья можно так же хранить в GameController.
>>07543
Хуя дебил и пиздунишка! Ловите, пока не сбежал!
А теперь по сути. Ты тут распизделся про зум, а я менял ортографический размер. Это раз. Ты мне пиздеж играться с числами, а богоподобный реддит сразу посоветовал, как решить проблему правильно - кодом в зависимости от разрешения в игре. Это два. Я ничего никогда не писал в пикселяч-треде, даже не заходил в него никогда, но ты мне там давал ссылку, кек. Это три. Бурги сразу дали ПРАВИЛЬНЫЙ рабочий ответ без лишних выебонов "АХАХА СМОТРИТЕ ЭТОТ НЬЮФАГ НИЧЕГО НЕ ЗНАЕТ, ИДИ НАХУЙ, Я СКАЗАЛ ИДИ НАХУЙ, ОЙ КАКАЯ ИНТЕРЕСНАЯ ТЕКСТУРА ПОДЕЛИСЬ". Вся суть просто этой параши. Это четыре. Обтекай, советчик. И это последнее пять.
Я уже сам разобрался. Алсо написал все правильно, просто в треде очевидно никто не знает, что скрипт с подключеным модулем UnityEditor нельзя собрать, он работает только в эдиторе.
Не отвечай ты ему, пусть идет на реддит.
>распизделся про зум
>а я менял ортографический размер
А каково твоё определение зума? Что происходит при изменении ортографического размера? Реддит просто привык к дебилам, которым надо сразу готовый ответ в ротешник засунуть, чтобы вонять перестали. Ещё и плюсиков в кармочку поставят))))
>Реддит просто привык к дебилам, которым надо сразу готовый ответ в ротешник засунуть, чтобы вонять перестали. Ещё и плюсиков в кармочку поставят))))
Именно так и работает здоровое сообщество - сегодня помогают тебе новичку, а завтра помогаешь ты со своей кармой свежим новичкам.
Пиксель перфект гугли.
[SCR] https://pastebin.com/gqAL6Fn8
Любым образом сохрани координаты объектов в файл и потом загружая файл просто читай координаты и создавай объекты, все просто
Я уже. Карта в джсоне, все работает, карту грузит и отображает. Единственное, что мне не нравится, так это ебучие кавычки, но без них никак, если хочу работать с джсоном.
Практически в районе полторы тысячи, обычно это вызывает припадки до 5 фпс
А как тогда кодить перемещение по клеткам? Я нагуглил такое https://pastebin.com/q7y6hDbk и на гифке именно так перемещаюсь.
Можно и трансформом, но коллизии определять вручную, например, рейкастингом. Ну или там при каждой попытке перемещения чекать клетку, в которую перемещаешься.
Такое фиксированное перемещение, наверное, никак, все остальное основывается на физике, которая здесь не нужна.
И ещё, перенеси все из FixedUpdate в просто Update, фиксед для физики, остальное плавнее работает через просто апдейт.
Тогда стоит ли вообще усложнять коллизиями, если можно убрать вообще риджид бади с колладером нах и просто проверять соседнюю клетку на наличие тайла с тэгом WALL, например?
Делай, как велит сердце.
Вообще не стоит, о чем я и говорю.
Так этот Новичок так и не понял в чём проблема, зато готовый кусок кода подогнали.
Да, между Статик и кинематика нет обнаружения. Как минимум одно должно быть симулейтед или как его там.
Какие сферы математики стоит прокачать, чтобы достаточно уверенно чувствовать себя в среде разработки Unity?
Никакие. Понимания простых операций с векторами достаточно.
Пойми, что происходит в классе, унаследованном от MonoBehavoir (Start, Update, FixedUpdate) и начинай пилить.
Что у тебя с английским? На слух сколько % понимаешь из тьюториалов?
С чего ты это взял? Я все прекрасно понял в момент, когда увидел код. А вот в треде есть люди, которые нихуя не понимают, но лезут с советами. Например, вот этот >>07312, который советовал менять Scale, пушка нахуй. Или вот этот >>07303, который спизданул про кратность, хотя у меня сразу за первым постом шёл второй с правильной кратностью и все равно проебаными пикселями. Или вот эти >>07733 >>07761, которые даже не поняли о чем речь, зато лишь бы как ответить в треде.
И да, ты ответил как раз тому новичку.
Сортинг лаер / ордер ин лаер у спрайт рендера (как советуют в интернете) не помогают.
А у половины моих эффектов сделанных патикл рендером этой неработающей опции вообще нет.
Короче, я частично понял.
Нужно просто включить в патикл систем рендерер и в нём - Сортинг лаер / ордер ин лаер
Не понимаю почему вчера на сонную голову не сработало.
Но включение этого "рендерер" портит мои тонкие настройки частиц - они летают хуй пойми как, одинакового размера и во все стороны.
Как фиксить?
Такие очевидные тупые и медленные способы уже пробовал. Слишком медленно, и выглядит в 3D не очень.
Например? Я хочу под мобилки делать. Сишарп знаю, Джаву тоже.
Сука, пидр, ну так напиши тут, в чём проблема была. Ненавижу таких, как ты.
Да уже решил, значит и проблемы нет)))
Делай, не парься. Есть еще куча всяких движков поверх Юнити где уже все разжёвано. А юнити хорош простотой а не физикой.
https://docs.unity3d.com/ScriptReference/SpriteRenderer-sprite.html
Держи в курсе.
https://www.youtube.com/watch?v=2PhFAvbgASE
кто мне запилит под это интериор стрип-клуба за их деньги?
Автор всего этого, точнее мой вк.
(Кстати, скрины по моему с февраля месяца, по этому выглядит не особо -то хорошо)
float profit;
> foreach (Factory factory in province.allFactories)
{
if (province.CanUpgradeFactory(factory.type))
{
profit = factory.getProfit();
if (profit > result.Value)
result = new KeyValuePair<Factory, float>(factory, profit);
}
}
Или
> foreach (Factory factory in province.allFactories)
{
if (province.CanUpgradeFactory(factory.type))
{
float profit = factory.getProfit();
if (profit > result.Value)
result = new KeyValuePair<Factory, float>(factory, profit);
}
}
Как называется эта болезнь?
а мог бы игры делать...
Да это на теорию вопрос. Кароч, вариант с объявлением переменной в цикле быстрее.
Делаю по примеру отсюда:
https://docs.unity3d.com/ScriptReference/Vector3.Lerp.html
Когда все в Update, то работает ок, перемещается плавно.
Стоит записать в отделную функцию и перемещение идет рывками.
Наверно, как-то неверно расчитывается пройденное расстояние.
Как это исправить?
Или может есть другой способ плавного перемещения в заданные координаты?
Корутины? Хотя он и так должен через нее вызываться.
> Или может есть другой способ плавного перемещения в заданные координаты?
transform.position += speed * Time.deltaTime;
Учишь С++, опенджиель и основы разработки движка, а потом без задней мысли пишешь его. Вот только что ты забыл в этом треде с такими вопросами?
Ладно братка не обессудьт! спс за совет жиесь!
Думаю... добавить туда интерьер.
Э, блэт, так ты хуяришь сразу несколько домов одним объектом? А как же МОДУЛЬНОСТЬ?
AO из пакета Post Processing артефачит немного при Deferred рендеринге с кастомными шейдерами.
Случается даже с свежесозданным дефолтным шейдером (Create -> Shader -> Standart Surface Shader). Стандартный физический шейдер доступный из коробки работает без проблем.
Кто нибудь сталкивался с подобным?
AO выкручен на запредельные значения для наглядности
Поставь брейкпоинт, посмотри где у тебя нулл
Какого-то объекта у тебя нет. Ищи.
Бля, lock (gameObject) не помогает.
Вот этот метод
public override void refreshContent()
{
lock (gameObject)
{
[очисти таблицу]
[заполни таблицу]
}
}
Один раз этот метод вызывается из родителя, второй раз я этот метод засунул в качестве колбэка в ScrollBar.OnValueChange
Чему не блокируется? Таблица не успевает очиститься как налетает второй поток и начинает писать в таблицу.
>Сделай так, чтобы было в одном потоке, а не блокируй.
Но зачем мне велосипедить все в один поток, если это стандартные юнитивские недопотоки (Апдейт и коллбэк)?
Так то я проблему решил добавив флаг alreadyInUpdate и его проверку при заходе в метод, но все таки интересно чему юнити не захотело есть стандартный lock.
Может быть дело в том юнитивские коллбеки реализованы через какие нибудь самопальные корутины?
>нельзя будет использовать разные sorting layer
Ставить циферку в z координату вместо sorting layer это же так сложно.
>но тогда страдает камера
Поясни.
>скомпилировал пустой проект в андроидовский APK
>40МБ
Clipping planes у камеры, не благодари. Ну или мог бы догадаться использовать не целые числа, а делить координату на 10 или 100.
Смотрю всякие текстовые обучалки, читаю официальный мануал. Чому у меня коллайдеры не таскаются мышью? Ни боксовый, никакой. Написано, дескать, "держите шифт чтоб таскать", "Держите контрл и кликайте чтоб удалить точку". Но ничего не происходит. Если тыкать ровно в линию\точки просто спрайт остаётся выделенным. Если чуть выше - сбивается выделение.
Опять же не совсем понятно предназначение кнопки edit collider, т.к. тоже нихуя не меняется.
Что я не так понял?
Это то, что про коробки. Ну нет никаких "рычажков". В официальном, вроде, так же написано, просто без лишней инфантильности
Он котлету денег анимирует
Доброго дня, друзья
Обращаюсь к бывалым игроделам, которые собирали apk-шки на ведроид, и, возможно, сталкивались с подобной проблемой.
Я делаю игру (собственно на ведро) и недавно обнаружил, что она слишком много весит в сравнении с другими играми на моём планшете после установки. Сам apk-файл весит ~20mb, но в настройках системы, когда смотрю приложения, его итоговый вес после установки ~45mb. Для сравнения, Hungry Shark, который использует больше графических и звуковых ассетов, в установленном виде весит ~12mb.
Смотрел Editor Log, если я его правильно прочитал, то общий вес графена и звуков укладывается в 14mb (of course я всё компрессил), не могу понять, откуда нагрузка в дополнительные 30mb.
Помогите разобраться с проблемой.
Могу только сделать догадку, но, скорее всего, Юнити тянет кучу всякого кода/ресурсов вместе с собой. Там же всякая физика, обработка освещений, столкновений, теней и т.п.
Нативные приложения на Джаве естественно будут весить меньше, так как там только нужный код.
Попробуй погуглить, возможно можно как-то настроить это дело.
Ага. И я так думал.
Вот видите как нарисованы вот эти ребята. Вот мне вот так вот надо.
Неа. Прикол в том, что ребята состоят только из вершин, а месте каждой вершины рисуется квадрат, повёрнутый к камере. Поэтому "разрешение" картинки зависит от плотности вершин модели.
В уече искаропки можно так делать, в говно же движке будь добр сам писать велосипеды или покупать готовое решение
А не легче шейдер навесить на обычных кукол из кубов, чем рендерить через дохуя велосипедов? Да и не под Унити пилить. А так хуй знает. На каждую единицу площади можешь рисовать квадратик нужного цвета через какой-нибудь Unity.GL.
Шейдер-то мне и нужен. Только не смог я нагуглить как его сделать.
Вообще, задача не в рендере вершин, а в быстрой отрисовке массива цветных квадратов. Прост мне говорили что это самый лучший вариант.
Если вдруг кому неинтересно, я нагуглил.
отсюда берём первый скрипт http://www.kamend.com/2014/05/rendering-a-point-cloud-inside-unity/
добавляем его на бокс вместе с материалом отсюда https://github.com/erichmwu/PointCloudLoader
Получаем пикрил.
И всё бы хорошо, но квадраты странно повёрнуты и на андроиде эта тема не заработает.
Корочи реквестирую другие шустрые способы рисовать квадратики.
if (Input.GetMouseButton(0))
{
PerekatYoby();
}
В том же классе Input есть ивент для тачскрина.
> чтобы только при этом условии смогли осуществляться другие функции управления игроком
if (Input.GetButtonDown("Krutit")
{
if (Input.GetMouseButton(0))
{
KrutimYobu();
}
}
Бля, скобочку проебал.
С 4.чтототам норм поддержка 2д. Минус только в больших экзешниках для мобилок.
http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p5
Оно, очевидно, несколько устаревшее. И у меня возникли проблемы с системой частиц.
начиная с того момента, где картинка импортируется как текстура (у меня такого пункта даже нет), а ещё где "Измените шейдер "Particles" на "Alpha Blended""
В упор не вижу, что я должен нажать.
Материал партиклов меняется на развороте renderer компонента париклов, он в самом низу. Материал создаешь правой кнопкой мыши в папке. На материале меняешь в выпадающем меню шейдер на Alpha Blended, они там сгруппированы все в подменюшке.
Будет. Стоит.
Анон, вижу ты шаришь в партиклах. Как думаешь, их можно использовать для моей задачи? >>08819 То есть наклепать их пару тысяч по сетке, запретить поворот, установить непрозрачную текстуру и максимально увеличить время жизни.
Короче как считаешь, лагать сильно будет? Если нет, может накидаешь нужные тастройки, а то там дохера крутилок.
Короче затестил. Снова всё хуёва. 1000 партиклов дают 10 фпс.
Не очень подробно, но я понял, спасибо большое
Вот, даже знаешь куда тебе уебывать, молодец.
http://coremission.net/gamedev/unity-2017-chto-novenkogo/
Юнити становится доступнее для дизайнеров
Почему игровой процесс прямо в редакторе юнити отличается от игры на той же версии, но уже в билде(на ПК), притом что на андроиде то же, что и в редакторе, т.е. как по плану. ?
Если более конкретно, то один объект спавнится на пк версии за игроком по Z измерению , хотя в редакторе над ним, как и задумывала. ? ^w^ Как можно исправить ?
.
Няш,можешь написать подробнее?
Sorting Layer > Order in Layer
Как сделать так, чтобы в Меканиме анимация один раз проигралась и застыла на последнем кадре?
У меня смерть персонажа через жопу сделана (npc-death на пикче). Присваиваю bool переменной true на 0,3 секунды и возвращаю обратно false. Если же оставить тру, то персонаж будет непрерывно карячиться в предсмертных судорогах. Естественно, Loop в анимационном клипе отключен.
Однако способ с временной задержкой не всегда срабатывает почему-то. В 10% случаев анимация смерти не включается.
Это хорошо.
Однако я прочитал, что они так планируют затачивать движок под ААА-тайтлы, чтобы потеснить UE4. Очень хуево. Лучше бы WebGL довели до ума, сцуки.
Универсальный монстр не нужен. Развивались бы себе дальше в сторону инди-разработчиков.
Ты тупой просто, ты из энистейта запускаешь, у тебя этот ебаный бул остается активным и из состояния смерти снова переходит в состояние смерти (через энистейт).
Вместо була юзай триггер, довн, и все будет работать.
Да, я нубяра. Ничего не понял из твоего объяснения, честно говоря.
>ты из энистейта запускаешь
Имеешь ввиду экземпляр префаба? Конечно из него, у меня же несколько нпс в сцене, у каждого свои анимационные переменные.
>Вместо була юзай триггер, довн
А как его юзать? Алсо, мне нравятся булы, они удобные в отладке, на них удобно смотреть в окне аниматора.
Тэк, ладно, ща еще проще объясню
Во-первых, энистейт - Any State - бирюзовая хуйня на скрине.
Во-вторых,
>Алсо, мне нравятся булы, они удобные в отладке, на них удобно смотреть в окне аниматора.
Иди нахуй, нравится ему, блять, они не подходят в этом случае.
В-третьих, иди нахуй еще раз, долбоеб.
В-четвертых, хуяришь в окошечке меканима, где ты добавлял булы, плюсик и выбираешь триггер.
Суть этой хуйни, что она сама вызывается один раз.
Дальше идешь в скрипт, на место була с этой задержкой и избавляешься от нее и от була тоже по возможности еще избавляешься от задержки в развитии.
Вписываешь туда твойаниматор.триггер
Все блять, никакой ебани.
Удобно блять ему, нравится нахуй, пиздец горит
Спасибо, анон. Это офигительно, что такая полезная штука как триггер есть, не знал о ней.
Алсо, я не хожу ни в какие скрипты, а делаю FSM в Plamakere. Удобно. Нравится.
Пример какое поведение мне нужно на пике: сверху мало текста, снизу текст не входит в обычные размеры кнопки и увеличивает её высоту (считаем ширину фиксированной), точки - якоря привязки, рамка показывает границы объекта текста. Дальше я это собираюсь в префаб засунуть и динамически создавать из кода с иконкой, текстом и скриптом.
Родителю добавляешь горизонтал лайаут (ставишь все 4 галочки), картинкуе и тексту - лайаут элемент. Картинке задаешь мин width, тексту - min width и preffered width, последняя c запасом.
Убедись что Юнити обновлена до 5.6
>>09508
>Вот у меня в редакторе все кнопки в одном ряду, но в готовом билде одна из них сползает (между ними есть небольшое расстояние)-как можно исправить?Спасибо.
Вероятно, у тебя разное разрешение в редакторе и билде? Настрой рескалинг под разные разрешения. Или отключи его нафиг (Canvas -> CanvasScaller - > CjnstantPixelSize).
> и изменять размеры кнопки если не вписывается в текущие
А вот для это, кажется, нужно только min задавать, без preffered.
Но ведь деревья нужно растить, а не сокращать
Дебил, иди нахуй лучше. Даже я, блядь, вижу, что у тебя вопрос поставлен настолько хуево, что ты вообще не понимаешь что сам спрашиваешь, блядь.
с удовольствием в шкалку бы вернулся
Юнити - движок, андроид - платформа. Можно писать на юнити под андроид, а можно сперва бегло разобраться в вопросе прежде, чем делать судьбоносные решения.
Юнити для меня интересней андроида, но мне кажется его менее выгодно изучать так как срежняя зп ниже и он не так востребован(ну и народу его знает не так много)
да я и не толщу. просто такое виденье у меня. где я не прав?
Иди лучше в программач за учебниками по Яве. Тут игры делают, а не деньги зарабатывают. Релизнутые играбельные поделия на пальцах можно пересчитать.
Спасибо за совет, анон
Как сделать взаимозависимость переменных в скрипте? Нужно чтобы, например, переменная
"yellowpony" была в 10 раз меньше чем "bluepony", притом 2 переменная постоянно изменяется в процессе игры, спасибо за потенциальные ответы,
Ну в апдейте присваивай желтой синюю / 10, каждый кадр будет обновляться. Если так не подходит, то делай класс или структуру с этими переменными в качестве полей, у блюпони сделай сеттер, в котором сразу будет меняться значение желтой.
Ебать ты отсталый.
GameObject yoba;
Vector3 pos = new Vector3(10, 5);
Update()
{
if (Input.GetKeyDown("q"))
{
Instantiate(yoba, pos /тут что-то ещё, а может быть и нет/);
}
}
Ебать вы ленивые. Иди уроки смотреть. Это классика, это знать надо.
Спасибо няш, сможешь ещё ответить на вопрос : как отредактировать этот код , чтобы игрок(player) заспавнился на координатах (0;0;0)?
Пиздуй уроки смотреть, а?
Ты тот анимехуй, которому я писал, как разрешать игроку делать что-то ещё во время движения? Заебал уже, полистай документацию, там все предельно просто. У тебя гугл, блядь, есть, в него запросы проще писать, чем сюда.
>Instantiate(yoba, Vector3.zero, Quaternion.identity);
О, тогда Игрок остаётся на месте, но на спавне множество других игроков появляется , как сделать просто "телепортацию" игрока на эти координаты?
Player.Transform = new Vector3(10, 5, 0);
Итак, получилось таким образом:
Destroy(Player);
Instantiate(Player, Vector3.zero, Quaternion.identity);
Всё почти как планировал, однако нужно ещё закрепить камеру за "новым" игроком, как можнo
это осуществить?
когда уже эта мразотная свинья отправится в холодец?
Только новый игрок у тебя будет дефолтный без нихуя. Клонируй статы.
Как можно просто телепортировать игрока на определённые координаты (0;0;0), если одны из переменных становится < 10?
void Update()
{
if (transform.position.x < 0 || transform.position.y < 0 ||
transform.position.z < 0 ||)
Transform.Position = Vector3.zero;
}
А вообще иди нахуй, имбецил.
Репорт
Удвоил репорт.
Спасибо, братиш. Пойду читать, но ещё обязательно вернусь.
Все-таки дело в юнити ремоут, это он пидорасит качество. Если собрать и поставить апк, то все нормально. Правда размер текста отличается, сравните с тем который на предыдущих скринах. скринах.
Второй пик - оригинальный класс, в котором всё работает как надо.
Третий пик - консоль во время игры.
Чому 1 то?
А как их поменять в скрипте?
Кстати, забыл упомянуть, что проблема возника после того как я поменял Pixels Per Unit на всех спрайтах.
Переверни телефон.
Как сделать так, чтобы объект (Player) совершил какое-то действие(eat) после того как коллайдер другого объекта (Apple) стал находиться внутри коллайдера игрока (по x и y координатам, т.к. игра в 2д) ?
Это всё в туториалах и учебниках есть, сколько можно-то, а?
Поставь в коллайдере яблока галочку Is Trigger, прикрути к игроку скрипт, где будет функция void OnTriggerEnter(Collider other),
в котором будет получаться какой-нибудь уникальный для этого типа объектов компонент через other.GetComponent<AppleScript>()
(AppleScript это просто пример), либо проверяться тэг через other.tag, может ещё какой-то вариант есть, и если тэг соответствует яблоку или компонент != null, то выполняешь соответствующие действия.
И идите уже нахуй читать юнити в действии и смотреть туториалы, вместо того,
чтобы просить анона расписывать уже данные там вещи.
Спасибо за ответ, если тебе интересно, объясни пожалуйста подробнее этот пункт :
>если тэг соответствует яблоку или компонент != null
Т. е. как можно это записать кодом , например:
if (" тэг соответствует яблоку или компонент != null " ) {
" соответствующие действия"
}
Блэд, не толсти, сука, я же тебя за этот жир выслежу по ip и в жопу выебу.
Собственно, возникли два вопроса:
1. Не совсем понимаю, как работает А* и как его прикрутить. Типа мне можно задать одну клетку, условно, в 0.5 юнитиметров и проверять коллизии?
2. Хочу пиздатый бесшовный мир знаю, что нихуя не проработаю, но мне уже тупо интересно. Немного подумав (и нажравшись ссылок на платные ассеты), пришел к такой схеме: креплю через transform.position точку к игроку, храню там локальную позицию по отношению к текущему чанку, обновляемую каждый кадр. Чанкам задаю int[2] с координатами для сетки массивов int[x,y]. Если позиция точки слишком далеко от центра чанка и Игрок вот-вот увидит соседние чанки — инстанциирую их. Точка вместо просто координаты игрока нужна для катсцен, за ней ходит камера, хуе-мое.
Правильно думаю? Или где-то наебался?
>>10795
GetComponent<>() возвращает тебе объект, как в смысле инстанцию класса (скрипта). Если он не находит этот компонент в GameObject'е, он возвращает null. Соответственно, пишешь для своего игрового объекта игрока:
OnTriggerEnter(collision col) //бля, или там Collider в скобочках. Загугли.
{
if (col.gameObject.GetComponent<Yoba>() != null)
{
KrutimYobu();
}
}
Либ проверяй через тег все в том же OnTriggerEnter:
if (col.tag == "Yoba")
{
KrutimYobu();
}
Не забудь прописать проверку здоровья, если тебе уж яблоки надо подбирать.
Под заморозить я имел ввиду запретить её изменение с помощью мыши.
За обзор отвечает следующий код
rotX = Input.GetAxis("Mouse X") MouseLookSens; (вращение по оси Х)
rotY -= Input.GetAxis("Mouse Y") MouseLookSens; (вращение по оси У(т.е вертикально))
rotY = Mathf.Clamp(rotY, -60f, 60f);
(ограничение обзора по оси У)
transform.Rotate(0, rotX, 0); (поворот по оси х)
eyes.transform.localRotation = Quaternion.Euler(rotY, 0, 0); (поворот по оси У)
Важное уточнение я планирую замораживать камеру в инвентаре.
Т.е инвентарь закрыт- камера свободно двигается
Инвентарь открыт - камера не двигается
if(mogu_dvigat_cameru == true)
{rotX = Input.GetAxis("Mouse X") MouseLookSens; (вращение по оси Х)
rotY -= Input.GetAxis("Mouse Y") MouseLookSens; (вращение по оси У(т.е вертикально))
rotY = Mathf.Clamp(rotY, -60f, 60f);
(ограничение обзора по оси У)
transform.Rotate(0, rotX, 0); (поворот по оси х)
eyes.transform.localRotation = Quaternion.Euler(rotY, 0, 0); (поворот по оси У)
}
Типа ты заранее размечаешь клетки как проходимые/непроходимые а потом ищешь пути по ним
За такие решения надо пиздить палками. Сначала он хочет одно, потом другое, потом третье и вот у него ебаная туча флажков, которые нужно менеджерить.
Лучше бы сделали что-то поинтереснее. Например:
abstract class InputContext
{
internal abstract void UpdateInput() { }
}
sealed class CameraInputContext : InputContext
{
internal override void UpdateInput()
{
// поворачиваем камеру
}
}
sealed class GaySexInputContext : InputContext
{
internal override void UpdateInput()
{
// долбимся в срундель
}
}
class InputManager : MonoBehaviour
{
InputContext m_CurrentInputContext;
void Update()
{
if (m_CurrentInputContext != null)
m_CurrentInputContext.UpdateInput();
}
public void SwitchContext(InputContext inputContext)
{
m_CurrentInputContext = inputContext;
}
}
мимоПРОдебич
За такие решения надо пиздить палками. Сначала он хочет одно, потом другое, потом третье и вот у него ебаная туча флажков, которые нужно менеджерить.
Лучше бы сделали что-то поинтереснее. Например:
abstract class InputContext
{
internal abstract void UpdateInput() { }
}
sealed class CameraInputContext : InputContext
{
internal override void UpdateInput()
{
// поворачиваем камеру
}
}
sealed class GaySexInputContext : InputContext
{
internal override void UpdateInput()
{
// долбимся в срундель
}
}
class InputManager : MonoBehaviour
{
InputContext m_CurrentInputContext;
void Update()
{
if (m_CurrentInputContext != null)
m_CurrentInputContext.UpdateInput();
}
public void SwitchContext(InputContext inputContext)
{
m_CurrentInputContext = inputContext;
}
}
мимоПРОдебич
Ну, допустим, ты хочешь добавить функционал "оттарабанить в очко врага", но камера в это время будет фиксирована, следовательно ты прописываешь в классе это:
sealed class GaySexInputContext : InputContext
{
[SerializeField]
Ass m_TargetAss;
internal override void UpdateInput()
{
var horizontalFuck = Input.GetAxis("Mouse X");
var verticalFuck = Input.GetAxis("Mouse Y");
m_TargetAss.fuckDirection = new Vector2(horizontalFuck, verticalFuck);
}
}
И всё. Таким образом тебе не надо в одном классе прописывать огромное количество функционала, а потом ебаться с тем, почему у тебя 156 булевых флажков и кто в какой момент дёргается и как должен работать.
Если же ты хочешь добавить ещё что-то, то ты просто создаёшь новый класс, который отвечает за свою маленькую задачку и в нём прописываешь функционал для нужного тебе поведения.
>>11027
Шилдт тебе даст информацию о том, какой у тебя инструментарий есть в распоряжении. А то, чтобы не быть говнокодером достаточно почитать про такую вещь как паттерны и принципы SOLID. Например, вот неплохие ресурсы: http://gameprogrammingpatterns.com/ -- тут много хороших примеров от "ветерана" индустрии. который боевой код не писал, а только in-house инструменты лепил
https://refactoring.guru/ru -- тут тусуется выжимка из книжек по паттернам и подходам к разработке.
АНОН, БУДЬ ОСТОРОЖЕН! Паттерны не стоит применять всегда и везде. Используй их только тогда, когда у тебя появится реальная проблема с расширением и поддержкой существующего кода. И да, тот пост я написал специально, чтобы поднять проблему того, что к нам в контору приходят ребята, которые знают движок, но нихуя код писать не умеют. То есть да, они умеют писать "код". Он работает, он выполняет задачу. Это хорошо, но, к сожалению, с таким кодом работать довольно тяжело, т.к. порой получаются классы по 12к строк, в которых чёрт ногу сломит и потратит недели 2-3, чтобы разобраться в том, что там происходит.
>>11028
Сорян, писал с мобилки.
abstract class InputContext
{
internal abstract void UpdateInput();
}
Ну, допустим, ты хочешь добавить функционал "оттарабанить в очко врага", но камера в это время будет фиксирована, следовательно ты прописываешь в классе это:
sealed class GaySexInputContext : InputContext
{
[SerializeField]
Ass m_TargetAss;
internal override void UpdateInput()
{
var horizontalFuck = Input.GetAxis("Mouse X");
var verticalFuck = Input.GetAxis("Mouse Y");
m_TargetAss.fuckDirection = new Vector2(horizontalFuck, verticalFuck);
}
}
И всё. Таким образом тебе не надо в одном классе прописывать огромное количество функционала, а потом ебаться с тем, почему у тебя 156 булевых флажков и кто в какой момент дёргается и как должен работать.
Если же ты хочешь добавить ещё что-то, то ты просто создаёшь новый класс, который отвечает за свою маленькую задачку и в нём прописываешь функционал для нужного тебе поведения.
>>11027
Шилдт тебе даст информацию о том, какой у тебя инструментарий есть в распоряжении. А то, чтобы не быть говнокодером достаточно почитать про такую вещь как паттерны и принципы SOLID. Например, вот неплохие ресурсы: http://gameprogrammingpatterns.com/ -- тут много хороших примеров от "ветерана" индустрии. который боевой код не писал, а только in-house инструменты лепил
https://refactoring.guru/ru -- тут тусуется выжимка из книжек по паттернам и подходам к разработке.
АНОН, БУДЬ ОСТОРОЖЕН! Паттерны не стоит применять всегда и везде. Используй их только тогда, когда у тебя появится реальная проблема с расширением и поддержкой существующего кода. И да, тот пост я написал специально, чтобы поднять проблему того, что к нам в контору приходят ребята, которые знают движок, но нихуя код писать не умеют. То есть да, они умеют писать "код". Он работает, он выполняет задачу. Это хорошо, но, к сожалению, с таким кодом работать довольно тяжело, т.к. порой получаются классы по 12к строк, в которых чёрт ногу сломит и потратит недели 2-3, чтобы разобраться в том, что там происходит.
>>11028
Сорян, писал с мобилки.
abstract class InputContext
{
internal abstract void UpdateInput();
}
Вагон чая тебе.
Это не воркач, но интересно - возьмут в геймдев чувака который может писать и отлаживать код на c# (и всяком прочем) но при этом не знает типовых алгоритмов, теорию графов, высшую математику, и плохо знает стандартные библиотеки C# за пределом часто используемых.
Assuming что код чувака читаем.
ПС. А большой размер класса это всегда плохо? Даже если он решает (как кажется) единую задачу? Скажем, 50-70 внятно названных методов в классе (на 1000 строк)- это плохо? С учетом что где надо проставлено private, static и пр?
Это пиздец как плохо.
Ну, тут как повезёт. Если не топ контора, то вполне могут взять.
>>11049
Нет, это не всегда плохо.
Например, открой исходники string или List, там что-то порядка 2,5к строк, но там полей не так уж и много, т.е. тебе не надо запоминать огромнейший контекст происходящего в этих классах.
А я сталкиваюсь порой с тем, что люди пишут по 20-30 булевых флагов, каждый из которого либо используется в одном приватном методе, либо переключается где-то в других классах, не относящихся к этой логике (например, в рендере). Либо вместо того, чтобы завести структуру на 4 int, заводят массив из 4 int, а потом пишут километровый комментарий, что нулевой элемент массива -- это дилдо-пенисы, первый элемент -- турбо-мемесы и т.д. В результате, ты просто обязан знать каждый метод наизусть и должен знать flow происходящего.
>>11059
Что сказать-то хотел, молодой?
>Что сказать-то хотел, молодой?
Что вместо запоминания кучи флагов надо запоминать кучу классов и помнить кто что в инпутхендлер пихает. Что то запихнт контекст для жопоебли и тут же вместо этого впихнётся контекст для сосания хуёв, поставив нас перед вопросом почему же жопоебля больше не работает?
Можно конечно пихать контексты в стек, но куда проще в игре про поедание яблочка, если оно попало в коллайдер анимешного рта, сделать несколько флагов или фсм для камеры.
Ты не понимаешь сути ООП.
Анимешный рот есть не яблоки, а объекты типа Eatable, и ему совершенно похуй, яблоко это, груша или автомобильная покрышка (ну а вдруг).
Соответственно, на разных уровнях абстракции тебе надо представить или нарисовать либо простое взаимодействие Eatable-рот, либо внутреннее устройство яблока.
Это проще, чем держать в голове всю картину целиком.
Естественно, речь о нормальных проектах хотя бы с несколькими тысячами строк кода, а не о визуальных новеллах уровня gd.
>Eatable
IEatable тогда уж.
Только устройство поедания фруктов и марок никак не связано с переключением режимов камеры.
512x456
Только не объект Eatable, а интерфейс IEatable
Нет. Ты напишешь говны, решая через анал тривиальнейшие задачи.
Аноны, нужна ваша помощь.
Есть камера, эта камера по колесику ездит ближе-дальше, меняя distance.
Когда дистанция выходит за определенные рамки, камера дергает GameView.SizeMultiplier = newValue;
GameView стреляет событие, по которому объекты на сцене масштабируют себя в соответствии с новым SizeMultiplier, и выставляет состояние IsReady = false, пока этот процесс не закончится.
Камера ждет пока GameView.IsReady, потом выставляет себя на новую позицию, чтобы все выглядело как было.
Проблема в том, что объекты успевают перерисоваться в кадре с номером N, а камера "дожидается" готовности GameView только в кадре N+1, и пользователь видит глитч.
Как это можно пофиксить, кроме ручного рендеринга на текстуру?
Жду вот так:
yield return new WaitUntil(() => GameView.instance.IsReady);
Если я правильно понимаю, оно сразу после вызова проверяет состояние IsReady, и в следующий раз вызывается только при обработке следующего кадра.
При этом объекты меняют размер на том же кадре.
С учетом того, что сейчас любая макака может на юнити ебнуть свою игру, написав два вагона говен, вместо кода, то, думаю, умение в нормальную архитектуру - единтсвенное, что тебя может отличать от нее, так что продумывай иерархию и пиши по уму.
А вообще удваиваю вопос и реквестирую чего почитать именно по архитектуре
Суть: нужны отдельные меню для навыков, торговли, строительства и др., чтобы они вмещали в себя информацию и взаимодействовали между собой. Например, купил что-то в меню торговли, предметы сразу появились в меню инвентаря.
Что надумал:
1. Создавать новые сцены с погрузкой данных - медленно.
2. Реализовать новые камеры и меню-рисунки чуть в стороне и переключаться между камерами.
3. Сделать новые canvas'ы и переключаться между ними.
Вопрос: Как лучше это реализовать, чтобы меню открывались быстро. И как лучше спроэктировать взаимодействие между всеми ними(сейчас читаю про MVC паттерн).
Заранее спасибо.
upd: В общем как в героях, город отдельно, карта отдельно.
>Как лучше это реализовать, чтобы меню открывались быстро
Очевидно, не создавать меню каждый раз а прятать\показывать. Вероятно, пул объектов для элементов списоков
Суть вопроса такова - вот собрал я из спрайтов модельку персонажа (ну там тело, голова, бедра, игры и т.д.). Даже запилил какую-никакую анимацию стояния на месте и удара.
Но я хочу, чтобы на персонаже отображалась одежда, выбираемая в меню перед боем, как это лучше сделать?
Допустим, заменить спрайт тела с сохранением анимаций?
Может стоит сделать как-нибудь скелет из палок, а палкам цеплять спрайты и как-то менять их походу? Вообще, если кто поделится туториалом/примером как кастомизировать спрайтового персонажа без трогания анимаций - буду крайне признателен.
Чего блядь? Ты хочешь создать переменную разного типа, но одного названия, в зависимости от условия? Скорее всего, твоя проблема не в том, как это сделать, а в том, что такое вообще не должно быть нужно.
нет, мне нужно ссылаться на ту или иную переменную в зависимости от условий, которая принадлежит одному типу и ссылаясь на неё передать туда значение.
а то приходится писать что-то вроде
MyClass reference;
int? value = null;
int result;
if(Function(a, out result))
value = result;
else if(Function(b, out result))
value = result;
else if(Function(c, out result))
value = result;
if(value.HasValue){
if(govno)
reference.a = value.Value;
else
reference.b = value.Value;
}
но если бы можно было ссылатся на нужную переменную то я бы на неё ссылался ещё там где Function и делал бы там себе return или ещё чего. все это выглядит нечитабельным говном. мне интересно как сделать это более читабельным говном.
Game Engine Architecture
Game Code Complete
Книжки по софтодизайну вообще.
Много блогов которые ты найдёшь по запросам.
Это настоящее программирование, к нему нет туториала на ютубе.
Понель, спасибо, анон
мистер артист, шли бы вы дальше, это не для вас тут положили. нормальным людям глубоко похуй.
Хочешь красоты пиздуй на уеч, юнити доступный ширпотреб для непритязательных школьников-говноедов.
Не обижай Юнити, п-пожалуйста...
В простом шутане можно обойтись рейкастом. Догадываюсь, что можно и падение снаряда по параболе запилить.
Сейчас бы потратить месяцок-другой на оптимизацию того, что можно не оптимизировать, да, анончик?
Для выявления проблемных мест есть профайлер.
>>08310
Да, с вами всё тот же ебанат (под этим постом. Ну вы поняли)
бамп
Ни в коем случае не пользуйся гитом, я 2 месяца ебался с ним, чтобы он нормально мерджил, в итоге все равно через раз все разъебывает нахуй, что аж сцен не открыть, так заебались руками в текстовом виде сцену править, что вообще отказались от СКВ.
Юнити в этом плане - ущерб.
Ну или я косорукий даун, что скорее всего
Писать свой андроид-онли менеджер звуков и мьютить там?
На первом пике, как должно быть. На втором, как есть. И это происходит совершенно случайно. На 10 запусков, 5 работает как надо. Что делать? Тут два спрайта, земля и игрок. Они оба потомки проекта. Переопределить землю к игроку я не могу. Как мне сделать так, чтобы земля показывалась сзади? Я уже ахуел, а еще даже фон не придумал
Очевидно, что они создаются в рандомном порядке. Создавшийся последним будет сверху.
На видосик: https://unity3d.com/ru/learn/tutorials/topics/2d-game-creation/sorting-layers
Все исправил, смотрю дальше. Спасибо, анон
634x465, 0:19
Няшно.
680x382, 0:23
Да ясно что лучше, но иногда дольше ждёшь пока он прогрузится, чем код редактируешь.
Я что-то так подзадумался и осознал, что у нас никто одновременно над одной сценой/префабом не работает. Соответственно, мы просто не мёрджимся.
Может и вам так стоит попробовать работать?
мимоПРОпендаль
я встретил довольно много когда включил версию шарпа повыше. особенно юнити любит крашится к хуям при сериализации скриптабл обжектов. а так нормально если старой версией шарпа пользоваться, стало лучше.
Дохуя. Она не закрывается если выставить .net 4.6 и в конце стала падать буквально на ровном месте, когда я жал Play, даже без своего баг-репортера. Надо ждать хотя бы 2-3 патчей, не раньше осени будет пригодна к использованию.
Ну ахуеть теперь, советы уровня /gd/, ты ведь понимаешь, что если в команде 2+ человека, то кому-то придется по ночам работать, а это кромешный пиздец.
Если вы не можете нормально распределить роли, то это ваши проблемы.
Точнее говоря, мне это нужно что бы в ручную устанавливать положение окон - без учета реального разрешения получается ерунда..
Screen.width попробуй, или где-то там в Application. Иди нахуй короче, когда вы уже блядь в документацию научитесь? 5 лет прошло, а дебилы все те же вопросы задают.
>Screen.width попробуй, или где-то там в Application. Иди нахуй короче, когда вы уже блядь в документацию научитесь? 5 лет прошло, а дебилы все те же вопросы задают.
Ну не злись, няша. Я же нагуглил Screen.currentResolution а мог бы прийти с "зделойте мне заябись". Screen.height помогло, спасибо.
Лучше расскажи зачем ты вообще нубам помогаешь? Свой проект скучный?
Естественно, ведь в моем проекте нет чуханов вроде тебя. В нем вообще никаких чуханов кроме меня нет.
Лучше поясни - когда я добавляю объекту компонент-скрипт с классом-наследником MonoBehaviour это разве не означает создание нового экземпляра этого класса-наследника? А то у меня скрипт добавлен к разным объектам и он каким то образом берет инфу не из своего экземпляра.
Алсоу, они это серьезно: When you use C#, you must explicitly derive from MonoBehaviour.
(https://docs.unity3d.com/ScriptReference/MonoBehaviour.html)
А то у меня дофига классов которые от System.Object наследуют.
Можешь хоть от чего наследоваться, но если это компонент, то будь добр и монобихейвор добавить.
Про экземпляры все верно, но хуй знает что у тебя там в коде. Что вообще подразумевается под "берет инфу"?
Спасибо. А то уж я думал.. Но нет, это у меня в коду ошибки. У меня есть 1 объект в сцене - реализует всплывающую подсказку. И есть компонент который добавляется к элементам интерфейса и передает инфу в тот объект в сцене. Ну и я обосрался с обновлением инфы в этом объекте сразу из нескольких мест.. Разберусь как-нибудь.
>>17362
>Господа, "новый" .net помечен как preview же, поэтому ничего удивительного тут нет.
>>17624
>Падучей страдал даже когда я откатился на .net 3.5.
А 5.6 будет падать если я его заставлю работать с более новой .net? 4.0 или хз какую там можно натянуть
Он у меня и на 2.0 правда порою падает при отладке..
ScriptableObject нужен для того, чтобы хранить повторяющиеся статичные данные, чтобы сериализатор "вхолостую" не гонять.
Например, у тебя есть у тебя есть NPC, который должен говорить определённый текст. Текст весит 10Мб. Если ты будешь текст хранить в MonoBehaviour, то когда ты на сцене будешь держать 10 NPC, ты потеряешь 100Мб памяти, т.к. когда ты делаешь Instantiate, ты вызываешь процесс создания полной копии объекта.
Если же ты сделаешь отдельный ScriptableObject с этим текстом, и дашь ССЫЛКУ своему NPC, то при вызове Instantiate у тебя все копии объектов NPC, будут ссылаться только на этот ScriptableObject.
Сумбурно как-то объяснил засыпаю хуле, но надеюсь, что поймёшь.
мимоПРОбыдло
Хм, так намного понятнее на самом деле. Спасибо.
Вот у этого https://github.com/AlbinoGeek/Economy-Unity аж 6.0 заявлена. И судя по дате это не 2017. Я, правда, не проверял.
Нет, не будет. Натянуть нельзя (почти, через анус только). Юнити использует Mono 2.0, где реализован .NET 3.5.
Я, откровенно говоря, не сталкивался с какими-то лютыми проблемами, что мне пиздец как нужен был последний .net
Вскукареки кирюх, которые ищут оправдание лишь бы игры не делать. Вообще в роадмапе юнити есть намерение запилить последний net, нужно только потерпеть.
>Господа, подскажите пожалуйста, а нахуя вам самый последний .net?
>Я, откровенно говоря, не сталкивался с какими-то лютыми проблемами, что мне пиздец как нужен был последний .net
Часть сахарку недоступна в 2.0. Автоматические properties например. Linq говорят память дико жрет в этой версии. Не, жить можно конечно, но хотелось бы лучшего.
Всякие говноделы вставляют Linq (которому в гейдеве вообще не место) в апдейт и потом жалуются что ТОРМАЗИТ, вся суть кириллов.
Как можно реализовать, чтобы объект или спрайт было видно сквозь все объекты
В StrangeIoC меньше ебанавтики. Конструкция типа injectionBiinder.Bind<IPool<Foo>>().To<Pool<Foo>>() работает.
Опача.
Браток, а можешь пояснить за IoC-контейнеры? Я совсем не понимаю, куда их можно воткнуть, кроме как замена синглетонов.
https://youtu.be/HlDGSStxuHI?t=6m18s
Вот в этом моменте господин ведущий меняет с Local на Global и объект больше не проваливается, то есть перемещается лишь в горизонтальной плоскости (если я правильно понял), но у меня ничего не меняется, летает по всем трем осям при попытке перемещения что так что так. В чем дело?
Ну а пока мой друк-художник пинает хуи, я принялся копаться во всём этом, собственно вот продукт моего копания, друзья:
Значица, что есть?
Спрайт машины из гугла.
Море крови, море зомби.
Пулемёт (или че это, я сам хз, че сделал) и нож.
Зомби.
Зомби-плевки (они плюют).
Невозможность пройти игру.
Невозможность выйти из игры.
Возможность убивать врагов.
Возможность почувствовать себя чмом.
https://yadi.sk/d/4U1nnyPw3LDSmX
Забыл добавить, что нож находится чуть выше входа в здание. Ну и само здание лучше не обходить, а то такое себе выйдет. Я завтра, наверное, буду пытаться сделать так, чтобы зомби сквозь стены не агрились.
>Крайне рекомендУется купить/скачать книгу Unity in action (Unity в действии)
спасибо, будет чем заняться на досуге
Попробуйте выключить компьютер и снова включить. В Global можно и по вертикали двигаться. Ты за Y-ось точно не дёргал?
Не просто замена синглетонам. Синглетон - это Stuff.Instance, привязка к конкретной реализации. Ты же можешь привязываться к интерфейсу, не зная ни реализации, ни кто и где создаёт эту реализацию.
Бонус-трек: я использую StrangeIoC ещё и для биндинга экранов GUI. У меня нет некого GUIManager'а с кучей экранов в полях, как нет и полей в экранах для перетаскивания ссылок на иные экраны. У меня есть [Inject("Имя экрана")], ноль обезьяньей работы как результат.
Мелочь эту не пойму. Если дергать за (анус) сам объект, то он летает хуй пойми как, а если за кубик, грани которого совпадают с осями координат, то все норм и он перемещается как надо, чисто по горизонтали, почему так?
досмотри до конца
В логе вот что написано. Хуй процентов плюс хуй процентов плюс 11% библиотек равно сто процентов. Заебись.
Чего делать?
И, случаем, нет ли перезалитых видосов уровня?
У тебя или мейкхьюман больной или юнити. Потому что я сиськи импортирую из 3д макса и у меня все норм. Еще есть такие варианты:
1) В настройках импорта fbx ставишь optimize bones галку. Так нельзя.
2) Неправильно экспортируется из мейкхьюмана, и в fbx по факту нет таких костей.
Ну ладно, а теперь мой вопрос. Делаю персонажа с функцией динамического раздевания. То есть по событию одежда сползает с тела и падает на пол. Реализую это через всего один убогий blend shape (или morpher в 3д максе), в которой зашита модель скомканной на полу одежды. Все вроде норм, но одежка заскиненна на тело и в процессе раздевания она деформируется от движения костей, так как идет анимация.
Можно как-нибудь так сделать, чтобы Skinned Mesh Renderer компонент перестал работать с костями? Я читал доки, вроде метод запекания в Mesh есть, но это как-то слишком сложно, как проще сделать?
Под персонажем может и женский пол иметься ввиду.
Нет, у меня игра не про еблю и тем более не про пидоров.
Для геймплея фича сползания одежды особого значения не имеет, однако чтобы у игрока крепче шишка стояла хочется сделать по уму.
Не совсем понял что тебе нужно, но на ум приходит что-то такое
SkinnedMeshRenderer[] renderers = this.GetComponentInChildren<SkinnedMeshRenderer> ();
if (renderers.Length > 0) {
for (int i = 0; i < renderers.Length; i++) {
renderers .bones = null;
renderers .rootBone = null;
}
}
Ну, само собой, вместо this передай то что надо, если скрипт не на самой одежде висит.
Гугл ничего не дал, ты моя последняя надежда. Пытаюсь применить к rigidbody (3d) постоянное ускорение при включённой гравитации. Проблема в том, что движение модели происходит всё-равно рывками как бы я не дрочил. Решения из гугла желаемого эффекта не дали.Уже и через выставление velocity в update делал, и через moveposition. Один хер движение на высокой скорости происходит рывками.(камера через линейную интерполяцию фолловит цель, рывки видно и на пека, и на телефоне)
ЧЯДНТ? Не могу понять, неужели в единстве физон настолько тяжёлый для телефонов?
И в FixedUpdate, и в LateUpdate, и в Update. Уже тупо перебираю, один хер какие-то непонятные рывки.
>>19997
Пробовал с дельтой при MovePosition, толку нет. В Velocity тоже.
Предлагаешь двигать через MovePosition через интерполяцию между current - end позициями? Тогда же смысла от rigidbody нет. Свой велосипед будет же.
Я пытаюсь добиться плавного движение персонажа по направлению одной оси с притяжением и угловым ускорением Эндлес раннер на 2д плоскости в 3д пространстве
Я зафризил у rigidbody rotation по всем осям и положение по Z оси.
Посмотри сюда: http://www.kinematicsoup.com/news/2016/8/9/rrypp5tkubynjwxhxjzd42s3o034o8
Может поможет.
Полистал, судя по картинкам именно то, что мне нужно. Как раз я не до конца понимаю как устроен рендер пайплайн в единстве. Спасибо, анон.
Как, мать его, обработать событие по простому тапу на спрайт/UI-Button?
Вот есть у меня в коде
if (Input.GetKeyDown (KeyCode.LeftArrow)) {
//йоба-код
}
Как мне заменить условие, чтобы этот код сработал при тапе? Гугл какие-то слишком мудрёные варианты выдаёт с кучей лишних условий.
на камеру ебашь ригидбоди с интерполяцией и двигай через addforce
А можно человеческим языком? По твоей ссылке ещё пара ссылок, которые на вопрос не отвечают.
Не не получилось. При .bones = null у меня модельку одежды выварачивает на 90 градусов по оси х. Хз, почему так, возможно проблемы с моделлингом. Ну ладно, хуи с ним, эффект все равно меньше секунды проигрывается.
Аноны, а у кого есть опыт работы с кастомными костями в Mecanim? Вот, к примеру, дополнительная кость для плеча для более качественной анимации. Однако если модель импортировать в меканим, то кость там эта будет, а вот ее анимации - нема.
То же самое могу сказать и про анимацию морфов. Сами морфы в меканим поступают, но не их анимации.
fbx сохраняю в Motion Builder.
Ну, ты попробовал хотя бы, а потом уже просил что-то человеческим языком.
Для тупых лентяев, поясню.
Берешь сцену, ебашишь Button в Canvas, ебашишь на сцену EventSystem. Пишешь свой сраный скрипт, в котором реализуешь интерфейс. Вешаешь скрипт на кнопку.
Запускаешь плеер и жмёшь сука на кнопку.
Ананас, я это всё понимаю. Я тебе даже больше скажу — при создании кнопки и Canvas и EventSystem создаются автоматически. И они у меня уже даже есть. И даже "сраный скрипт" написан.
Я же не об этом спрашивал. Я спрашивал какой void вешать на обработку тапа, только и всего.
Чего ты злюка такой?
Нет, это нормальное сексуальное желание.
Ну вот как сделать упругую задницу без пары дополнительных костей, а как огромный мамон жирдяю?
Эх, печально. Походу, придется экономить на качестве анимации, если хочу попасть в TWG.
Так ебашь кости в максе или блэндере, а потом пихай уже в юньку.
проиграл с костей, переходящих из спины в хвост
Ну а если у меня в сцене например несколько раз используется только одна кнопка из этого пака? Он скопирует её себе, или он и так использует копию для каждой отдельной кнопки?
Ну ладно. Спасибо.
@
РЕФАКТОРИНГ
@
РЕФАКТОРИНГ
Переделываю симуляцию орбитальной механики в третий раз, чувствую себя ебланом.
Первый раз у симуляции и отображения была большая связанность.
Ок, похуй, отвязал, приделал ивенты. Получилось немного сложна нипанятна, класс-контейнер векторов состояния (position, velocity) содержит ссылку на объект, представляющий данные по орбите о всяких аномалиях, наклонениях и прочем, и еще одну ссылку на объект, который обеспечивает гравитационное взаимодействие.
Сейчас сижу упрощаю, выпиливая вычисления параметров орбиты в статический класс и объединяя гравитацию и вектора состояния в одном классе, хорошо хоть что заодно добавил поддержку сейв-лоада через json.
Я правильно понимаю что fixedUpdate выстреливает каждый квант времени и отрабатывает даже в ущерб фпс? Т.е. если он не успевает отработать достаточно быстро то рендер кадра будет пропущен и таким образом будет падение фпс?
> Я правильно понимаю что fixedUpdate выстреливает каждый квант времени и отрабатывает даже в ущерб фпс?
фиксед может сработать хуилиард раз за кадр, но его последствия будут рулить апдейт или лэйтапдейт
2д игра.
Нет. Только то что имеет связи через сцену, ресурсы или ассетбандлы идёт в билд.
Им самым. Хотя планирую переделать на Рунге-Кутту.
Win8.1, тоже.
Ты небось ресурсы не высвобождаешь, типа там текстурки, меши и пр. GC за тебя это не сделает.
public class NewBehaviourScript1 : MonoBehaviour
{
public GameObject Action;
void Start()
{
Action.SetActive(false);
}
void Update()
{
}
private void OnCollisionEnter2D(Collision2D collision)
{
Action.SetActive(true);
}
}
разобрался, все работает
Анончик, всегда было интересно как в подобных симуляторах просчитывается длинная незамкнутая орбита?
имею в виду траекторию, выходящую за пределы гравитационной ямы земли, там ведь блядские планетки движутся, направление векторов меняется.
Просто берешь какие-то временные точки и последовательно моделируешь, а потом по ним интерполируешь траекторию или что-то прям хитровыебаное?
Строишь гиперболу, которая упирается в границы SOI.
В точке выхода из SOI берешь значения векторов скорости и положения относительно нового родительского тела (Земля, при выходе из SOI Луны), по ним считаешь кеплеровы элементы орбиты вокруг нового родительского тела, по этим элементам рисуешь новую траекторию.
В общем прост немного векторной алгебры.
> Посоны, насколько стабильно отключение компонентов?
Ну если компонент уже не нужен, то его отключение стабильно на 100%.
Телепатов нет, никто не знает чего там у тебя в скриптах творится.
стабильно или нет зависит только от твоих скриптов, все значимые баги самой юнити пофикшены с версий 0.000000000001
Что тебе мешает просто чейнджлог почитать?
Все на честном слове, так что можешь не париться
Сап, анон. Вкатываюсь в юнити потихоньку. Посоветуйте адекватный какой-нибудь ассетс - спрайт менеджер. Есть вообще такие?
Ну вот ты и ответил сам себе:
>Есть на ютубе хоть один русский обзор с обновлением 2017.1? Полный обзор, с разбор ченджлога.
>Пошел нахуй
Пустой объект с компонентом-синглтоном.
где-то они там писали на эту тему немного
https://unity3d.com/ru/learn/tutorials/projects/2d-roguelike-tutorial/writing-game-manager
Кто знает как делать правильно, чтобы просто подцепить новую модельку с костями на старый префаб и все?
Спасибо большое, а еще вопросик:
То есть в пределах сферы влияния игнорируется влияние тел, отличных от родительского?
public NewPlayer theNewPlayer;
int i = 3;
publiс void Tutorial()
{
while (i > 0)
{
theNewPlayer.gameObject.SetActive (true);
i--;
}
}
}
Сука. быстрофикс
public NewPlayer theNewPlayer;
int i = 3;
public void Tutorial()
{
while (i > 0)
{
theNewPlayer.gameObject.SetActive (true);
i--;
}
}
}
Если собрался вызывать с апдейта, то while не подходит, так как вайл пробежит за один кадр - это раз.
Во-вторых, целесообразнее для "временных" задач юзать карутины, либо Инвоки
Для невозмущенной орбиты. Для спутников считается реальная траектория, на моем скрине в виде точек поверх орбиты.
main() нет, но ты можешь сделать свой. Для этого используешь атрибут https://docs.unity3d.com/ScriptReference/RuntimeInitializeOnLoadMethodAttribute.html и создаёшь свой main(). Там создаёшь юнити-объект, помечаешь его как DontDestroyOnLoad и получаешь свой главный цикл. Отсюда работаешь как будто у тебя нормальный движок. Я так годами делаю.
Задача трёх и более тел не имеет аналитического решения - потому только моделируешь.
Можно, но это нужно настраивать light cookie и tonemapping
Есть один собственный тип данных (List<> состоит из всяких там float, bool и т.д.), который я сериализую, отправляю по сети, а потом десериализую.
Все бы ничего, но после сериализации там 2к байт. Это чото дикое дохрена. Как уменьшить?
Ручками запихиваешь в стрим, а потом так же вытаскиваешь. Ибо автоматическая сериализация генерирует дохуя мусора.
Ньюфаг итт.
Хочу написать простой скрипт, который будет толкать объект сразу после его создания по нажатию лкм.
У меня он только создается, а толчка не происходит. Что не так делаю?
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Instantiate(bullet, new Vector3(7, 1, 7), Quaternion.identity);
rb = GetComponent<Rigidbody>();
rb.AddForce(transform.forward * power, ForceMode.Impulse);
}
}
Так, на всякий случай. Риджидбади на объекте висит хоть? Переменная power определена?
Скрипт на чём висит?
> rb = GetComponent<Rigidbody>();
Ты тут получаешь компонент не пули, а объекта, на котором висит скрипт. Тебе надо писать
rb = bullet.GetComponent<Rigidbody>();
Ах да, transform.up я прописал потому что мне так захотелось. Поменяй на transform.forward.
Уже
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
SurrogateSelector ss = new SurrogateSelector();
AddSurrogates(ref ss);
formatter.SurrogateSelector = ss;
formatter.Serialize(stream, Object);
byte[] buffer = stream.ToArray();
но чот обьем данных пугает.
Спасибо.
Никогда не сериализуй generic коллекции, блэт. Ты пакуешь не только данные, находящиеся в ней, но и саму реализацию коллекции.
Во первых, ты определённо делаешь что-то не так. В идеале, модель, состоящая из типов значений (int,long,float) сериализируется идентично маршалингу в памяти. Создай структуру/класс, назови её FuckingPackage, сериализуй её (нахуй тебе ss?). Explicit и Implicit преобразования допишишь по ходу дела.
Во вторых, ты можешь преобразовать в массив свой список, а затем его сериализовать. Хотя если, понапихал не элементарные типы в List<Object>, то это тебя не спасёт.
В третьих, кидай пример того, что ты пытаешься сериализовать. Не данные, а типы данных. Мы тут не экстрасексы, чтобы по твоему жиру определять размеры типов данных.
А я пока задам свой вопрос. Кто-нибудь знает пример реализации 2D-изометрии в Unity? В частности интересуют коллизии и рейкастинг.
public void OnValueChanged(float value)
{
GameObject.Find("Camera").transform.eulerAngles = new Vector3(90.0f * value, 0.0f, 0.0f);
}
Суррогат нужон потому, что *ятский Vector3 почему-то не сериализуется нифига, а он у меня в классе присутствует.
По сути оверхайпнутый таймлайн ( который уже давно кор фича во всех остальных движках, который в юнити наконец-то к концу 2017 года запили, браво!) единственная новая фича в юнити за последние - сколько уже с момента выхода 5-ой версии - 3 года?
Пора перекатываться на godot. С юнити все ясно.
>Ты пакуешь не только данные, находящиеся в ней, но и саму реализацию коллекции.
какую еще реализацию. данные записываются так, как их записывает форматтер. В частности бинари форматтер.
Шта?
Спрайтрендерер и обычный рендерер это разные компоненты, которые вполне схавают одно и то же изображение.
От 0 до 1
Форматтер проходится по мете класса и сериализирует всё, что необходимо для восстановления объекта. Проблема в том, что он сериализует помимо данных List<T> ещё и внутренние переменные класса, помеченные на сериализацию. Вот тебе пример на три элемента и один Int64.
https://gist.github.com/anonymous/cef8b4d9268a5e309825e0a8416de7f8
Сейчас, смотря на реализацию List<T> и его сериализацию, я больше задаюсь вопросом каких хуев непомеченных он напихал в List<T>, что у него ебанутые размеры выходили.
Даже без List<> этот пакет после сериализации весит 1296 байт. Что чот жырненько.
Чтобы не смущать, переменные намазал писосом.
public NetDataFast netFastSendMessages = new NetDataFast();
[System.Serializable]
public class NetDataFast
{
public float pisos1;
public float pisos1;
public bool pisos1;
public Vector3 pisos1;
public Vector3 pisos1;
public Vector3 pisos1;
public bool pisos1;
public bool pisos1;
public int pisos1;
public int pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public string pisos1;
public bool pisos1;
public bool pisos1;
}
Даже без List<> этот пакет после сериализации весит 1296 байт. Что чот жырненько.
Чтобы не смущать, переменные намазал писосом.
public NetDataFast netFastSendMessages = new NetDataFast();
[System.Serializable]
public class NetDataFast
{
public float pisos1;
public float pisos1;
public bool pisos1;
public Vector3 pisos1;
public Vector3 pisos1;
public Vector3 pisos1;
public bool pisos1;
public bool pisos1;
public int pisos1;
public int pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public bool pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public float pisos1;
public string pisos1;
public bool pisos1;
public bool pisos1;
}
Awake у самого первого компонента в первом объекте в стартовой сцене
>и сериализирует всё, что необходимо для восстановления объекта
Ух ты ж блять, он записывает типы перменных и их именя, а еще 4 байта как число элементов в списке. Вот сука прожорливая! Ну нахуй, лучше свой велосипед напишу.
Нет, на текстуре можно настраивать wrapping, а на спрайте нет.
Типы данных записываются как строка полностью с полным namespace'ом, и именна переменных тоже записываются. Отсюда у тебя размер.
Ох ты ж ешкин кот.
Щито же делать?
Руками конвертить свой тип в byte[] и отсылать?
Что рекомендуют ведущие собаководы страны?
https://gist.github.com/anonymous/3622850b22182f6053b343fb2170f9f4
Vector3 нельзя сериализовать. Ты можешь его преобразовать в свой вектор, а затем его записать. И да, второй вариант сработал, но тебе придется знать структуру элементов массива и ты можешь запросто её проебать. Добро пожаловать в протоколы
А, если у тебя для сети, то очевидно нужно использовать другую сериализацию.
В контексте юнити и высокой производительности, тебе нужно использовать строго BinaryReader/Writer.
Если любишь пердолится с библиотеками, то можешь посмотреть, например, flat buffers. Это просто сгенерирует для тебя классы, в которых внутри используются опять-же BinaryReader/Writer
Но я не вижу смысла, проще самому
Кстати этот челик прав. Я уже и забыл о существовании BinaryWriter/Reader. Это будет гораздно эффективней сериализации в плане объема.
Хороший мой, для этого и нужен SurrogateSelector
ты просто описываешь отдельно Суррогат для Vector3, а потом нашему BinaryFormatter его скармливаешь.
SurrogateSelector ss = new SurrogateSelector();
AddSurrogates(ref ss);
formatter.SurrogateSelector = ss;
И сериализатор и десериализатор мгновенно понимает все что тебе хочется.
>>22654
Для сети. Пердолится с внешкой нелюбит, буду пердолится с тем что ты сказал. Спасибо тебе, няша, твоя мать - уважаемая женщина, а отец - настоящий мужчина.
Я до них не дошёл ещё. Челик спрашивал про сериализацию, я пояснил. Хотя челик языка толком не знает. А ещё можно въебать System.Net; и сделать минет по UDP
>А я пока задам свой вопрос. Кто-нибудь знает пример реализации 2D-изометрии в Unity? В частности интересуют коллизии и рейкастинг.
На гитхабе всякие рпг-движки были
На гитхаб и я могу говна дать, а есть best-practices?
Byte на символ, а ты хорош (нет)
>The Wheel Collider computes friction separately from the rest of physics engine, using a slip-based friction model. This allows for more realistic behaviour but also causes Wheel Colliders to ignore standard Physic Material settings.
Я правильно понял, что на колеса не влияет материал того, по чему они едут, и мне придется в скрипте колеса модифицировать?
Рейкаст не годится.
И побочный вопрос, как лучше настроить сетевые приблуды - Network transform и прочее, чтобы не было скачков при полах тел, движениях и прочем? Я так понял, что чем больше Snap Treshhold и чем больше Send Rate, тем плавнее.
ой, ебан, я dynamic float не поставил
Отвечаю(сам себе), кинематику плавно двигать гораздо легче, если с твердотельной физикой приходится колдовать, кинематика плавно движется на нормальных настройках нетворк трансформа(простым транслейтом). Подозреваю, что и нагрузка без просчета физики гораздо скромнее.
Вопрос про твердые тела остается в силе( в смысле, как сделать, чтобы они плавнее летали, кроме snap treshhold++ и send rate++).
И еще вопрос про реализацию хелсбаров - как правильнее, вынести их на Screen Space Canvas, или крутить-вертеть в World-Space, обращая к камере? Сколько ни смотрел туториалов, все далают прямоугольник в ворлд спейсе и крутят его каждый фрейм. Это правильно?
>вынести их на Screen Space Canvas
Охуеешь с масштабированием и пережиманиями хэлсбаров, если будешь делать на канвасе
NetworkTransform на всем подряд - это вообще дурная практика? Как я понимаю, альтернативный вариант синхронизироваться через SyncVar?
А ты сначала расскажи, чем оно лучше чем раскрученные Playmaker и Behaviour Designer с видеотуторами и огромным комьюнити.
Расскажи мне сказку. Как дед насрал в коляску.
Запилил сравнительно рабочий LLAPI сетевой код. Раз в 0.05 секунд я формирую пачку пакетов в Queue, и исполняю SendQueuedMessages, в итоге каждому клиенту отсылаю пакеты с действиями других клиентов: 10 клиентам я отсылаю по 10 (с данными каждого клиента) пакетов. Итого, 100 пакетов.
И тут начинается говно, являющееся следствием моей говнорукости: если канал Unreliable\Relible и т.д. тогда все это при клиентах больше 1, просто пиздейки тормозит.
Если я посылаю через StateUpdate канал, то "кто первый тот и папа", и у первого клиента ни 1 лага, зато остальные клиенты просто не получают ни пакета.
Расскажи мне, ГД, как реализовать отсылку сервером постоянно обновляющихся данных клиентам? Как делают большие мальчики?
Основы гугли, gaffer on games, source multiplayer networking - лучшие статьи, коротко и ёмко дают базовые знания.
А клиенты кто? Веб-браузеры что ли? Если я правильно понимаю, LLAPI в Юнити предназначен для общения по HTTP. С твоей частотой пакетов надо забивать хуй на HTTP и ебашить двоичный потоковый протокол обмена данными через UDP.
1) Тем что Playmaker для совсем маленьких сделан и не нужен для тех кто готов кодить
2) Тем что NodeCanvas официально поддерживает больше других полезных ассетов которые лично мне интересны
3) Тем что NodeCanvas может использоваться как альтернатива и Behaviour Designer и Dialoge System for Unity, последний я попробовал скачал на торрентах, канваса там нет к сожалению и мне он не понравился как раз тем что он пытается за тебя сделать слишком много. Нод же выглядит не как инструмент "для чайников" который обещает золотые горы и готовые решения, а просто как полезный инструмент для визуализации и систематизации.
Клиенты как и сервер - приложение.
Кидаюсь голыми byte[] через набирание кучи пакетов через
NetworkTransport.QueueForSending
а потом пачкой инициирую отсылку
NetworkTransport.SendQueuedMessages
С одним клиентом все красиво - глаз не отодрать. Уже с двумя - анал карнавал.
Загуглил, читаю, но интересует мнение сообщества, как впринципе реализуется подобное.
Я думал о 2х путях:
1. Держим параметры всех заинтересованных персонажей в одном массиве, отсылаем его. Но в таком случае в один пакет все не влезет, т.к. переменная выйдет довольно большая по размеру, будет фрагментироваться, а на клиенте пересобираться, что неоч для частой пересылки данных.
2. Бомбардировать мелкими пакетами, что вызвало у меня описанную выше реакцию.
Вот я в тупик в встал, как ленивое хуйло и изобретаю интернет тут с вами.
Смотри че в профайлере, скорее всего ты слишком часто делаешь new byte[] и потом это говно собирается коллектором, вот и тормозит
У тебя архитектура какая, с этого начни? Клиент-сервер или птп?
Чем тебя стандартный подход не устраивает, который все поголовно используют? Или надеешься придумать что-то лучше, чем придумали профессионалы, много лет решавшие эти вопросы в боевых условиях высоконагруженных серверов?
Клиент-Сервер. не понял что имеется в виду под стандартным подходом. HLAPI? Он тупо неудобный. Или что?
Ок, в чем именно лаг проявляется? Может быть такое что пакет2 доходит раньше чем пакет1 и у тебя эта хуйня никак не чекается
Для диалогов и поведения же.
Я тебе названия статей дал, прочитай их, блеать.
Там все твои проблемы описаны и описаны стандартные и проверенные пути их решения. Что тебе ещё надо?
Может просто наговнокодил чего-то не того.
Ты учитываешь, что SendQueuedMessages ничего сразу не посылает на самом деле? Почитай документацию ещё раз.
У меня есть 3д-персонаж с rigid body. К нему приделана капсула для коллизий. Есть анимция, где персонаж присел.
Вопрос, как уменьшить высоту коллайдера до высоты персонажа в приседе, чтобы он мог прятаться под столом?
Можешь ткнуть меня носом? В каком-то 2д туториале они рекомендовали делать коллайдеры на ноги и голову, но это была старая версия, ресурсы уже недоступны.
С меня нефть и ассеты
> как уменьшить высоту коллайдера до высоты персонажа в приседе, чтобы он мог прятаться под столом?
Ёпту, просто в момент приседания уменьшай размер коллайдера по Y.
В свойствах коллайдера? Он ведь свзяан с моделью, а не с анимацией, как понимаюи не меняется динамически.
Это же тред юнити. Зависит от того, что наскриптит.
Потому что скейл это не приближение, а тупо часть экрана, с соответствующим разрешением, насколько я понимаю.
Похоже я даун, и у меня она работает как приближение.
Притом. Это тупо юнитевская залупа, работает также, как если бы ты скриншот увеличил. Короче хуй знает для чего она нужно, программисты тупо бабки отрабатывали видимо.
Напомнило игру про кота
Необходимо реализовать получение урона в определенной области (2д). При нахождении объекта в определенном слое вызывается метод ResiveDamage(). Всё работает как надо, только метод вызывается очень быстро (снимает всё хп за секунду). Нужно реализовать задержку перед вызовом метода?
Оно в фиксед апдейте вызывается? Тогда просто выставь соответствующий множитель, чтоб вычиталось сколько надо. Либо заведи переменную-таймер, если хочешь, чтоб здоровье уменьшалось не плавно, а раз в секунду или типа того. И каждый раз к ней прибавляй соответствуюзий дельтатайм.
Используй лучше корутин. Я когда начинал боялся его как что-то сложное, оказалось это очень крутая штука с интересной механикой работы. Мне корутины прямо моральное удовлетворение доставляют.
Я с этим ебался 3 часа. Гуглил, читал, пробовал корутин, выходило не так как нужно (метод продолжал вызываться работать даже после того как объект покидал область). Пробовал waitforseconds. Читал документацию по time и нихуя не понимал.
В итоге >>23774 подтолкнул на верное решение: две переменные, одно выражение, одно условие и инкремент. Охуенное тебе спасибо, добрый человек.
Типа, знаток аглицкого увидел ошибку. Resive вместо receive. Плюнь на него.
>облемы описаны и описаны стандартные и проверенные пути их решения
NIET это не так.
>>23369
Лаг в том, что пакеты просто не доходят до клиентов. За минуту умудряются долететь 1-2 пакета. В то время как первый клиент получает все. Предполагаю, что это из-за типа канала (StateUpdate), но при обычных Reliable "отклик" очень долгий.
>>23378
Блин, ну конечно наговнокодил, это же очевидно. Но вот где и в чем - пытаюсь понять.
Учитываю, но судя по симптомам, это не важно.
>Блин, ну конечно наговнокодил, это же очевидно. Но вот где и в чем - пытаюсь понять.
Ты используешь зачем-то SendQueuedMessages().
Используй NetworkTransport.Send()/SendMulticast().
Юнити все сообщения и так буферизует какое-то время, а потом отправляет пачкой.
>Ты используешь зачем-то SendQueuedMessages().
>Используй NetworkTransport.Send()/SendMulticast().
Фактически это одно и то же, если не ошибаюсь, просто при выставленном SendDelay=0, я могу контролить когда именно я отправляю пачку пакетов. Так даже в доках сказанно. Тем не менее, пробовал и обычный Send() - те же яйцы.
Любопытный факт, на клиенте проверяю MessageQueueSize
(NetworkTransport.GetIncomingMessageQueueSize) и с удивлением узнаю, что с какого то перепугу, очередь растет, несмотря на то, что я делаю Recieve().
это не одно и то же. SendQueuedMessages работает просто как flush. Смысла кириллу контроллировать когда точно отправлять данные я не вижу. Ты только все усложняешь.
>>23951
>Тем не менее, пробовал и обычный Send() - те же яйцы.
Ну тут нет экстрасенсов, чтобы определить что ты там наговнокодил. Может ты на самом деле только думаешь, что делаешь receive()
>это не одно и то же. SendQueuedMessages работает просто как flush. Смысла кириллу контроллировать когда точно отправлять данные я не вижу
Я скорее всего ошибаюсь, но это вроде бы не так. Ты набираешь очередь сообщений (иногда это нужно, например отдельное сообщение по действиям каждого клиента), а потом ее пулишь. Когда происходит batchSend оно кидается в лицо клиенту. Но, возможно у меня мозг сгнил, не исключаю.
>Ну тут нет экстрасенсов, чтобы определить что ты там наговнокодил
Все норм, просто когда считывание происходит с такой же частотой что отсылка, оно может не успевать. Просто чаще стал читать.
>>23952
Магия оказалась вот в чем: раз руками отсылаем пакеты, нужно руками же их и получать. Recieve() срабатывает на 1 пакет, как оказалось, а не на всю очередь. Поэтому просто нужно проверять очередь пакетов, и пока там еще есть что-то, нужно их шабить Recieve() себе в рот до тех пор, пока там не будет пусто.
Спасибо всем, я рад что тут проявилась полтора адекватных анона.
Что, HLAPI вроде как безнадежен, или как(я нуб, для меня многие очевидные для вас истины в диковинку)? Если безнадежен, то подскажите хороших материалов, как самому все с нуля строить, видео хороших. Выше guffer on games и source multiplayer networking уже взял на заметку.
Ебашу мобильный мультиплеер на HLAPI, полет нормальный
1) Какие якоря я должен задать верхней и нижней картинке чтобы они на всех разрешениях занимали всю ширину, а верхняя - примерно 3/4 высоты.
2) Потестил на "растягиваться и по ширине и по высоте", не помогает, но вопрос такой - какого хуя ресайз вообще происходит на этом якоре когда разрешение переходит из 16:9 в 1600х900, ведь 1600х900 это тоже 16:9 ?
>1) Какие якоря я должен задать верхней и нижней картинке чтобы они на всех разрешениях занимали всю ширину, а верхняя - примерно 3/4 высоты.
Если не хочешь вручную подгонять то тебе layout нужен, КМК
Добавь фиктивную панель снизу
Задай preffered_хуйня пропорционально 300 и 400 (или 3000 и 4000)
min_хуйня добавь при необходимости
>>24889
>не помогает, но вопрос такой - какого хуя ресайз вообще происходит на этом якоре когда разрешение переходит из 16:9 в 1600х900, ведь 1600х900 это тоже 16:9 ?
Там пересчет идет при изменения разрешения, КМК. В том числе с 160х90 на 1600х900
Вместо хуйня - height напиши
Работать будет так - сначала все элементы получат min height, потом, если осталось свободное место на панели то это место будет делится между элементами пропорционально preffered_height. В вертикал лайаутвсе 4 галки поставь. На старахых версиях юнити этот механиз м не работает
Пример из оф.документации: https://docs.unity3d.com/ru/530/Manual/SL-SurfaceShaderLightingExamples.html
Описывается функция:
inline fixed4 LightingStandard_SingleLightmap
И потом - хоп - и она нигде не вызывается. И так со всеми inline-функциями. Как они работают? Кому они возвращают значение? Помогите!
(object спавнится на месте клика).
Что стоит добавить в код, чтобы object спавнился не сразу ( в момент клика ) , а после 2 секунд с этого момента, при условии , что нажатие кнопки (Touch) продолжается в течении этих же секунд?
Спасибо за возможные ответы.
Было:
//код создания объекта
Стало:
StartCoroutine(foo());
IEnumerator foo()
{
yield return new WaitForSeconds(2);
//код создания объекта
}
Да не дочитали сообщение до конца.
Для пидоров. Попрошу не путать.
Сначала сделал все на HLAPI - работает, не тормозит.
Попробовал LLAPI, был дефлорирован граблями, откатился на HLAPI.
PS: Почти весь графен уже нарисовал. Ренпай брать не хочу.
> Сколько времени у меня займёт изучение юнити для моей внки, если уделять движку по 8ч в день?
А сколько времени уйдёт у моей бабули для изучения комплюхтерна? Даю подсказку: бабули бывают разные и способности к обучению у них тоже разные.
Начни изучать движок и сам поймёшь насколько хорошо оно у тебя идёт.
Спасибо.
if (isLocalPlayer) {
gameManager.CmdUnregisterPlayer(networkId);
}
...
[Command]
public void CmdUnregisterPlayer(string playerId) {
...
}
[Command] нельзя на сервере. Для него есть [ClientRpc].
Рассматривал эти
1. https://www.assetstore.unity3d.com/en/#!/content/69932 (15$ есть лайт)
2. https://www.assetstore.unity3d.com/en/#!/content/11672 (65$ есть демка-лайт)
3. https://www.assetstore.unity3d.com/en/#!/content/9723 (45$)
Тогда вываливай 65 баксов за второй вариант, он самый нормальный и гибкий.
Отлично, благодарю.
да всё просто аннон - inline это такие функции код которых будет вставлен компилятором по месту вызова самой функции.
Зависит от настройки качества, то есть когда выбираешь в лаунчере good/beautiful и т.д. Edit -> Project Settings -> Quality, создаешь свой пресет качества с 4 костями.
у юнити есть свой хороший навмеш который теперь заебись и навигацию он делает очень хорошо. RAIN так себе. ещё aStar есть, он хорош, если дашь им денег. ещё есть https://www.assetstore.unity3d.com/en/#!/content/85181 я написал, но он сыроват.
А вообще навигацию в 3д одним скриптом пожалуй не сделать.
сажа прилипла
Есть три объекта.
Первый объект стоит себе, выполняет выкрик "ХУИТА" и кидает говном в сторону _объект, сам объект он определяет по тегу "Хуита".
Два других объектов имеют этот самый тег, по которому первый их и находит.
Вопрос: Как сделать так, чтобы _объект становился ближайшим объектом с тегом "Хуита"?
С двумя объектами то не проблема определять, какой из них ближе, но что делать, если их сотня, тысяча?
Добавь их в отдельный коллижнлейер и делай цирклкаст до первого попавшегося.
Создаём переменную _объект и массив _объекты[].
Заполняем массив объектами с тэгом хуита.
Проверяем, присвоено ли _объект значение.
Если нет, создаём новую переменную (назовём Выбор), дав ей охуенно огромное значение.
Создаём цикл, (i = 0; i = _объекты.Lenght; i++)
Проверяем, что ближе к исполнителю скрипта. _объекты или Выбор.
Если ближе _объекты, то расстояние сохраняется в Выбор, а _объект получает значение _объекты.
Тоже много.
Хуйню написал. i=0; i < _объекты.Lenght; i++
ну и в цикле участвуют _объекты[ i ], из-за разметки не записалось.
Не еби вола, кидай рэйкасты и выбирай ближайший объект как цель. Не сгорит твоя пекарня от такого количества рэйкастов, не волнуйся.
Я просто только начал разбираться во всём этом. До этого вообще с кодингом не сталкивался. Вообще идея выглядит более годной хотя бы от того, что не надо постоянно перезапускать цикл (хуита же меняет свою дистанцию). Но я не совсем понимаю, как реализовать это. Все-равно же придётся постоянно запускать цикл, чтобы определять, какой объект ближе, если их конечное количество неизвестно? В таком случае, моя идея выглядит более оптимизированной, т.к. расстояние так и так просчитывается каждый раз, но в моём случае не нужны лучи. Или я в чем-то ошибаюсь?
У тебя костылинг с ненужным "охуенно огромным значением", который уже противоречит одному из правил кодинга, а именно — "никаких магических чисел".
А рейкасты будут работать как часики.
Согласен, но я уже придумал, как пофиксить: Просто к переменной _объект присваиваем сразу значение _объекты [0], а дальше также проверяем, что ближе _объекты{i} или _объект.
Я просто, как мне кажется, не понимаю реализацию того, что ты предлагаешь. Ну и что из этого систему меньше нагружает? Просто, как я понял, в твоём предложении всё тоже самое, только сначала создаются лучи, а потом также циклом проверяется, какой объект ближе. Конечное число хуиты неизвестно.
Ты изобрёл поиск перебором.
Не хочешь с рэйкастами — делай так (и скрин, на случай если форматирование поедет):
GameObject[] objects;
public GameObject closestObject;
float dist;
float minDist;
Vector3 currentPos;
void Start () {
objects = GameObject.FindGameObjectsWithTag ("Object");
}
void Update () {
GetClosestEnemy (objects);
}
void GetClosestEnemy (GameObject[] objs) {
closestObject = null;
minDist = Mathf.Infinity;
currentPos = transform.position;
foreach (GameObject obj in objs)
{
dist = Vector3.Distance(obj.transform.position, currentPos);
if (dist < minDist)
{
closestObject = obj;
minDist = dist;
}
}
}
Не хочешь с рэйкастами — делай так (и скрин, на случай если форматирование поедет):
GameObject[] objects;
public GameObject closestObject;
float dist;
float minDist;
Vector3 currentPos;
void Start () {
objects = GameObject.FindGameObjectsWithTag ("Object");
}
void Update () {
GetClosestEnemy (objects);
}
void GetClosestEnemy (GameObject[] objs) {
closestObject = null;
minDist = Mathf.Infinity;
currentPos = transform.position;
foreach (GameObject obj in objs)
{
dist = Vector3.Distance(obj.transform.position, currentPos);
if (dist < minDist)
{
closestObject = obj;
minDist = dist;
}
}
}
Скрин отвалился.
Забыл упомянуть: этот вот >>27419 способ вычисляет ближайший объект в пространстве вообще, то есть он не проверяет нет ли между вами стен и т.д. То есть условный игрок может стоять прям под носом, но за стеной возле моба с этим скриптом и моб будет кидать говном в стену, при этом в пределах видимости моба может стоять другой игрок, только чуть подальше, и мобу на него будет похуй.
Так что если хочешь чтоб мобы выбирал именно из видимых объектов, то тут уже надо делать на рэйкастах.
Слишком долго будет, если у тебя куча объектов. Для такой хуйни лучше юзать физику и OverlapShpere
Че то не понял нихуя. В этой вашей юнити 2017 не работает способ анимирования, когда ты например перетаскиваешь дочерний (именно дочерний, например кость в иерархии скелета) объект и его новая позиция становится кейфреймом. Теперь когда выделяешь этот объект то в окошке анимации все сбрасывается и появляется кнопка для создания нового клипа. Как теперь анимировать то?
Вроде починилось. Ебаные индусы, я уж молчу про разнообразные ошибки в консоли через каждые пять секунд, которых в прошлых версиях не было.
Это какие ошибки? У меня один раз была такая фигня — по ошибке удалил напрямую из папки скрипт, стукнул себя по голове, восстановил из корзины и у меня началась забавная хуйня. Скрипт в консоли жаловался что не видит префаб (хотя в инспекторе он был присоединён), но тем не менее запросто его спавнил. Удалил всё к хуям (благо проект был тестовый), сделал всё заново буква в букву — ошибки исчезли.
Не удаляйте ничё напрямую из папки, посоны, только через юньку.
В последней 2017 версии каких только нет. Уже как открываешь юнити сразу вылезает ошибка. Сейчас не могу выбрать стейты с переходами в аниматоре (все удалил и сделал по новой), все переменные проебались, хотя я ничего не делал. До этого анимация тупо не проигрывалась, хотя я ничего нового вообще не делал, стандартные операции чтоб анимировать перса, которые проворачивал тыщу раз. Пиздец.
Ну а к чему самая верхняя проверка? "Если нажали что-нибудь, то давайте посмотрим что именно нажали". Можно же ограничить проверку только теми клавишами, которые нужны.
В смысле? Нужны ведь все клавишы. Меня просто смущает количество операций. Если сделать кучу активных клавиш, скрипт будет несколько раз в секунду проверять по сотне кнопок.
Тебе в любом случае не нужна проверка на anyKeyDown, если потом проверяешь что именно нажали.
anyKeyDown нужен для обработки нажатия вообще любой клавиши, когда тебе поебать что юзер нажал, лишь бы нажал.
Ладно, уговорил. Конкретно для твоего случая (клавиши от 0 до 9) можно сделать так https://codeshare.io/Gbryxj
А чё, так можно было? Ладно, ты крут, спс.
Можешь заняться костылингом и саммонить первое в апдейте, второе в лэйтапдейте.
через велосипед, например, можно создавать игрока через худ, в Awake()
Ебашь корутину, раз такой параноик. Хуячишь в корутине хад, ждёшь один кадр и хуячишь плеер.
А вообще и без корутины проблем быть не должно.
Есть экшн движения без прекондишнов, результатом которого является нахождение в определённых координатах и несколько действий, требующих нахождения в определённой точке. Всё работает неплохо, но я никак не могу придумать хорошей реализации выполнения действий на ходу.
Например, есть экшн занятия укрытия TAKECOVER, требующий нахождения в точке в укрытии, что может быть осуществлено MOVETO. Но как сделать так чтобы на бегу павн стрелял во врага?
Варианты:
- Отдельное действие стрельбы на ходу. Самый простой вариант, но требует создания отдельного экшена для каждого возможного действия на ходу, делает понимание АИ более запутанным: у нас действие нацеленное на две различных цели.
- Завершать действие сразу после начала движения, а не при достижении точки назначения. Из минусов: головная боль при дебагге, куча костылей с учитыванием текущего движения при репланинге, с прерыванием движения проще сразу идти нахуй.
- Оставить ГОАП только общее тактическое планирование, запихнув в каждое действие behavior tree или даже HTN для решения реактивных вопросов. Из минусов: переусложнённые экшены, куча копипаста кода, я заебусь и забью на полпути.
Комментарии, идеи?
Мы тут массивы сортируем, а ты с такими вопросами.
>Кирилланы, есть у кого-нибудь опыт ГОАП?
да, у меня есть.
>Например, есть экшн занятия укрытия TAKECOVER, требующий нахождения в точке в укрытии, что может быть осуществлено MOVETO. Но как сделать так чтобы на бегу павн стрелял во врага?
на самом деле лучше не дроби действия так сильно. Наличие точки пути можно проверять внутри прекондишена действия.
что касается твоего вопроса. заведи в действии флаг того прерывает ли это действие навигацию. режим поиска пути долже диктоваться ИИ его стейтом, а не действиями. иначе ты в каждом сраном действии будешь искать то-же самое укрытие за ближайшим деревом. если например ИИ требуется подойти поднять предмет или переключить рычаг, то он берет поводья контролера в свои руки и сам идет куда надо, а пока ИИ не надо куда-то идти он просто все время находится в режиме уклонения, или патрулирования или ещё чего из его глобального стейта.
смотри например https://www.youtube.com/watch?v=M3x9l-wWNJU
>>27635
вообще что-то не проснулся я ещё.
>Наличие точки пути можно проверять внутри прекондишена действия.
я имею в виду что само действие проверяет возможность его применения, то есть TakeCover сам смотрит является ли оно валидным и есть ли у него точка пути. если действие валидное то оно добавляется в пулл вариантов действий.
на скриншоте кстати появнение забыл. ИИ имеет винтовку в инвентаре, но она пустая, ещё одна пустая лежит в мире и обойма к ней. надо чтобы он взял винтовку из инвентаря в руки, нашел обойму и выстрелил в сферу.
ещё кстати смотри какая хуйня клевая. https://www.youtube.com/watch?v=ztFALZZTP_U долго думал как сделать
>>27657
>TakeCover сам смотрит является ли оно валидным
Но в этом же и суть. Планер возьмёт самую приоритетную цель - спрятаться в укрытии, которое может быть реализовано действием занятия укрытия, для которого ему надо в эту точку прийти. Процедурно можно проверять наличие доступных ковров как таковых.
Если я правильно понял твой вариант, АИ будет прятаться в ковре только, когда он уже находиться в нужной точке.
За видео спасибо, позже гляну.
нене само действие делает все эти проверки и ищет лучшее укрытие на этапе проверки его валидности. просто в его исполнении ебани два ифа в его имплементации. если мы слишком далеко от лучшей точки для укрытия то идем в эту точку, если мы рядом то сидим в укрытии. садится в укрытие уже контролер потому что действие переключило в глобальном менеджере ИИ нужный флаг говорящий о том что ИИ в укрытии и с какой оно стороны.
но вообще поиск укрытия это абстрактная задача, что-то такое глобальное как поиск укрытий не должно решатся ГОАП. планирование отдельно, навигация отдельно, контролер отдельно. просто планирование думает, а контролер и навигация подстраиваются под планирование и действия друг друга.
>если мы слишком далеко от лучшей точки для укрытия то идем в эту точку
Теперь понял, это примерно как мой второй вариант. Меня в этом варианте смущает сложность контроля за перемещением, ведь после начала движения уже никакое действие не контролирует процесс, прерывания и достижение результата это опосредовано делается в прекондишене занятия ковра
И придётся пердолиться с другими действиями, которые могут инициализировать движение: надо будет где то хранить приоритет действия задавшего движение или что то в это роде.
>что-то такое глобальное как поиск укрытий не должно решатся ГОАП
Само собой поиском валидных укрытий занимается отдельный сенсор, действие просто берёт ближайшее и запихивает его координаты себе в прекондишны.
на
или может кто подскажет безрукому дебилу где править ебучие редиректы в хроме, заебался уже через жопу по документации лазить! Что сделать что бы этот мудак перестал уводить меня на русскоязычный портал!
Это копия, сохраненная 14 июня 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.