На Unity сделано много замечательных игр - Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.
FAQ
- Какие у Unity сильные стороны? - Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.
- Какие у Unity слабые стороны? - Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.
- На каких языках я могу писать скрипты для Unity? - На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.
- Для каких жанров подходит Unity? - Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.
- На каких платформах работают созданные с помощью Unity игры? - Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.
- Часто вижу скриншоты с красивой природой на Unity. Как такое создать? - Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.
- Что такое стартер киты? - Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.
- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки? - Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).
- Бесплатен ли Unity? - Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.
- Движок Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка. http://www.ozon.ru/context/detail/id/34792570/ Также посмотри на видеотуториалы с официального сайта: https://unity3d.com/learn/tutorials Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь: http://catlikecoding.com/unity/tutorials/ Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху: https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов: https://noobtuts.com/unity В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.
Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.
>>698832 → Ну там-то вроде и курс по шарпу(а потом по юнити, если ты про полный), поэтому вроде нормально, что там погромач. Но то, что чел просто зачитывает - это печально. Хотя может это просто введение, а потом будет подкрепление с примерами. Я вот думал взять первый месяц за 5к посмотреть, но как-то хз. Я не особо хочу становиться программистом c# со знанием юнити, у меня вообще был план сделать парочку гиперказуалок просто потому что скучно. Решил чекнуть инфоцыган местных и увидел этого странного чела.
Как лучше работать с данными в юнити? Например, я хочу иметь что-то типа базы данных абилок, где у меня будут храниться все их параметры, название, иконка, стоимость, кулдаун, и т.д. Таких абилок может быть много, десятки, сотни, с ними должно быть легко и удобно работать через инспектор, поэтому просто в коде в массивчике хранить не хочу. Но и префаб на каждую абилку городить не хочу, это кажется неправильным, все-таки это не геймобжект, размещаемый на сцене, а именно набор данных. Думал про табличку в экселе, и потом импортировать, но тоже не очень удобно, хочется все-таки иконки через инспектор драг н дропом кидать, а не просто прописывать путь. Есть что-то из коробки в юнити, или надо смотреть в сторону ассетов? Databox выглядит похожим на то, что мне нужно, но неужели до сих пор нет из коробки похожего функционала?
Что будет, если я куплю ассет, использую его в проекте, потом скину проект другу, у которого этого ассета нет, у него он не будет работать? Или когда добавляешь ассет в проект, он копируется в него целиком, и после этого можно запускать этот проект на другой версии юнити без купленного ассета?
>>698876 Даже ассеты, которые состоят только из кода, без моделек/текстур/префабов? Сейчас же даже убрали браузер с ассет стором из юнити, чтобы облегчить редактор, и перевели на package manager, это не значит, что в проекте подключенные ассеты будут качаться через него при первом запуске?
И еще вопрос ко всем в треде, есть ли список must have ассетов, которые стоит по дефолту использовать в любом проекте? Имею ввиду не ресурсы для игор, а именно полезные расширения редактора или утилиты, которые упрощают и ускоряют разработку. Например, odin крутая штука, но дорогая, может есть что-нибудь в таком духе, но бесплатное? Или не бесплатное, но хотя бы не очень дорогое, что стоит купить и потом использовать во всех проектах. В общем, пишите ваши любимые ассеты, что стоит посмотреть.
Делаю игру, в которой разными предметами персонажи пользуются по особенному. В планах сделать так, чтобы предметы позволяли пользоваться механиками из ретро игр. Сегодня допилил функционал лопаты. Кто играл в эту игру в детстве?
>>698892 Если бы это были плейсхолдеры, то ты бы не заморачивался на анимацию... Надеюсь этов сё же плейсхолдеры. Иначе мне даже подумать страшно, что у тебя в голове.
>>698869 ScriptableObject + твой интерфейс ISkill например. Так ты сможешь переиспользовать свои скилы и менять их параметры через инспектор.
>>698874 Ассет это zip архив, встречал ассеты которые просят тебя регаться на емейл - такие НАВЕРНОЕ не будут работать без твоей учетки, но 99% ассетов просто "вот тебе пара .cs файлов"
>>698898 >ScriptableObject Спс, то что нужно. Только у меня в голове не укладывается, почему он называется ScriptableObject, если это объект для хранения данных, почему не DataObject, например. Он же не скриптуется, почему scriptable?
>>698905 Тащемта, анимации неплохие, ты всё сам делал? Где анимировал, спайн или прямо в юнити? Они у тебя процедурные, завязанные на физику? Мне только кровищи не хватает на твоих гифках, хотелось бы крови и угара в такой игре, а не просто всплывашку в стиле детских мультиков
>>698907 Всё делал сам, анимировал в юнити, часть анимаций процедурные, на физику анимаций не завязано. Есть и кровища. Но пока только в одном из захватов.
>>698909 На текущий момент ебашу ради процесса, мой изначальный ориентир - Duck game. Поэтому и монетизацию наверное стал делать бы как там, просто пэй ту плей. Одноразовая выплата. Но, в теории, здесь легко клепать скины и всякие элементы кастомизации.
>>698901 Наверное под scriptable понимается, что его можно скриптовать, но по факту этого объекта не будет в игре как GameObject-а. Юнете оч старая и скорее всего над неймингами долго не думали, потом так и оставили.
>>699013 На хабре стетье 10 лет, а это значит что на гавно-мобилках будет 60фпс выдавать в наше время https://habr.com/ru/post/350396/ Вообще загугли: "habr unity3d 2d shadow", там много результатов и выбери реализацию, которая тебе больше всего нравится/подходит. Удачи
Привет аноны, в процессе создания игры на мобилки возникла такая проблема: я создал сцену, накинул на нее канвас с кнопками и обработчиком событий. По-моему замыслу при нажатии по экрану в любом свободном месте должна начинаться сама игра, а при нажатии на кнопки соответственно должны срабатывать кнопки. Так вот, в редакторе все работает как надо но при портировании на телефон оно работает через жопу и либо работают кнопки, либо работает тап по экрану для начала игры, а вместе они работать не хотят. Как быть?
>>699061 через вот этот if в update if(Input.GetMouseButtonDown(0) && cubeToPlace != null && allCubes != null && !EventSystem.current.IsPointerOverGameObject())
>>699064 Что за хуйню ты наговнокодил? Делаешь обьект картинку на весь экран, поверх ставишь кнопки, эвент тригер при нажатию на картинку->начать игру, при нажатие на кнопки вызвать функции кнопок.
>>699064 > EventSystem.current.IsPointerOverGameObject() > в редакторе все работает как надо но при портировании на телефон оно работает через жопу Может быть, потому что на телефоне нет указателя мышки?
для тех кто не очень часто читает ченджлоги оповещу, что в новой бете (2020.2) Camera.main теперь стала пизже и работает не как раньше аля GameObject.FindWithTag. теперь это почти бесплатная функция:
Scripting: Camera.main is much faster to query.
Camera.main used to be a performance costly function to call. With this optimization a dedicated list of objects with the main camera tag is maintained, and searching this list is almost instantaneous.
так что если ты долбоёб и используешь Camera.main, то теперь ты не долбоёб. принимай поздравления анон
>>699392 >Это как майкрософт пихала кучу костылей в ядро NT что бы какой-то там Sim City, эксплуатирующий недокументированное поведение своим говнокодом шёл. Подробнее, пожалуйста. Интересно было бы почитать.
Зачем я только обновился с LTS до 2020.1 (даже не бета 2020.2), теперь в случайные моменты редактор зависает и только убийство процесса помогает. Господи, почему в юните с каждым патчем появляются более жуткие баги...
Как нужно делать карты для 2д игры? Grid, Tilemap, все дела. по 1 размеру, никаких доп настроек. Заливка отключена в настройках. Стоило в 2 слоя покрасить 100x100 клеточек примерно(очень маленькая область), как все начинает дико зависать, то есть не не в процессе игры, а именно становится невозможно дальше оперировать редактором с этой сценой, на которой только один Grid с Tilemap-ом.
Я, конечно, знаю много альтернативных решений, по типу генерации карты в реальном времени, прогружая кусками, можно как-нибудь напердолиться, но я думал раз уже все придумали до меня, раз есть редактор и такая возможность, то значит надо нарисовать всю карту, и там уже плясать от этого, активуруя объекты и двигая камеру. Все таки 100х100 и так лагать мне не дает покоя, я что-то не так понимаю, объясните плиз.
Юнитач, хочу сделать так, чтобы в конце уровня игрок мог выбрать 1 из 3 случайных улучшений. Т.е в конце раунда на экране появляется UI на котором три кнопки - игрок нажимает одну из них и загружается следующий уровень.
Как сделать так, чтобы улучшения, которые предлагаются игроку, выбирались рандомно из пула? Есть идея просто добавить их все как отключённые кнопки в UI и включать через foreach child'ы этого UI, пока их не включится 3. Но мне кажется есть вариант получше
>>699838 var getRandomIndex = UnityEngine.Random.Range(1, 3) -> вернет тебе индекс твоего улучшения. Потом: IEnchants[] enchants = заполняешь свой массив улучшений. Потом: var randomEnchantment = enchants[getRandomIndex]; Потом: Передаешь на UI инстанс своего улучшения, для 3х на угад проделай это всё через цикл for. >>699664 Вроде в редакторе он и не должен работать, нужно билд делать + с последними пайплайнами эту настройку вообще куда-то в другое место вынесли, в Players Settings что-ли. >>699694 Оказалось я вместо if написал while и получил это из-за бесконечного цикла >>699814 Честно - не понял, у тебя в редакторе тормозит или в игре? Может на обоих слоях есть коллизия и там физика с ума сходит? Если в игре - включи deepProfiler и глянь, че там жрет все мощностя твоего пеки. У меня в 2019.4 1024х1024 на старом ноуте работало,выдовало больше 30 фпс во всяком случае
>>699856 Редактор, говорю же. На сцене ничего кроме этого нет. Никакой физики вообще, вообще ничего.
Не хочу накаркать, пока детально не смотрел, но кажется частично решил проблему - надо выделять куски и делать Break Prefab Instance, вроде я даже поле дорисовал, не знаю как дальше пойдет.
>1к на 1к на ноуте На это буду ориенироваться, сяп.
18 сентября компания — разработчик движка Unity вышла на фондовую биржу. За первый день торгов она привлекла $1,3 млрд, а ее общая стоимость выросла до $18,1 млрд. Это на один миллиард больше, чем капитализация Epic Games.
Изначально разработчики Unity планировали выходить на рынок с ценами на акции по $34-42 за штуку, но позже повысили их стоимость до $44-48. Утром первого дня торгов акции были доступны к покупке за $52, а к вечеру выросли в цене примерно до $68.
Unity — движок, который может использоваться для создания игр в 2D, 3D и виртуальной реальности. На нём сделаны Fall Guys, ККИ Legends of Runeterra от Riot Games, платформер Ori and the Will of the Wisps, Subnautica, Escape from Tarkov, The Forest и другие популярные тайтлы. Компании, доход которых не превышает $100 тыс. в год, могут использовать Unity бесплатно. Вот пидары, могли бы асетстор сделать бесплатным.
Где можно почитать, посмотреть пример годной архитекторы не совсем простой 2D игры? Делаю игру, но мучает ощущение, что путаюсь в сущностях и есть некоторая неконсистеность
ананасы! последнее время страдаю каким-то ебаным декаплингом и разбиением на кучку скриптов и не знаю нужно ли так делать. начну с того что в основном всё что я делаю это 2д. привожу пример:
2д платформер есть персонаж, он должен уметь ходить и прыгать
делаю скрипт с инпутом. он отслеживает нажатие кнопок и вызывает свои события например так:
>PlayerInput.cs public event Action onJumped; private void Update() { if (Input.GetKeyDown("space")) { onJumped?.Invoke(); } }
этот скрипт вешается на песонажа и создаётся обработчик событий, например
как вы могли заметить тут есть точно такое же событие onJumped, но нужно оно для того чтоб к нему мог подключиться другой скрипт это событие уже вызывается после проверки, в данном случае _isGrounded; (стоит ли персонаж на земле)
Отсюда вопрос: не слишком ли я всё усложняю? с одной стороны я могу добавить ещё скрипт который будет отвечать за стрельбу и он будет отдельным небольшим файлом, а с другой у меня получается очень дохуя мелких скриптов. не знаю стоит ли так дробить. и возможно делать такие связи через event Action не самая лучшая затея? есть у кого соображения на эту тему?
>>700009 Оо, таким же шаблоном реализую логику, задаюсь теми же вопросами. Как альтернатива смотрел https://m.habr.com/ru/post/281783/ - тип любой скрипт можно дёрнуть через дерево appkication>controller>... Проще отследить, что на что завязано, но все как-то гвоздями прибито. Я ещё думал о dependency injection, но тут сложности с инъекцией конструктора у monobehavior из-за особенностей инициализации
>>700009 Ещё, как вариант, отдельный класс для рассылки сообщений. Оба класса чарактера подписываются на событие с конкретным названием, а плееринпут его бродкастит - все это происходит через Мессенджер. Мессенджер содержит список всех методов, которые подписались на это сообщение и вызывает их всех. И в итоге тебе не нужно отдельно из чар контроллера ещё вью дергать Вот, кажется, пример реализации http://wiki.unity3d.com/index.php/Advanced_CSharp_Messenger
OnCollisionEnter2D, как и Stay и Exit не работают тот же Trigger работает идеально Я rigidbody есть и там и там, тестировал разные типы, галка стоит\не стоит, область коллайдера нормального размера(иначе бы trigger не работал). И тем не менее, OnCollision не работает, я уж думал он Deprecated, но нет. Всегда обходился без него, а тут понадобилось сделать стенки, нужна информация о стороны с которой произошло столкновение, Collision.GetContacts то бишь. Но я не могу получить данные потому что сообщение OnCollision не работает. Ломаю голову как определить сторону столкновения с OnTrigger. Сталкивался кто?
>>700063 Нет. \\This collider is attached to the Collision2D.otherRigidbody. Trigger оповещает что дескать есть столкновение с чем-то, но он не надет данных о самом столкновении. Только само столкновение, логично, дает данные о столкновении. https://docs.unity3d.com/ScriptReference/Collision2D.GetContacts.html А для этого надо получить сообщение которое не работает ><.
>>700009 Чеб нет, но мне кажется сложно, обычно лучше делать ДЕКОМПОЗИЦИЮ вместо ДЕКАПЛИНГА т.к. композиция была был такой: components = new IComponents[new OnJump(this), new OnShoot(this)]; и в update: components.ForEach(com => com.Update()); Плюсы: легко добавлять и удалять компоненты без анальной event += -=, придется использовать интерфейсы, а не реализацию, а значит эти же компоненты сможешь использовать для врагов (переиспользование короче) >>700016 Я юзал DI, есть специальные для юнете, нашел на хабре заготовку и допилил под свои нужды. >>700034 Медленно работает, так же как и GetComponent
>>699976 Это ты пидор тупой, все юнитивские ассеты и так всегда бесплатными были, за бабки продаются аутсорсные авторские ассеты, это стимул независимым разрабам и художникам делать контент и высталвять его на продажу.
UNET по дефолту выпилен из Unity 2019. И планируется быть замененным. Значит я зря сейчас читаю про мультиплеер в оф доках. Что сейчас использовать для создания мультиплеерной игры в юнити, аноны?
есть задача сохранять кучу мелких спрайтов в текстуру. на пол проливается много кровищи и после того как я спрайт лужи растянул хочу сохранять его в текстуру пола и сам спрайт удалять ибо память надо экономить. подскажете в какую сторону смотреть?
>>700119 Ты же про Broadcast(string, object[] args)? У нас тут конвертация CLR в C++, вызов нативных методов, потом обратная операция C++ в CLR, потом CLR.PInvoke, большая цепочка для "простого" метода. По сути гет компонент делает тоже самое, только yourComponent.GetType().Name ищет в своих внутренностях, из-за этого и медленно. >>700120 я взял https://github.com/yaroslav-gurilev/UnityDI за основу и дописал его под свои нужды (все классы поменял на структуры, убрал всю рефлексию, может еще что-то делал) . Автор этой репы советует взять https://github.com/Cryofortress/CryoDI его уже не пробовал. Есть еще забугорная DI Zenject, но лично я не люблю брать оргмоные фреймы и использовать их в слепую, иногда вылазят проблемы из-за которых весь проект потом переделывать приходится. >>700153 Это всё динамически должно происходить? Просто так менять спрайт нельзя, UV остается тем же. Если я правильно понял тебя - тебе нужно mesh.GetVerticies() - считать расстояние между точек, чтобы понять размер нужной тебе текстуры. Создаешь эту текстуру через new Texture(width,height), у этого же объекта есть методы setPixel и рисуешь. Так же у юнете есть стандартные методы а ля getPointPositionOnTexture что может упростить тебе жизнь >>700114 Тоже думал, взял colyseus, из минусов - встречаются баги т.к. пилится парой бразильцев. Можешь взять фотон (как, видимо, делают все), а можешь подождать пару лет и возможно выйдет что-то новое для сети (но что они могут придумать? все уже придумано)
>>700165 >Тоже думал, взял colyseus, из минусов - встречаются баги т.к. пилится парой бразильцев. >Можешь взять фотон (как, видимо, делают все), а можешь подождать пару лет и возможно выйдет что-то новое для сети (но что они могут придумать? все уже придумано)
Я в интернете увидел советы использовать Mirror. Colyseus и Photon лучше?
мне спрайты менять не надо. надо их запекать в текстуру чтоб у меня не было огромного кол-ва спрайтов луж крови на сцене. наверное стоит добавить что сцена вся 2д
>>700210 Это была проблема Unity Remote, скачал АПК, установил - картинка нормальная. Другой вопрос - как сделать так, чтобы спрайты растягивались под разрешение экрана?
>>700220 ну или что-то в том духе. у меня есть текстура на которую рендерится одна из камер. там система частиц выдаёт частицы разного цвета и они должны намазываться на предыдущие создавая относительно психоделический эффект
Посоны, подскажите с вопросом. Есть NavMeshAgent в сцене, двигается в точку нажатия мышкой. Как детектить его прибытие в точку назначения? Мне нужно, чтобы после остановки проигрывался звук и менялся цвет, но я не могу понять, как прописать завершение движения.
Юнитач, есть сцена пикрелейтед. По нажатию кнопки корабль должен устанавливать таблетку под собой в центре условной клетки, если эта клетка пустая. Функционал установки таблетки должен быть реализован через работу с координатами коллайдеров астероидов, находящихся вокруг корабля. (пересечение коллайдеров)
Как это сделать? Может я просто что-то не так понимаю, но натурально в душе не ебу как это реализовать.
>>700239 я просто не пойму, типа корабль может залетать на астероиды и тогда нужно делать проверку? или таблетка может быть установлена только между двумя астероидами?
>>700242 Нужно чтобы таблетка ставилась ровно посередине в центре условной координаты, даже если корабль стоит чуть сбоку. И нужна проверка не стоит ли уже на этой координате таблетка.
>>700244 ну тогда делай как я выше писал Vector3 spawnPosition = new Vector3(Mathf.Round(ship.transform.position.x), Mathf.Round(ship.transform.position.y), 0f);
это округлённая координата твоего корабля.
и делай Physics2D.CircleCast на этой же координате. только не забудь исключить слой с самим кораблём. тебе Physics2D.CircleCast сообщит были ли там коллизии и если их нет, то ставь таблетку
>>700245 Проблема в том, что все астероиды стоят с небольшим смещением по X координате, поэтому каждый из них чуть правее\левее и при округлении таблетки ставятся не на нужную координату, а со смещением На пике этого не было видно, я проебался чутка
>>700246 а зачем так сделано? сделай верно. как тебе ещё вычислить координату Х? например в этом положении у тебя рядом только один коллайдер и тут в лучшем случае можно получить Y ко коллайдеру
>>700251 Как-то так. + все астероиды смещены в сторону, пикрил. При нажатии на правую часть экрана, корабль должен устанавливать таблетку. (DONE)
Таблетка может быть установлена только в пустую клетку
Таблетка должна быть установлена в середину клетки.
Функционал установки таблетки должен быть реализован через работу с координатами коллайдеров камней, находящихся вокруг корабля (пересечение коллайдеров)
>>700255 если я верно понял, то пустые клетки это те что я отметил красным. тогда делается следующим образом:
тебе нужно сделать Physics2D.CircleCast из положения своего корабля с радиусом который может захватить 4 астероида, но не больше (синий круг). тут нужно не забыть, что нужно использовать contactFilter чтоб игнорировать сам коллайдер корабля, иначе корабль будет возвращаться в результате коллизий тоже
CircleCast возвращает int значение с кол-вом коллайдеров с которым он взаимодействует и ещё заполняет массив RaycastHit2D[] всеми хитами.
тебе нужно чтоб CircleCast вернул 4 и чтоб все коллайдера были астероидами. для нубского варианта прокатит и по тегу проверка.
таблетку ты будешь ставить по координатам хитов (x1 + x2 + x3 + x4) / 4 и (y1 + y2 + y3 + y4) / 4 и тогда она будет точно там где красная точка
>>700199 Колизеусом я сейчас пользуюсь и он мне нравится больше чем стандартное юнете решение. На фотоне уже тонна игр сделана и туториалов, будет легко разобраться. >Mirror Ага, видел что советуют, сам не пользовался, можешь попробовать
>>700201 Я хотел сказать, что если ты создашь спрат с размерами 1,1,1 и отскейлишь его до 2,2,2 тебе нужо будет посчитать world distance т.к. текстура будет мылиться
В этом направлении и двигайся. Позиция декалей должна расчитываться кастомно, это все через шейдерграф можно настроить.
Перезаписывать текстуру через интеграцию спрайта еще больше говна поешь, т.к. сначала придется спрайт переводить в текстуру, потом перезаписывать саму базовую (фоновую) текстуру. Охуеешь от того как это ресурсоемко, особенно если фоновая текстура имеет большое разрешение.
>>700231 Вешаешь скрипт на объект который двигается, в нем запоминаешь ссылку на объект NavMeshAgent, в скрипте в апдейте сравниваешь NavMeshAgent destination с положением объекта с каким-то округлением, если положение совпало делаешь свои грязные вещи. Ну еще как-то нужно фильтровать что объект не сдвинулся с последней точки которой он достиг, думаю сам придумаешь.
>>700257 Можно как-то через ContactFilter игнорировать все, кроме астероидов? Пробовал сделать через filter.layerMask = AsteroidLayerMask, но дебаг всё равно показывает коллизию и с игроком, и с границами поля. Не совсем понимаю как ContactFilter работает, а мануал не спасает
Два вопроса юнити господам. У меня прила на юните. То есть полный аналог андроид материала, только на юнете. Меня волнует 1)Почему фпс падает при переходе с 2019.2 на более новые версии? Рили печёт с этого. 2)Кто-нибудь уже работал с on demand rendering api? Как оно? Я делал тесты, и не скажу что батарея очень сильно экономится.
>>700257 >таблетку ты будешь ставить по координатам хитов (x1 + x2 + x3 + x4) / 4 и (y1 + y2 + y3 + y4) / 4 Почему-то вычисляются пивот поинты, не могу понять как изменить на центр. Бтв работает, спасибо.
>>700300 >Почему-то вычисляются пивот поинты вроде пивотпоинты обычно и являются центрами, но если тебе нужен центр коллайдера, то в массиве RaycastHit2D[] у каждого элемента ты можешь взять .collider.bounds.center
у меня на сцене много юнитов, ну например 5000, и они идут в сторону башни. башня должна атаковать ближайшего юнита. 5000 опросов дистанции в кадре это очень тяжело для мобилы. есть клёвые варианты решения этой проблемы?
>>700340 Если у тебя все 5000 солдат в массиве или листе - нет, не сложно, твой компик миллиард таких операций делает в секунду. А если очень хочется, можешь посмотреть на Unity.Jobs - звучит как то, что тебе нужно - будет паралельно на всех потоках считать дистанцию
>>700340 У башни очевидно есть дальность стрельбы? Значит делаем радикальный таргет и опрашиваем только тех кто в него вступил. Если юниты движутся с одной скоростью то ещё лучше, просто записываем по очереди всех юнитов которые старгетились и по этой же очереди потом их расстреливаем.
>>700355 к сожалению это не так. собери простой проект, сделай инстансы спрайтов и считай между ними расстояние. ты удивишься как быстро начнёт загибаться приложение
>>700358 что такое радикальный таргет? юниты движутся не с одной скоростью
>>700368 мне этот список сортировать же постоянно надо, следовательно в каждом кадре нужно замерять расстояние
пока что я сижу читаю про quadtree, но похоже что и этого мало. есть вариант с расчётом дистанции внутри compute shader, но это на данном этапе слишком сложно
>>700618 Так странно, вчера пробовал с else, и тоже ничего не работало. А сейчас решил перепроверить, перед тем как тебе написать, и вдруг внезапно всё заработало
if(cubeisbig) { Если bool - true выполняем эти действия } else { Если bool - false эти }
Всё, тут нечего ебаться, одновременно они никак не могут выполниться даже если во время тика произойдёт изменение этой самой bool. Боже хотя бы основы программирования изучили, или хотяб уроки с ютуба поделали, основы основ же.
>>700674 В первом if ты ставишь cubeisbug = true, после него сразу выполняется второй if, который принимает твое cubeisbug = true и возвращает к cubeisbug = false.
Если во втором добавишь else if (или просто else) - оно не будет выполняться, если выполнилось действие до него
прим. if (оп = хуй) { оп != хуй } else if (оп != хуй) { оп = хуй }
Если оп у нас хуй, то выполнится первое действие, а второе - нет. Если же тут будет if + if, то выполнится сначала первое, потом второе.
Не очень понимаю, как корректно организовать взаимодействие сущеностей. Как лучше организовать архитектуру, чтобы норм было? Есть какая-то обучающая инфа по архитектуре всего проекта?
У меня есть нерабочий скрипт foo.cs (на самом деле у меня там сотни таких скриптов - это древний ассет, который на новой юньке не работает - но там много того что мне подходит, куда я смотрю).
Как сделать чтобы гребанная юнити игнорировала этот скрипт? Потому что хотя этот скрипт нигде не используется - я не могу из-за него свой же проект запустить в редакторе.
Он мне нужен для примеров. Переименовывать не вариант - удобно смотреть в студии, плюс пользоваться всякими поиском определений чтобы быстро находить нужное.
Неужели в юнити не завезли опцию с которой я бы мог указать что этот скрипт ей не нужен для компиляции? В студии же так можно делать
Я просто заебался два проекта юнити запускать. Ноут, неудобно, да еще и тормозит.
>>700736 Если файлов много, то можно попробовать добавить в начало названия папки, где они лежат добавить "~" или ".", тогда юнька их будет игнорировать
Как убрать шлейф за синим прицелом?
Аноним27/09/20 Вск 16:49:42№700786133
>>700979 нужно получить ссылку на объект, как там написано было. Т.е., я так понимаю, что речь идет о том, чтобы из листа dvachers по вызову индекса, например, dvachers[0] можно было вернуть экземпляр не родительского класса, а именно экземпляр класса Incel, т.к. он имеет индекс 0; по dvachers[1] получить экземпляр Listva и т.д.
У меня есть условная платформа, которая рандомно скейлится на Instantiate(). Я хочу, чтобы она использовала тайлящийся спрайт, но изменение скейла объекта в трансформе растягивают его, а не тайлят, даже если в спрайт рендере включет тайлинг. Вопрос: как можно имплементировать скейлозависимый тайлинг спрайтов? Желательно легковесный на ресурсы, это гиперказуалка на мобилки.
Привет, двач. Сегодня начинаю изучать юнити и постепенно делать на нем небольшую 2D стратегию. Eсли что, поможете? Я знаю C# более-менее, но игры на нем никогда не писал (только "змейку" в System.Drawing).
>>701383 >Сегодня начинаю изучать юнити и постепенно делать на нем небольшую 2D стратегию И ты уже обосрался с масштабом. Если уже делал змейку, то сделай её ещё раз, но на юньке. А ещё лучше понг. А потом простенький платформер или раннер. А потом тетрис. Стратегии это невъебенно сложный жанр требующий понимания движка которое приходит спустя месяцы дроча.
>>701416 Понг только что закончил делать, по туториалу. Моя "стратегия" - это игра наподобие Plants vs Zombies, по которой тоже есть туториалы, причем даже не высокого уровня (180 строк кода).
У меня есть юниты и соответственно компонент их характеристик. Статы у юнитов различаются. Это нормальная практика, когда изменения в характеристиках прописаны в самой иерархии объектов? Я просто не представляю как это сделать скриптово. Разве что сделать один компонент уникальный для каждого юнита, а второй, общий, будет перенимать из него статы. (Сам задал вопрос, сам ответил)))) Но все равно хочу услышать ваше мнение по поводу практики и как лучше делается это.
>>701695 Создаётся скрипт база всех юнитов(характеристики), при создании юнита от туда по его id назначаются нужные характеристики, это самое лучшее решение. Если же у каждого юнита свой скрипт с назначение, это тоже решение но намного хуже оптимизированное, и сложнее отлаживаемое.
>>701698 Я правильно понимаю, если у меня на один юнит примерно 30 характеристик, всего юнитов 10, то в скрипте-базе должно быть 300 строчек характеристик?
>>701701 >создаешь один скрипт с хар-ками через [serializedField] >вешаешь на всех юнитов >настраиваешь через инспектор >сохраняешь префабы >??? >Profit
>>701704 Ну это самый простой вариант. Можешь конечно сделать один скрипт не совсем понимаю что тебе пойдёт, но думаю подойдёт скорее интерфейс, чем монобехейвер и в скрипте каждого юнита задавать ему в старте через ID юнита (который ты тоже сам ему присвоишь) его хар-ки, но как по мне это куда геморней и проще и быстрей уже будет через инспектор
у меня пена ротом уже идёт. это вообще возможно нарисовать свой растровый шрифт и использовать textmesh pro? я нарисовал в фотошопе буквы и цифры которые мне нужны, а как впердолить это в tmp я ниебу. вроде там можно генерить шрифты из ttf, но как сгенерить ttf из изображения тоже нихуя не пойму. помогите аноны
Посоны, совет нужон. Есть scriptable object класс модификация, он содержит тип слота в который ставится и массив характеристик, а также некоторые другие параметры, но не суть. Этих модификаций предвидится большое количество, и надо как-то их организовать в нечто вроде картотеки, чтобы например мастерская первого уровня могла просто и без индусского кода получить все модификации первого уровня и показать их игроку например.
Можно конечно вручную создать класс базы данных модификаций и заносить туда лапами каждую по одной, но это пиздец! А если я удолю одну, то надо будет и лезть в базу и там выпиливать вручную ее упоминание. А если будет сто модификаций, а если 500? Надо как-то автоматом закидывать модификацию в массив в базе при создании и выпиливать ее оттуда тоже автоматом если она удаляется, ну и апдейтить, когда я меняю ее характеристики. Можно как-то такое организовать?
Я правильно понимаю, что порядок вызова Awake и OnEnable сохраняется только для конкретного скрипта на объекте?
Если на одном объекте 2 скрипта с Awake и OnEnable. То после активации объекта сначала в одном скрипте вызовется Awake->OnEnable, а потом в другом Awake->OnEnable.
Но как быть, если в Awake происходит инициализация скриптов и при этом один из скриптов зависит от другого? Хули эти пидорасы из юнити не сохранили порядок вызова на уровне объекта.
>>702032 Сейчас вот такой порядок вызова: Script_1.Awake() Script_1.OnEnable() Script_2.Awake() Script_2.OnEnable() Script_3.Awake() Script_3.OnEnable()
Но что, если Script_1 зависит от Script_2. И Script_1 в OnEnable ожидает, что Script_2 уже инициализировался. Но на деле же, в Script_2 метод Awake всё ещё не был вызван. Поэтому придётся делать инициализацию по запросу, что неудобно.
>>702035 Это относится к интерфейсу. Игрок нажимает кнопку, включается окно с его инвентарём. То есть задаётся Active объекта, а далее скрипты через OnEnable отображают контент.
Уже несколько дней ломает, как сделать UI по макету пикрил. Есть область вывода записей. Каждая запись это объект UI с названием и областью для вывода записей потомков. Каждая вложенная запись также имеет область вывода записей-потомков. Я им ставлю vertical layout group, и потомки нормально выводятся лесенкой, но записи одного уровня вложенности выводятся неправильно. Они должны учитывать размер друг друга, а они лепятся поверх вложенных, на расстоянии, определенном в vertical layout group - spacing.
Как сделать так, чтобы вложенные элементы каждого элемента включались в расчет его высоты?
Такой вопрос: Есть класс для разных уровней mvc: - В модели храню данные - В контроллере описываю логику - В вью пытаюсь иметь только связь с геймобъектами и, возможно, анимацией.
Как взаимодействовать слоям между собой? Как взаимодействовать разным игровым объектами между собой?
Контроллер должен хранить ссылку на экземпляр модели и вьюхи?
Как должны взаимодействовать делегаты разных игровых объектов между собой? Должен быть какой-то класс, который содержит их экземпляры, или они подписываются на действия друг друга или как?
>>702048 >MVC Ты уверен, что тебе нужны все эти извращения из Веба? Как по мне, так они только усложняют проект, усложняют отладку.
Тебе нужно почитать про Dependency Injection в реалиях юнити. Посмотреть аналог Service Locator'a для юнити.
- Model: какой-нибудь интерфейс, через который ты получаешь данные. Реализовывать его может ScriptableObject. - Controller: скрипт, который запрашивает интерфейс репозитория через сервис локатор и потом получает нужные данные. - View: ещё один скрипт, который привязан к геймобджектам на сцене. Контроллер ему говорит, у игрока 10 HP, а скрипт вьюшки выводит его уже на конкретный Text компонент и изменяет Progress Bar.
>>702051 >Ты уверен, что тебе нужны все эти извращения из Веба? Честно говоря, нет, ищу что-то оптимальное. По началу было, норм, сейчас уже есть какая-то путаница и неконсистентность. Есть какой-нибудь пример\статья по адекватному построению в юнити?
>Тебе нужно почитать про Dependency Injection в реалиях юнити. Посмотреть аналог Service Locator'a для юнити. Есть ли примеры? Я слышал, что специальные DI контейнеры для юнити такие себе.
>>702054 >Есть какой-нибудь пример\статья по адекватному построению в юнити? Посмотри многочисленные видео по запросу "unity architecture". Есть много докладов от самих разработчиков Unity. Посмотри "Unite Austin 2017 - Game Architecture with Scriptable Objects" и "Unite 2016 - Unity Architecture in Pokémon Go".
Ещё чужой код полезно смотреть.
>Есть ли примеры? Я слышал, что специальные DI контейнеры для юнити такие себе. Конечно. Я не пользовался DI, поэтому ничего конкретного посоветовать не могу.
Может если ты приведёшь конкретные примеры для которых нужно продумать архитектуру, то я смогу что-нибудь посоветовать.
Вкратце вот пример: Есть игровой персонаж. Есть комнаты, в одной из комнат находится телевизор. Игрок может его включить.тогда тв издает звук. Если Тв включен, но находится не в одной комнате с игроком, тогда тв звучит тише.
Сейчас реализовано так: Есть базовый класс Interactable, все производные классы от него(например, включение тв или переход в другую комнату) бродкастят сообщение, о том, что действие возможно и передают в сообщении экземпляр класса, который соответствует конкретному действию (переход в другую комнату, включение тв и тп). Подписчики - это, как правило, ui(который, отображает игроку, что действие доступно) и ActionExecutor, который управляет действиями. Как только ActionExecutor получает сообщение, он сохраняет его у себя и проверяет в update, была ли нажата кнопка , требуемая для этого действия (она хранится в самом классе действия). Если да, то там большой ActionExecutor дергает нужные классы и инициирует действие. Вот тут и начинается путаница(См скрин 1), как он дергает остальные. Сейчас есть объект app, который содержит ссылки на остальные объекты (а остальные на него), часть через него. еще часть -через мессенджер.
Например, после того, как тв включили, громкость должна регулироваться после смены комнаты (тип, хуже слышно в другйо комнате) - как это должно быть реализовано? Сейчас объект со звуком подписывается на сообщение о смене комнаты,но в целом все сводится к "отправить сообщение, чтобы отправить сообщение"
>>702066 На первый взгляд могу предложить такое решение.
1) Логика телевизора хранится в скрипте Televisor : MonoBehaviour. У него будет один метод внешний Turn(). Внутри нужно хранить ссылку на текущую комнату, которая владеет телевизором и ссылку на игровой мир. Игровой мир будет представлен синглтоном. Ссылку на комнату телевизора можно задать через инспектор, либо найти как-то так: tvRoom = World.FindRoomOfObject(gameObject);
В методе Update делаем проверку: if (tvRoom == World.CurrentPlayerRoom) SetHalfVolume(); else SetFullVolume();
2) На объект телевизора вешаем скрипт, который реализует интерфейс IInteractable.Interact(Character character). Скрипт должен содержать UnityEvent. Внутри Interact пишем: onTrigger.Invoke();
Далее через инспектор вешаем на onTrigger вызов метода Televisor -> Turn().
3) Для взаимодействия игрока с объектом нужно запросить компонент: var interactable = targetObject.GetComponent<IInteractable>(); interactable.Interact(this);
>>702068 Все-таки еще вопрос: На смену комнаты завязано несколько событий: 1) Включение следующей и выключение текущей комнаты 2) Регулировался звук разных объектов (рассчитывается в зависимости от расстояния комнаты от текущей - т.е. метод должен дергаться каждый переход). Объекты могут менять по ходу игры.
Каждый объект должен сам заниматься этим всем или имеет смысл подписаться на сообщение, после которого будет запускаться соответствующий процесс?
Просто получается не единообразно, что все действия у меня резолвает ActionExecutor, а переход по комнатам - каждый по своему. >В методе Update делаем проверку: >if (tvRoom == World.CurrentPlayerRoom) >SetHalfVolume(); >else >SetFullVolume();
Есть ли смысл каждый апдейт дергать, если менять звук по факту нужно только при переходе из комнаты?
>>702074 >Есть ли смысл каждый апдейт дергать, если менять звук по факту нужно только при переходе из комнаты? Смысл в том, что это гибкое решение. Ты можешь легко его изменять или дополнять. Вдруг ты захочешь динамически изменять громкость в зависимости от дистанции. Или в зависимости от препятствий. А если игрок временно оглох? Ты ещё одно событие добавишь на этот случай? Или игрок зайдёт в звуконепроницаемую комнату. Ты всеми этими событиями связываешь себе руки.
>>702108 затрахался с этим вопросом, везде лепят в духе brackeys от балды и так что хуй потом добавишь новый функционал без батхёрта, НО! пришёл к выводу что куда полезней чем трахаться с этим вопросом в лоб, просто делать мелкие игры и через процесс приходит понимание куда и чего вставлять. за последний год код и архитектура стали в разы чище и лучше, но всё ещё есть пробелы
>>702386 Зря, очень аддиктивная гриндилка. Похуй что клон ботвы, зато какой. Даже не клон, а развитие идей. Мне вот стилистика зельды не зашла, а тут прям то что надо, и вайфу есть, и боёвка продуманнее. Кое-что кастрировали конечно (физических паззлов например почти нет), но в угоду чему-то другому. Настораживает что она фритуплей, но я наиграл 30 часов, каких-то пейволлов пока замечено не было. К тому же на старте дают до жопы кристаллов за регистрацию и последующие активности, за которые я выбил пару 4 персов, одного 5 и несколько пушек 4*. В принципе весь контент спокойно проходят и ф2п персами не юзая кристаллы вообще, но всё может поменяться в будущем.
>>702386 >Чем больше кидает тем больше я не хочу иметь дело с этим. Зря, постарайся избавиться от мыслей "мейнстрим параша, а я - нитакойкакфсе с уникальными вкусами", а то много хорошего и интересного пройдет мимо тебя. Я в соседнем треде отписывался, почему это важная игра для юнити >>702406 → Думаю, на сегодняшний день это самая технологически продвинутая и высокобюджетная игра на юнити, демонстрирующая на практике потенциал движка, до этого такого масштаба еще никто не делал. Поправь меня, если есть более продвинутые/высокобюджетные игры на юнити.
>>702554 Destroy убивает обьект только в самом конце кадра, когда все соотв. калбеки прилетели, т.е. на момент дестроя обьект все еще не нулл. DestroyImmediate форсит флаг что обьект убит сразу на момент вызова, но может приводить к багам и не рекомендуется типо.
>>702555 на вики доступная статья есть. по сути ты разбиваешь объекты на группы в каждом кадре и опрашиваешь только нужные тебе группы тем самым очень сильно уменьшая кол-во запросов
Какие обычно взаимоотношения у MVC классов? Контроллер имеет ссылки на инстансы модели и вьюхи? В какой момент(и где) создаётся контроллер и модель? Как другие классы получают данные из какой-то модели или тригерят контроллер?
Есть комната, состоящая из тайлов стен и пола. Каждой координате соответствует только один тайл, где нет тайлов геймобджектов нет вообще, это все я уже проверил - пик 1.
Настройки слоев, тагов и коллайдеров тайлов стены и пола на пиках 2 и 3.
На персонаже висит код, пик 4. В инспекторе для GroundFloor я выбрал соответствующий слой.
Но возникает ситуация, что персонаж не останавливается перед стенкой, а входит в стенку, но при этом когда он в стенке в следующий тайл стенки (слева или справа) он войти уже не может, только вернуться на тайл пола. Что я делаю не так?
Пик с тем, как персонаж зашел в стену. При этом когда он уже в нее зашел все вроде как работает корректно, на другой тайл стены он не может сдвинуться, в область где тайлов нет вообще тоже, вернуться на тайл пола может.
>>702735 Если я не ошибаюсь, то условие для начала движение у тебя содержит проверку, что персонаж столкнулся с объектом с тагом walkable. Ну так на начало движения, если он находится не в клеточке со стеной, он и будет collision с объектом, у которого есть таг walkable. Мне кажется, нужно проверять, что он не сталкивается с объектом с тэгом notwalkable или что-то ьакое
Убрал. В общем как я понимаю, в чем проблема. Луч кастится и проходит через две клетки, клетку на которой есть персонаж, и клетку рядом по направлению движения. И если хотя бы на одной из этих двух клеток есть тайл с тегом волкабл, он позволяет движение. Именно поэтому можно зайти в стену, потому что перед этим ты стоишь на волкабл клетке. И именно поэтому нельзя двигаться внутри стены, потому что обе клетки получаются без тега волкабл. То есть нужно сделать луч, который и начинается и заканчивается на клетке рядом, не задевая клетку, на которой стоит персонаж.
Как в стандартном FirstPersonController сделать так, чтобы игрок когда останавливался, двигался еще какое-то время вперед. Не предлагайте Rigidbody Controller использовать, он вообще неудобный. Перепробовал все, продолжал движение игрока по таймеру, после отпускания W, но все это как-то убого и рывками выглядит, нужна ваша помощь.
>>698843 (OP) Как создать копию лайтмапы в озу? В случае Texture2D ltluma = LightmapSettings.lightmaps[0].lightmapFar получается ссылка на лайтмапу в видеопамяти. Соответственно, меняя содержимое ltluma, меняется и лайтмапа в видео. А надо иметь независимую копию, с каждым кадром которая будет складывается с мапой/текстурой самописного динамического света и только после этого записываться в видеопамять по адресу оригинальной лайтмапы. Эдакий динамический свет для видеокарт без пиксельных шейдеров, как было в первохл/ку/ку2.
>>702765 >А вообще имхо хуёвая Дрочь какая-то получается, проще наверное будет повторять действия игрока какое-то определенное время, но у меня не получается, кто может посмотреть FirstPersonController из Standard Assets и скинуть сюда решение, буду благодарен.
>>702780 Где можно почитать все фишки языка C#, которые используются в Шилдте, нет времени все это читать, нужно каждую фишку быстренько изучить, делегаты, ну и прочую полезную залупу, помогите плз.
Сделал подобие сервис локатора, но не понял, зачем
Короче, есть класс, производный от monobehavior. Назовем Zalupa. У него есть [SerializeField] LIst, в который можно впихнуть все менеджеры -хуенеджеры, которые производные от ScriptableObject. Этот класс имеет метода Get<T>() where T : ScriptableObject - выкидывает инстансы этих классов по типу.
Как дальше сделать по -человечески: чтобы не в каждом классе дергать эту залупу, а какую то логическую прямую получить?
>>702822 1 - В настройка Project.Time - fixedDeltaTime поменяй с 0.02 на 0.04, будет буст 50% от физики (т.к. она будет считаться реже в 2 раза) 2 - там у ригидбодей есть метод определения столкновений, заметил что descrete (или как-то так) жрет меньше всего, но тогда через него могут объекты проходить на высокой скорости >>702827 Даа, vsync портит жизнь всем и на всех платформах, странно что эта хреновина так плохо работает
>>702840 Вообще не понял.. тип ты идешь по своим InterfaceZalupa делаешь .Get<SmallZalupa>() просто чтобы скастить объект? Попробуй так: switch(zalupaInstance){ case SmallZalupa smZalupa: smZalupa.MakeHugeCock(); break; } >>702798 К сожалению "быстро" не получится, я перечитал оч много книг и ковырялся в clr чтобы понять это всё на "нужном" уровне. А если просто то делегат это ссылка на метод, например: void CockMethod(){ / empty / } в другом методе или как переменная: Action methodLink = CockMethod; methodLink(); Ну и типов делегатов несколько, я взял самый простой, а они могут принимать параметры и возвращать результаты и тд >>702784 У всех свои велосипеды, если смотреть средне-сложные проекты - черт ногу сломит. Рекомендовал бы держать все данные в "доступном слое" т.е. MonoBehaviour должен ссылатся на какой-то объект, но не быть главным объектом (как это делается во всех туториалах ютуба или самой юнете). Рекомендую посмотреть сурсы HL1 т.к. там идет глубокое взаимодействие NPC с миром и при этом у всех типов NPC разные триггеры и условия. После знакомства с сурсами халвы станет сразу понятно откуда у всех ECS и DOTSов ноги растут (только растут как-то криво)
>>702861 Спасибо! А как в случае 2д игры всё-таки обычно: Вью висит на конкретно объекте и является производной от monobehavior. Какая обычно связь с контроллером, который либо просто класс, либо скриптабл обжеккт? Он находится и создаётся во вьюехе или где обычно?
>>702877 2д так же как и 3д работает.. или я вопроса не понял. Ты MVC или MVVM хочешь сделать? Самый простой способ (как мне кажется) держать ссылки на основные классы в синглтонах (GameManager какой-нибудь) и из твоей вьюхи можешь дернуть через евенты инспектора GameManager.YourStaticMethod, но думаю лучше дергать не напрямую а из вьюхи.
>>702901 Ну когда я перешел с 2019 lts на 2020 у меня пропал баг перетаскивания окна (если менял размер внутренних окон, весь редактор становился черным и вылетал с ошибкой стабильно)
Аноны, помогите, пожалуйста, разобраться в чем проблема. Я создал простенький таймер обратного отсчета. Он считает от 10 до 0.
1. Таймер запускается после нажатия на кнопку Start/Restart. 2. Если время обратного отсчета еще не истекло и нажать Start/Restart, то отсчет пойдет по новой. 3. Если время обратного отсчета истекло и нажать Start/Restart, то отсчет тоже пойдет по новой.
Проблема: Когда во время отсчета я нажимаю на кнопку, то все работает, как надо. Но когда время истекает и я нажимаю на кнопку, то таймер больше не запускается и отображается цифра 1.
Всем привет. Делаю свой клон хотлайн миами, нужно сделать подбор, кидание, хуяние оружия. В голову приходит только скрывать оружее которое я поднял, а потом в момент броска спавнить перед игроком, ну или может прятать на слой ниже и делать то же самое. Но мне кажется что это костыль хуйня говно какоето, как это можно реализовать нормально?
>>702930 Короче. Я реализовал данный функционал без корутин и все работает должным образом. Но может кто-то знает в чем тут у меня ошибка? Это может быть баг у Юнити?
Наверное ремув геймобжект оружия, в момент подъема, с добавлением в переменную типа ArmedWeapon значения, соответствующего этому оружию. А по нажатию на кнопку броска ты спавниш перед игроком оружие соответствующего переменной типа, а саму переменную приравниваешь к нулю.
>>702998 Например через синглтоны. На Awake в CharacterController заполняешь статическое поле Instance, в остальных классах пишешь CharacterController.Instance для взятия экземпляра.
Короче, такая проблема: Есть класс, производны от monobehavior. Все менеджеры приклепляются к нему как ScriptableObjectы, а их "апдейты" прикрепляются к эвенту этого класса, который дергается раз в Update().
Внезапно, в какой-то момент Updatа. Один из методов одного менеджера прерывается на update другого класса. Это возможно?
>>703058 А даже не так, гораздо проще. Метод дергается эвентом, который завязан на столкновение персонажа с объектом. Метод начинает выполняться и в какой-то момент внезапно начинается апдейт другого объекта. МОжет быть такое?
>>703059 Чегоо.. В юнетях обработка скриптов идет линейно пока ты не подключишь новые потоки, так вот, ответ- ДА ты можешь вызвать апдейт одного менеджера из другого по своему желанию и работать оно будет как ты сделал.
>>703059 Все, разобрался. Если кому-нибудь интересно, то былая такая ситуация:
В ходе выполнения метода я дергал list для которого нет экземпляра. В итоге должен вылететь эксепшн - но он не вылетает, а просто вся цепочка прекращается и происходит переход к следующему апдейту
>>703075 Всё оно верно выводит, ты в Start объект создал, присвоил wen - стринг этого объекта, потом в конце Start этот объект разрушается вместе с тем полем, в итоге в wen лежит теперь непойми что, поэтому он тебе это и выводит в лог.
Сделай PlayerWeapons pw глобальным: объяви его под "public string wen;"
>>703089 Там два скриншота. >>703075 Видимо, на момент, когда дергается Start() класса weapon, для класса player он ещё не дёргался. Перенест содержимое из метода Start в метод Awake.
Общая идея, что в авейках лучше держать настройки текущего монобихейвира, а в стартах - завязки на другие
>>703075 ПОРЯДОК ОБРАБОТКИ В юнете можно указать приоритеты скриптов в твоем случае PlayerWeapons.Start может выполниться ПОСЛЕ Weapon.Start и из-за этого строка будет null.
int выводит (скорее всего 0?) т.к. int wah; даже без прямой инициализации будет иметь default value, а точнее 0.
Посоны, на скок плохо иметь много монобихейвиоров? Лучше ли по возможности переносить из них все скриптабл оьжекты или ещё лучше в стандартные C# классы, которые не будут иметь дубликаты на стороне юнитовского c++? На сколько тогда плохо пользоваться юнити эвентами?
>>703134 >Что значит плохо? В плане перформанса, т.к. для каждого юнитивского класса есть класс в С++ , а у монобихейвиара еще и постоянно дергающийся коллбек в виде апдейта. >Решай проблемы по мере их поступления. Тогда нужно будет все готовое переделывать жи
>Видео по теме Я смотрел, потом и задался таким вопросом
Как лучше связывать управление персонажа и движение? 1) Персонаж имеет экземпляр класса управления и получает от него инструкции, если нужно двигаться 2) Управление - синглотон и публичным эвентом. Персонаж подписывается и в случае нажатия дергается соответствующий метод
>>703162 Двигайся от частного к общему. 1) InputSystem. Надстройка над дефолтным инпутом Юнити. Знает, нажал ли игрок кнопку Стрелять или направление движения, и т.п. 2) CharacterMotor управляет движением персонажа. У него есть публичные свойства, которые указывают хочет ли персонаж прыгнуть или направление движения. 3) CharacterController передаёт из InputSystem команды в CharacterMotor.
Какие ивенты, какие синглоты. Что-то ты городишь за ебанутую, сложную систему.
>>703183 > CharacterController передаёт из InputSystem команды в CharacterMotor. Так вот как они связаны? Композиция, ассоциация или что? >Какие ивенты Если по нажатию, кроме действия персонажа, должно еще что-то происходить?
>>703198 Объект 'Character' хранит три синих компонента с изображения. Ссылки на друг друга они получают через GetComponent.
UI узнаёт о состоянии персонажа через компонент CharacterState. Как UI получит ссылку на объект этого компонента? Например, пускай её хранит тот, кто создаёт персонажа. Компонент World. Как к нему обращаться? Через статическую переменную, но пускай это будет не синглтон. У него будет статическая переменная Current. Она задаётся в методе OnEnable и стирается в методе OnDisable. Более того, UI напрямую знать о персонаже не обязательно. Будет ещё один контроллер, который хранит ссылку и на персонажа, и на UI, и обновляет состояние интерфейса в зависимости от состояния персонажа.
Это как я вижу. Но что тебе на самом деле подойдёт - чёрт знает.
>>703208 Спасибо! У меня один класс вместо двух Character Controller и motor. Сейчас понял, что хорошая затея разделить, если захочется переиспользовать для движения не через инпут.
> но пускай это будет не синглтон Почему, какая разница?
>>703222 >Почему, какая разница? Синглтон должен быть доступен всегда и везде. В данном же случае World будет доступен только во время игры и нигде больше. В меню его уже не будет, например. Если ты обратишься к нему в меню, ссылка будет null.
>>703240 >Так и синглтон же тоже нулл будет до первого обращения? Синглтон всегда доступен. Иначе это не синглтон. И его статическая ссылка Instance никогда не будет null.
Есть еще такая проблема( я писал где-то выше. но лучше не стало), схожая с той, что выше: Игрок подходит к объекту, у него отображается, что он может провести действие. Если он нажимает кнопку, происходит действие, которое может затрагивать разные классы (звук, окружение, UI, инвентарь, самого персонажа). Как лучше сделать - один класс, который будет дергать все, что нужно, в зависимости от типа действия(например, воспроизвести текст, если персонаж хочет что-то сказать\прочитать) или действие само нотифицирует все классы и по эвенту дергауются нужные методы подписчиков?
Экземпляр создается при первом запросе и, если запроса не было, то не создается вообще. Если экземпляр создается на OnEnable, то действительно создается всегда и, если я верно понимаю, это просто попытка симулировать статический класс, расследуемый от monobehavior но это не точно,
>>703096 > int выводит (скорее всего 0?) т.к. int wah; даже без прямой инициализации будет иметь default value, а точнее 0. Ну вот, значит в строке 12 надо написать:
>>698843 (OP) Были кнопочки, управляющие геймплеем. Добавил два элемента типа text, в итоге кнопки вообще перестали реагировать на нажатия. Что это может быть?
>>703261 Точнее даже так. У меня на сцене два канваса, вот тот, что с кнопками управления, ни на что не реагирует. А второй, с другими элементами, работает нормально.
>>703261 Когда создаешь panel там есть флаг raycastTarget или interactable - выключи эти флаги т.к. по z-order-у они видимо выше и блокируют твои кнопки своими телами.
>>703283 Ну смотри, по идее лучше из евента дергать все классы по отдельности. Спустя некоторое время если видишь, что некоторые куски повторяются больше чем другие - их уже выносишь в другой класс для "переиспользования"
>>703242 Тебе нужен Observer, который наблюдает за действиями игрока и он уже дёргает методы, либо Юнити События. При этом Observer ничего не знает об UI, о звуковой системе, о инвентаре и так далее. Он знает только о наблюдаемом объекте, то есть об игроке.
>>703360 Спасибо! Я примерно так и сделал: Когда игрок касается предмета, с которым можно взаимодействовать, этому классу(далее менеджер действий) прилетает нотификация с этим предметом. Менеджер действий подготавливает действие. Если игрок жмакает кнопку использовать, то этот класс дёргает у предмета метод StartAction(). Предмет уже и отправляет нотификация кому нужно и с чем нужно.
Класс предмета можно сделать абстрактным и каждый реальный предмет будет реализовать его (можно было бы с интерфейсом, кстати). Но я сделал один monobehavior класс, который чисто передает действие менеджеру действий. А само действие - scriptableObject, который вешается на компонент интерактивного предмета
>>703540 Это ложное впечатление. Там нет другого синтаксиса. Есть ситуации, когда какие-то техники C# юнити резервирует для своих нужд(например, конструкторы), но это не значит, что не придется писать на "голом" C# Может, ты с js путаешь?
Как думаете, как лучше организовать работу с git на трёх человек(2 кодера и 1 артист)? Стоит ли разделять работу каждого на разные ветки? Пуллреквесты думаю сразу нафиг, ибо все изменения обсуждаются в мессенджере.
>>703549 Каждый раз новая ветка? Как-то это слишком, по-моему. Не лучше сделать ветку main с релизами, ветку dev и каждому разработчику по ветке, из которой потом всё перетекает в dev.
>>703551 Так и знал, что ты это скажешь. То, что я описал - стандартный метод работы с гит. Если каждый будет вести по своей ветке, вы потом, как пить дать, свою жизнь возненавидите, когда конфликты резолвать начнет. Траст ми. Хорошая практика - ветка на конкретный не оч большой участок когда. Иначе разъедетесь и пиздец
>>703556 Кто-то из нас заводит ветку на фичу и потом любой может вносить туда изменения до тех пор, пока фича не будет реализована? А если потом решим её дополнить?
>>703559 Ну у фичи должны быть конкретные acceptance criteria. Если хотите дополнить(при этом она рабочая на этом этапе), заливайте фичу в дев, делаете бранч от дева.
>>703573 Понимаешь, это не зависит от инструмента. Когда в принципе работает команда (неважно, дом строит или очередной велосипед собирает), должно быть понятно, кто что и в какой момент делает и чего хотят добиться. Работа с веткой на человека - просто, но до момента, как вы поймёте, что делали два задних колеса или вообще два разных велосипеда, которые не собрать в один
>>703540 Можешь относиться к юньке как к MonoGame-у или XNA. Да у юньки есть такое, что она дергает методы по имени (привет awake,start,update), а могла бы через интерфейс.. Но вообще в неё уже притащили часть либ из ентерпрайза (и тех кто это делают закидывают гавном). И да - у юньки есть свои "тонкости" из-за которых сказывается такое впечатление.
Читал тут про оптимизацию для мобилок. Разработчики отказались от батчинга, объединили всю сцену в один меш и выводили её за один раз. Батчинг реально не стоит использовать, если хочешь максимально оптимизировать сцену?
https://dtf.ru/gamedev/7533-mobilnyy-shuter-guns-of-boom-optimizaciya-grafiki Допустим, есть статический и динамический батчинг. Нашему проекту стало существенно лучше, когда мы вообще всё это выключили. Нет ничего — только сцена, которая рендерится вся сразу. Это ограничение как раз и привело к тому, что карты не очень большие. Куда бы ты на карте не смотрел — нет отсечения, вся сцена рендерится всё время.
>>703688 Про рендеринг 250к полигонов одним тиком, вместо 50к, но через 10 dc - сомнительно. Рендеринг полигонов сам по себе простая операция, даже 10 лет назад на android 4 мой проект с 60к полигонов стабильно держал 45фпс. Сжатие текстур - вот это уже лучше, юнитеки уже давно советуют батчить текстуры в атласы и так их использовать, в этом нет открытия для тех кто давно в этом варится.
а как в два дэ игре с видом сверху настроить физику так чтобы все работало нормально? например если прикладывать силу к обьекту, но с гравитацией в ноль он будет постоянно тормозить, а если включить гравитация то все будет падать вниз
Пилю бесшовные материалы в дизайнере. Позавчера запилил обои, вчера потолок, сегодня пол. Действия игры будут в нежилом деревянном многоквартирном доме советских времен. Надо напольный и потолочный плинтус ебануть, чтобы эти углы глаза не резали. Впрочем, думаю, и плинтуса тоже будут глаза резать
>>704147 Делай стык плинтуса с сантиметровой щелью, на половину забитой грязью. И в плоскости соприкосновения с полом/стеной должны быть полукруглые щели из-за выгнувшихся половиц. Половицы должны скрипеть и как бы постукивать когда на них наступаешь.
Хочу сделать SceneLoader статичным классом и пользовать его из других скриптов без использования синглтона и поиска его в каждой сцене, но проблема в том, что он также должен висеть на кнопке, а кнопка, при прикреплении к ней статичного скрипта, его не видит, и может работать только с обьектами на сцене. Как быть как фиксить, или может есть способы получше?
Кто-нибудь использовал "RuntimeInitializeLoadType.AfterAssembliesLoaded" для инициализации всяких внутренних сервисов/синглтонов? Я даже не знал, что оказывается у RuntimeInitializeOnLoadMethod можно задать тип загрузки. Что он может загружаться не только после сцены, но и перед загрузкой сцены.
>>698843 (OP) Имеется сцена с объектами, напротив каждого объекта кнопка, тыкая по кнопке, выбираешь нужный объект, потом он у тебя в игре появляется соответственно. Как лучше в скрипте прописать выбор? У меня пока только одна идея: повесить на каждую кнопку отдельный скрипт с булевой переменной, и в зависимости от того, какая переменная активирована, респаунить объект, но это как-то топорно. Есть более качественное решение?
>>704562 Пишешь простой МенеджерРеспавнаОбъектов, который принимает данные, что спавнить и где спавнить, а на кнопки вешаешь функцию из менеджера, в которую эти данные и передаются по клику. Для удобства еще можно обернуть в enum типы того, что спавнишь
>>704574 почему какойто там сакутин постоянно и везде твердит что менеджеры/контроллеры это каловая масса для лохов, но все повсеместно пишут менеджеры, да контроллеры?
>>704577 Вот тут добавляешь поле, в него можно будет перетащить объект со сцены с скриптом менеджера и у него выбрать нужную функцию, которую следует вызывать при клике, там же можно указать что в функцию передать нужно
Как в юнити текст делать менее вырвиглазным? Писали что при увелечении шрифта он делается более четким, и для статов сработало(50 стоит) Но в боксе пиздец вытикают глаза если смотреть и никак исправить не могу
>>704649 >обоссаная визуал студио Ты что - сумасшедший? Качай бесплатную студию 2019 года. Ну, или Rider, если есть деньги. А маня-девелоп это позапрошлый век. Даже не знаю, кто в здравом уме будет в этой залупе работать.
Все обучающие материалы, это что такое функция, что такое переменная, и никто, абсолютно никто не говорит о вещах для среднего уровня и выше. Может быть это специфика языка, когда кроме как знаний паттернов, возможностей Unity и базовой основы (переменные, функции, коллайдеры, корутины) больше ничего не нужно? Я сам на своих проектах сталкиваюсь только с базисом, так как нужно если было бы что-то реализовать, а я бы не смог, я бы давно обратился в гугл и нашел решение. Нужно ли читать книги посвященные C#, или достаточно знать паттерны, уметь проектировать проекты до старта и всё?
>>704669 Или я обычный говнокодер? Но вопрос изучения остается открытым, как мне узнать о всех нюансах, не проработав где-то в офисе 5 лет, я хочу чтобы мне сразу объяснили чем тот или иной метод лучше и в какие моменты, чтобы я мог соревноваться с хорошими кодерами.
>>704670 У меня схожая проблема Вкатился зимой 20го в Пыху, выкатился после полугода, понял что веб не моё. До этого немного ковырялся стажёром - джуном в вебе у товарища в конторе
В итоге ушёл в геймдев, заинтересовал юнити, т.к. вроде простой и понятный софт для новичка(ага) Си шарп довольно комфортный язык, там всё весьма наглядно, нет нужды прописывать кучу ерунды как в пыхе, надо только библиотеки вовремя подключать, ага Но вот только непонятна сама сфера - на шарпах можно делать кучу всего а меня интересует именно геймдев. Вроде неграмотно ограничивать себя в изучении, но сдуру можно увлечься, нахвататься поверхностных знаний и в итоге даже майнкрафт(который вообще на Java) собрать
Вот и непонятно - что же делать? Изучить шарпы? Насколько плотно их изучить? Изучить юнити? Интерфейс? Библиотеки? Какие то консольные команды, характерные для этого софта? Что и в каком количестве имеет значение как для новичка, так и для стремящегося? И вроде на все эти вопросы есть ответы в ОП посте, так что заранее пардон, просто раздуваю
Есть один алгоритм, процедурно генерирующий данжи. Использую тайлмапы и тайлы. Есть два вопроса: 1) У меня нет опции создать тайлмап в ассетах, только отдельный тайл. Пришлось создать прямо в иерархии две тайлмапы, пикрил. А мне религия не позволяет держать в иерархии то, что можно держать в виде ассета/префаба. Хотя может я что то не понимаю и так и надо. 2) Я что то не разобрался, как менять цвет тайлов. Заранее спасибо, аноны.
Сосач, есть лестница в 2Д платформере, чтобы игрок зависал на ней, а не падал - во время соприкосновение с лейером лестницы rigidbody2d игрока задается gravity = 0.
Проблема 1: когда игрок стоит на последней лесенке пик1 - невозможно прыгнуть потому что параметр гравитации всё ещё ноль.
Проблема 2: когда игрок пробегает по лестнице пик2 - трансформ падает на ~0.02, что визуально незаметно, но из-за чего персонаж застряет в клетке, и вылезти можно только зажав "вверх" чтобы лезть по лестнице и "влево\вправо". Предполагаю, что сие тоже из-за гравитации.
В общем в поисках решения как реализовать "игрок не падает с лестницы, когда залез на половину и остановился" иным способом.
Не понял, и как это проблему решит? Если игрок нажимает клавишу вниз, то вместо спуска по лестнице - он будет просто падать. А если не нажимает, то гравитация всё ещё 0 и он всё ещё не может прыгнуть
Чики двощ. Ищу как реализовать в 3д физику мягких тел. Проблема в том, что у меня микс процедурных и baked анимаций. Obi вроде как не подходит для skinned rigged meshes. Какие-либо альтернативы есть ещё?
Как вы относитесь к пробелам в названиях объектов на сцене, в названиях префабов, сцен? Мне кажется, так гораздо читабельней выходит. И только ресурсы стоит называть без пробелов и в начале писать тип/назначение ресурса, потом после символа подчеркивания уже его название.
>>698843 (OP) Я не знаю, это только у меня так или что. Когда добавляют компонент cloth на объект и пытаюсь выделить точки, эти точки появляются только под определенным углом и то еще бывает не все. То есть мне просто приходится хуевертить камеры вокруг, чтобы они соизволили появится. Это баг какой-то или что?
На чем написан мультиплеер для игры Heartstone? Хотелось бы во время изучения мультиплеера взять уровень повыше, чем использование библиотеки Photon. Поэтому интересуют хоть обычные ключевые запросы благодаря которым я смогу понемногу изучить как пишется сеть в такой игре. Спасибо.
>>704809 Зная требования близардов к Senior Software Engineer, Server - Hearthstone можно прикинуть что там на чем работает. 3+ years of experience of server programming Strong C++ programming skills Some experience with deploying a live service Self-motivated and willingness to pitch in on many areas of small game development Excellent verbal and written communications skills Pluses
Previous experience shipping game titles or other software Linux development experience Networking experience in TCP / IP and UDP protocols Computer science or related degree Database development experience (MySQL, Oracle, etc.)
+ делать 360 анимаций (повернул влево на 5 на 10 15* и тд очень муторно, вряд ли они так делали). По плащу видно как он ломается при повороте, мне кажется это все же физон
>>704805 От полигона зависит т.е. с обратной стороны полигона могут быть проблемы, с лицевой у меня все норм было
>>704818 Есть пример с++ сервера какого-нибудь? Или игрового сервера на гите? Не обязательно ХС-а, чего угодно
>>704818 СТРОНК прогаминг скилз, такие ниибические требования как будто в НАСА зовут, а по итогу багерное говно тупого говнас такой-то фирмой и бюджетом, которое мог бы пофиксить любой васян из мухосранского вуза, но нет. Что ли лично Беня(уже нерелейтд, но всеж) делал? Пичот.
Обычные проблемы менеджмента в раздутом крупняке. Ты же кулстори о разработке Last of Us 2 слышал, как там пол отдела моделило уже заведомо завернутый контент прямо в Recycle Bin?
>>704939 >Ты же кулстори о разработке Last of Us 2 слышал, как там пол отдела моделило уже заведомо завернутый контент прямо в Recycle Bin? Где почитать? мимо
Нужно двигать персонажа постоянно вперед в рамках уровня вроде такого https://apps.apple.com/US/app/id1499812410?l=en, на уровне также есть повороты в сторону, на повороте камера, находящаяся чуть выше и сбоку от персонажа двигается вместе с ним. Как реализовать перемещение?
Тебе бы тогда просто с изучения крестов путем написания диалоговой адвенчуры с применением стандартной библиотеки и пердолинга консольки начать, а уже потом сетью заниматься.
>>704967 Бля, это выглядит очень просто, но я всё ещё не могу понять как реализовать. Пока всё что приходит в голову - привязать игрока к камере и двигать её вдоль уровня. Но всё ещё нужно как-то ограничить движения игрока краями дороги. как-то не хочется по-инвалидному по 5 box collider'ов цеплять
Анон, есть где-нибудь готовый ассет ближней боевки от первого лица?
Хочу сделать что-то типа hexen по геймплею. Начал писать свой велосипед - получается хуево, как-то я делаю не так - мобов надо прям выцеливать чтобы пнуть, а они наоборот дерут так что не спасешься - вместо фана одно раздражение.
>>704669 А чё ты хочешь-то? >Может быть это специфика языка, когда кроме как знаний паттернов, возможностей Unity и базовой основы (переменные, функции, коллайдеры, корутины) больше ничего не нужно
Кому не нужно? Какого языка? Почитай про делегаты, например. Наследование, нтерфейсы, абстрактные классы, виртуальные методы. Наверное, ты конструкторы даже не используешь, если через юнити залез в шарпы. Но может тебе и не надо, я не знаю, какая у тебя архитектура. В моем понимании, твоя инженерная мысль при реализации той или иной функции будет ограничена кругозором. Какие-то вещи можно сделать лучше/быстрее/проще, а ты об этом и не знаешь
>>705005 >Начал писать свой велосипед >мобов надо прям выцеливать чтобы пнуть, а они наоборот дерут так что не спасешься Кириль дальше ИИ, понятно что ты тупо через навмеш приближаешь врага к игроку, уменьшай скорость, делай рывки в разные стороны, разнообразь игру
Анон, подскажи. Хочу сделать функцию, показывающую диалог (да/нет) в виде bool res = ShowDialog(). Внутри этой функции канвас диалога делаю активным и при нажатии на да/нет попадаю в скрипт-обработчик этих кнопок. Как мне вернуть результат в ShowDialog?
>>705069 Можешь подробнее описать, не оч понятно? А вызов нужных методов из этих обработчиков в методе ShowDialog почему не сделать? Или эвент не дёрнуть?
Как залететь в юнити ? Уже 2 недели пытаюсь что-то сделать, гуглю если не получается и пытаюсь снова и снова, но у меня только жопа сгорает с того, что я нихуя не умею. Как вы влетели в юнити ?
>>705089 >>705112 Купи курсы и смотри видеоуроки, делай копии простых игр.
Ну и вообще да, настоятельно рекомендую курсы, как минимум основы с них получишь. С литературой сложнее и дольше, из литературы лучше почитать что-нибудь про ООП или паттерны.
>>705118 >ООП не нужен Скажи это любому работодалю. Может ты ещё скажешь, что и паттерны не нужно знать?
>>705115 На юдеми есть много курсов, смотри топ по рейтингу\популярности само собой на английском, если жалко денег - на рутрекере спирачены почти все популярные курсы. Стоят они на скидке 10-15$, а скидка там постоянно. Если сейчас нет - подожди пару дней-неделю и будет.
>>705069 Самый простой способ без каких-то либ и тд: В диалоге сделай метод public void ShowDialog(string text, Action<bool> callback){ // сохрани каллбек в этом Mono объекте } void OnDialogResult(){ // тут какая-то твоя логика в диалоге, пусть _result - будет true или false (да нет) callback(_result); } В месте где вызываешь делай: void SomeMethod(){ string question = "Ты лох?"; Dialog.Singletone(или ссылка, как хочешь).ShowDialog(question, (isSuccess)=>{ if(isSuccess){ MakeAIAngry(); }else{ MakeAIYourFriend(); } }); }
>>705186 Нет, суть в том, что ты создаешь делегат и отдаешь его своему скрипту диалога, с этого момента выполнение скрипта закончилось и update метод работает как и всегда. Потом когда нажимаешь да или нет то у тебя сохранен делегат и он вызовется нормально. Там есть еще что улучшать, например сохраненный делегат (который callback(_result)) лучше обнулять после закрытия формы, короче просто попробуй так сделать, это не долго и не сложно.
Правильный ответ
Аноним20/10/20 Втр 11:27:58№705190414
>>705069 Делай в стиле ДОД. Возвращаемое диалогом значение - это данные. Состояние видимости диалога - это данные. Все данные пиши в базу данных, которую видит и скрипт диалоговых кнопок и скрипт вызывающего объекта. Логика вызывающего такова: Чекаю в БД поле диалог-открыт, если открыт - прерываю работу. В БД в поле диалог-результ записываю нулль. Вызываю диалог, передаю ему некоторый текст. В апдейте чакаю в БД, открыт ли диалог? Если диалог закрыт, чекаю в БД поле диалог-результ и действую соответствующе.
В диалоге логика: Я родился! Я записал в БД что я видимый. Я прочитал во входных данных текст и отобразил его. Если я стал невидимым, я записываю нет/отмена/ложь в БД. Если я стал невидимым, но кнопка да была нажата, я записываю в БД да/правда/ОК. В любом случае я обязательно что-то записываю в БД, иначе никак. Записываю в БД также, что я невидим. Умираю!
>>705190 Ты не ту задачу пришел сюда решать, у нас не модальные диалоги, а 1 инстанс больше не будет, понимаешь? нахуй нам бд нужно вообще, что ты несешь вообще
>>705191 а мне и не надобыло решать эту проблему, вопрос в другом был
Пытаюсь собрать несколько префабов в AssetBundle, пробовал разные способы из интернета, пробовал передавать в BuildPipeline.BuildAssetBundles() карту из префабов и все равно всегда Unity начинает обходить все ассеты в проекте, застревает на каждом проклятом png и весь процесс создания AssetBundle занимает больше двух часов. Гугл выдает только несколько несчастных, которых задаются тем же вопросом, что и я, и им просто никто не отвечает. Почему так долго? Почему Unity идет по каждому ассету, когда я вот прямо ей даю список, из которого я хочу получить AssetBundle? Может сейчас уже есть более удобная альтернатива бандлам? В документации написано: лучший совет по организации ассетов, не использовать Resources, а использовать AssetBundles.
Почему я не могу фэйд нормально сделать? Материал Standart, Rendering Mod Transparent, ошибка очевидно в коде, но я не могу найти проблему, скиньте как вы это используете.
>>705120 >Скажи это любому работодалю ну, ежели работодателю, то да... И там не только ООП надо знать, не так ли, а туеву кучу всего, без чего обычный инди-разработчик вполне может обойтись
>>705266 Ну для себя и узкого круга можно и говнокод пилить, конечно на уровне яндере симулятора, но мне кажется всяко лучше, если код чистый, красивый и понятный. Знание ООП, СОЛИДа и базовых патернов лишним всё равно никогда не будет.
Но в общем ты прав, конечно, для себя можно и без этого. но нахуя, если можно с?
Салам Алейкум Программисты и модельеры, есть функция на первой картинке, которая двигает обьект вилоситей и при ударении об стену вращает его на угол отражения, но, проблема в том что в первом случае отражается правильно, а во втором неправильно, подскажите пожалуйста, как пофиксить, а то я ебло 2 дня только рэйкаст писал
Помоги юнитач. Нужно сделать так, чтобы по тапу на экран блоки заполнялись зеленым. Есть нужные спрайты, но не понимаю как реализовать. Метод тапа и всё прочее уже готово, нужно просто чтобы зеленый спрайт было видно только внутри боксов. или может как-то можно слайдером реализовать или чем, я хз
Привет, девелопперы. Давно мечтаю сделать игру: 2D визуально-диалоговая песочница рпг... короче клон "Валета плетей". С юнити очень мало знаком, но кодить умею. Реквестирую план вкатывания, при котором потрачу минимум времени на изобретение окошек с кнопками, и максимум времени на логику с механиками. Может там в магазе есть фреймворки для визуальных новелл, или какие то удобные наборы компонентов? Или достаточно пару видосов глянуть, и уроков читнуть и никакие васяны не нужны?
>>698843 (OP) >>698843 (OP) Анончики, в юнити есть возможность прописать путь допустим звука, чтобы не назначать ручками этот звук каждому объекту со скриптом? Пользовался вот таким решением: _sound = (AudioClip)UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/_Data/Sound/SFX/menuTouch.wav", typeof(AudioClip)); но оно работает только в редакторе, и билд с таким кодом нельзя сделать, ошибка cs0234.
Есть массив, в нем изначально 0 элементов, я в него помещаю сначала первый объект, потом второй. Когда кол-во объектов достигает трех, мне нужно удалить первый объект. Короче суть в чем, максимум 2 объекта, если больше, то первый удаляется и в конец добавляется новый, но у меня какая-то проблема, я сделал вот так, но потом появляется баг из-за которого что-то не до конца очищается и объекты зависают и это действие не выполняется.
>>705380 Не хочу себя ограничивать, мало ли, там идея придет сделать 3д мини игры, или с частицами выебоны, или на консоли выкатить, или еще что. И вобще, я кодить ИИ секс рабов хочу, а не в редакторе персонажей анимацию дрочить, редакторе карты деревья расставлять.
Реализация FOV для юнити
Аноним20/10/20 Втр 19:30:03№705396434
Всем доброго времени суток, аноны. Недавно я начал пилить рогалик, проникнувшись жанром, как платформу выбрал юнити, потому что имел мало-мальский опыт общения с ней и вообще визуализацию и всякий интерфейс сделать проще. Первым делом запилил генерацию подземелья и возможность ходить по нему не втыкаясь в стены. Теперь настал черед поля видимости. Алгоритмы рейкастинга/шадоукастинга я прочекал и вроде бы даже понял в основном, то есть как в определенной области определить какие координаты должны быть видимы, а какие нет я представляю. Вопрос в том, как применить это к моим ресурсам. Имеем следующее: Два листа Vector3Int, один содержит позиции тайлов пола, другой тайлов стен я использую листы вместо массивов потому что с массивами я был бы вынужден генерировать карту в строгих рамках, две тайлмапы, одна для тайлов пола, другая для тайлов стен (и на ней висит коллайдер, в который стукается игрок). Игрок, монстры и предметы для взаимодействия это геймобжекты. Я могу каждый раз когда игрок смещается с помощью рей/шадоу кастинга определять видимые позиции и красить тайлы соответствующие видимым позициям в (1,1,1), невидимые в (0,0,0), а так же отключать SpriteRenderer монстров и объектов, если они не в линии видимости игрока. Или можно создать третью тайлмапу над всем подземельем, состоящюю из черных квадратов и удалять/добавлять тайлы в зависимости от их видимости. Или может это все костыли и есть другой, более правильный и общепринятый метод. Буду благодарен за любые советы. Пикрил - макетный альфа-вариант, чтобы пост не был без картинки.
Вопрос по инвентарю и реализации инвентаря: как лучше сделать?
Есть InventoryController и метод AddItem(nventoryItem item) В него прилетает InventoryItem, который содержит: - картинку для инвентаря - название - ссылку на объект, который нужно вытащить из инвентаря при необходимости.
В InventoryController есть LinkedList<InventoryItem> items, который содержит весь список айтемов и LinkedListNode<InventoryItem> currentItem, который держит текущий выбранный элемент. Элементы можно переключать
При добавлении айтема, в AddItem(nventoryItem item) дергается InventoryView, чтобы добавить картинку на UI:
public void AddItem(InventoryItem item) { //Создается слот из префаба var slot = Instantiate(slotPrefab, this.transform); //Получаю нужный компонент вьюхи var view = slot.GetComponent<InventoryItemView>(); // Вью получает ссылку на айтем view.Item = item; //Айтем получает ссылку на вью. Вот тут основной вопрос item.View = view; //Устанавливаю картинку slot.transform.FindChild("IventoryItem").GetComponent<Image>().sprite = item.Image; }
На сколько это плохо, что InventoryView.AddItems(nventoryItem item) меняет item, вставляя ссылку на вьюху? Меня смущает, что если дернуть где-нибудь (но пока таких кейсов нет) айтем до того, какон "Добавлен" на ui, ссылка на вьюху будет нерабочей (Правда, можно в геттер адекватное описание добавить). Как лучше сделать в данной ситуации?
>>705410 >Возможно с леером проблема Там как бы не только на персонаже спрайты глючат, и на юайке вон поломалось, и куски из которых левел генерится. Скорее всего косяк в производительности, я налепил на основного персонажа несколько геймобжектов и на каждый из них аниматор, для реализации смены снаряжения. Ещё спрайты анимаций у меня не полотном, а отдельными картинками, и теперь при запуске у меня даже редактор захлёбывается. Перепилю для начала анимации. >Сам всю логику движений делал? Физон движения и малый поиск пути делал по этим материалам https://gamedevelopment.tutsplus.com/series/understanding-steering-behaviors--gamedev-12732 , боёвку сам придумывал.
>>705476 Как там с интерфейсами? Есть что то кроме нижней панельки с диалогами (которые все скипают) и варианты ответа в центре экрана? Окошки есть? Их можно таскать? Драгидроп есть? Кнопки можно кастумизировать? Прогрессбары есть? Сейвлоад можно отключить?
Как заебато шарпы выучить, а то я как гой даже за самой простой задачей лезу в гугл. Сейчас хочу проект начать и уже дето неделю просто втыкаю в экран и спрайты двигаю туда сюда. Рассказывайте как вы выучили
>>705487 Как я понимаю, там тоже есть полная кастомизация. Посмотри to the moon, сделан на РПГ мейкер, в коммерческом плане достаточно успешная. Там есть кастомные пазлы
Поделитесь вашими идеями, опытом личным или знаниями общепринятыми, как делать движение камеры, что бы плавно, без багов и на больших скоростях работало. У меня стоит обычная проверка уровня центр камеры отходит от игрока на такое-то расстояние-двигать камеру к игроку, как только расстояние от камеры до игрока около 20 пикселей - остановиться. И в общем-то нормально работает на медленной скорости, но как только я увеличиваю скорость персонажа, камеры тоже, то либо персонаж вылетает за пределы камеры, то камера на больших скоростях перепрыгивает персонажа-пытается отпрыгнуть обратно, но так как у нее большая скорость в данный момент времени-она опять перепрыгивает персонажа в обратную сторону и все дергается и багуется.
И еще похожий немного по смыслу вопрос, как фиксить вылет персонажей за стенку с коллизией на больших скоростях? Шаг персонажа, его скорость, видимо околобольше+ размеров коллайдеров, юнити просто не успевает наверное просчитывать физику. Одно из решений это просто сделать коллайдер огромным чтоб он заранее считал типа, в ручную все тестировать при каких скоростях объект будет вылетать, а при каких нет? Или опять таки уже есть лаконичные решения таких проблем.
>>705530 Мне друг мой скинул спизженные откуда-то курсы, когда узнал что я этой хуйнёй страдаю. Я их освоил за за пару месяцев, начинал сто раз тогда, и на анриале пытался что-то делать, но по итогу в этих курсах разобрался и пилю на юнити игрушку. Если есть нужда - залью анону на гугл, там по 2д парнишка в тех курсах в основном поясняет, но после этого уже в юнити шарить начинаешь и знаешь куда гуглить.
Простой код, который не хочет работать. public float speed =0.25f; transform.Translate(Vector2.up Time.deltaTime speed); Объект передвигается слишком быстро, а если напишу transform.Translate(Vector2.up Time.deltaTime 0,25); то всё правильно. Неужели это баг? Или что-то упустил?
>>698843 (OP) Крч, я пишу суровый интерпрайз, хочу начать делать чего-нибудь для души и этим зарабатывать. Поможет ли мне в этом unity? Как долго вкатываться, имею опыт программирования? На какую зп я могу рассчитывать? Меня вообще возьмут, или рынок мёртвый?
>>705904 Хочешь ассетфлипать - Н И Х У Я, а если хочешь делать "свою" игру - базис шарпа офк, а также куча разных выебонов и костылей вокруг возможностей движка и шарпа, до которых тебе надо будет допереть самому или суметь нагуглить подходящий вариант.
>>705904 там нихуя не надо знать из шарпа и вышмата другое дело нужно быть неъвбеменно умным и знать все чтобы дело шло проще легче быстрее и резльутат был лучше
>>705906 зис, я вообще задал только пару вопросов практичных в этом треде, все основное сам изучаешь, рецептов нет, все сам
Не гоните ссаными тряпками макаку тупую, которая только вкатывается. Короче, есть пикрилейтед 1. Почему при срабатывании этого условия в апдейте не скипается последняя строчка апдейта? Оно просто продолжает вызывать ту функцию перед дебагом и сам дебаг. Когда я стою на нужном расстоянии до цели и по логике у меня должен быть всегда ретёрн с апдейта, тем самым должен быть пропуск той последенй строчки, разве нет? Пикрл 2 - мои те два метода, что вызываются в интеракте и в конце апдейта, мало ли в них обосрался. Сама параша работает, т.е. при нажатии на Е я получаю шмотку в инвентарь и всё такое. Вопрос именно в высвечивании этой вот самой подсказки про нажатие на Е, ибо оно тупо не высвечивает никак. Я уже в else кидал эту залупу - всё равно ловлю вызовы этого дебага и очистки текста каждый фрейм даже в радиусе работы условия.
>>705910 Попробуй без ретурна просто иф/элси сделать, и тыкни пару дебагов в функции посмотри что и когда вызывается, проанализируй и помёшь где обосрался.
Подскажите по фатону, 20CCU это 20 юзеров максимум? Зачем мне 60гб? 20 юзеров в одной сессии? Смотрю на план "500CCU за 100$ месяц" и думаю, не дешевле ли написать (или взять) стендалон сервак и поставить его на какой-нибудь VMS за 250р? (при этом тащить будет сразу 3к игроков)
>>705929 >Зачем мне 60гб? Это бесплатный трафик. Если его истратишь, то за дополнительный нужно доплачивать.
>не дешевле ли написать (или взять) стендалон сервак Дешевле. Но смысл фотона в том, что ты просто берёшь и пишешь сетевой код на клиенте, а всё остальное они берут на себя. Всю эту ёблю с запуском новых серверов, с регионами и тому подобное.
>>705931 Спасибо, расскажи еще плз про 20 юзеров, это будет 20 юзеров на весь мир? а за 95$ в месяц будет уже 500 юзеров? Если рассматривать CS1.6 (например) вот играет 12 человек на сервере и по простой математике у меня будет 42 сервера на 12 человек?
>>705932 CCU - это количество игроков онлайн на весь мир. Доступные регионы выбираешь ты сам.
>а за 95$ в месяц будет уже 500 юзеров? За 95$ у тебя одновременно смогут играть 500 юзеров. Что будет, если онлайн скакнёт до 600? Тогда появится сообщение, что тебе нужно сменить тарифный план. Игроки продолжат спокойно играть, онлайн может вырасти хоть в 10 раз, но тебе нужно будет платить.
>Если рассматривать CS1.6 (например) вот играет 12 человек на сервере и по простой математике у меня будет 42 сервера на 12 человек? Да.
Его фишка в том, что логика комнаты выполняется у них на сервере. Ты на C# пишешь DLL и заливаешь к ним. У Фотона есть такая услуга, но только на энтерпрайз тарифе и api там такое себе. У плеер ио мне api понравилось, но там есть ёбля с потоками.
есть 2д сцена, на ней с десяток спрайтов. на каждом по коллайдеру2д без rigidbody. когда я кликаю по объекту, то выстреливает метод OnMouseDown и окрашивает этот спрайт в другой цветю это именно то что мне нужно, но ещё мне нужно чтоб когда я кликал вне этих спрайтов, то они все возвращались в исходный цвет и я не пойму в каком месте мне отлавливать клик и как его отделить от клика по спрайту. помогите
тут вопрос только том как мне организовать всё что сцена знала когда кликают по ней, а не по спрайту, а спрайт знал когда кликают по нему, а не по сцене
>>705956 Как вариант: Создай локальную переменную _lastClickedObj; Пускаешь райкаст на объект: если попал if(_lastClickedObj != null) разукрасить_обратно(); _lastClickedObj = hit.GetNewObject(); _lastClickedObj.разукрась(); Если ткнул в пустое место if(_lastClickedObj != null) { разукрасить_обратно(); _lastClickedObj = null; }
>>705976 Чего ругаешься? Я имел ввиду что никто из нас на наших инди проектах не будет использовать 20 разных либ на 20 разных языках. Возьмем фотон какой-нибудь и проект даже не доделаем.
Алоха. Вопрос к бывалым. Тут загорелась в жопе сера научиться делать игры на Unity, в поисках курсов наткнулся на следующее: https://www.school-xyz.com/hyper-casual Следовательно вопрос, если посмотреть на описание программы и учесть возможность скинуться на него с парой друзей, сильно ли он будет полезнее чем остальные предложения на рынке, или вовсе бесплатные варианты на Youtube? Возможно кто-нибудь уже проходил клевые курсы и может подсказать где можно найти?
Гайз, подскажите плиз, пытаюсь зайти в аккаунт в Unity Hub, нажимаю sign in, загорается на пару секунд белый экран, и тут же гаснет. Зайти не дает. Сталиквался ли кто-кто нибудь с подобной ебатой, проблема не гуглится от слова совсем.
Посоны, а внутри геймобжекта можно как-нибудь чисто спрайт заскейлить? Если скейлить трансформ геймобжекта, то там следом колайдеры хуйядеры его скейлятся, ебанина такая их руками назад делать. Пока пришла только идея добавить внурь ещё один геймобжект и к нему спрайтрендерер прилепить и его чисто скейлить, но вот чёт очкую геймобжекты плодить, которых итак по итогу будет дохуя.
Не первый раз наталкиваюсь на сборку Юнити, которая не хочет запускаться у меня на компьютере. Насколько это частая проблема? А если игра выйдет в стим, а у игроков не будет запускаться?
>>705408 Пожал спрайты анимаций в два раза разрешение, поменял фпс анимаций с 60 на 30, запихнул каждую анимацию в спрайтшиты, под 4к сжатие текстур в юнити они влезли, в редакторе всё-равно подлагивает, а в готовом билде пропадают куски персонажей и иконка инвентаря партачит - но уже значительный прогресс в сравнении с тем, что было. Но, блять, ужимать дальше некуда, попробую спрайты "земли" пожать и ещё надеюсь на то, что пропадают куски из-за конфликта имён, все анимации одинаково названы, как и спрайты к ним, может юнити при билде что-то через пизду сжимает и потом неправильно рантайм декодирует.
>>706210 Ебать, вот это совет. Такой неочевидный ход, сам додумался до такого, или подсказал кто? Разумеется блять я уже 10 раз переустановил, и старые версии хаба попробовал, и сука все что могло ограничивать его работу aka брандмауэр\антивирус и тд позакрывал. Осталось только с бубуном попрыгать над компом.
>>706276 >Разные типы апдейта Вся логика игры крутится в фикседАпдейт. Клики мышки только ловлю через апдейт. >влияние на компонент через родственников Ну вот зомбик у меня одним геймобжектом идёт и сам свой аниматор контролит, а на нём пропадает спрайт на видяшке видно. Ну конечно на него "влияет" родственный геймобжект игрока, но там типа отнять хп и всякое такое, как иначе то подобное реализовывать. Напрямую на его аниматор влияет только когда анимацию ошеломления запускает энеми.шортСтан(), но это хуйня я думаю и в первых версиях игры не было таких багов, а код этот уже был. Персонаж игрока состоит из нескольких геймобжектов - оружие, щит, башмаки... аниматоры которых контролятся основным родителем геймобжектом, но всё же сомневаюсь в твоём предположении, потому что это не объяснит допустим куда проебалась иконка инвентаря. Но предположение это ещё обдумаю. Делаю ставку на конфликт имён файлов, проверять буду как наберусь сил всё перепилить.
На данный момент я работаю в той сфере, которая мне просто остаебала. Мало того, что работы много и она мне не нравится, так ещё и получаю копейки в районе 50к. ОЧЕНЬ хочу перекатиться в геймдев индустрию, а именно в погромисты на unity.
Собственно сам вопрос : Что именно следует изучить, для того чтобы можно было шарить вакансии на джуна хотя бы ?
Планирую потратить на вкатывание около года-полутора, поэтому не смущает количество необходимых знаний. Главное знать что именно изучать.
>>698843 (OP) делаю что -то под мобайл (да в мармолсете, но позже на unity) low-poly (максимум 9k tris на здание) pbr всё такое (моделил/запекал) в дальнейшем буду фиксить что скажите?
>>698843 (OP) делаю что -то под мобайл (да в мармолсете, но позже на unity) low-poly (максимум 9k tris на здание) pbr всё такое (моделил/запекал) в дальнейшем буду фиксить что скажите?
>>706285 Пикрелейт требования выдвигаемые вот прям сейчас, завышенные конечно, но если знаешь это, то точно возьмут. >>706285 >Планирую потратить на вкатывание около года-полутора, поэтому не смущает количество необходимых знаний. Главное знать что именно изучать. Если именно программистом, то очень серьезно изучать шарп. И параллельно изучать движок, можно через https://learn.unity.com/ или курсы с торрентов. >>706285 >что работы много и она мне не нравится, так ещё и получаю копейки в районе 50к. Так в гейдеве все так же.
А у вас есть способ отлавливать глобальное нажатие пкм эвентом? Ожидал, что OnPointerClick будет так работать, но он вызывается только при клике на объект, к которому привязан
>>706389 >Почему я такой неудачник >думал поделать игры чтобы себе купить комп Ответ на вопрос кроется в самом вопросе. У тебя ложные представления о жизни
Как сделать слежение камеры как в cube surfer ? Камера следует только за персонажем, но когда он слайдится влево-вправо, она остаётся на месте А ведь там ещё дорога поворачивается.
>>706450 if(Input.GetKeyUp(KeyCode.Mouse0)){ // отжали мышь } >>706389 Какая версия? мой комп из 2007 тянул 2019 lts (только я оч сильно дрочился с перфоменсом благодаря этому научился всему такому) >>706475 Проверка дистанции по одной оси, вместо трех. А вот как правильно настроить эту ось - твоя работа
>>706589 Это нативное встраивание. А у меня элемент (база знаний по игре) находится в вебвью, проксируется с моего сервака. И вот туда, помимо текста, я хочу впендюрить еще видео.
Делаю типичную бродилку по коридорам и комнатам, и, чтобы упростить игроку прохождение, хочу добавить необязательную возможность делать пометки маркером на стенах, дверях, короче, на мешах (можно рисовать стрелки и текст, например). Рисовать он будет курсором мыши. Как думаете, мне подойдет Line Rendered? Пока чел будет удерживать курсор, я буду с интервалом, например, 100мс, запоминать позиции курсора и передавать их в Line Rendered. Это будет происходит так. Чел подходит к стене, переходит в режим рисования спец клавишей (пусть будет "P"). В этот момент я поворачиваю камеру к стене, чтобы она смотрела прямо на стену, под нулевым углом. Потом формируется Line, который просто будет висеть на стене. Норм идея? Но может есть хорошие и бесплатные готовые варианты?
>>706590 Аа, возьми либу vjs и через стиль .video-js .vjs-big-play-button { display: none; } скрой кнопку, через JS управляй видео. Хуюнити умеет дергать методы из других языков (включая нативный ios или android) >>706591 Норм, у lineRender-а есть встройная функция relax - которая удаляет слишком близкие точки + через raycast ты можешь рисовать не в воздухе, а прям на своих объектах
OnControllerColliderHit создает мусор. Если какие то алтьернативы CC хитдетекшена? OnColliderEnter не может пробиться через кожу контроллера (любой толщины), то есть не работает. на форумах советуют не юзать дефолтный cc, лучше пишите свой, круто, а зачем тогда он есть вообще, может пока пишу свой контроллер, еще свой движок напишу заодно?
>>706695 Меня беспокоит что дефолтный там под капотом использует PhysX апи и на плюсах, то есть уже оптимизированнее всех васянских контроллеров и всегда будет, да и вообще мы движок берем чтобы игры делать а не под унитазом гайки крутить.
>>706697 Яб покрутил, только они даже не дают эти слабые гайки закручивать вместо них.. А! Еще помню, что если убрать этот метод OnHit то лишнего GC не будет
Тестирую под свой старый телефон, не смотря на то, что игра не оптимизирована, все работает ок, хороший фпс и не греется ничего. Дал потестить людям на чуть более старых моделях и на очень современных моделях типа сосунг галакси - говорят греется и при чем достаточно сильно. Игра очень примитивна 2д. Андроид 4. В чем может быть причинакроме подкручивания гаек и моих исправлений в будущем? Это какая-то распространенная проблема или что? Все изображения юнити автоматически определяются ассетами, то бишь при созданий-удалении объектов с одним видом используется одно изображение или каждый раз определяется новое? И чтобы это исправить мне вручную надо прописать префаб какой-нибудь?
>>706699 Ага и инфы о колижене тоже не будет. Зачем я этот метод вообще добавил по твоему, для красоты чтоли? Нет, мне нужен калбек о говне по которому я хожу. И юнити дает мне этот срущий мусором калбек, вот только чинить его как я понимаю некому, все заняты очередная_ненужная_маркетинговая_хуйня_нейм.
>>706756 То есть у тебя даже нет паузы втф. Пауза дизайнится в самом начале посьтроения архитектуры, просто останавливай все процессы, по свичу и по timeScale = 0;
По рекламе вопрос. Как правильно считать значение ShowResult.Finished, чтобы понять, когда закончился рекламный ролик? В обычном if не считывается, пишет, что не конвертируется в булевый тип.
>>702393 > стилистика зельды не зашла, а тут прям то что надо Поздравляю, у тебя начисто отсутствует вкусь. Геншин настолько дженерик пиздоглазая хуйня что хуже уже некуда. > вайфу есть Как что-то хорошее.
Как начать проигрывать следующую анимацию за 10 сек до окончания первой анимации? Многое что перепробовал, все что-то не то. Самый рабочий вариант был первым-определить общее время всего нужного порядка анимаций, и затем создавать объекты с одним временем, только включающими анимацию в разные отрезки. Не работает как надо потому что я криво как-то флажками ставлю отметки, в итоге они начинают косится со временем и вместо анимации у меня пусто(так как пустые отрезки нескольких объектов начинают совпадать).
Бля как сделать ии как в хотлайн маями? Пока придумал только колхозить через навмеш, вешая спрайты пола и стен на тридэ кубы, а на юту бе два индуса и один русак, у которых ии просто трансформом транслейтом либо рб велосити идет в сторону игрока, и если зайти за стену то он в нее упирается. Подскажите какими инструментами это делать, может какие-то сторонние библиотеки?
>>706218 >>706278 Бля получилось! Даже спрайты анимаций назад увеличил в два раза, правда от сапог и перчаток, как отдельных объектов с анимациями, отказался.
>>707011 Сейчас учить тебя, щенка, будем.. У программистов есть такое понятие "поговорить с уточкой", так вот суть в том, что пока ты рассказываешь свою проблему - тебе в голову приходит решение. Если не веришь, можешь загуглить. Самое смешное что это правда иногда работает.
>>707013 Лол школота "у програмиста", это блядь у всех есть долбоящер, а не только у прогера. Сука термин он тут придумал ниибацо локальный, програмис хуев. Ору. И здесь долбоящер проблема не твоей шизофрении, а в том, что я блядь, описал. Нашел проблему - пиши тут же решение, это правило хорошего тона. Сука какой кринж с тебя ловлю пиздос.
>>707082 Да хуй его знает, переименовал все файлы анимаций по уникальному каждый, когда их заново переделывал, спрайты все поджал под их точное разрешение, убрал два объекта анимированных с персонажа. Либо перегруз был движка из-за количества тяжёлых "анимаций", шесть объектов со спрайтшитами анимаций по 4к было на персонаже основном, стало четыре, либо юнити путался в готовом билде из-за одинаковых имён спрайтшитов анимаций. Ещё кэшировал аниматоры, к которым каждый апдейт обращаюсь. Вообще не думал что спрайтовая графика побольше чем 3д отжирать может.
>>707223 Да безопасно то безопасно. Мне было сложно начать думать под эту DOTS методологию. Ии они давно хотели запретить доступ через статику (т.е. работай только с данными, которые пришли в джобу)
Подскажите пожалуйста, хочу сделать кроссворды. Как правильно рисовать грид? Нужно ещё чтобы можно было наложить текстуры типа нарисовано от руки на старой бумаге. Ещё в общем меню буду выводить все кроссворды в види миниатюр с сохранённым состоянием. Я делаю через Image и просто скейлю его, а миниатюры генерирую заранее, но выходит очень дорого, на 5000 кросов с сейвами уходит сепкунд 10 на пеке, а на мобилке того больше. В общем, реквестирую трушный способ. Ещё прикупил ассет новый Shapes, но пока не пробовал
Добавил короче рекламу. Попытался сбилдить и мне выдало 80 ошибок лол. Попытался по форумам пошариться, там то ли проблема в том, что две версии рекламных пакетов в ассетах лежат, то ли устаревшая версия ассетов. Так толком и не понял. Кто-нибудь сталкивался? Добавлял unity ads через asset store
Аноны, есть у кого-то примеры или ссылки на примеры 2д боевой системы (управление вверх/низ/лево/право) . Как в зельде короче. Хз, не могу придумать адекватное что-то. Милишная атака для таких игр выглядит странно, а поочередная как в героях сложная для такого лоха как я. Может есть советы куда копать? мимо 2 месяца стажа юнити и c#
>Internal: JobTempAlloc has allocations that are more than 4 frames old - this is not allowed and likely a leak Почему юнити сама под себя протекает? Никаких мемных жоп систем не использовал и не собираюсь, стоит ли беспокоится?
>>707280 Пустая сцена с кубами блин. Ассетов чужих тоже нет, только пара шейдеров от васяна, которые даже не использую. Ладно, удолил весь мусор из проекта, на всякий.
>>707311 А какая версия? Может какой-то юнетивский пакет ругается, давай разберемся, если больше инфы дашь >>707308 Можешь вообще на райкастах написать свой контроллер. Пару лет назад на старом ноуте делал платформер с гридом от юнити, так вот физика его грузила на 20-40%, переписал на райкасты (пускал 2 в пол и 1 в сторону куда идет перс), этот способ грузил ноут на 0.1-1.5%
>>707356 >Можешь вообще на райкастах написать свой контроллер. Так если у меня куб, надо 8 рейкастов делать чтобы сквозь углы не проходить, а если сфера/капсула то вообще хз, надо именно оверлап (у меня капсула). кинул 100 своих капсул оверлап + пенетрейшен контроллеров, проц грузит 25% в среднем.
>>707356 Unity 2018.1.0f2, в меню Package Manager все дефолтное. Честно не знаю какую инфу давать, я не знаю причин. Похоже что абсолютно рандомно вылезало, будто юнити само на себя там чето под капотом бухтит. С тех пор как задал вопрос вот пока не вылезало (эффект плацебо сработал).
Как обычно используется смена/ разное оружие в 2д играх? 1) отдельный набор спрайтов для персонажа с каждым оружием? 2) отдельная "рука" с каждым оружием? Как она тогда связывается с чарактером?(один объект чарактер, который содержит все части, в т.ч. руку?) Как как они связываются в коде?
https://www.youtube.com/watch?v=qSLVv5bFLd0 За какую сумму и какое время написали бы данный функционал, с системой диалогов, квестами и вознагрождениями, инвентарем. сумму указывайте с учетом того, что еще нужно объяснить как это работает и расширяется, по канонам ООП
>>707435 >Как обычно используется смена/ разное оружие в 2д играх? Никак. >1) отдельный набор спрайтов для персонажа с каждым оружием? В фоллачах так первых было, вот ебанина аниматору была, да и моделек из-за этого по парочке на оружию и броню было. >2) отдельная "рука" с каждым оружием? Как она тогда связывается с чарактером?(один объект чарактер, который содержит все части, в т.ч. руку?) Как как они связываются в коде? Я пилю топдовн рогалик и у меня щит/меч/броня/шлем - отдельные объекты со своими аниматорами и анимациями, синхронно контролируемые основным объектом.
Это требования к вакансии, можете объяснить по-русски что требуется, на примерах. - Deep understanding of asset workflows, data serialisation - Low level knowledge of C# APIs and Unity APIs - Strong knowledge of C# and modern programming paradigms, e.g. async/await
>>707435 >>707507 Переведу на профессиональный язык. Для 2д есть 2 типа анимации. Спрайты и костная. Спрайты это покадровая классическая анимация, как флипбук. Позволяет делать ВАУ эффект и дает плавный красивый контроль, но делать это все аниматору очень долго тяжело дорого. Костная анимация это когда у тебя есть обычные картинки объектов и модель, связывающая движения между ними. Упрощает анимационный процесс тк не надо рисовать покадрово картинки для каждого движения и объекта, но выглядит чопорно, специфично, как флеш игры тех лет, требует усилий чтобы сделать ну прям красиво. Спутать эти стили невозможно. Вопрос дизайна.
>>707513 1)Купил установил использовал 2)Знать как все работает из коробки, а не из документации, сидеть на гите и читать каждый класс 3)Тоже самое только еще в целом нужно знания иметь о компутар сайнс
>>707515 Спасибо, но вторым пунктом я не совсем костную имел в виду. Пример: есть какой-то спрайтовый персонаж с анимацией сражения на мечах. Например, враги умирают только если касаются меча, а не всего персонажа. И вообще ещё видел, как один спрайт разбивали на несколько (персонаж и оружие)
>>707516 >1)Купил установил использовал А data serialisation это что? Ассет воркфлоу, это поток работы, то есть как работают ассеты нужно разбираться и все? >3)Тоже самое только еще в целом нужно знания иметь о компутар сайнс Ну я почитал про async/await, но в комментариях как обычно холивар, что можно использовать корутины, и в каких-то ситуациях асинк не подходит. Где мне подчерпнуть всю современную информацию о работе с кодом в Unity? Может просто фишки, как асинк/эвейт, я сам уже нагуглю. Нет почему-то такого списка нигде, если кто-то в блоге у себя писал, что должен знать сениор на юнити по шарпу, то дай инфу, а то у меня только какая-то расплывчатая информация.
>>707515 >Костная анимация это когда у тебя есть обычные картинки объектов и модель, связывающая движения между ними. И чё в юнити есть для этого инструменты хорошие? Просто я покостную анимацию через спрайтер пилю и импортирую в юнити уже спрайтшиты готовые.
Кто-нибудь шарит за блендшейпы? Когда двигаю ползунок в редакторе, фпс падает кадров на 200. На сцене только модель с ригом и ~100 блендшейпами. При этом в видосах на ютубе люди как-то рилтайм рандомят одновременно 200 шейпов и фпс почти не проседает.
>>707553 Если ты занимаешься чем то специфическим, чекаешь вручную ченджлог всех версий от твоей текущей до последней. Если обычно анон пилящий инди, то всегда надо переходить на новую версию, за исключение альфа и бета билдов. На данный момент 2020.1.11 последняя стабильная и 2021.1.0 Alpha вкусная, но не стоит пока.
>>707467 Думаю около 15к рублей выйдет вместе с объяснениями и не говнокодом внутри. Все что выше просто не нужная накрутка от более опытных кодеров которые и так зашибают по несколько к. зелени в месяц.
Приветствую Анонов. Подскажите пожалуйста, допустим я собираю стул, мне нужны 4 ножки, спинка, сидение и 10 гвоздей. Как я могу зафиксировать это с помощью скриптов в unity и допустим при сборке стула у меня расходовались материалы из инвентаря.
Почему коллайдер объекта со второго скрина во время игры блокирует коллайдер кнопочки юайки во время игры? У меня на коллайдере кнопочки скрипт такой пиздатенький висит, чтобы при наведении кнопочка цокала, в стартовом меню всё зоебок работало, а внутри игры вот не хочет. Объект со второй пикчи диэйблю в редакторе - и звуки с кнопочки начинают работать. Уже думаю писать скрипт на дизэйбл всех коллайдеров на время паузы, но может есть простое не костыльное решение?
>>707668 Коллайдер это физический объект и его в UI не надо применять Есть события триггеры для UI элементов, есть graphic raycast Но не надо коллайдер
Может кто сталкивался с такой проблемой хотя и маловероятно После перехода на Pro версию перестали открываться проекты с Unity 5, бесконечно висит пикрил на рабочем столе, при этом не отображается в трее, диспетчер задач показывает, что всё работает нормально эдитор не "не отвечает"
Хотел добавить покупки в приложение. Я правильно понял схему, надо сначала загрузить проект в гугл плей, получить под него ключ, а потом с этим ключом уже настраивать дальше?
Сап, юнитач Может кто подскажет, почему эта блядская функция возвращает всегда false. Вводные: есть тайлмапа со стенами, на нее повешен TilemapCollider2D, ей задан слой BlockingLayer. Функция находится в скрипте, повешенном на персонажа. Переменная LayerMask BlockingLayer создана, в инспекторе для нее выбран соответствующий слой (тот, на котором стены). Причем если я не отключаю собственный коллайдер персонажа (он тоже находится на слое BlockingLayer) то столкновение происходит. ЧЯДНТ?
>>708185 А причем тут функция, если столкновение происходит если ты оставляешь игрока с таким же слоем. Ищи ошибку в работе луча, сделай дебаг рей и смотри куда он стреляет, может ты не туда запускаешь.
>>708192 сделай копию игрока и проверь, будет ли он видить его на другой клетке (перейди туда, а не проверяй как в первый раз на том же персонаже), может дело в самих клетках
Алгоритм поиска пути висит на игроке, но может искать путь между любыми точками, потому что пока он просто обозначает путь красными точками. Я запускал код поиска между двумя точками не связанными с игроком. Проблема остается та же: рейкаст в подфункции определяющей есть ли коллайдер на клетке не видит коллайдер тайлмапы стен.
Просто ебаный рейкаст не пашет. Вот тут и вектора2, и вообще просто луч между двумя точками, точно пересекающий стену, и все равно не происходит нихера, ни сообщения в дебаг логе, ни нарисованной дебаг линии.
>>708213 О каком дефолтном юнити речь? В данном случае рейкастом я проверяю, есть ли в точке объект,блокирующий путь. Если нет, то создаю новый нод с соответствующими координатами.
>>708217 Подощло бы, если бы я двигал коллайдер. А я ничего не двигаю, я создаю список нодов посредством прощупывания клеток на предмет чего то, что блокирует путь.
Проблема такая. Ставлю на цилиндр ригидбоди и навмешагент. Циллиндр в воздухе и падает вниз. Приземляется на обьект с навмешем и ходит туда сюда. Все работает.
Решил заменить цилиндр на другую модельку. Моделька проваливается насквозь и не куда не ходит так как связь с навмешем проебывается в момент полета мимо.
Не понимаю что не так. Почему работает только с цилиндром а другой моделькой нет?
Я и так и так пробовал. Одна и та же функция при одних и тех же условиях и настройках в разных проектах ведет себя по разному. В одном (основной) спокойно детектит коллайдер с тайлмапы, в другом (тестовом) в упор не видит. Я специально написал две одинаковые тестовые функции, каждая из которых и лайнкастит и рейкастит в обоих проектах, и все равно, в одном пашет, в другом нет. Я не понимат.
>>708738 Посмотри, как было изначально: >>708211 А самое веселое что скакнуло напряжение, комп ушел на ресет и скрипт в котором была эта функция в том числе перестал открываться. Точнее открывается, но в виде пустого файла в блокноте. Я как уже сказал выше попытался по разному порейкастить и полайнкастить в стены, нихуя не вышло, при том что в другом проекте для проверки создал точно такие же функции и там все работает. Сверил настройки физикс, все одинаково. Хз, может быть что проект забаговал?
>>708452 Потому что, нужно будет рекомпилировать весь шейдер, это рутовое свойство, его просто так нельзя менять.
>>708690 У меня китайски за 500р работал, суть проста, делаешь Input.GetAxis или Input.GetAxisRaw, вместо читой 0 или 1 контроллер может возвращать 0.1 0.2 0.3 и тд
>>708731 Смотря какие у тебя настройки, в конфиге light есть ambient light - этот свет будет светить всегда и со всех сторон. Тут у тебя 2 выбора - можешь динамически менять этот параметр и 2й способ - создать Direction Light и крутить его трансформом. А еще лучше всё сразу.
На стенах в обоих проектах тайлмапколлайдер2д, слой указан и там и там, через public LayerMask BlockingLayer, стенам указан слой BlockingLayer, в инспекторе для скрипта выбран этот слой. Короче создам завтра новый проект и буду надеяться что это бага конкретного проджекта.
>>708754 >Потому что, нужно будет рекомпилировать весь шейдер, это рутовое свойство, его просто так нельзя менять. Как рекомпилировать? Я только скомпилировать могу. Вот так это в шейдере выглядит, Tags { "RenderType"="Opaque" "PerformanceChecks"="False" }, то есть я как раз к тэгу обращаюсь, можешь точно сказать как решить это?
Как обменивать информацию в Photon во время коллизии? Вижу коллайдер другого игрока, беру компонент статов, меняю иии ничего не происходит потому я хз как менять статы. Документацию пролистал кроме RPC ничего не нашел. Неужели я не могу манипулировать статми в процессе коллайдига без функции на стороне? Не хотелось бы переписывать много всего с нуля :\
>>708998 Мне кажется, не нужно так изъебываться с координатами. Нужно только знать как проверить что кнопка зажата, а не нажата, а остальное функционал стандартный с проверкой того мышка в кнопке или нет Юнити я думаю уже сделал.
>>709006 >уже сделал Ну удачи в поисках несуществующей хуйни. Епт что за школота пошла, сама задает вопрос, отвечаешь, а они еще не верят лол. Нахуй тогда было задавать вопрос если и так все знаешь пиздос.
>>708997 Костыльный способ придуманный только что мной на коленке: EventsManager.Current.ActiveElement (кажется, точно не помню), суть в том, что в этом классе ты можешь взять HoveredObject и SelectedObject (на который зажал лкм) и обернуть это в свои костыли. Минус - в том, что тебе придется работать по имени или дергать компонент (или еще что можешь придумать)
второй вариант: Создай компонент IHoverable (например), унаследуй от интерфейсов IPointerDownHandler, IPointerUpHandler, ну дальше ты наверное понял, после срабатывания DownHandler ставь isHover = true и в update() делай свою логику.
установил URP, создал ассет, подключил и вставил в него 2D Renderer. всё это для того чтоб спрайты себя сами сортировали в зависимости от значения Y (скриншот). но есть хуйня что спрайт который выше по Y с какого-то хуя находится над тем что ниже. это баг такой? кто-то использовал этот функционал? пивоты для спрайтов указал, sprite sort point тоже
>>709147 Что ты пиздишь, даун, везде школьников видишь, и нихрена в Юнити не шаришь, даешь тупые советы от себя, иди учись, а не зависай тут, на раковой доске со школьниками, лалка.
>>709233 Раковая опухоль из би, хватит засирать тред своей тупостью, ты просто смешон Поскорее бы ваша дистанционка закончилась и вас опять выгнали бы санными тряпками на уроки
>>709237 Ты наверное педофил какой-то или сам школьник, если у тебя в мыслях до сих пор школьники мелькают. Задумайся, может это тебе пора с дистанционки уходить, мамкин недопрограммист.
>>709242 кирил на саммодупе плез, пролистай свои высеры выше и пойми какое же дегенеративно хуйло, почем зря засирающее тред, вот давай сука иди и мотай, ебло
Хочу начать делать игры на юнити на андроид, в шапке на эту тему ничего не сказано. С чего начать, если я вообще ничего не понимаю в программировании? Знаю, что для юнити надо знание c#, решил сначала начать с него.
>>707631 >Как я могу зафиксировать это с помощью скриптов в unity и допустим при сборке стула у меня расходовались материалы из инвентаря. с помощью программирования. Если ты умеешь кодить, то изложишь эти мысли в программном виде.
Анон с проблемой рейкаста не детектящего коллайдеры репортинг ин. Проблема локализована, мои рей/лайн-касты не видят конкретно тайлмапколлайдер2д. Причем в оригинальном, старом проекте видят, блядь, а в новых я создал еще один, чтобы проверить, может это был баг проекта нет. Настройки Physics2d одинаковые в обоих проектах. Настройки слоев, тайлмап, коллайдеров, тайлов одинаковые в обоих проектах. Я уже не знаю, что сравнивать чтобы понять, почему в одном месте лучи детектят тайлмап коллайдер, а в другом блядь нет.
Приветствую анонов. Ситуация следующая. Я в качестве свойств для объекта (Scriptable) использую так же срок его использования. Т.е. если объект не использовали, то пользователь теряет его из инвентаря. Таймер у меня реализован -=Time.DeltaTime. И вот допустим пользователь не заходил в игру допустим два дня. Соответственно воспользоваться предметом он не может, он должен у него исчезнуть. В качестве решения думаю делать так, при выходе пользователя из игры через PlayerPrefs сохранять значение даты/время и текущий остаток секунд по таймеру объекта, затем при старте игры сопоставлять с сохраненным значением вычислять количество секунд, затем отнимать полученное значение от остатка секунд по таймеру объекта, если значения <=0 тогда уничтожать убивать объект из инвентаря. Решение мне кажется костыльным, возможно анон сталкивался с этим и может предложить другое направление?
>>709372 В дополнении сюда же, если допустим пользователь аварийно завершил работу приложения получается я не запишу значения текущих показателей времени и при старьте игры, обращусь к прошлым значения, что может вызвать коллизию, правильно понимаю?
>>698843 (OP) Скачал Unity Hub,но не нашел русского языка,только англ и варианты китайских С чистой совестью работать на английской версии или есть простой способ поставить русский язык?
>>709372 >>709373 когда что-то добавили в инвентарь, то записываешь этому предмету время добавления и продолжительность жизни сразу, не ожидая выхода. тогда при аварийном закрытии ты всегда сможешь посчитать нужно ли его удалять или нет
дополнительно рекомендую синхронизировать время с интернетом чтоб переводом часов не наебали
Есть анимация удара мечем. Как корректно сделать так, чтобы противник умирал именно от удара меча, а не от того, что коснулся персонажа во время анимации (например, сзади или под мечем)?
>>709429 Есть на Udemy хороший курс по RTS, можно управлять армией, создавать ее, создавать здания и это не основа, основа - мультиплеер на Mirror, иди ищи, стоит по акции копейки. выбери только английский язык
Я тут совсем мимокрокодил, просто поспорил давеча со знакомым на тему какие игры на каких движках делают. В общем вопрос - как из ПК-игр, сделанных на Unity, на данный момент считаются самыми масштабными в плане ресурсов разработки и объёма проданных копий?
>>709455 Хм, включать в зависимости от конкретно кадра? Или хитбокс должен двигаться (внутри персонажа)? Вот пример, положение меча на 1 и 2 отличается от последнего кадра.
>>698843 (OP) Привет всем, что подскажете использовать для клиент-серверной работы для игры на несколько игроков (в тч желательно с возможностью поднимать локальный сервер)? Я смотрел в сторону telepathy\apathy, но как понимаю возможностей куда больше и не знаю, насколько они уместны
Есть объект, которому включаю анимацию через аниматор таким образом. Мне нужно выключить (enable = false) объект на время(на самом деле , родителя), но когда я его опять включаю, играет дефолтная анимация (видимо, сбрасываются переменные). Если я включаю анимацию на OnEnable, то после появления он какое-то время отображается со старой анимацией и только потом начинает играть нужную. Как пофиксить?
Есть 3 префаба дороги, в кадре всегда находятся 2 из них, тот, что остается сзади, выключается. Нормальный способ передвигать этот префаб вперед остальных двух? if(spawnPoint > nextSpawn){ for(int i = 0; i < objectList.count; i++) { if(!objectList.activeInHierarchy) { objectList. transform.position = new Vector3(бла-бла-бла, бла-бла, бла); objectList.SetActive(true); nextSpawn+= 5.0f; } } } И это можно считать минипулом (за исключением того, что новые объекты не пулятся, т.к. и не нужны)?
Поясните за смешивание анимаций. Нужно сблендить атаку и бег. Как можно запилить воздействие анимации атаки в состоянии покоя на все туловище, а в состоянии бега - только на верхнюю половину? Гуглил, везде ответ один - второй слой с маской верхней части тела, и на нем атака. Но в этом случае когда персонаж стоит на месте и бьет - похож на ебаного паралитика, т.к. ноги не задействуются. Пробовал менять вес слоя в зависимости от инпута, пробовал разные костыли - все до пизды. Придется делать две анимации для обоих состояний? Но тогда нужно ведь и для прыжков/падений/etc тоже допиливать. Аноны, выручайте
Делаю а ля RTS, сделал лейблы хп над головами с именами солдат и при 7 солдатах ловлю просадки фпс-а (текст не меняется, меняется только позиция). Так вот канвас для этого у меня отдельный - т.е. все эти 7 плашек рисуются сразу во 2й канвас. Какие еще варианты поднятия производительности?
>>709673 А в чем смысл второго канваса? Если сделать просто спрайты-полоски над головами, у которых скейл меняется при изменении хп? По идее не должно просаживать же
>>709492 включать в анимации и можешь двигать если так лучше работает. тут же вопрос вкусовщины. я бы на 3й и 4й кадр наложил прямоугольник размером с весь меч и шлейф в четвёртом кадре. потестил бы и если б было ощущение что задержка (что игроков дохуя бесит), то натянул бы ещё и на второй кадр.
в целом тут нет какого-то правильного решения, обычно приходится пробовать несколько вариантов
вот посмотри в стрит файтере хитбоксы. в разные кадры новые включаются или перемещаются
>>709199 Выглядит так, будто там есть невидимая сетка и мышь рисуется выше своей "ячейки", поэтому визуально она уже на дереве, хотя по факту она ещё на нижней ячейке, поэтому рисуется под деревом, а не над ним и как только она переходит на ячейку дерева, она начинает рисоваться поверх него по правилам сортировки. Надеюсь понял, о чём я.
Игры еще не сделол, но в почти пустой сцене наблюдаю периодические микростаттеры (нерегулярные), отчего зависит вообще неясно, фпс счетчик не проседает, профайлер молчит. По ощущению как будто на 2-3 сек игра "догоняет" кадры, затем снова все норм. В билде тоже есть. Может кто знает куда стоить копать хотябы?
>>709753 upd засунул все в FixedUpdate, никакой разницы, все равно подпидорашивает еще заметил что включенный всинк уменьшает статтеры (был выключен), теперь они короткие и редкие, но все еще есть играть конечно можно, но бля(
>>709757 С инпутами все ок, просто некоторые физику двигают в фиксед, а камеру - в простом апдейт, выглядит со стороны как фризы. По посту показалось что из этой оперы. Скинь сомнительные участки скриптов тогда чтоль
>>709770 Я извиняюсь но сейчас тест показал что пидорасит именно ригидбади. Изменил камеру, чтобы плавно летала за игроком, и у нее статтеров не оказалось (раньше она статтеры копировала прост), значит фреймрейт тут не причем. Видимо все таки у меня в коде где то что то (как же заебало воевать с движком).
Юнитачеры, я в отчаянии и близок к переезду на годот с этим своим траблом с рейкастами и тайлмап коллайдерами. Кто нибудь, запустите пожалуйста у себя этот проект и скажите, пишет ли у вас в дебаг логе что то или нет. Ну или вдруг вы заметите что то, что я упускаю уже две недели, из за чего у меня не детектятся тайлмап коллайдеры рейкастом, скажите. https://dropmefiles.com/xNxTg
>>710044 Вот что у тебя на экране, когда ты дергаешь TestCast(); Конечно, rayHit.collider и lineHit.collider будут = null. Объекта нет на поле. На костылили ради теста (Скрин два) - все взлетает. Скрин с результатом выше (но там то один то два хита).
Тебе нужно подумать над системой инициализации, чтобы однозначно понимать, что, когда и в каком порядке инициируется.
Странно, я думал что если я сначала вызываю функцию, которая создает тайлмапу, а потом функцию, которая кастит луч, то к моменту каста луча тайлмапа и коллайдер уже существуют. Видимо это не так. Спасибо, анонче!
>>709449 Анон, ну ты бы ссылку дал. Только что закончил курс на юдеми и это было лучшее вложение 5 баксов. Даже не смотря на то я в английский не шарю. Тоже хочу еще подобное.
>>710267 да загорелся идеей смоделировать работу дирижабля. После дня раздумий понял, что к чему такие трудности, ведь можно просто высчитывать интенсивность его подъема на высоту в зависимости от количества единиц газа.
>>710311 Ок. Но я щас начал проходить другой курс на юдеми, но от тех же авторов: RPG Core Combat Creator. Знал бы что анонам местным интересно, расшарил бы аккаунт.
Хочу сделать слайдер сверху подобный оному в играх VooDoo, чтобы отображать пройденное игроком расстояние до финиша. Но не понимаю как реализовать, как перенести значение на слайдер. Дорога прямая
>>710615 Я уже всё сделал. Со слайдерами раньше не работал, не знал, что можно минимальное и максимальное значение менять, поэтому сам себе проблем придумал. Вот как реализовал в итоге
Как там дела со сборкой под пороховую бочку PS3? В 4.6.2, успешно приобретенной на торренте, требуется модуль сборки, найти который - не самая простая задача. Может, в новых версиях модуль идет из коробки? Интересуюсь именно третьей плоечкой, потому что в наличии четыре штуки с разными вариантами взлома. Да и проект не грузный - комфортно дышит на пентиуме 4 и зеленой 6800. В идеале хотелось бы, чтоб модуль выдавал на выходе пригодный к запуску iso/pkg/PS3_DISC.SFB+PS3_GAME.
>>710712 Благое дело, но не знаю, потому и сам задаю подобный вопрос. Но тебе бы в первую очередь посоветовал разобраться с пиратством на вите, есть ли оно вообще там.
>>710624 чтоб от 0 до 1 получить можно было сделать currentDistance / distanceFromStart
на будущее юзай самокоментирующийся код и называй методы по тому что они делают. метод Distance не делает дистанцию, а обновляет прогрессбар. когда будешь писать большие проекты с другими людьми, они от таких названий ебанутся
Нужна помощь, юнитач. Есть игра с числом, которое игрок должен набрать. Число это на каждом уровне разное и выбирается случайно из заданного диапазона. Игрок набирает число проходя через баннеры, на которых написаное действие (прим. +13, -20 и т.п). пик1 Игрок движется безостановочно и должен решать пройти или не пройти через баннер, чтобы набрать нужное число.
Собственно, нужен метод, который будет принимать это финальное число, разбивать его и закидывать на баннеры, а также генерировать близкие к нужным числа и закидывать их на другие баннеры Например на финале 7 баннеров - 4 из них верные, на них алгоритм закидывает нужные числа. (прим. для числа 54 с пикрила: 11, 22, 17, 4. И на 4 других баннерах другие, но желательно близкие по значению числа: -18, 9, 10)
Нечто подобное я реализовал, но очень корявое и багающее, дебажил - и часто бывает даже невозможно собрать верное число. пик2 Неправильные баннеры - пик3
Приветствуется любая помощь, начиная от советов как отредачить мой код, чтобы работало нормально, заканчивая предложением своего решения.
Геймдевелоперы и девелоперессы, какой единственно верный и правильный способ делать катсцены для 2д игры? Через таймлайн, сайн машин или вообще кодом каждую сцену писать?
>>710876 Что за сайн машин? Таймлайн удобная штука, она сочитает и писание кода, делаешь свой скрипт "OnTimelineTrigger" и там делаешь любой код. Вобщем таймлайн советую
Допустим нужно в сцене рисовать 1000х1000 поле с клетками, где каждой клетке можно менять цвет по её кординатам, и менять каждый кадр какие-нибудь клетки во время игры. Как это лучше сделать?
>>711139 Нужно пересчитывать каждый раз, когда игрок подобрал баннер с операцией. Т.е. есть метод, который берет число, разбивает его на рандомные целые части и эти части закидывает в пуллбаннеров, которые могут попасться. + Какие-то рандомные Игрок подобрал баннер - метод дергается ещё раз (ТК текущее значение поменялось)
Подскажите, как скоординировать условную силу броска пропорционально движению пальца по экрану? КАК В ЭНГРИ БЕРДС То есть игрок двинул пальцем на 1 см, кидаем с силой 10, двинул на 2 см, кидаем с силой 20.
Нужно сделать несложную приложуху для юнити. И дорабатывать её постепенно. Много не плачу, но и особых знаний не нужно.
Приложуха должна уметь отображать 3д модель, чтоб ее можно было крутить, приближать И должна выводить текст, который будет получать по http api (json) Обсудить ТЗ можно по мылу, eeexshare95 собака gmail.com
Так и отображать, по школьной формуле F = kx, где F это сила, k это коэффициент натяжения, а x отклонение, в твоем случае задаваемое пальцем. k ты подберешь экспериментально, меняя его и посматривая, что получается, пока результат тебя не удовлетворит. Теперь ты спросишь, как же мне реализовывать разную силу в юнити то? А я отвечаю, сила есть a*m, где a - ускорение, а m масса. Масса у твоего снаряда постоянная, значит в итоге ты будешь менять ускорение в зависимости от того, насколько сильно игрок оттянул снаряд.
>>711339 Это я в целом понимаю. Мне нужно понять какие конкретно методы использовать. Там же есть и старые методы ввода, и новые, и надежные и ненадежные. Вот мне бы понять, какой самый новый и самый надежный.
>>711341 1 - создаешь new Texture() и делаешь setPixels 2 - Создаешь класс GraphRenderer: MaskableGraphic и реализуешь интерфейсы, в которых есть доступ к канвасу
>>711599 Чел, я хочу писать код для игрулек, а не дрочить код, иначе бы я пошёл работать программистом. Я хочу все современные возможности и улучшения языка, а не ковырять дедовский кал. Да банально тот же синтаксический сахар сделает разработку приятнее.
помню что в каком-то ченджлоге читал что с какой-то версии юнити (вроде 2020) можно в инспекторе порядок элементов массива или списка менять просто драг-энд-дропом, но я не вижу как это врубается. это аттрибут поля какой-то нужен дополнительный или что-то я не так делаю?
>>711589 В следующей версии обещали шарп 8 завезти. А самописное гавно у них т.к. они свою версию движка паралельно делают со своими какими-то оптимизациями которые не заметны. Например инкрементальный GC и доп инструкции для более простого конвертирования коды в плюсы. Нам как разрабам от этого толка мало, у юнитеков в принципе выбор направления развития странный, что поделать.
>>711720 Ссылку дашь? Вообще плюсы этих объектов в том, что при загрузке инстанс полностью очищается и подгружает данные из префаба и нет доп оберток между плюсами и шарпами - микрооптимизация.
>>711720 Я так делаю, брат жив. Что тебе не нравится? Монобихевиер жрет дофига из-за колбеков и тп. Скриптабл обжект меньше. Лучше всего использовать классы, которые не будут производными от юнитевских классов. Если прям нужен отклик от юнити, то скриптбл
вот все выпуски + ланч трейлер. как всегда на ютубе не в хронологическом порядке
>>711738 >Что тебе не нравится? дык полтора-два года назад никто эти скриптблобджекст в глаза не видовал и жили все нормально, а теперь их овердохуя. у меня нет никакого хейтинга per se, просто я удивлён что они там у себя в офисе юзают их в таком количестве
Помогите! Я уже даже не знаю куда и как гуглить. Проблема в том, что у меня не работают некоторые вкладки в эдиторе. Build Settings по нажатию просто ничего не делает. Я уже пробовал и сцены добавлять и создать новый проект, но Build Settings так и не реагирует ни на что. Делал переустановку. Иногда возникают проблемы с инспектором - отсутствует скроллбар, но это решается перезапуском unity. Ни ошибок по запуску в консоли. Как быть?
Анон, я пилю крч инвентарь, и предметы засовывать все буду под юайный Scroll View. Но вот мне не нравится что его можно прокручивать просто кликнув мышью в любую область 1 и потянув вверх или вниз, я хочу чтобы прокручивать можно было только ползунком 2. Это можно по-простому как-нибудь сделать?
Прошёл С# стартер на ИТВДН, сейчас закрепляю метанитом. По идее этого должно хватить для старта в Юнети. Какие есть свежие нормальные курсы с основами? Интерфейс там, базовые концепции и т.д. Желательно, чтобы можно было скачать на альтернативной площадке(иф ю ноу вот ай мин).
Пишет что не может создать ключ для keystore тк якобы пароль или расположение keystore не верны. keystore оставался там же где я его создал через Unity же, пробовал перемещать в папку с проектом, ошибка все та же. Версия юнити и прочих сдк стабильные и совпадающие. Как обойти проблему, пусть и с костылями?
>>711971 Удивительно что проект с многомиллиардным вложением долларов имеет кучу жопошных неисправностей. Например, ты не можешь сделать просто статичное лого на ВЕСЬ экран(только задним фоном). Ответ работника ююнити техноложис? Ну тип короч мы подумали что как есть будет норм, а кому надо тот экран загрузки с 0 напишет. Спрашивается зачем для галки делать нерабочую вещь? Также с коллизей и кучей других модулей.
На счет вопроса, все очень плохо и все очень тухло, вопрос тупа не решаем нормальным способом, разрабы разводят руками и просят логи у всех подряд. У меня была версия 2018, все идеально робило, кроме этой фигни. Я поставил версию 2019(при чем не без проблем, с переустановками и тп). ВНЕЗАПНО появились менюхи и прочие приблуды которые в версии парумесячной давности ПОЧЕМУ-ТО АРРГх не было. Ключ создался нормально.
Казалось бы вопрос решен. А нихера. Ес-но я теперь не могу открыть старый проект, в облако я его забыл загрузить. Придется теперь ручками с 0 опять все раскидывать по сценам. И ладно у меня личный проектик, обрезок для души, а если бы проект был побольше? Косяк на косяке, костыль на костыле. Зачем вообще такие движки нужны если все равно потом все приходится изучать в корне и переписывать с 0 как тебе надо.
Я решил проблему, я молодец, обязательно себе сегодня подрочу, но такой пердолинг и трату времени я не одобряю.
Думаю надо было создать ключ через напрямую через ждк, но я хотел надеется на лучшее. а теперь поздно пить боржоми
Ку, юнитикамрады. Назрела необходимость сделать систему уровней для мобайл дрочильни типа cut the rope. 50+ уровней, последовательное открытие их, UI панель выбора, три звездочки за идеальное прохождение и т.д. Интересует архитектурная составляющая всего этого. Сначала я подумал делать префабы уровней и грузить их на одну единственную сцену. А может все таки лучше будет наделать кучу сцен и не заморачиваться? Или использовать какой-нибудь scriptable object? Из готовых ассетов нашел только https://assetstore.unity.com/packages/tools/gui/level-manager-55921 . Но как то сомнительно выглядит
Чет не похоже что ты уже 2 года варишься раз такие глупые вопросы задаешь. Они нужны для своих целей и вероятно ты неосознанно их используешь в процессе и так.
Юнитаны, есть такая проблема. Есть пошаговая игра, в ней скиллы, которые в ходе выполнения могут прерываться требованием дополнительного инпута.
То есть будь это консольное приложение всё выглядело бы как то так void FooSkill() { ... if(input == null) { input == UIManager.GetSpecificInput(); } ... }
Но блокировка основного потока в юнити закончится так себе, поэтому остаётся только 1)Городить конечный автомат из кусков скилла и ждать коллбеков от ГУИ с требуемым инпутом, чтобы запустить следующий кусок. 2)Почти то же самое, но проверять не появился ли инпут в апдейте. Не так путанно, но апдейте в скилле иначе вообще не нужен. 3)Ждать инпут асинхронно, почти не разсирая код конечным автоматомэто за меня сделает компилятор Но это усложнит и запутает интуп манагер.
Может есть какие то ещё варианты или готовые решения?
>>698843 (OP) >На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript >Для изучения основ UnityScript выучи вначале основы JavaScript: >Помни, что тебе достаточно одного языка из двух и учить их оба одновременно не нужно.
>End of support for UnityScript >Starting with Unity 2018.2, support for UnityScript (Unity's version of JavaScript) has ended. C# is now the only supported language going forward. You can learn more about the reasons for this change here. There is an official UnityScript-to-C# Automatic Conversion tool to help those wanting to transition their UnityScript projects over to C#.
Когда перекатывать будете, обновите инфу про юнитискрипт что ли. Он уже джва года как мёртв...
Смиренно прошу почтенных юнитиебов о помощи. Начал вкатываться в юнини, прохожу вводный урок. Проблема: в режиме Game не отображается часть спрайтов, при этом они отображаются в Scene. Где я проебался?
Создал пустой 3D-проект - получил вот это: 4712 файлов в 467 папках. Это точно пустой проект? Как мне это архивировать, что из этого нужно заливать на гитхаб или куда-либо ещё, если захочу поделиться исходниками игры или сделать резервную копию? В каждом новом проекте будет такое вот месиво из мелких файлов? Я привык, что в папках моих проектов только созданные лично мной файлы, максимум 1-2 сгенерированных редактором/компилятором, а что мне делать тут? Я не понимаю, помогите(
Алсо, не помню точно как было раньше, но когда я пробовал юнити несколько лет назад, вроде бы не так много файлов создавалось. Может нужно что-то в настройках переключить, чтобы эти файлы были в другом месте?
Может, есть какие-то гайды, как обращаться с файлами проекта юнити? Что из этого можно выкидывать/генерировать заново, например, а что - уникально для проекта и необходимо сохранить, и т.д.
>>712358 Не проще. 1. Я привык следить за порядком в своей файловой системе (хотя получается не всегда). 2. Архив с таким количеством файлов создаётся долго, распаковывается тоже долго (даже на SSD). 3. Большую часть этих файлов, как я понимаю, заливать в git не нужно, но каких - непонятно. 4. Если создать несколько проектов, проблемы от такого числа файлов будут возрастать. 5. Я бы мог на это всё забить, если бы у меня было бесконечное количество ресурсов ПК, но увы.
Вообще, я просто хочу понять и разобраться, почему всё так, а не иначе (чистенько-компактненько).
>>712356 >>712360 Извиняюсь, затупил и погорячился. Надо было сразу папки проверить. Короче, я так понимаю, Library - это какие-то стандартные библиотеки Unity, которые генерируются автоматически и от них можно спокойно избавляться, когда проект отправляется в архив/гит? Я понимаю, что они, скорее всего, зависят от используемой версии Unity, но, надеюсь, если вдруг что - их потеря не столь критична... Там вообще бОльшая часть файлов - какой-то кэш, а кэш обычно можно сбрасывать...
Я правильно понимаю, что Юнити когда-то давно имела полноценный перевод на русский, а потом на него забили? В документации к старым версиям много статей на русском, но потом переводчики куда-то потерялись.
Я-то и на английском прочитаю (так даже лучше, не будет путаницы в терминах), но странно, почему у самого популярного игрового движка не успевают переводить всю документацию?
unity3d.com всё ещё официальный сайт? А unity.com? Я знаю, они переименовали движок Unity3D -> Unity, но что с сайтами?
>>712365 Заливай файлы из рутовой папки (там файлы проектов всяких, мало весят), ProjectSettings (10 файлов с конфигами, которые ты меняешь в редакторе) и Assets (собсна весь твой контент)
>>712356 Если говорить про скомпилированную версию - то в projectSettings есть strictEngineCode которая якобы может порезать 70% движка и убрать юнитикод который ты не используешь.
>>712378 Понятно, спасибо. Я уже выкинул из проекта все стандартные пакеты (пока они мне точно не понадобятся), из "кучи файлов" остались только какие-то Artifacts, но это вроде какой-то скомпилированный код, в общем пофиг.
>в projectSettings есть strictEngineCode которая якобы может порезать 70% движка и убрать юнитикод который ты не используешь Звучит как полезная фича, но я не нашёл, где это установить? Впрочем, я пока туториалы изучаю, рано париться об оптимизациях)
сижу в телеге в группе новостей юнити и там переодически постят ссылки на ченджлоги свежих релизов, но каждый раз по этим ссылкам 404. надо ждать от нескольких часов до дней прежде чем эти ссылки будут работать. отсюда вопрос это что какая-то региональная хуйня? может у вас работает?
Вангую, что в твоей "группе новостей" хотят быть впереди планеты всей и постят ссылки, которые вскоре станут активны - несложно угадать, какая будет ссылка, ведь они все по единому шаблону выполнены (/whats-new/номер.версии.юнити). Вот если они кроме ссылки постят сам чейнджлог - тогда да, хороший вопрос, откуда они это узнают... Алсо в Телеграме есть фича - робот Телеграма сам ходит по ссылкам и делает превью, если этот робот не смог сделать превью страницы или на превью 404 - тогда страница реально пока не существует.
Есть ещё вариант, что кто-то в той группе новостей является разработчиком или комьюнити менеджером Юнити, но это нужно только чтобы инфу раньше публикации на сайте выкладывать (а не ссылку, ссылка известна) и вряд ли такое будут делать в какой-то русской соцсеточке, если юнити даже русской локализации толком не имеет...
>>712498 >везде уроки по 5 версии или в лучшем случае 2018 Ты по ссылкам из шапки ходил хоть? Вот, например: http://catlikecoding.com/unity/tutorials/ - сам сейчас вкатываюсь, смотрю и пробую эти туториалы, там для 2019 версии, но 2020 судя по всему не сильно отличается. Это самая база, но начни хотя бы с этого, а потом будешь руководствоваться мануалом - https://docs.unity3d.com/2020.1/Documentation/Manual/ - ибо так надёжнее, чем слепо следовать советам васянов с ютуба. По мере того, как начнёшь разбираться в движке, сможешь понимать туториалы от старых версий, самостоятельно адаптируя их к новым версиям ("так, тут сказано бе, но бе с такой-то версии стало ме, поэтому нужно сделать не бе, а ме, понятненько").
Учусь пытаюсь. Столкнулся с проблемой. Где то проебался в коде Однако ранее внизу выдавались список где и в каком скрипте проебался, сейчас же там пустое поле. а к такому видеогайды меня не готовили.
Собственно вопрос: куда исчезла панель с ошибками и как вернуть? Скучаю по ней
>>712700 >панель с ошибками Это консоль, она не только с ошибками.
>как вернуть Ctrl+Shift+C (прям как в браузере) или через меню window > general > console. Откроется в отдельном окошке - просто перетащи его за заголовок на то место, куда хочешь поместить, и он должен пристыковаться к остальным окошкам.
На будущее сохрани настроенный layout в списке в верхнем правом углу - поможет восстановить привычное состояние окошек в один клик. Консоль по умолчанию есть в макете default, внизу, отдельной вкладкой от Project.
Алсо если консоль закрыта, но в консоль вывели сообщение (информация или ошибка), оно отобразиться в нижней строке окна - кликни по этому сообщению и откроется полная консоль (как если бы открыл через меню). Т.е. если постоянно не нужна, можно и не держать открытой, а кликать по сообщению об ошибке.
Сам всего два дня копаюсь, консоль как раз сегодня изучил и поставил на видное место.
>>712785 >>712786 Ребят, я понимаю ваш сарказм, но вы сейчас сильно обосрались. Пикрил - как было бы, если бы от него требовалось прожать галочки. От него форма требует не галочки прожать, а ввести правильное мыло и придумать уникальный ник. Даже если бы он прожал галочки, она бы всё равно его никуда не пустила.
>>712694 Понятия не имею, почему так, может у тебя с браузером проблемы? Или какие-то невидимые символы случайно вводишь? Или у них этой ночью были проблемы с регистрацией, кто знает...
>>712801 >Даже если бы он прожал галочки, она бы всё равно его никуда не пустила. Ты можешь быть уверен в этом только в двух случаях 1. если ты доверяешь этой форме (т.е. что она не будет выдавать хуйню, если ты не прожал галочки) 2. если у тебя уже был опыт общения с формой
Кстати, как adadadda, так и pukovich с высокой долей вероятности могут быть заняты. Неси пруф хотя бы с 64-битным именем, сгенерированным нормальным ГПСЧ.
народ, нужен шейдер, которые будет игнорировать глубину (просвечиваться через другие объекты). Я сам вообще в шейдеры ни зуб ногой, мб есть готовый? Спасибо
Создаю объект из префаба, он из разных мелких частей. Как убрать у него тени? Если пытаюсь выделить отдельную часть префаба то она закрыта для редактирования.
>>712830 >Ты можешь быть уверен в этом только если у тебя уже был опыт общения с формой Сцуко, я специально для тебя этот пукович.png>>712801 запилил, а ты говоришь "если у тебя был опыт..."?!
>pukovich с высокой долей вероятности могут быть заняты pukovich свободен (как минимум прямо сейчас), пруф на скрине выше. А вот puk, pukpuk, pukov и pukich уже заняты.
Форма чётко и ясно подсветила ему "эти поля говно, переделывай", пока все поля не будут зелёными - не пустит. Это поведение стандартно для веб-форм, она не будет пускать тебя дальше, пока ты не исправишь все красные поля. Галочки на эти поля никак не влияют.
>>712694 Я ещё раз проверил форму. Скорее всего у тебя проблема с сетевым подключением, либо с доступом к серверам юнити, либо сами сервера тормозили, когда ты пытался зарегаться. Эти поля не сразу отображают статус "занято"/"свободно", они делают запрос к серверу (ну, это очевидно), пока не получат корректный ответ от сервера - статус не изменится. Если у тебя медленное нестабильное соединение или сервер испытывает перебои в работе, форма могла сохранить исходный статус "занято" и больше не смогла получить корректный ответ от сервера, чтобы обновить статус поля.
Короче, попробуй ещё раз, попробуй с другого браузера, попробуй с другого компа... Где-то должно заработать)
>>712869 >Если пытаюсь выделить отдельную часть префаба то она закрыта для редактирования. Какую часть ты пытаешься изменить? Закрыт для редактирования только порядок child'ов.
>Как убрать у него тени? УМВР, пикрил (юнити 2020.01).
Но ты можешь убирать тени через собственный скрипт, если имеет смысл скрывать/показывать тени во время игры.
Господа, у меня одного происходит шляпа со скейлом костей при экспорте из блендера? Не буду перечислять какие настройки экспорта пробовал, проще сказать что все что связаны с этим самым скейлом. Так же заметил что тоже самое явление запечатлено на туториалах. Это норма?
>>712952 >Господа, у меня одного происходит шляпа со скейлом костей при экспорте из блендера? Да, ты один такой уникальный, гордись этим. Скейлит тут свои кости у всех на виду, бесстыдник...
>какие настройки экспорта пробовал Я просто нажал Export > Collada (Default) (.dae) > export COLLADA
Кстати, на счёт костей. Я знаю, что их используют для анимаций, и примерно представляю себе, как создаются анимации в блендере (когда-то пытался в 3D-анимации, потом забил). А что на счёт юнити? Вот я импортировал модельку параллелепипеда с костями, смотрю, вручную можно каждую кость двигать и моделька правильно изгибается, это хорошо. Т.е. я могу и через код костями управлять? Глупый вопрос, наверное, сам знаю, что могу, если могу найти по имени и обратиться к компоненту transform...
Вот только проблема - кости почему-то друг с другом не связаны. В Блендере они были выстроены в цепочку, в режиме позинга сдвинуть кость из середины вообще невозможно, в режиме редактирования кости остаются связанными, но кости вокруг сдвигаемой "растягиваются". А в Юнити те же самые кости сдвигаются свободно и при этом сильно искажают модель. Допустим, для вшитой в модель анимации это не важно (анимация-то в блендере делается), но как быть с ручными манипуляциями в юнити и процедурной анимацией? Может, проблема в формате экспорта (dae), или нужно что-то где-то настроить, чтобы сохранялись связи между костями?
>>712972 >п.1. Да, можешь в твиттере посмотреть процедурные анимации, люди оч крутые штуки делают через код с костями. Если про процедурные - управлять через код. Если с готовыми анимациями - создаешь Controller и кидаешь туда анимации. Юнити контроллер это отдельная тема на самом деле. >п.2. В блендере (как и в максе) это настраивается в костях (либо модификатором). Вообще когда я из макса экспортировал в fbx у меня кости экспортировались с такой же иерархией и я мог вращать кости нормально, но мог и польностью вырывать их. Скорее всего от этого нет лекарства, нужно просто аккуратно с этим работать
>>712981 >кости экспортировались с такой же иерархией и я мог вращать кости нормально, но мог и польностью вырывать их Вот у меня такая же ситуация - иерархия есть, вращаются нормально, но можно "вырвать", если изменить Position.
Почему-то вспомнил видосы с багами в играх, где в стене застревает одна рука/нога/голова персонажа и его начинает дико колбасить, очень сильно растягивая. Мне кажется, это из-за того, что кости не связаны друг с другом жёстко, иначе физический движок должен был бы выплюнуть персонажа целиком)
Надо ещё попробовать настроить обратную кинематику в блендере и попробовать её экспортировать... Обратная кинематика очень полезна в анимациях, но она подразумевает смещение костей. В блендере, насколько я помню, смещение кости-контроллера дальше предела никак не искажает контролируемые кости, они просто выстраиваются в направлении контроллера, а что будет в юнити, если она спокойно разделяет любые кости?
Ладно, не важно, нужно туториалы изучать... последовательно)
>>712971 Кости вертикально выставлял? Суть в том, что вертикально выставленные кости, как например рут в моём случае, имеют скейл в единичку при импорте, вне зависимости от формата, будь то fbx или dae, а вот отклонённые от вертикали т.е. кости спины, руки, ноги, ВСЕ остальные уже имеют этот джиттер скейла. Можно было подумать, что это как-то связано с иерархией, но нет, вертикальная кость в цепи так же имеет нормальный скейл
>>712972 >В Блендере они были выстроены в цепочку, в режиме позинга сдвинуть кость из середины вообще невозможно, в режиме редактирования кости остаются связанными, но кости вокруг сдвигаемой "растягиваются".
Примерно такое же поведение костей можно получить и в блендере, убрав галочку с "connected" в параметрах кости. Кость так же будет наследовать поворот, скейл и положение, но будет иметь дополнительную степень свободы в лице оффсета. Если оффсет нулевой, поведение в сущности будет идентично. Полезное применение находит в деформируемых ригах, загугли "overwatch animation slow motion", так нагляднее. С деформациями анимация может восприниматься лучше, приём по сути переняли у 2D аниматоров. Если интересна тема рига и деформаций в частности, то у Pierrick Picaut на ютьюбчике много интересного, тема деформируемых ригов и как их можно по человечески засунуть в Юняти разобрана в "Exporting stylised character rig from Blender to Unity". Ну так же курсы у него здоровские, много интересного подчерпнул. Только вот у него тяжёлый французский акцент. И конечно же эти курсы можно найти на торренте
>>712871 Спасибо, разобрался. Оказывается надо было открыть префаб в отдельном окне и там все нашаманить. А если просто выделить в окне с ассетами, то панель инспектора недоступна.
Начинающий юнитиеб смотрящий гайды и пытающийся стать Кириллом столкнулся с очредным вопросом: Сижу я , сделаю свои юнитиебские дела(спрайты, скрипты и тд)и вдруг эщельме-гещельме! и то что я делал ближайшие полчаса вдруг сбрасывается и удаляется из Hierarchy, без каких то ошибок или уведомлений. Просто "ВЖУХ" и делаешь все с того момента как запустил. Что я делаю не так?
>>713076 >то что я делал ближайшие полчаса вдруг сбрасывается и удаляется из Hierarchy, без каких то ошибок или уведомлений Дай угадаю: ты нажал кнопку "Play", игра была запущена в фоне, ты что-то менял в сцене и сразу видел изменения в игре, а потом снова нажал "Play" и всё вернулось в тот вид, в котором было до первого нажатия? Это абсолютно нормально. Редактор Юнити позволяет изменять структуру сцены и объекты на ней прямо во время игры. Это полезная фича, когда ты хочешь поэкспериментировать со сценой или сделать в готовой сцене что-то, что игрок обычно сделать не может, при этом всё происходит в реальном времени. Но когда ты закрываешь игру, сцена возвращается в состояние до запуска. Это тоже полезно, т.к. во время игры можно насрать в сцену очень много лишнего (как скриптами, так и вручную через окно редактора) и было бы плохо, если бы это всё сохранялось в файле сцены. В общем, впредь следи за кнопочкой "Play" и состоянием окна "Game".
>>713058 >такое же поведение костей можно получить и в блендере, убрав галочку с "connected" в параметрах кости Это я знаю, но мне казалось привычнее, когда кости жёстко связаны. Это ж реалистично.
>С деформациями анимация может восприниматься лучше, приём по сути переняли у 2D аниматоров Слышал и об этом, но мне бы хотя бы просто человечка для игры сделать и анимации к нему)
>твоё лицо, когда узнал, как тебя анимировали
Алсо видел некоторые деформации персонажей в записях матчей прямо в овервоч, там можно ставить на паузу, но мне казалось, что это просто глюки физического движка, т.к. повторно поймать одну и ту же деформацию не удавалось - каждый раз какая-то новая хрень. Часто такое заметно когда кого-нибудь убивает, особенно взрывом - конечности и голова на секунду могут отлететь за метр от тела... Реально на глюк похоже, а не на сознательно выполняемый приём.
>>713109 >я верно понял что сцена сохраняется после паузы? Нет, ты что-то не то понял. Сцена сохраняется после нажатия Ctrl+S, но только пока ты находишься в режиме редактирования - режим игры и даже пауза режима игры не позволяют ничего сохранить. Повторяю, режим игры - это режим для быстрых тестов и простых экспериментов в реальном времени, он не рассчитан на редактирование сцен с последующим сохранением. То есть сначала редактируешь сцену в режиме редактирования, сохраняешь (не обязательно, изменения сохранятся в любом случае), запускаешь режим игры, смотришь как это выглядит во время игры, при желании как-то экспериментируешь, выходишь из режима игры в режим редактирования, теряя экспериментальные изменения, и дальше продолжаешь редактировать сцену в режиме редактирования. По-моему это должно быть очевидно...
Теоретически, есть способ сохранить игровую сцену после изменений во время игры. Но для этого нужно писать свои скрипты, и я пока сам не знаю, как это можно сделать в юнити. Проще не выдумывать лишнего и делать так, как было задумано разработчиками юнити.
>>713058 >Кости вертикально выставлял? Да. >отклонённые от вертикали т.е. кости спины, руки, ноги, ВСЕ остальные уже имеют этот джиттер скейла Ну да, сейчас проверил - что-то такое получается. >ВСЕ остальные У меня почему-то не все. Но, возможно, потому что я только несколько костей повернул и скелет простой.
Имхо, если в туториалах на это внимание не обращают и в мануале/на форуме юнити ничего найти об этом не удастся, никакого официального объяснения или советов - скорее всего это норма и с этим придётся просто смириться. В конце концов все эти числа в Transform - типа float, а float подвержен появлению и накоплению ошибок округления. Там ведь матрицы друг на друга перемножаются, чтобы эти числа получить, или что-то в этом роде, короче матановские операции, влекущие за собой ошибки округления.
Если работает - забей, если будет вызывать ошибки в игре - тогда будешь думать, как это решить. Можно скриптик написать, чтобы округлял все эти значения прямо в редакторе, например...
>>713112 >Имхо, если в туториалах на это внимание не обращают и в мануале/на форуме юнити ничего найти об этом не удастся, никакого официального объяснения или советов - скорее всего это норма и с этим придётся просто смириться.
Тоже прихожу к такому выводу
>В конце концов все эти числа в Transform - типа float, а float подвержен появлению и накоплению ошибок округления. Там ведь матрицы друг на друга перемножаются, чтобы эти числа получить, или что-то в этом роде, короче матановские операции, влекущие за собой ошибки округления. Мне кажется, что это не тот случай, тогда бы ошибка накапливалась ближе к концу иерархии. Но ты натолкнул меня на мысль, что если это как-то связано с точностью float, которая теряет какое-то там количество знаков из мантиссы за пределами порога в 10000. Вспомнил, что старом блендере по умолчанию единицей измерения были попугаи, и для правильного размера объектов нужно было в параметрах сцены переключиться на метры и прописать скейл в 0.0001. Нужно провести следственный эксперимент
Начинающего Кирилла мучает вопрос: есть ли в нэте курсы по С# в пределах Юнити? Ну то есть объясняющий что в С# дергает за какие нитки в Юнити, как и почему. Или такого в принципе нет и нужно просто учить весь C#?
>>713147 Сразу вопрос: ты программировать в принципе умеешь? На каком-нибудь языке до C# пытался программировать? Хотя бы скрипты автоматизации на .bat или AutoIt? А в школе учили Pascal или какой-то другой ЯП? Если у тебя есть какой-либо опыт, особенно если это Pascal или что-либо C-подобное, то проблем с пониманием C# быть не должно даже без каких-либо учебных материалов.
>что в С# дергает за какие нитки в Юнити, как и почему Насколько я понимаю, в Юнити используется полноценный рантайм C#. Код, который ты пишешь конкретно для Unity, обычно нуждается в двух вещах: модуле UnityEngine и описании нового потомка класса MonoBehaviour, вот так: using UnityEngine; public class ИмяКласса : MonoBehaviour { код } Модуль UnityEngine содержит в себе основной функционал юнити, который ты можешь дёргать из своего кода. А класс MonoBehaviour содержит в себе основу для игрового объекта, которую ты можешь изменять, объявляя методы с определёнными именами и записывая в них код. Эти методы вызываются из кода движка Unity тогда, когда происходят определённые события - в этом заключена суть программирования игры (игровой код реагирует на какие-либо события игрового мира). Собственно, всё, дальше ты можешь программировать практически как захочешь (в рамках имеющегося рантайма mono, как я понимаю).
Проще говоря, твой код на C# описывает потомки MonoBehaviour, методы которых вызываются из кода движка Unity, а ты в своём коде в свою очередь обращаешься к коду на Unity, чтобы получить, передать или изменить данные или состояние движка и игровых объектов в сцене (ну и не только это, при желании).
>нужно просто учить весь C#? Не обязательно, если ты умеешь в другие ЯП. Просто, если возникнут вопросы "как делается ... в C#" - загугли этот вопрос и в 99% случаев найдёшь или ответ, или страницу в мануалах C#. Но чаще всего тебя будет интересовать "как делается ... в Unity", и ответы на эти вопросы ты можешь найти в официальных мануалах к Unity или в туториалах. Имхо, нет смысла учить какие-то хитромудрости C#, которые не имеют отношения к геймдеву вообще и к написанию кода под архитектуру Unity в частности (создание виндовых окошек, например). Да и "весь ЯП" невозможно выучить, обязательно будешь что-нибудь забывать, а часть функционала никогда на практике не пригодится, поэтому рациональнее изучать то, что требуется для решения задачи, а об остальных особенностях и инструментах языка знать только в общих чертах, иначе зароешься в изучение инструментов и забудешь об изначальной задаче - разработать игру)
Поправьте, если я написал какой-то бред, я сам не очень разбираюсь(
>>713160 Учил только основы С и имею базовое понимание циклов,функций, указок, массивов и ТД. Вобщем уровень чуть выше Хелло ворлд. Поэтому смотря туториал по создании какого нито Марио нихрена не понимаю то ли объясняющий использует свои элементы то ли дёргает элементы Юнити и хотел бы найти какой то туториал чисто по скриптоебству, желательно для совсем дебилов.
Сап юнитач, есть вопрос. Мне нужно чтобы мой введенный в инспекторе string с атрибутом передавался в код без атрибута и возвращался обратно, не теряя атрибут. Нужно это для работы локализации с цветным тектом.
Иными словами - я ввожу в инспекторе что-то вроде <color=#7CFC00>Enemy killed</color> в инспектор передается только "Enemy died", там код локализует строку и возвращает её, на выходе мы получаем <color=#7CFC00>Враг убит</color>
>>713210 Ничего не понял, но ты выключи ReactText и используй простой ввод. В крайнем случае можешь сделать кастомный инспектор где написать DrawText(yourString, куча параметров для отображения)
>>713174 >Поэтому смотря туториал по создании какого нито Марио нихрена не понимаю то ли объясняющий использует свои элементы то ли дёргает элементы Юнити А какая разница, что он использует и дёргает? Повторяй за ним пошагово, постепенно научишься.
Если хочешь знать все элементы юнити, изучай мануал: https://docs.unity3d.com/2020.1/Documentation/ScriptReference/index.html И ещё здесь есть подробности о скриптинге под юнити: https://docs.unity3d.com/2020.1/Documentation/Manual/ScriptingConcepts.html >Scripting concepts >Although Unity uses an implementation of the standard Mono runtime for scripting, it still has its own practices and techniques for accessing the engine from scripts. This section explains how objects created in the Unity editor are controlled from scripts, and details the relationship between Unity’s gameplay features and the Mono runtime.
Достаточно было сходить на официальный сайт юнити и пройтись по ссылкам. Тебе лень?
>>713210 А зачем ты локализацию через инспектор вводишь? Локализация обычно реализуется через списки строк в отдельных файлах (под каждый язык отдельный файл), и совершенно не важно, что будет содержаться в этих строках - можешь любые атрибуты добавлять. Или ты хочешь, чтобы в файле локализации был просто текст без атрибутов?
>>713264 Локализация работает по принципу: >В компонент текста вписывается ключ (или просто строка, которую нужно локализовать) >Скрипт, висящий на тексте принимает этот ключ >В зависимости от системных настроек телефона ищет ключ в файле локализации (если русский - в Russian, если английский - в English и т.д) >Заменяет текст (место, откуда брал ключ) на соответствующий этому ключу текст в файле локализации
В целом работает всё как часы, но мне нужна возможность делать куски текста цветными. Например у меня написано "Приближается ЙобаДракон в колличестве 200 штук" и я хочу, чтобы "ЙобаДракон" было написано красным, а остальное обычным цветом.
Можно окрасить создав новый скрипт и в нём уже через код локализовать строку (или отдельные слова) и сразу давать цвет, но у меня много мест в которых нужно так сделать, а создавтаь десяток новых скриптов не хочется
>>713265 >Проблема в хреновом техническом английском Так ты хотел туториалы на русском языке что ли?
Да, придётся подтягивать английский. Давно пора, если не первый день в интернете) Тем более что все мануалы к программам обычно только на английском, а без мануала разобраться трудно, если вообще возможно. Ещё и наиболее полные ответы на вопросы можно получить на стековерфлоу или других англоязычных форумах, а среди русскоязычных либо никто ничего не знает, либо не хочет объяснять...
Только что создал новый проект и юнити сообщила, что вышла новая версия. Нажал на кнопку обновить, ничего не произошло. Закрыл юнити. В юнити хаб нет кнопки "обновить", я могу только скачать новую версию отдельно от старой. Чё делать? Удалять старую - качать новую? Почему они не сделали кнопку "обновить версию", очевидно же, что между 15 и 16 не должно быть существенных различий.
Попытался сделать WebGL билд сцены с UI-кнопками, билдилось очень долго, минут 8, в итоге получаю в консоли Firefox получаю ошибку "символ unityFramework не определён". ЧЯДНТ? У кого-нибудь WebGL-билды получалось делать?
А ещё я хотел попробовать сделать билд IL2CPP под винду, но билд не прошёл - какая-то ошибка обращения к il2cpp.exe или что-то типа того... Ну, это я так, просто проверяю.
>>713327 1 Скачай Servez (синяя рожа). 2 Сделай билд в условную папку mywebglbuild. 3 запусти Servez - укажи папку mywebglbuild 4 в браузере открой http://localhost:8080 5 на этом этапе всё будет работать Проблема эта т.к. браузеры сейчас блочат JS и http в файловой системе и нужно поднимать локальный сервак. Кстати если не хочешь делать эти 5 шагов, другой вариант закинуть билд на настоящий сервак
Можете пояснить за ECS? Я правильно понимаю, что сейчас если есть куча циклов, они выполняются на одном процессоре, не используя кучу тредов, которые сейчас в современных процессорах, а ECS делает игру более производительной. Вопрос на сколько?
>>713336 >Проблема эта т.к. браузеры сейчас блочат JS и http в файловой системе и нужно поднимать локальный сервак. Я знаю об этом, но эта ошибка выглядит по-другому. Я уже делал изменения в about:config и браузер перестал блочить запросы через по file://, но ошибка осталась. Servez установил и запустил, ошибка всё та же.
>>713337 >ECS делает игру более производительной ECS - это подход к разработке игр, преимущественно направленный на упрощение дизайна объектов, но также он может являться основой для data-oriented design (DOD). На производительность влияет не ECS, а реализация DOD, которая в Unity называется Data-Oriented Technology Stack (DOTS). Ну или как-то так. Я сам толком не понимаю, наделали кучу терминов и названий(
>Вопрос на сколько? Зависит от типа контента. DOD имеет смысл, когда у тебя тысячи/десятки тысяч однотипных объектов, с которыми тебе нужно работать последовательно. Суть в том, что в ООП данные разбросаны по памяти, процессору приходится каждый раз искать следующий класс и ждать его загрузки из RAM в свой кэш; если же мы реализуем DOD, тогда однотипные данные хранятся у нас одним блоком, который процессор может загрузить заранее в свой кэш, в результате мы экономим время на поиске объекта/ожидании доступа к объекту.
Другими словами, если твоя игра - статичный фон одной картинкой и один спрайт персонажа, то ты вообще ничего не заметишь. Если же у тебя на карте 100 тысяч игровых объектов, и все чем-то заняты, куда-то движутся и т.д. - тогда ты, скорее всего, ощутишь значительный прирост производительности.
>>713406 Не знаю, мой компьютер с 2008 не сильно обновился, тормозов в редакторе юнити 2020.01 не замечаю. Учитывая то, что они нацелились на оптимизацию рантайма под слабые машины/мобилки - должна быть даже быстрее старой.
>>713447 Уже пробовал? Что конкретно у тебя тормозило? Если компиляция кода/сборка проекта - оно на любом компе "тормозить" будет, всегда придётся немного подождать. А вот графический интерфейс и редактор сцены тормозить не должны.
А вообще вот официальные системные требования: https://docs.unity3d.com/2020.1/Documentation/Manual/system-requirements.html Где-то видел приписку типа "остальные требования зависят от сложности конкретного проекта". Т.е. чем более сложный проект пилишь, тем выше требования к ПК. Ну, как и с любой другой программой - Блендер тоже можно открыть на любом нетбуке, но более-менее сложную графику на нём не сделать - чем больше полигонов, тем выше нагрузка вплоть до зависаний.
>>713366 Выключи компрессию в player settings, забыл про это сказать. JS код ожидает ответ gzip, а т.к. приходит архив без этого заголовка - вываливается ошибка. сори, сразу не вспомнил
Анончики, пытаюсь через юайшный рэйкастер кинуть рейкаст из transform.position объекта PinkDragonSteelArmor, чтобы поймать в него объект InventaryCell - нихуя не получается. Пробовал юайным рейкастером просто от позиции мышки рейкаст кидать, если мышка в центре объекта PinkDragonSteelArmor - успешно ловятся рейкастом оба вышеперечисленные объекта. Начал дебажить по координатам - координаты рейкасты мышки, по которым рейкаст попадает, отличаются от координат объекта PinkDragonSteelArmor, с которого рейкаст промахивается, точнее отличаются по иксу и зэте, по игрику совпадают. Вот есть же Camera.ScreenToWorldPoint, может есть что-то такое для UI?
>>698843 (OP) Какие способы есть сохранения анимации(созданную в унити)? Чтобы при форсмажорах можно было бы перенести ее из одного проекта в другой. Перенес контролер, перенес саму анимацию - а в ней кадры пустые, без отсылок спрайту, я вообще не понял зачем тогда .анимация нужна, раз она не сохраняет спрайты и их порядок. Я слышал об экспорте-импорте материалов, но не знаю каким образом экпортируется анимация (может также поломано, без спрайтов), да и экспорт работает только если у тебя проект под версию юнити открывается, то бишь не всегда есть возможность открытия проекта и экпортирования материала из него.
>>713609 Подумывал, но блендер разве не слишком сложная программа для 2д? Устанавливал другу много лет назад, я там еле сам разобрался какими клавишами что вертеть.
Накопились вопросы по тайловым картам: 1. Использую пакет 2D Tilemap Editor, он достаточен или есть что-то лучше? 2. Есть ли бесплатные ассеты для автотайлинга в юнити? Чем пользовались? 3. Может быть, будет лучше использовать Tiled? Как там с импортом в юнити? 4. Слои карты делаются отдельными Tilemap+TilemapRender, правильно? 5. Есть ли утилиты для отрисовки вариаций промежуточных тайлов? 6. Можно ли добавлять тайлсеты? Я по одному тайлу импортирую.
Может есть свежий туториал по тайловым картам в юнити?
>еле сам разобрался какими клавишами что вертеть Есть специальные шпаргалки со всеми хоткеями. Но на практике чаще всего нужны только 3 клавиши - G, R, S (смещение, поворот, масштаб). Да, первое время сложно и путаешься, но потом становится настолько привычным, что управление в любой другой программе кажется крайне неудобным (мне вот не нравится управление QWERTY в юнити и других движках).
>>713624 Блендер так блендер. У меня просто место закончилось на диске и никак не очистить, программы чет вообще дофига жрут. Там плагин установил, тут фотину, сям, тут гиг сям гиг и вот у меня остались последние 5-10 гигов которые сжирает юнити тютелька в тютельку во врема билда. Так влооом копаться в этом чтобы установить блендер аааргх.
>>713621 На кнопку я не жму. Мне нужно метод написать, который будет кидать рейкаст от координат объекта, то бишь "под себя" рейкастить и видеть что под ним. Так вот кидаю я рейкаст по gameObject.transform.position - и он ничего под собой не ловит, следом я написал метод рейкаста от курсора мышки для теста, ну тип работает вообще всё это или нет, навёл его на объект посерединке, где в теории должен быть тот самый его gameObject.transform.position, которым пытался рейкаст кидать и ловить то, что под ним - и рейкаст с курсора всё ловит. То есть курсор кидает рейкаст с какой-то другой системы координат по юайке и всё делает правильно, и мне теперь надо разобраться как перенести в ту систему координаты координаты объекта, с которого мне нужно рейкасты кидать.
>>713622 >3 Импорт идеален, а хуле ему не быть, там же 1-2 формата всего. Тайлед не лагает ты можешь ковырять карту любых размеров, в юнити возможны дикие фризи, лаги, да и прост неудобно может быть.
>>713628 Делай кнопки невидимые, они уже с встроенными методами, зачем изобретать колесо и я догадываюсь в чем твоя настоящая проблема, но не хочу чтобы меня закидали бананами за очевидность
>>713637 Бля не понимаю этого дроча на версии. Вы что там прожекты каждую неделю высираете что вам так все необходимо апдейтить? Я сидел спокойно на 18 несколько лет пока некоторые тут ныли что дескать 20 лагает и блабла, на что мне было, конечно же, глубоко похуй. Написано же для дурашек ЛЕГАСИ, СТАБИЛЬНЫЙ РЕЛИЗ, ТЕСТОВАЯ ВЕРСИЯ. Вы читать умеете алло. Вот недавно из-за предолинга и у меня все слетело в своей версии, я так уж и быть обновился до СУПЕР НАНО НОВЕЙШЕЙ ТЕХНОЛОГИЧНОЙ МЕГА КРУТОЙ ПРОДВИТОЙ 19ой версии, фух какой же каеф, благодарен ребяткам за бета тест. надо будет - перейду дальше или вообще откачусь. Не надо будет - буду сидеть. В чем у вас проблемы?
>>713627 >Блендер так блендер. Я не настаиваю, просто предложил как вариант. Сам только начинающий.
>Так влооом копаться в этом чтобы установить блендер аааргх. Попробуй это - https://windirstat.net/ - легко сможешь найти, что занимает слишком много места. Обычно больше всего места занимают видео, музыка и современные игры. Ещё место может занимать Windows копиями обновлений и контрольными точками восстановления, это можно очистить системной утилитой (свойства диска - очистить диск). Также советую включить и настроить сжатие папок и файлов NTFS - оно не поможет с медиафайлами (картинки, видео и музыка обычно уже сжаты более эффективными методами), однако исполняемые (exe/dll) и текстовые файлы (в т.ч. скрипты) сжимает превосходно. К примеру, Unity 2020.1.16f1 с документацией и WebGL-экспортом занимает у меня всего 4 ГБ, без NTFS-сжатия она занимала бы 6 ГБ. Без WebGL и документации она вообще весила меньше 3 ГБ со сжатием.
А ещё можно скачать portable версию Blender, сейчас она весит 195 МБ в архиве и 523 МБ в распакованном виде. Если использовать сжатие NTFS - будет занимать всего лишь 321 МБ. На производительность сжатие файлов не влияет, по крайней мере я давно пользуюсь этой фичей и проблем ни разу не замечал (жалею, что раньше боялся включать это сжатие). Главное не сжимать файлы самой операционной системы, а то, говорят, может не смочь загрузиться, т.к. драйвер для разжатия загружается позже критически важных файлов, которые можно случайно сжать)) Т.е. лучше помечать отдельные папки (свойства - другие - сжимать...).
>>713635 >Там же фоном всякие ноджсы и агенты еще грузятся Играю в игры, не закрывая редактор Unity. Фоном оно не крутится, только когда реально что-то нужно делать. >>713637 >загружается долговато Ставь на SSD. И, кажется, только первый запуск самый долгий, пока происходит настройка, потом всё из кэшей. >>713644 >примеров для обучения на ней горы А смысл? Ассеты из стора уже не загрузишь - устаревшие купить нельзя, а новые просто не заработают. Если обнаружишь какой-то баг - надежды на исправление патчами нет, т.к. апдейтов больше не будет. Даже совет на форуме спросить - вряд ли найдётся достаточно фанатов 5-й версии, чтобы помочь тебе с какими-то проблемами в ней. Потом, это не "вчерашняя" версия, она реально устарела же, невыгодно отказываться от новых фич и багфиксов.
>>713638 Как-то слишком сильно у тебя бомбит, если ты всем абсолютно доволен и в своих решениях уверен. Я вот сразу поставил себе 2020.01, потому что буквально через месяц-полтора выйдет 2020 LTS, так зачем мне обучаться на прошлогоднюю версию? А там уже и 2021 можно будет щупать, так, из любопытства скорее...
>>713591 Сам инвентарь реализовываешь? Пакет Game Foundation не пробовал? Там вроде готовый инвентарь есть. А ещё можно было бы ассет какой-нибудь найти, хотя бы чтобы глянуть, как его можно реализовать...
>>713628 >видеть что под ним Зачем предмету в инвентаре что-либо видеть, проверять и т.д.?
Базовый инвентарь реализуется так: 1. Есть массив NxM ячеек, в ячейках - ссылки на объекты (указатели) или типы предметов (числа). 2. То, что видит пользователь, рисуется кодом, опираясь на данные массива из пункта 1. 3. Действия пользователя изменяют массив из пункта 1. 4. Единственные датчики в системе - это ячейки, на которые пользователь может нажать. 5. В системе инвентаря есть скрытая ячейка - "рука пользователя" (см. ниже).
Перенос предмета внутри инвентаря осуществляется так: 1. Игрок кликнул на ячейку - мы записали в "руку" ссылку на эту ячейку; 2. Игрок кликнул на вторую ячейку - мы обменяли местами содержимое первой и второй ячеек. Аналогично с переносом в/из инвентаря.
Кстати, поскольку пустая ячейка тоже содержит ссылку (null), то код получается крайне универсальным: 1. Мы можем менять местами два предмета сразу; 2. Можем перемещать предмет в пустую ячейку; 3. Можем выбирать пустую ячейку, а потом предмет для неё. И всё это - одним и тем же кодом в три команды присваивания (X = A; A = B; B = X).
>>713658 Да, забыл добавить, могут быть варианты "руки": 1. Самое простое - "рука" только помечает ячейку, с которой мы хотим произвести обмен; 2. Визуальное "перемещение" предмета - "рука" сама является ячейкой под предмет (обычно пустая, null).
С первым всё просто, поясняю второе: 1. За курсором следует невидимая "ячейка", в которой может быть иконка любого предмета; 2. Когда игрок кликает по ячейке инвентаря, она обменивает своё содержимое с этой ячейкой; 3. С этого момента ячейка видима, но создаёт впечатление "перетаскивания предмета"; 4. Когда игрок кликает снова по пустой ячейке - она обменивается с этой "ячейкой руки". Для оптимизации, невидимая ячейка может следовать за мышкой только пока открыт интерфейс инвентаря и зажата, скажем, ПКМ; когда инвентарь закрывается или ПКМ отпускается, эта ячейка автоматически возвращает своё содержимое в последнюю ячейку или в ту, над которой последний раз был курсор мыши.
Ну, в общем, нужно экспериментировать - выбирать на практике, что будет удобнее для твоей игры.
Занимаюсь разработкой анала онлайн дрочильни на мобилки и мне нужен какой-то класс, с помощью которого я буду отправлять запросы на сервер и получать ответы от него.
Единственный рабочий вариант, который нашел, это - это gameobject с привязанным скриптом, который выполняет запросы и прочее. Проблема в том, что чтобы им пользоваться в других скриптах - его нужно референсить во всех скриптах (где он нужен), а это не круто. Хотелось бы иметь просто статический класс.
>>713664 Да, использовать простой статический класс со статическими методами. вообще забудь про рефлексию, из-за неё у тебя потом будет очень много проблем
Челы,помогайте,все перерыл.Перехожу в плей мод,если долго в нем стою и потом выхожу,вылетает юнити.Никаких ошибок,ничего,просто вылет.Думал из-за того что на новую версию перешел,но нет,уже откатился на старую,там тоже такая же беда.Раньше было такое,но очень редко,как-то не предавал значения этому,а теперь каждый раз.
>>713672 У меня на версии 2019.4 часто вылетала, еще были проблемы с ресайзом окна (при ресайзер всё могло почернеть и приходилось перезапускать). Перешел на 2020.1 тоже пару раз вылетело, потом обновил драва на видюху и перестало (ноут с 2мя картами) А вообще у юнете есть лог в файл, можешь поискать где он и возможно поймешь в чем проблема
>>713674 логи к сожалению ничего не дали,там просто никаких проблем,все идет своим ходом,но когда выходишь из редактора - вылет.Сейчас попробую обновить дрова,мб поможет
>>713658 >>713659 Знаешь, я вот почитал тебя и понял што рейксаты могу с курсора кидать при драгэнддропе же, а они как раз работают как мне надо. Мне прост на драгндроп нужны рейкасты, чтобы смотреть куда потащил объект. А идею с инвентарём я в другом месте подхватил и немного другую, но тож массив объектов будет там, все дела. Спасибо.
>>713681 >рейксаты могу с курсора кидать А почему не сделать как >>713630 предлагал? Подложка ячеек может быть выполнена как кнопка UI. У неё есть события входа/выхода мыши и автоматическая подсветка (удобно, но почти не вижу такого в играх). Даже можно будет сделать управление инвентарём с клавиатуры)
Можете подробно объяснить как работает данный код. К примеру, у нас меняются данные, мы подписываем на это действие делегат, который описываем ниже? А как это объяснить: "А obj в данном случае захватывается и хранится в делегате."? Где он хранит эти данные, и какой в этом вообще смысл?
>>713696 Это просто анонимный метод: https://metanit.com/sharp/tutorial/3.15.php Анонимный метод (анонимная функция) - это кусок безымянного кода, ссылку на который мы храним в переменной (в C# это "делегат"), и можем вызывать как обычный метод (функцию), но только если знаем ссылку на него. Делегат, по сути, всего лишь хранит ссылку на метод, а анонимный метод - метод, который создаётся без определённого имени.
>подробно объяснить как работает item - экземпляр какого-то класса onValueChanged - событие этого класса, на которое можно повесить обработчик события item.onValueChanged - это поле для хранения ссылки на обработчик события onValueChanged delegate (bool v) - объявление анонимного метода, который может принимать аргумент v { ClickButton(...); } - код анонимного метода (хранится где-то в памяти, доступ к ней по ссылке) (v, obj, ...) - аргументы ClickButton, которая находится в анонимном методе v - аргумент анонимного метода, передаётся в ClickButton obj - ссылка на какой-то объект, которая передаётся в ClickButton
Как работает: 1. Мы создали анонимный метод, в которой вызываем метод ClickButton; 2. Мы присвоили ссылку на этот метод в поле onValueChanged экземпляра item; 3. В какой-то момент произошло событие onValueChanged; 4. Где-то внутри item произошёл вызов onValueChanged; 5. Вызов прошёл по ссылке и вызвал ClickButton.
>Где он хранит эти данные Тебя это волновать не должно. Какой смысл копаться в кишках рантайма C#?
>какой в этом вообще смысл? Класс позволяет тебе добавить кастомный обработчик события. Ты пишешь какой-то код, а затем хочешь, чтобы этот код вызывался, когда произойдёт определённое событие. Тогда ты назначаешь этот код обработчиком события. Всё, теперь твой код вызывается в случае срабатывания события.
Если тебя волнуют анонимные методы - можно обойтись без них. Просто создай метод класса с каким-либо именем, а затем присваивай ссылку на него полю item.onValueChanged. Однако, если тебе не нужно обращаться к этому коду из других методов/классов, то рациональнее будет создать анонимный метод - так не будет лишнего мусора в интерфейсе класса (лишних именованных методов).
>>713732 Ты мне объяснил, что я и сам знаю. Подписка на анонимную функцию, окей. Но объясни вот что: 1) У нас вызывается onValueChanged (то есть меняется значение у кнопки), откуда берется значение переменной v 2) И второе, что мне было интересно. >>А obj в данном случае захватывается и хранится в делегате. Как он захватывается, откуда берется? Меня не интересует как код работает, ты мне скажи, что такое obj, ведь я в методе ClickButton над ним какие-то действия произвожу, мне нужно знать откуда я его беру.
>>713736 >Ты мне объяснил, что я и сам знаю Какой вопрос - такой и ответ))
>откуда берется значение переменной v А мне откуда знать? Ты даже не говоришь, какого класса экземпляр item. Нужно открывать документацию и смотреть, что это за класс, и какой именно аргумент он передаёт в обработчик события onValueChanged. Но судя по логике, если значение item - булево, тогда v в onValueChanged - это новое значение item (true или false). Если же значение item не типа bool, тогда я без понятия, что это за аргумент - нужно смотреть документацию (или исходный код класса).
>что такое obj >мне нужно знать откуда я его беру Ну по идее это ты мне должен сказать, что у тебя за obj такой и откуда ты его взял. Ты показал всего одну строчку кода, а мы тут должны гадать, что у тебя было до этой строчки?
Теоретически, obj берётся из той зоны видимости, где создаётся анонимный метод. Но это не точно)
По-моему это устаревшая хрень, в 2020.1 этого уже нет вроде как. Даже в 2019.2 такой статьи уже нет. Но если у тебя действительно UI.Toggle, тогда v по идее должен быть новым знанием тумблера (true/false).
>>713638 >не понимаю этого дроча на версии >В чем у вас проблемы? Вспомнил главную проблему устаревших версий: они сильно отличаются от новых. Вот ты дрочишь-дрочишь API старой версии, а потом через пару месяцев понимаешь, что пора бы уже перекатываться на новую версию, а API новой версии ДРУГОЕ. И начинаешь учить заново, а заодно перекатывать свои старые проекты на новые API. Нахрен оно надо, учить 2018.4 LTS в 2020, когда через год 2018 станет legacy?
Аноны, хэлп. Пытаюсь сделать внутриигровые покупки, создал все товары в гугл плей консоли, но один из них никак не хочет активироваться. Пишет "Произошла непредвиденная ошибка..." Два дня уже так. Все остальные товары активировались нормально, все они управляются одними скриптами по одну сценарию.
Задача: написать любую мини-игрушку чтобы в ней использовалось два паттерна проектирования на c# Начал делать клон Reigns, пока что не знаю куда там там можно запихать паттерны. Предполагаю, что можно засунуть сохранение через Memento, но может можно как-то прям в логику свайпов или изменения показателей красиво сделать?
Аноны, какие первые проекты вы делали/посоветуете? Уже несколько месяцев смотрю курсы на разных платформах, копирую материал и думаю что "учусь". Но на самом деле все это хуйня видимо, пока не сядешь и не будешь делать что-то свое и сам. Так вот, хз с чего лучше попробовать. 2д проект или 3д. 2Д игры сами по себе не особо нравятся, особенно платформеры какие-то или top-down. 2.5Д уже получше. В свое время очень много играл в такие игры, но тут беда уже с ассетами всякими. Даже для учебы. Остается по идее только 3д. Но 3д должно быть намного сложнее чем предыдущие варианты. В общем, на распутье короче. Посоветуйте, с чего вы начинали?
>>713980 Делай что хочешь, тут у всех свой ебанутый путь, который ни к чему хорошему по сути не привел. Устраивайся на работу и решай универсальные задачи, а начинай с чего хочешь, главное понимай работу Unity и C#
>>713980 Главное выучить C# хорошо и понимать практику программирование на этом языке. Если ты только смотрел курсы по unity - уверяю, c# у тебя на дне, нужно подтягивать серьезно. Дальше уже что угодно можно и работу попробовать найти, если скилл не позволяет, то куча разных инди команд, работающих "на энтузиазме" тебя примут. Только совсем к школьникам идти не надо.
>>714012 Ну c# возможно у меня и правда на дне. Хотя опыт программирования есть. 2 года работал веб-макакой с JS. Мне бы такой проект, который по сути смог закрыть пробелы и помог в устройстве на работу. Типа, не с пустыми руками как чмоня после курсов скилбокса. Я в душе не ебу какие навыки ожидают от джунов в геймдеве. hh.ru и похожие сайты врут в основном.
>>714014 1) Заходишь в плеймаркет 2) Ищешь простую игру 3) Делаешь ее
Если джуном, то хватит 2-3 проекта, понимание синтаксиса и ООП (берешь метанит, реализуешь в своем проекте все принципы и учишь наизусть, чтобы не тупить на интервью). У меня в 2015 на позицию Джуна спрашивали знаю ли как работает физика и анимация, то есть знания, которые за минуту получаются. Тебе будут готовы платить за то что ты макакишь над игрой.
Кто может подсказать можно ли с помощью playmaker'а сделать процедурно генерируемый ландшафт с пещерами, данжами, городами и биомами, используя ассет ландшафта?(если есть тутор, то было бы замечательно)
Такой вопрос: есть несколько монстров, у каждого есть компонент monsterView(просто пример) и контроллер (просто c# класс). Что содержит экземпляры контроллер? Есть какой-то фасад, который содержит лист контроллеров или как это происходит? Где и как они создаются?
>>714270 У меня обычно всегда есть рутовый класс (условно Root.cs или GameManager.cs) который уже знает про другие компоненты систем, он дергает последовательно (или параллельно) эти системы. В каждой из систем может быть такая же вложенность или сразу какая-то логика. Кстати на всех моих GO висят "линкеры", а не monsterView (как советуют во всех туториалах) благодаря чему я могу без оверхедов чуть ли не всю сцену обойти.
В последнем проекте пошел еще дальше: сделал опять 1 рутовый класс (с состоянием всей игры) пару менеджеров (input, animations) и кучу хелперов. На удивление получилось даже лучше чем я ожидал и текущий код очень легко переиспользовать и расширять.
>>714285 Спасибо! Можешь подробнее про линкеры рассказать или туториал как раз скинуть? В целом у меня похожая система, есть gamerunner, внутри есть charactersManager. Но непонятно, вот, я хочу из префаба ещё монстра создать, что делать? Контроллер один на всех, а для нового монстра только вью и дата класс новые нужны? Где тогда держать лист монстров и нужно ли?
Есть ещё вопрос: Как обычно реализуется то, что, например, при вызове меню персонаж более не реагирует на нажатия на клавиатуре, но теперь с помощью ее переключаются возможные варианты выбора в меню? Сейчас у меня есть класс InputController,. Где есть всякие event Action типа OnMoveClicked, OnJump и тп. На них уже подписаны нужные методы персонажа
>>713747 Станет так станет, в чем проблема? Надо будет перекатится, перекатишься, блжд. Учить что-то раз в 3-4 года эффективнее, чем учить каждый год. Какие-то нелогичные у тебя мысли.
Не знаю чему вы там так усердно ОБУЧАЕТЕСЬ, кек. Мне даже сложно представить поделия кирилов которые постоянно чему-то обучаются из НОВОГО. Видимо я совсем хлебушек и отстал от профессиональных стандатов индустрии и кирильского тренда этого треда, в частности.
>>714289 Линкерами я их так называю, возможно у них есть какое-то другое название, но у меня это чуть-ли не пустые классы UnityGo: MonoBehaviour{ } Условных монстров расскидываю в словари [команда, List<IUnit>] Для кастомизации все делают на ScriptedObject-ах, в них же и префабы храню. По сути этот "линкер" и выступает в роли вью А где хранить его дату решать тебе, я и в общей кучу хранить пробовал и в инстансе монстра, во всех кейсах работает, тут от твоей игры больше зависит как удобнее
>>714290 Если ты знаешь когда игрок открыл меню, так выставь флаг SuspendEvents = true; и в этих методах if(SuspendEvents) return
Помогите решить простую задачу, самому мозгов не хватает. У меня есть 2 вектора и мне нужен аналог Vector3.LerpUnclamped(from, to, 1.3f) только вместо условного 1.3f нужно конкретное число.. Я могу это обернуть в цикл и постепенно увеличивать 1.3f проверяя расстояние через Distance, но же какой-то костыль.. Тут есть матаны которые мне помогут одной формулой решить эту проблему?
>>714339 Если правильно понял по картинке, хочешь получить почку на определённом расстоянии от объекта, который задаёт расстояние? Если так, то можно сделать так:
Vector3 dir = pos1 - pos2; // Получаем расстояние от объекта 1 к объекту 2 + требуемое расстояние float lenght = dir.magnitude + 4f; Vector3 finalPos = dir.normalized * lenght;
>>698843 (OP) Кто-нибудь знает почему 2 кнопки в одном месте одновременно не нажимаются, нажимается только верхняя? Юнити не поддерживает пузырьковый эффект чи що?
Добавил Группу полотна, убрал галочку с блокировать луч, все равно не нажимаются одновременно.
Есть объект с компонентом, который принимает в поле scriptableObject. Когда я ставлю enable = false(в игре), ссылка на объект пропадает.(и поле пустое, если вернуть enable) Из-за чего это может быть? Есть объекты с аналогичными компонентами и там все норм
>>714574 Если без шуток, то нужно читать всё, но для начала про векторную математику. Сам был шокирован, как на первый взгляд сложные вещи можно красиво и лаконично решить. Не знаю, начни со статьи "Practical use of Vector Math in Games" на gamedev.net, первое что нагуглил более-менее сносное. Так же там есть ссылки на связанные с этим делом статьи, про скалярное произведение и т.п.
Можно ли сделать так, чтобы в мобильном приложении на Юнити снизу и сверху отображались стандартные панели с кнопками и времен, а не все пространство занимала игра?
Необходимо ли, в целях оптимизации, кэшировать Transform объекта в скрипте, висящем на нём самом? Или можно спокойно обращаться gameObject.tranform? Просто недавно узнал что до недавней поры прям обязалово было Camera.main кэшировать, если каждый кадр обращаешься.
>>714954 Зоебись! >>714936 >Исправили только в версии 2020.2 Ну я и говорю до недавнего времени мол это делать надо было, но у меня всё-равно 2019.2.3, пересаживаться посреди проекта очкую, как-то раз пилил говноигру на мобилку и заапдейтился под конец, а там какой-то объект новый в Юнити точь-в-точь моей одной переменной назвали, ебаторился потом с этим.
>>714967 >Зоебись! Для общего развития можно почитать https://habr.com/ru/post/303562/ Кэширование при инициализации актуально также и для свойств, предоставляемых GameObject по умолчанию, таких как .transform, .render и других. Для доступа к ним явное кэширование все равно будет быстрее
>>714967 >>714968 Статья немного устарела, получать компоненты дженериками стало быстрее, чем приведением типов. Решил уточнить, потому что пару раз наталкивался на староверов которые голословно утверждали что именно приведением типов быстрее. Так действительно было когда-то, но давно
P.S. - большая разница между результатами моно и il2cpp по всей видимости из-за маршалинга, так что никаких аномалий. Думаю, результаты обращения по кэшированному компоненту будут примерно схожи по скорости между бэкэндами, протестирую чуть позже если интересно. Сущности того, что дженерики быстрее как в редакторе так и в билдах это не отменяет. Пикрелейтед -- функция бенчмарка, мелкими боксами вставил кусочки скринов из внутриигровой консоли
Аноны, нубский вопрос наверное задам, но он меня терзает долго. Вот я уже несколько месяцев активно пытаюсь вкатываться в юнити, смотрю много курсов на юдеми, в ютубчике и на юнити лерн. Пока своих проектов не делал, но собираюсь после НГ. В целом, много нового узнал (я надеюсь). Но вот все эти знания все равно можно сказать поверхностные. Никто не рассказывает о каких-то бест практис в рамках курсов, о паттернах проектирования и архитектуре проектов, типа как лучше начинать чтобы не забуксовать через 20 скриптов и т.д. понятно что это обычно с опытом приходит и надо что-то свое писать, ведь не зная проблемы ты не поймешь решение других людей. Поэтому вопрос - а это вообще важно на позицию джуна? Типа, от меня будут требовать ёба архитектуру проекта и паттернов. Как я тут пытаюсь не изъебнуться от синглтонов и кучи монобехейверов на объекте. В вакансиях хуй разберешься. Есть тут аноны которые прошли путь вката или собесят кого-то? Подскажите чмохе.
Загрузил abb в гугл плей в закрытое тестирование, скачал, а вся игра будто под зумом двукратным. Камера короче в 2 раза ближе чем надо. В редакторе все норм, естественно. Кто-нибудь знает, с чем связанно?
Я сильно рачила, если список предметов инвентаря передаю по ссылке через мэйнКамеру? Ну типа чтоб любым другим объектом его легко было поймать я повесил на мэйнКамеру скрипт со ссылкой на итемЛист, ещё там на сам канвас ссылка есть, точней на его графикРейкастер и ректТрансформ. К мэйнКамере легко через любой объект выйти и так кучи ссылок ручками назначать не надо будет.
>>715244 Никакой базы, два года, можно за год при желании. >>715267 Нихуя себе ты выдумщик, не думал, что кто-то способен придумать нечто настолько извращенное и безумное.
>>715267 У меня вместо камеры отдельный объект. На этом объекте скрипт с полями под скриптейблы. Плюс на нём же простенький моноскрипт, через который я влезаю в моно, если он вдруг когда-то требуется. Иногда просто нельзя обойтись без такой пустышки.
Короче, есть персонаж, он берет газету и читает. На переднем плане газета и текст (котоырй читает герой). На заднем плане остается все остальное (герой, окружающий мир и тп). Как немного затемнить все, что находится на заднем плане? Добавить полупрозрачную стеночку?
>>715494 2 варианта: 1 по проще - сделай quad перед камерой и через код выставляй прозрачность материала 2 по сложнее - делаешь несколько слове рендеринга, весь мир Layer 1, текст и бумага Layer 2, пишешь CustomPostProcess и затемняешь в нем весь layer1 - сложнее т.к. больше кода нужно писать + простенький шейдер нужно будет написать
>>715525 Все для игровой камеры, интерфейс и другой UI нет. Вот еще 3й вариант, в UI сделать панель просто черную и её менять, так даже лучше будет чем квад перед игровой камерой, тогда сможешь затемнять вообще все кроме книжного UI (поменяешь z position)
Персонаж в игре взаимодействует с разными объектами и у него должно появляться меню с разными вариантами действий. Есть какие-то годные гайды по подобному или по ингейм меню?
Кто работал с ProBuilderMesh? Почему из скрипта ничего не меняется? Код: foreach (ProBuilderMesh mesh in MeshSelection.top) { Vertex[] vertices = mesh.GetVertices(); // чёто делаем с vertices mesh.SetVertices(vertices); mesh.ToMesh(); mesh.Refresh(); } ProBuilderEditor.Refresh();
Есть игра, что-то вроде рпг или квеста(2д, вид сбоку). Есть две ситуации: 1) Персонаж читает газету, которая лежит на столе. Задний фон затемняется, появляется спрайт газеты на переднем плане и сверху еще текст (что персонаж читает). При нажатии на любую кнопку, чтение прерывается 2) Персонаж прячется (в шкаф, например). На деле тоже появляется спрайт "вида из шкафа", далее локация, в которой он находится, сам персонаж и тп должны спрятаться, персонаж должен перестать реагировать на нажатия клавиатуры. Вместо этого должно появиться меню, с вариантами действий(в т.ч. выйти из шакфа)
Функции похожи тем, что обе заставляют появиться спрайт(либо шкафа, либо газеты), но отличаются влиянием на другие вещи ( в первом случае еще появляется текст, во втором - исчезает персонажа, блокируется клава) и разные варианты отключения. Должен ли это быть один компонент или нет? Как лучше сделать взаимодействия с другими классами\ функциями - выключение отображения локации\персонажа, появление текста?
>>698843 (OP) Как не имея макбука портировать на версию для ios? Без лишних головных болей. Не для загрузки в аплстор. Хочу знакомому человеку показать приложение на его планшете. Это возможно?
>>716215 Возможно, но для этого все же придется взять мак на день, чтобы скачать оттуда файлы. В ассет сторе: iOS Project Builder for Windows
>One-time physical access to Mac OS/X to grab a couple files to complete the setup (simple instructions are given, as well as assistant scripts, on how to deploy the necessary files from the Mac side to the Windows side of your computer).
Есть пять массивов, у них очевидно есть названия. Мне нужно взять это название, сохранить его в PlayerPrefs, а потом при необходимости забрать переменную из PlayerPrefs и пройтись по массиву с нужным мне названием. Как это сделать? Я видел можно функцию по имени вызывать, но как это с массивами сделать я не знаю, и даже не знаю какой еще костыль можно придумать, так как задача реально сложная.
Проблема литералли гифрелейтед, спрайты клипаются слишком рано при движении камеры. В теме, откуда я украл гифку, пишут поменять в SpriteRenderer bounds, но это нельзя сделать, потому что у bounds нет setterа. Есть идеи?
Сап, решил запилить псевдо стратегию с кучей экранов, а значит сцен Интерфейс прописал чтобы он не удалялся при загрузке, но поскольку у боевки другой интерфейс, я старый решил отключать SceneManager.LoadScene(levelToLoad, LoadSceneMode.Single);
if (levelToLoad == "Fight") { mainUI.gameObject.SetActive(false);
} else {
mainUI.gameObject.SetActive(true);
} Вот если удалить все лишнее и привести в примитивный вид Проблема в том что FindObjectOfType; при не активно возвращает null, и не могу понять как его включать обратно
// тут твой сраный код в с методом котором ты делаешь
_mainUIGA.SetActive(levelToLoad != "Fight"); }
конечно лучше это дополнить проверкой на наличие на сцене вообще такого класса и так далее, но тут главное схему тебе объяснить. если у тебя будет ссылка на объект, то тебе не нужно его искать и, как следствие, ты сможешь его вырубать и врубать когда захочешь
На удеми большие скидки в честь рождества Кто что берет или знает годного? Сам думаю взять что-нибудь от него https://www.udemy.com/user/james-doyle-4/ поскольку годно на ютабе показывал как и почему надо делать. Да и его голос уши не режет. Но напрягает что он ни в одном курсе не затрагивает тему pathfinding
Как локальный размер коррелирует с общим? Неужели кроме bounds ничего нет и остается только каждый раз чекать соотношения реального размера к локальному?
>>716558 Ну и какой смысл брать за деньги самые основы, когда они есть в бесплатном доступе? Ладно бы еще платить за продвинутый уровень. А так, бессмысленно просто.
>>716704 >Ставлю Plane А где ты его ставишь? Там где тип выбираешь, там же под ним сразу размеры.
>Отерываю редактор UV и вот такая хуита Так просто уменьши, в этом ничего страшного нет. В твоем окне UV слева сверху кнопка изменения размеров, в этом тоже ничего страшного нет
>>716705 >А где ты его ставишь? Там где тип выбираешь, там же под ним сразу размеры. Нет там ничего. Только список с типами примитивов и пара опций у некоторых
>>716705 >В твоем окне UV слева сверху кнопка изменения размеров Там кнопка масштаба, она дико неудобна, так как от центра, а не края. приходится сначала масштабить, потом двигать, опять масштабить, опять двигать
Слетают ссылки на скриптабл обжекты(в serialeised field) при загрузке/перезагрузке уровня, как фиксить? У меня в них логика разных менеджеров, типа менеджера музыки.
Анчоусы, собрался процедурно генерировать город и не могу решить, как собирать дорогу. Брать пачку префабов, потом получать крайные левые и правые вершины и сваривать? Или изначально генерировать дорогу плейнами плюс фурнитура по бокам? Как профитнее? Пока что начну второй вариант, но вдруг вы чего подскажете.
>>698843 (OP) У меня есть миниигра на юнити и я хочу сделать для нее простенький сервер что бы там было что-то типа чата. На чем его делать и как? Я знаю джаву. И хотелось бы заодно что бы была проверка на подленность покупки игровых предметов, а то знаю я, как игры школота ломает, хотелось бы узнать как такого избегать. Потому что там будет рейтинг и не хотелось бы чтоб читеры были в топах
>>716863 В гта просто чанки идут, даже не связанные между собой. Я тоже делал чанками, вроде получилось, немного времени потратил на механизм "соединения" т.к. у меня были умные дороги и им нужно было знать про соседей.
>>716871 Ух! Ну смотри, читеры будут в топах даже не ломая твой сервер, они могут ломать саму игру без покупок т.е. тебе нужно обсуфиксировать (или как там) твой код, потом защитить все переменные (нет, я не про private, а прям про байтоебство и хеширование), далее - как твой сервер то поймет, что ему пришел score не от читера? никак.
Про сам сервер можно хоть на ассемблере его написать и общаться простым get/post, можешь попробовать написать свой мини-протокол или отправлять байты напрямую. Можешь использовать свою яву, можешь спринт прикрутить, можешь на ноде сделать (давно levelgd постил гайды на нашей доске, походу удалил канал).
Про подленность можешь рискнуть, но помни, твой сервер должен работать всегда и если по какой-то причине у тебя отвалится база - то ты у всех игроков заберешь предметы? думаешь им это понравится? рискуешь встрять оч сильно.
Анончик, я опять к тебе со своими головняками. У меня вот есть код для поиска пути в простых ситуациях, типа обхода мелких препятствий. Я пускаю рейкаст от персонажа в точку назначения pos, куда мышкой кликнул бежать, и если а пути ничего нет - персонаж бежит прямо: borderStuckHit = Physics2D.RaycastAll(transform.position, Vector3.Normalize(pos - transform.position), 10f); Но допустим в ситуации как на скрине одного прямого лучика недостаточно, он не попадает по сундуку и персонаж топчется на месте около него. Вот я нарисовал синеньким ещё два лучика, которые хочу пускать - есть ли какой грамотный способ вычислить направление для их запуска относительно точки pos? Можно на персонажа повесить ещё два дочерних геймобжекта в эти направления и по их координатам пускать, но мне кажется это как-то костыльно.
>>716887 А может можно как-то сначала проверить пришел ли платеж а потом только давать предмет? Дело в том что игра как бы онлайн и похуй если у чела предмет будет только на клиенте, главное что бы у всех остальных это не отображалось
>>716901 Если говорить про андроид, то там, насколько я помню, в гугл консоли можно указать url твоего сервера и когда кто-то купит предмет, то сам гугл его дернет с параметрами типа yourserver.ru/api/gotItem?itemId=1&userName=Wanya и тд Там же в консоли можно загрузить список всех покупок для каждого игрока, просто создай аккаунт и прочитай документацию, у меня с этим вообще никаких проблем небыло.
>>716887 >В гта просто чанки идут Так всё равно на чанки разбивать, лимит поликов рано или поздно наступит. Но чанки это только отображение, в коде никто не мешает не разбивать дороги на куски и делать их настолько умными, насколько надо. Я немного о другом спрашивал. Хотя в гта как раз плейны с фурнитурой, буду пытаться брать с них пример.
>>716895 Короч запиздячил так - кидаю 4 рейкаста по вектору скорости, прибавляя к нему Vector3.up/down/left/right помноженный на 3. Вот, всё вроде пиздатенько, и новые геймобжекты не наплодил.
>>716992 Мне кажется ты без этого намусорил. Даже если ты в Update вызываешь функцию Crouching, то какой смысл создавать переменную вне проверки, и делать изменение высоты вне проверки, если есть такая возможность, что кнопка не зажата.
>>717000 1) Зачем создавать переменную постоянно? Создай переменную и присвой ей значение на старте. 2) Почему ты в проверке на нажатие не можешь выполнять свой Lerp?
>>717000 Плюс с чего ты решил, что Lerp не будет работать, когда ты кнопку отожмешь? Ты изменяешь isCrouching, а проверяешь newHeight. Поработай получше над своим кодом, логику всю прочухай, а то пока нет логики в твоих строчках.
>>717006 А, тут я затупил, переменная же постоянно новая создается. Моя единственная притензия - создание постоянно новой переменной + постоянное использование Lerp'a (в прошлом случае), хотя можно перенести в проверку.
>>717146 Спасибо >>717146 >>716906 >>716887 А мне вот интересно, на сколько безопасен в плане таких вот взломов айфон? Вот с андроидом мне примерно ясно, а продукция эпл?
>>698843 (OP) Вот я хочу сделать меню выбора уровней. И тут возник вопрос. Сами уровни-то как лучше хранить? Допустим это сериализованные данные. Текстовые файлы. Просто их в Resources побросать? А потом пробегаться читать их и создавать по кнопке на каждый уровень в меню? А если их много? Например несколько сотен. Они же все будут в памяти торчать? Можно как-то сделать так, чтобы подгружать не более одного ассета за раз? И можно ли сделать так, чтобы не подгружая их все, уже иметь в распоряжении какую-то инфу о них (ну там номер уровня, брифинг, картинку), а потом уже подгружать остальное при собственно выборе уровня? Быть может, нужно делать уровни адресеблсами?
>>717247 Почему у меня такое чувство, что ты поехавший? >Сами уровни-то как лучше хранить? Все твои уровни - это заранее созданные и настроенные юнитисцены. Нужно выбирать между сценами? Создаёшь скриптейбл объект, в нём поля для названия уровня, картинки уровня и ссылки на сцену. Всё. А ещё лучше создать тип скриптейбл объекта для каждой сцены и ещё один скриптейбл, в котором хранить ссылки на все объекты сцен. И в память грузится только твой текст, картинка и ссылка на сцену.
>>717257 >Все твои уровни - это заранее созданные и настроенные юнитисцены Не обязательно. >>717257 >в память грузится только твой текст, картинка и ссылка Нуфаг.
Посоветуйте какой-нибудь проект, который вы где-то взяли (купили или просто скачали) и он вам понравился по архитектуре, по работе между классами, по объявлению переменных, к примеру нет какой-то загруженности и всё распределенно между классами, переменные вынесены куда-то в отдельную часть, UI подгружаются из каких-нибудь настроек и все в таком духе. У меня просто проблема, я могу сделать любую логику хоть в одном классе, но выглядит это всё убого и не красиво, хотелось бы научиться работать именно по красоте, для команды.
>>717809 Таких нет. Смотрел таркова, фантазмафобию, даже хартстоун, у всех этих проектов какая-то своя хотел бы сказать костыльная архитектура. Тебе просто нужно начать делать и все, а с опытом поймешь для какой игры какая архитектура лучше подходит
>>717883 Как ты посмотрел? Я ничего против костыльной архитектуры не имею, я наоборот хочу научиться делать всё хоть в какой-то архитектуре. Я говорю о том, что меня бесит, когда у меня 20 gameobject'ов в испекторе висит, и в них можно запутаться, я хочу вынести их во что-то отдельное, я хочу сделать код более менее универсальным под задачи проекта. То есть меня интересует чистота кода, а не какая-то эфимерная богом данная архитектура. Это же как-то называется, когда ты сидишь и продумываешь архитектуру. Есть у нас два таких класса, они взаимодействуют с таким-то по такой-то цепочке. Вот это вот всё как планировать, как научиться, если как я сказал выше, я могу весь проект в один скрипт уложить, а хотелось бы что-то более масштабное попробовать.
народ, подскажите, в какую сторону копать и что изучать для игры с видом сбоку наподобие This War of Mine/Lone Survivor? т е минимум физики, но горсть интерактивных объектов/вейпоинтов с зачатками стелса и, опционально, многоэтажными картами до этого был опыт в аркадах/платформерах, даже в паре джемов участвовал, но именно адвенчуры еще не пробовал делать
пикрелейтед, чтобы было понятнее, на что хочется чтобы был похож результат
Надеюсь меня тут за такое не забанят. У меня есть заказ, написано уже где-то процентов 20, нужно его доработать, работы примерно на неделю, плачу 15 тысяч. С какими-то вопросами могу помогать, нужно ваше желание разобраться в коде (строчек 300 несложных), навести немного порядок и умение писать логику приложений, само по себе приложение не сложное. Оплачивать могу хоть каждый день, после согласования с заказчиком. Писать в тг @nulcomp. В планах найти небольшую команду разрабов. В ходе разработки могу помочь или обсудить решение.
>>718302 Чел, так тут по сути с нуля сделать и всего 15 тысяч, ты серьезно? Ты поподробнее расписал бы что там, а то может я зря с такого жлобства охуевать начал
>>718368 Там всего понемногу. Я знаю, что тут разные люди сидят. В прошлый раз я платил 15к за пару часов работы, и то люди не согласились, хотя сами в своем же проекте ради интереса это реализовали. Мне нужен именно человек с навыками ниже среднего. Для какого-нибудь школьника 15к за неделю получить это нормально, если учитывать что при этом тебе не нужно быть Васерманом.
Сап, что вот это за хуйня? Возникает от любой камеры, и в игровом режиме, и в неигровом. Как будто камера кидает тень вокруг себя. Она разве не прозрачная должна быть? Раньше такого не было, появилось ВДРУГ и без особых причин на то.
Почему эта шляпа вешает Юнити наглухо после нажатия mouse2? Изначально того что обведено красным не было, а вместо обведенного синим было то что выделено желтым. Но в такой конфигурации камера доходя до 90 или 0 просто застревала там насовсем и уже никуда не поворачивалась из-за того что значение угла немного перескакивало эти отметки на какие-то незначительные доли. Я решил тупо округлить теперь вообще всё виснет. Как правильно сделать? Сразу говорю я полный нуб в программировании, хотя по скрину наверное и так понятно.
Делаю спрайтовый шутан, есть следующие вопросы: 1) Как натянуть текстуру так, чтобы на всех объектах повторяющийся паттерн имел одинаковое кол-во пикселей? Сейчас получается, что он дублируется, но где-то растянут, где-то наоборот сжат (см пик) 2) Есть враг, который по определенной логике поворачивается и идет всегда прямо. Как сделать так, чтобы дочерний элемент со спрайтом и анимацией все время смотрел на игрока? Сделал через Looakat: var look = new Vector3(this.player.transform.position.x, transform.position.y, this.player.transform.position.z); this.transform.LookAt(look) Но проблема в том, что ротейшн родительского объект все сбивает
Здорово ребзя, а не видели ли вы примеров реализации сохранения неограниченной вложенности в json, как в Таркове обвес на стволах матрешкой. Для простоты пусть будет некий рут объект, начало дерева. На нем несколько слотов для размещения обвеса, в каждом из этих слотов стоит или не стоит модификация определенного типа, которая сама может содержать несколько слотов под модификации, и так далее. Просто сериализовать не выходит, лимит сериализации не дает, и справедливо, потому что может получиться бесконечная петля вложенных объектов.
Нужно представить дерево объектов в виде линейного массива, но тут я чет расшибаюсь о то, что даже сами хранимые объекты неоднородные. Есть две сущности, сама деталь и слот под нее. На детали несколько слотов, в слоте деталь с несколькими объектами. Как это записать в линейном виде? Ведь для детали родительским объектом будет не сама родительская деталь, а слот в ней. И, что важнее, как потом это обратно из жсона парсить.
Задача, конечно, непростая, может хоть подскажете, в каком направлении копать.
>>718720 ну, об этом и писал > до этого был опыт в аркадах/платформерах, даже в паре джемов участвовал
вот с инвентарем/стелсом и подобным особого опыта не было (не считая того, что в одной из моих игр у врага перед лицом была Trigger-область, до активации которой он не начинал атаковать ГГ)
>>718730 Так в чем вопрос то? В интернете туториалов для инвентаря полно, гугли и делай. Но у тебя проблема явно в том, что ты не знаешь, что в игре будет. Вопрос "как сделать игру" очень странный. Подумай над механикой, выпиши, какие функции в игре будут и как вообще они будут работать. Потом уже пиши код. Делать без четкого плана - очень плохая затея. И в логике будет куча дырок, ТК не будет стройной картины мира + сто раз переделывать будешь
Аноны, как вам идея делать кроссплатформенные приложения а-ля нативные? Сейчас ведь можно повторить все элементы нативных на юнити ui, использовать OnDemandRendering апи чтобы не рендерить экран каждую секунду. Зато миллион ассетов в помощь и простота разработки. В отличии от нативной разработки много плюсов.
>>718637 1 - это называется UV карта, у тебя 3 стула: стул №1 - для каждой стены создавать материал и выставлять там tile руками, геморно и костыльно делал так когда только-только юнете изучал стул №2 - создать шейдер и использовать world position UV, чуть сложнее и тоже придется создавать материалы с оффсетами стул №3 - создавать мир не кубами, а правильной моделькой в 3д редакторе и руками создавать UV тайл самому 2 - у тебя есть GO - враг, дай ему дочерний GO и добавь туда спрайт, потом вызывай LookAt именно у дочернего
>>718650 Делай проще, пусть у тебя будет условный класс: class InventoryItem { string Id; string Parent; ... любая твоя инфа } Как ты мог догкадаться твой инвентарь должен храниться одним полем InventoryItem[] items; Сложность в соединении айтемов, в Parent нужно передать Id родительского, таким образом ты напишешь больше кода, но можешь сделать сериализацию в любую глубину.
>>718704 В иерархии слева от названия есть глаз и рука, тыкни на руку и тогда канвас будет виден, но при этом игнорироваться при клике мне тоже часто мешает
>>718809 Делал так 10 лет назад, в те времена мне отказали т.к. простая логин форма с 2мя текстурами весила 20мб, а такое же приложение на нативной яве 1мб. В целом если делаешь для себя - можешь, почему нет?
>>718995 Спасибо >2 - у тебя есть GO - враг, дай ему дочерний GO и добавь туда спрайт, потом вызывай LookAt именно у дочернего Так я так и сделал. Но если меняется ротейшн у родительского го, то у дочернего тоже и лук эт почему-то не взлетает
Привет, юнити тредик! Столкнулся с такой дилеммой: продолжать пилить свой 3й проект, или читать техническую литературу про паттрены проектирования, SOLID и прочие ООП. С одной стороны в юнити уже более-менее ориентируюсь и не хватает знаний архитектуры. С другой - практики тоже не особо хватает. Как бы ты поступил на моем месте?
>>719045 >Что значит не взлетает? Спрайт не смотрит на игрока. >Я вообще думал ты вызываешь LookAt в апдейте каком-нибудь Так и есть. Изначально есть отдельны компонент на объекте со спрайтом, которые его поворачивает каждый апдейт через lookat - работает ок. Далее я добавил на родительский объект компонент с движением(См скрин). Спрайт перестал на меня смотреть. Я списал это на то, что апдейт спрайта может вызываться до апдейта родителя, который переписывает ротейшн. В итоге я пытался в родительском объекте в старте 1)найти подобъект и сделать лукэт для него и 2) найти компонент через GetComponentInChild и вызвать метод в нем. Оба варианта провалились. Сейчас еще посмотрю, мб где ошибся
>>719068 >>719045 Блин, перестал работать и сам компонент с лукэт без движения. Пересоздал объект, назначил компонент заново - все ок(во всех трех вариантах). Так и не понял в чем дело было, объекты одинаковые были, вроде как.
>>718995 >Делал так 10 лет назад, в те времена мне отказали т.к. простая логин форма с 2мя текстурами весила 20мб, а такое же приложение на нативной яве 1мб. >В целом если делаешь для себя - можешь, почему нет? За 10 лет многое изменилось. Сейчас игры по 1.5 гб миллионами качают. То есть для мессенджера это не подойдёт, потому что да, вес больше и скорости открытия нет. Но для чего-то, не юзающего нативные штуки типа камеры, очень даже.
>>719149 ps Хочу сделать отдельную сцену для главного меню. Сначала хотел ограничиться одной, но когда запускаю игру (в смысле, жму на ярлык с игрой), то приходится ждать секунд 20, то есть, загружается вся игра. Я хочу чтобы сначала быстро загрузилась меню, и только потом, в зависимости от того, что выберет игрок (новая игра, продолжить, загрузить), загрузить всю сцену игры. Сцена для игры только одна, игра небольшая.
>>719152 Картинка для наглядности. Я могу открыть только одну сцену, кликнув на нее в ассете, и только после этого она откроется и покажется в иерархии. Я бы хотел чтобы в иерархии были сразу две.
Кароче, такая проблема. Есть персонаж с CharacterController. Когда я его двигаю в Update() функцией Move, если игра на мгновение зависает, после развисания, персонаж резко рывком движется вперед. А если в фикседапдейте, то все нормально. Но, мне нужно двигать в обычном апдейте. Как пофиксить?
смотрел на ютубе небольшой лецплей игрухи с итчи.ио и там на персонаже очень любопытный шейдер когда он превращается в другого персонажа. есть идеи как подобные вещи вообще делаются? не похоже что там просто случайный дисплейсмент вершин, а происходит именно какая-то пикселизация
переменные тебе разделил чтоб было понятно что и в какой хранится. не уверен что это решит твою проблему, но по крайней мере вопросов что у тебя там за лерп не будет возникать. дай знать если это поможет или нет
>>719185 Короче, лерп у меня для того, чтобы персонаж при развороте в противоположную сторону сперва до нуля замедлялся, и заново разгонялся (ну ты понял, типа идет влево, игрок нажимает стрелку вправо, персонаж не резко разворачивается и с той же скоростью идет вправо, а сперва замедляется). Но сейчас я потестил и понял, что проблема именно в лерпе. Придумаю что-нибудь другое.
где _directionRatio это значение от 0 до 1 при которых 0 это твой персонаж смотрит в противоположную сторону, а 1 это твой персонаж смотрит в нужном направлении. тогда постепенно разворачиваясь он будет ускоряться
собственно при помощи Vector3.Dot мы вычисляем на сколько вектор forward твоего объекта и нужное направление схожие. проблема в том что Vector3.Dot возвращает 1 если вектор смотрит в одном направлении и -1 если в противоположном. посему там есть Mathf.InverseLerp есть который возвращает всегда от 0 до 1 в заданном промежутке (-1, 1)
Жму "Новая игра", выполняется такой код Time.timeScale = 0; SceneManager.LoadSceneAsync("Game");
Time.timeScale = 0 я написал, чтобы игра не сразу началась, а после того, как я нажму пробел, типа, я готов. Во многих играх такое сделано.
В принципе, работает, но один Update в загруженной сцене все же срабатывает (судя по дебагу в консоле). Как фиксануть это? В принципе, не мешает, но может так не должно быть, а значит, где-то косяк закрался, который может всплыть в какой-то момент
>>719240 потому что ты выставляешь её true, а потом сразу же после этого делаешь проверку является ли она true и если true, то меняешь на false. не могу удержаться и не добавить что ты идиот
>>719179 Возьми шейдер PSX называется, так вот этот шейдер делает перемещение вертексов и искажение UV, в этом шейдере этот параметр offset (условно) стоит 0.5, а на твоем видосе его меняют до 10 и просто меняют модельку. Тааак чтоо ищи шейдер и микро-изменение тебе поможет.
П.с. можешь morphing погуглить, там прям все меняется и более эффектно чем тряска вертексов.
>>719241 Чувак, я полный нуб в программировании, перед новым годом начал смотреть туториалы, так что это нормально. Т.е. Оба эти if выполняются одновременно что ли а не последовательно? Или GetKeyDown не дискретный а продолжает выдавать true некоторое время? Я просто думал, что GetKeyDown сразу же становится false.
>>719245 Хотя буду рад если поясните максимально примитивно за то в каком порядке что выполняется. Ибо хуйню я пофиксил, но вот эти вопросы>>719243 остались.
>>719245 у тебя у конкретного кадра выставляется значение Input.GetKeyDown(KeyCode.Space)
как только исполнился весь update, будет выполняться следующий кадр и он уже будет снова опрашивать инпуты и узнавать значения для них. в рамках одного исполнения метода Update инпут не поменяет своего значения. если ты переменную прочитал, это не значит что она после этого должна измениться
и да всё что тебе надо это if-else сделать или ещё короче:
if (Input.GetKeyDown(KeyCode.Space) == true) { isGamePaused = !isGamePaused; }
тогда каждый раз при нажатии пробела твоё поле isGamePaused меняет своё значение на противоположное
Анон, помоги тупому нуфагу. У меня есть метод, который ищет ближайший объект к игроку и возвращает его геймобжект для дальнейших манипуляций. С геймобжекта я беру компонент класса, которые реализует интерфейс IInteractable. Вопрос: как мне брать эти самые классы без конкретики называния каждого класса этого интерфейса? Я пытался как-то через абстрактный класс и вызывать его перегруженный метод, но с помощью дебага понял, что у меня переменная с ссылкой на интерфейс отдаёт null чтобы я не делал. Хоть наследованием, хоть интерфейсом, всегда null, хотя объект оно находит, а вот дальше тупо не могу понять как мне взять все классы этого интерфейса, если так можно сделать. Юнити 2019.4.9f1 версии лтс
Сап двач, подскажи плиз как сделать правильно с точки зрения архитектуры и здравого смысла.
Есть префаб, который должен кликаться. Я создаю в рантайме какое-то кол-во префабов с уникальной айдишкой. Потом после клика на один из префабов я хочу вызвать функцию OnClick в другом скрипте, который относится к камере.
Я пока не понимаю как правильно это сделать. На ум приходит следующие решения:
1. при создании префаба передавать ему делегат, который тот будет дергать с нужным параметром. 2. префаб ищет камеру сам и вызывает там какую-то функцию.
Оба способа мне не очень нравятся, но возможно придется выбрать что-то. Так вот вопрос, если способ сделать это элегантнее. Если нет - то что принято в мире юнити?
>>719408 Первый вариант быстрее по производительности, да и чем он тебе не нравится, хорошее решение. Но если у тебя вся сцена - объектов 10, то зачем тебе эти делегаты, находи камеру в скрипте префаба и не еби голову. Событие клика, как и практически любой инпут, происходит относительно редко, на производительности это не скажется.
Пилю такой вот инвентарь. И столкнулся с проблемой - при перетаскивании в eventData.position даются координаты относительно экрана, а мне нужны локальные координаты моей сетки инвентаря.
Самый прикол в том, что у самого таскаемого объекта в RectTransform координаты меняются правильно, локально, относительно родителя. Поясните посоны, не понимаю.
>>719301 Если я правильно понял - всякие GetComponent<MyAwesomeInterface>() работает, меня даже удивило что юнете может искать интерфейсы, так что скорее всего ты либо получаешь не тот объект, либо ищешь его там, где его нет (попробуй GetComponentInChildren<>)
>>719350 Скорее всего никак, неправильные флаги выставил, убери галку с Occludee Static у своих дверей. Если не нравится юнитевское, пиши свое или в ассет сторе бери, видел там минимум 2 решения самописных
>>719496 RectTransformUtility.ScreenPointToLocalPointInRectangle возможно это поможет, до конца не понял что ты хочешь, получить координат пикселя в айтеме или сам айтем
>>719301 Я, честно, не оч понял, что ты хочешь, но могу свой опыт описать, мб, поможет: У меня есть ActionManager с методами, например PrepareAction( IInteractable action), InvokeCurrentAction(), CancellAction() и полем IInteractable currentAction. Интерфейс IInteractable содержит метод Perform(). Когда игрок касается какого-то игрового предмета, в ActionManger отправляется сообщение с классом действия, который реализует интерфейс IInteractable (Действие можно получать через GetComponent<IInteractable>(), например. У меня отдельный компонент для interactable объекта, а сами конкретные действия реализуются разными скриптабл обжектами, которые пихаются в serializedfield класса IInteractable). В методе PrepareAction( IInteractable action) (это может быть и свойство, кстати) прилетевший класс IInteractable сохраняется в IInteractable currentAction а также дергается UI класс, который отображает отметку на экране, что доступно действие. Если игрок выходит из зоны действия интерактивного предмета, то триггерится CancellAction(), который отключает отметку в UI и чистит currentAction. Если же игрок нажимает действие, то ActionManager запускает InvokeCurrentAction(), в котором просто делает для IInteractable currentAction.Perform(); ActionManager ничего не знает о том, что конкретно будет делать IInteractable в Perform() - его задача подготовить, соообщить о том, что действие готово и далее либо запустить, либо отменить действией. Само действие в своем конкретном перформ уже описывает, что ему нужно делать. Мб какие-то отдельные объекты дергать, мб еще что-то. Например, у меня есть действие, которое просит в персонажа произнести (отобразить текст) речь, есть действие, которое передает в инвентарь конкретный предмет и удаляет исходный.
Кто-нибудь использовал официальный юнитивский Localization package (он сейчас в версии 0.9)? Назначил я в нем разные тексты для разных языков, в эдиторе все переключается как надо входящей в пакет менюшкой в углу окна, а как собственно в игре язык переключать?
>>698843 (OP) Кроссреференсы это нормально вообще? А то чет иерархия по пизде идет.
Вот допустим у меня некая хуйня Y1(допустим куб контролируемый игроком), в текущий момент управляется хуйней X1(игрок1)
Я хочу процессе, менять и куб и игроков. При это не только игрок отправляет (знает о) кубу данные и команды, но куб иногда тоже хочет что нибудь сообщить. На первый взгляд когда игрок берет под контроль куб, он еще и сообщает кубу, что ты управляешься теперь мной.
Но это пахнет говном. По хорошему надо бы что бы куб имел геттер этих данных и те кому надо их забирали. Но блядь код игрока перераздувается еще и опрашивальщиками этой хуйни. Их надо выводить в другие скрипты и получается паутина...
Захотел попробовать покавырять Юнити. Сейчас не могу просто добавить в него модель из 3Д Макса. Вернее куб добавляется но без текстур. Я сейчас ставил новый макс и там работа с материалами выглядит немного иначе чем в старых версиях, к которым я привык. Но я натянул текстуру на модель. При экспорте хочу поставить галочку но потом выдает ошибку и такая модель получается без текстур. если галочку не ставить, то ошибки нет, но и текстур снова нет. Пробовал гуглить ошибку но как-то прямо мою проблему не выдает поисковик. Может тут скажут что делать? Или может версия макса фиговая? Или может вообще блендер или что-то другое использовать?
Хотел сделать простую ориентировку в пространстве, в итоге уже какой день офигеваю с ротации.
.forward как и .right не работают как надо
.Rotate() не меняет оси объекта? Что? Это баг что ли, как некоторые люди на форуме жаловались, или что? если так то понятно почему оси не работают
при определенных настройках некоторые оси даже меняются, да вот только классические .forward * speed все равно нихера не работают
Я уже перепробовал и все кватернионы(изменения 2ух осей также меняют и третью), и относительность пространства, и темы все на 20 раз перечитал, везде фигня какая-то. Гайды уровня "я сам не знаю как работает эта тема, но я придумал бесполезные костыли для себя которые больше никому не помогут так что гг".
Что может быть проще концептуально: двигаешь мышку - по изменению осей меняешь ротацию в сторону - относительно этой ротации двигаешься вверхнизлевоправо. И никаких ограничений, никаких таргетов, никаких костылей. Но где это??
Я уже кукухой скоро поеду. Все темы кажутся бессмысленными, и даже доки мало чем помогают.
>>719841 Я текстуру отдельно кладу в юнити рядом с моделькой, потом создай новый материал your-model.mat и туда в MainTexture перетащи свою текстуру. Материал в 3й вкладке модельки нужно проставить и будет работать. там больше способов как выставить текстурку для модельки
>>719905 >>719905 Да, я читал про этот способ и пока я только-только начинаю мне его хватит. Но что если у меня сложная модель с 10 текстурами и разными материаламми. И таких моделей много. Это же гемор сначала в максе назначать, а потом в юнити. Плюс куча файлов вместо одного. Вроде и сделали вариант экспорта в одном fbx, а вроде он нихуя не работает.
К сожалению я такой человек, что трудности меня сильно демотивируют. Особенно когда речь идет о чем-то, что должно делаться одним нажатием кнопки, а приходится пердолиться. Жопа горит как пионерский огонь с таких вещей.
>>698843 (OP) Сап, аноны, в общем нужна ваша помощь.
Кратко:
Пилю по гайду игру.
Есть два скрипта, в нем есть одна переменная с именем условно Peremennaya и один IEnumerator с именем условно ienum().
Автор зачем то пересоздает заново в другом скрипте эти же методы. Я хочу их просто вызвать в другом скрипте.
Для переменной я в первом скрипте объявил ее паблик, а во втором я сначала объявил переменную public Script1 peremennaya и вызвал ее как peremennaya.Peremennaya - все вроде компилится без ошибок. А вот с нумератором я не понимаю, как его вызвать.
Собсна, прошу от вас помощи как это сделать грамотно, и во-вторых, сказать, правильно ли я произвел вызов переменной по описанному мной способу? Заранее спасибо
Короче нагуглил такую хуйню, результат на скрине (нумератор объявил пабликом в первом скрипте). От вас просто прошу оценить качество решения. Заранее спасибо
>>719997 Старайся делать 1 материал для модельки, это и удобство и перфоманс (т.к. каждый материал создает DrawCall и внутри будто рендерит как отдельный объект).
А вообще понимаю о чем ты, из-за проблемы (и моей лени делать модельки) я уже 10 лет не могу ни одной игры доделать.
>>720059 Книжки для червей. Я уже сделал, разобрав пару ассетов. Это тупая хуйня на костылях, работающая через жопу, ну или доки кто-то через жопу пишет. К ротации применяются разные методы чтобы они не пересекались и только тогда она блять работает. Я ебал.
Предположим я хочу сделать майнкрафтоподобный графон, и чтобы в кадре было ну очень дохуя всего анимированного. При этом анимации примитивные. 1. Если скажем у меня есть некие враги, их мало видов, но при этом они существуют в больших количествах. Как в этом случае можно все сделать максимальео эффективно в плане производительности? Вот например мне кажется можно нагенерировать мешей под каждый кадр анимации(ведь вся модель из 6-10 кубов состоит, то есть треугольников там очень мало) и поместить это в видеопамять и отрисовывать нужный буфер когда надо. Это можно в юнити сделать? И норм ли будет?
2. А если каждый куб в каждом монстре анимировать отдельно - понятно что это можно сделать геймобжектами, но тогда производительность будет в говне, да и 99% функционала геймобжектов тут вообще не нужно будет. Может есть альтернатива чтобы я сам мог рисовать что хочу как хочу? Ведь условно 10 кубов на монстра, если 100 монстров в кадре - это 1к дроуколлов при такой реализации для разных трансформаций. Норм же вроде? Или нет? При этом я смогу еще и процедурно что-то интересное анимировать прям на лету, в отличии от первого подхода.
3. И теперь другая ситуация - вот есть у меня что-то существующее в единственном экземпляре. Предположим это меш из большого числа треугольников и я хочу его процедурно анимировать - тогда мне каждый раз строить новый меш и обновлять его как обычно, типа свойство меша заменять как в гайде в документации юнити написано?
4. А может мне стоит погуглить геометрический шейдер для чего-то такого?
Ну и может есть что почитать по поводу анимаций и вообще обмене данными между видеокартой и процессором?
>>720125 как раз недавно на хабре читал статью о том как чел жаловался на UnityEngine.Random. основной его тезис был в том что это статический объект и если ты задашь ему сид, то он будет одинаковый на весь чёртов проект, что довольно скудно и в целом рекомендовал юзать его самописный суперпростой и лёгкий рандом. я вот сиды не юзаю в рандоме, но юзаю вспомогательные методы типа Range которых в System нет. System тупой и ест память
>>699449 Сынок, это надо знать! Впрочем аргумент инвалид. Начиная с восьмёрки майкросовт забило хуй на это всё, из-за чего крупным корпорациям например пришлось менять целый парк принтеров, ибо старые дрова нахуй пошли, я дро их не поддерживает, разрабы принтеров тоже.
>>720145 Начал вкатываться в ваш Юнити. Сейчас уже третью игру пилю (в основном говно из спрайтов) за 2 недели. И при создании нового проекта хаб начал мне создавать новый проект внезапно, но предварительно решив обновиться и докачать 4 гига какого-то говна из интернетов. Уже два часа сижу и жду пока оно создаст ПУСТОЙ проект. Отсюда вопрос. Часто у вас так? Это баг или фича? Хаб новый, всё установлено не сичтую винду 2 января, обновления все скачал тогда же. Интересно что он там качает и нахуя, если я его об этом не просил. И почему нельзя это следать в фоне например пока я Кирилю своих эльфов и грабить корованы? А что если я ААА студия? Работа встанет на 1 день потому-что юнити стреляет мне в ногу?
>>720148 Я хз, кстати даже что там реально качатеся, ибо хаб не показывает. Просто кинуло окно "Я качаю апдэйт". И всё. В итоге ребутнулся, оно докачало быстро и запустило. >покажи что пилишь Да нечего показывать пока. 2 недели как вкатился. В планах сделать что-то типа Марио или Чип и дэйла в 2d. Но обучение мне даётся как колхознику нейронные сети.
>>720151 Допилил. Но показывать стесняюсь, это скорее проекты для обучения чем "Я ща это зарелизю в СТИМ!!!". Например текстовый квест с вариантами диалогов. Там "Играть" минут 5. Или 1 левел товер дефенс, в котором иногда мобы идут не по маршруту.
>>698843 (OP) Чап, обьясните как работают платные штуки для игры. Например купиля тайлсет. Прям за деньги, официально, вставил его в Юнити, А сейчас читаю что в условиях использования я не могу его вствалять в проекты которые пойдут в сторы. И зачем такое вообще надо тогда? Зачем такое покупать? Кто этим пользвется? Что будет если я всё равно вставлю? Меня возьмут за жопу?
>>720068 1. через ECS можно даже 10к сложных моделек рендерить и полчуать 100fps+. Можешь начать копать в этом направлении либо - анимируй только тех кто рядом т.е. если фигура далеко - рендери её одним объектом, так тоже никаких проблем быть не должно.
2. Можешь пойти сложным путем и написать свою систему анимаций (как в майне), менять вершины кодом, будет 1 dk и 1 меш. Прикрутишь ecs, будет еще лучше. Обжекты не просаживают особо перфоманс, можешь попробовать решить свою проблему в лоб и просто посмотреть в профайлере что будет жрать перфоменс.
3. Типа того, указываешь оригинальный меш, вызываешь у него GetTris GetVerts и весь этот мусор, делаешь new Mesh() и ему вызываешь SetTris SetVerts. Если сохранишь результаты GetTris - то производительность не должна пропасть.
4. Ты можешь нагуглить плавные простые анимации вроде "покачивания листвы", тебе нужна конкретная анимация конкретных вершин, а для такого нужно хорошо разбираться в шейдерах и много времени потратить на это, я бы не советовал.
>>698843 (OP) Сап двач. Где можно заказать услугу, чтобы моё приложение скомпилировали нормально под Google Play? Я уже просто заебался с этим мучаться. Мне просто хочется выложить приложение, которое я делал несколько лет на Google play. Я готов заплатить за это деньги
И во-вторых что за тупой вопрос про правильность вызова переменной? Вызвалась? Ну так чего тебе еще надо? Ты про расположение функционала? Ну так архитектура это ТВОЕ епт субъективное решение, никто не придумает за тебя как ТЕБЕ надо.
Я могу ошибаться, но тебе надо подтянусь основы прежде чем задавать вопросы в Юнити треде. Зайди что ли в C тред.
Привет гд-аноны, у меня возникла ошибка во время создания своей игры. А именно: есть скрипт обработчик свайпов, он обрабатывает свайп по экрану и определяет его тип влево, вправо, вверх или вниз был сделан свайп Также есть скрипт движения игрока который принимает эти типы свайпов и на их основе сдвигает игрока. Ошибка возникает когда я пытаюсь перезапустить сцену или запустить след уровень:
MissingReferenceException: объект типа Rigidbody был уничтожен, но вы все еще пытаетесь получить к нему доступ. Ваш сценарий должен либо проверить, является ли он нулевым, либо вы не должны уничтожать объект.
>>720396 C одной стороны мне иногда хочется фейспалмом лицо пробить от нашествия кириллов. А с другой стороны мне греет сердце то, что я все таки понимаю вещи чуть лучше, чем некоторые.
А теперь по делу. Зачем ты задаешь вопрос в треде, когда тебе сам юнити УКАЗАЛ на проблему и дал тут же ее РЕШЕНИЕ? кста это платиновый вопрос с которого уже бомбил другой анон время назад
а)Делай проверки на существование объекта б)Ищи где у тебя уничтожается объект, ты стучишься в несуществующую дверь
>>720351 >А МОЖНО НЕ ОРАТЬ? Да я охуел просто всем помогли а меня обошли
Так у меня вопрос не по самому кодингу, а по тому, как мне скрипт, привязанный к одному объекту в одной сцене, вызвать в другом объекте другой сцене. Гайды, которые я искал - не помогли, он их не видит, или я правильно GameObject вызвать не могу, а ты мне просто определение IENumerator-а скинул... Спасибо конечно, но я не могу нужной инфы найти. А так, на шарпе я вроде кодить БАЗУ могу
Короче, в первом скрипте Achievements.cs есть метод public IEnumerator FirstFarm () и переменная [SerializeField] public bool isUnlocked;. Во втором MainMenu.cs они у меня заново созданы. Первый скрипт привязан к объекту Main Camera в одной сцене, второй к к объекту Main Camera в другой сцене. Я же хочу сделать так, чтобы второй скрипт видел метод и переменную из первого скрипта, но не могу это сделать
>>720492 >всем ответили А никто тебе и не обязан, лол. Это тред не про "сделайте за меня домашку". Если ты посмотришь на этот тред, то то он состоит на 70-90% из кирилов, пары стремящихся челиков - только эти и могут по доброте душевной ответит на проблему с которой они сами сталкивались. Нашествие кирилов такое глобальное что все шарящие уже давно ушли или таят молчание изредка когда уж совсем бомбит от тупости намекая на косяки.
В какую российскую компанию вы бы устроились, если бы в перспективе хотели бы стать Dungeon Master'ом, город не принципиален. Я вот рассматриваю Кефир, который тюрягу для ВК сделали, и еще кучу интересных проектов на Unity сейчас разрабатывают. Хочется найти такую, подойти под ее требования, и дальше стремиться и развиваться. А если вы против такого, то напиши как по вашему мнению или опыту стоит всесторонне развиваться Unity разработчику, чтобы любая компания через год этих тренировок взяла вас на тим лида или синеора.
>>720598 Ты хочешь начать ненавидеть делать игры? Тогда делаешь всё правильно.
>>720544 кодманки на ютубе на ецс уже несколько игр сделал и запилил сотни гайдов. Про другие ничего сказать не могу. Для начала можешь использовать джобы и бурст без ECS.
>>721099 >Какую актуальную версию ставить? 2020.2.1f1, да? Да. >Когда примерно стоит ждать LTS выпуск 2020? Скорее всего весной. > И стоит ли ждать? Чего ждать то, потом обновишься и нормально.
>>2020.2.1f1, да? >Да. Тут новые шаблоны для мобилок, документации на них не нашёл. Я как раз подумываю сделать игру под мобилки, начинаю с нуля. Стоит пробовать "Mobile 3D"?
>>721105 >Стоит пробовать "Mobile 3D"? Уже попробовал... Чёт не совсем то, чего я ожидал. Тут просто пара пакетов для логирования на андроиде и нотификаций, и всё, в остальном как обычный пустой проект. Может в настройках что-то особенное для мобилок настроено... Ладно, значит, придётся самому всё делать. Я надеялся на готовые приблуды для мобильного UI
>все пули будут разлетаться в четком порядке для заданного seed’a, >Как минимум - игроки заметят и в дело вступит эффект отмены. Что он имеет в виду? И с чего он приплёл "эффект отмены"? >Синдром отмены, реакция отмены, или состояние отмены, — реакция организма, возникающая при прекращении или снижении приёма лекарственного средства и проявляющаяся ухудшением состояния пациента (развитием симптомов или состояний, на устранение которых было направлено действие препарата, а порой и возникновением качественно новых симптомов или состояний, отсутствовавших у пациента прежде). Под синдромом отмены также понимается синдром, возникающий в результате прекращения интенсивного употребления любых психоактивных веществ, также называемый «абстинентным состоянием».
Вот, кстати, в Overwatch в одном из недавних патчей вообще рандомный разброс пуль полностью выпилили у дробовиков. Теперь все дробовики в игре разбрасывают пули чётким паттерном, его можно даже разглядеть, если стрелять в стену перед собой. Сделано это для удобства игроков, как я понимаю, или для баланса.
А ему видите ли "разброс пуль после каждой загрузки одного и того же сейва одинаковый", лол.
>>721268 отмена тут к тому что это влияет на погружение. овервоч это мультиплеерная состязательная игра, тут контроль играет важную роль и патч этот был именно для того чтобы уменьшить случайность. если ты играешь в сингл и видишь одни и те же паттерны везде это делает из симуляции аркаду
собственно автор в первом же абзаце предыстории тебе рассказывает в чём проблема. он хочет чтоб левел генерировался случайно, но управляемо (с возможностью указания сида), а поведение мобов генерировалось тоже случайно, но отдельно от левела
Подскажите как привязать состояние анимации к переменной. Есть фитиль горит ориентируясь на таймер хода, на таймере можно накрутить значение во время игры, нужно что бы фитиль тоже менял своё состояние вместе с таймером. Как то вроде мысли есть, но все они топорные.
>>721282 >делает из симуляции аркаду 1. Большинство игр - аркады, а не симуляторы. 2. Симуляторы должны быть детерминированными, в них нет места полному хаосу.
>он хочет чтоб левел генерировался случайно, но управляемо >поведение мобов генерировалось тоже случайно, но отдельно от левела Вот я не понимаю, зачем отделять мобов от уровня? Возьмём две игры:
1. Пошаговая аркада, где мобы ходят по клеточкам и паттерны легко увидеть. Если игрок загружает старый сейв, он ожидает, что мобы пойдут точно по тем же маршрутам, по которым шли раньше. Если они пойдут по новым маршрутам - это будет выглядить как "испорченный сейв". Просто представь, что ты сохранил карту, по которой летела пуля, а после загрузки этой карты пуля полетела в случайном направлении. Какой в этом смысл? Моб, который сидел в клетке А, перед сейвом собирался пойти в клетку Б, ему нужно было что-то там сделать. Если он после загрузки сейва пойдёт в клетку Б - это будет выглядеть так, будто бы игра не прерывалась. Если он после загрузки пойдёт в любую другую клетку - это будет выглядеть так, будто игра стёрла ему память, или это совсем другой моб, или он где-то гулял в промежутке между сейвом и лоадом и теперь у него другие планы.
2. Сложная реалтаймовая симуляция, где мобы могут гулять где-то по карте, пока игрок их не видит, заниматься своими делами и т.д. В такой игре игрок не сможет заметить паттернов, если не будет ходить по пятам за одним мобом и наблюдать, чем он занимается. Если вспомнить игры типа GTA - там пешеходы хотят по строгим маршрутам, но ты этого не заметишь, если просто пройдёшься по улице. Ты заметишь это только если будешь следить за одним конкретным пешеходом - в какой-то момент поймёшь, что он бессмысленно ходит по кругу. Следовательно, в такой игре вообще не важно, каким образом будут генерироваться решения ботов - детерминировано или нет. Но и в такой игре лучше, чтобы поведение было детерминировано. Допустим, ты послал бота за выпивкой, бот ушёл из твоего поля зрения, ты сохранил игру, снова загрузил её - и бот пропал, то есть не вернулся с выпивкой. Может быть, он решил пойти в театр или на работу, но про выпивку он уже забыл, ибо его поведение оказалось сгенерировано с нуля.
Итого - в обоих случаях необходимо детерминированное поведение ботов, связанное с зерном карты или, если точнее, с неким общим потоком симуляции игры, который мы сохраняем целиком, а не по частям. Я даже представить не могу ситуацию, где бот должен выбирать новое поведение после загрузки старого сейва...
>>721282 Единственное, в чём я согласен с автором статьи - это то, что плохо использовать генератор чисел, который используется какими-то плагинами и ядром движка. Если удалить такой плагин или обновить его версию, это повлияет на генерацию игрового контента. Если обновить ядро движка, это тоже повлияет на генерацию контента игры. Такого быть не должно, игра должна быть абстрагирована от стороннего ПО, тем более если это симулятор, а не "аркада". Но, если кто-то делает такую игру-симуляцию, он наверняка позаботится о создании собственного генератора чисел, а встроенный нужен только для быстрых тестов там, где не важна детерминированность игры.
>>698843 (OP) Аноны, подскажите пожалуйста литературы (?) по клиент серверным приколам в юнити. Читал обзорные штуки и понимаю на базовом уровне, пытался изучать mlapi, но потом узнал что есть и llapi и hlapi и что то приуныл, я думал будет технология уровня сокетов в дотнете, а тут что то довольно немало. Подскажите пожалуйста как это все изучать?
>>721449 >пытался изучать mlapi, но потом узнал что есть и llapi и hlapi и что то приуныл Так вроде не надо всё сразу учить. Я бы на твоём месте начал сразу работать над проектом и уже по ситуации изучать то, что нужно для решения конкретных задач. А вообще для юнити какие-то фреймворки готовые были...
>>721263 Я уже понят, что там отдельная сущность для теней. Просто может кто-то уже сталкивался с этим?
И ещё вопрос - я добавляю к объекту дополнительные трианглы (трава) геометрическим шейдером, но они пропадают, когда исходный объект выходит за пределы видимости. Вернее, когда из камеры пропадает специальный box видимости. Как его расширить?
>>721477 Так low\mid\high-level api это и есть фреймворки, я просто не могу понять, какие из них и как вместе юзать. Чтобы знать что применять для решения конкретных задач нужно немного о самих фреймворках иметь представление.
Я пытаюсь двигать риджит бади к объекту, но проблема в том, что когда он приходит к точке, то начинает дергаться туда и обратно, даже если я ставлю условие.
Vector3 dir = ((Vector2)destination - (Vector2)transform.position); dir = Vector3.Normalize(dir); if(Vector2.Distance((Vector2)destination,(Vector2)transform.position) > 1f) { rb.velocity = dir * 5f; }
>>721435 >1. Большинство игр - аркады, а не симуляторы. не знаю к чему ты клонишь. если большинство игр это аркады, а не симуляторы, то симуляторов не существует?
если ты загружаешь игру и видишь одну и ту же картину, то это не игра, а интерактивный фильм. в любом случае это не вопрос вкусовщины, а вопрос того что у тебя есть инструмент или же, как в случае со unityengine.random его нет. нужно тебе чтоб у тебя на всё приложение был один и тот же рандом, юзай встроенный в движок. не нужно? тогда пользуйся тем что автор тебе предлагает. то что там автор пишет отсебятину это, мне кажется, нужно игнорировать
к слову о gta. в red dead redeption ботам случайно генерируют довольно интересную модель поведения. если будешь за ним ходить, то он сходит на работу, потом пробухает деньги в выходные, ночью пойдёт в свой(!) дом спать и тд. но это уже офтопик который думаю тебе интересно будет ресёрчнуть самому
лол. пока я не замечал юнити научилось добавлять контекстное меню в элементы массивов для инспектора. чтобы вот можно было нажать на него и удалить, или сделать дубликат. только у меня до этого было куда более функциональное контекстное меню и оно теперь не вызывается! ну спасибо. не подскажете куда залезть чтобы оно не вызывалось?
>>721705 >low\mid\high-level api >Чтобы знать что применять для решения конкретных задач Ну чисто по названию понятно, что low-level - это когда тебе нужно иголкой в Ethernet-кабель тыкать, типа ассемблер, high-level - это когда тебе достаточно пропукать html-страничку из сети к себе в игру, всё остальное тебя вообще не парит, как будто ты на питоне пишешь, а mid-level - это где-то посередине. Вообще ничего не знаю про эти API, но я бы начал с high-level, потренировался запросы пропукивать, а на низкоуровневое переходил только если нужно какой-то оптимизированный велосипед запилить, которого в высокоуровневый не завезли. Вообще, изучать инструмент в отрыве от практики - бесполезная трата времени, нужно делать какие-то практические проекты, на практике осваивать применение каких-либо технологий. А то если только читать и ничего не пробовать своими руками, так и останешься теоретиком без практических навыков и понимания, что нужно делать на практике.
У меня character controller в такой ситуации (см. скрин) либо останавливается, либо с подергиванием все же идет вперед. Как я понял, коллайдеры столкнулись таким образом, что для игрока это и правда препятствие. Можно как то сделать что-то типа скольжения? На стенах, полу и косяке навешен mesh коллайдер. Чела двигаю с помощью CharacterController.Move
Ох уж эта юнити физика... Проблема еще была, что почему то персонаж подпрыгивал в косяке. Эта проблема оказывается решается установкой Min Move Distance = 0 (у меня было 0.001, дефолтное значение ) или Skin width = 30% от радиуса контролера (было 0.0001, тоже дефолт)
>>721717 У тебя что-то вроде пикрила происходит, я прав?
У тебя неправильное условие завершения. Правильным будет так: 1. Считаем дистанцию от объекта до точки назначения; 2. Если дистанция меньше одного шага (5f), смещаем объект на один шаг к точке, возвращаемся к п.1; 3. Если дистанция больше одного шага, смещаем объект к точке назначения и/или прекращаем передвигать.
А вообще вангую, что ты пилишь какой-то велосипед, и для твоей задачи нужно юзать встроенные функции.
>>721717 >>721909 А, я перепутал. Короче, у тебя происходит вот это: 1. Из точки А1 определяешь вектор направления в О; 2. Из точки А1 прыгаешь на 5 единиц в точку А2; 3. Расстояние от А2 до О больше 1 (около 2); 4. Из точки А2 определяешь вектор направления в О; 5. Прыгаешь из А2 в А1, т.е. снова на 5 единиц; 6. От А1 до О расстояние по-прежнему больше 1; 7. ??? 8. Замкнутый цикл!
Я с таким тоже сталкивался, но не на юнити. Не знаю, как это корректнее всего решить на юнити.
>>721908 Да, в мануле я прочитал и решил попробовать. Но, непонятно, почему у меня произошла проблема с застреванием с подпрыгиванием, если из коллайдеров у меня был только plane в качестве пола, и один дверной косяк с кастомным mesh коллайдером (пикрил). У коллайдеров идеально ровные поверхности коллайдеров. Без дыр, ям, трещин, выпуклостей. Почему персонаж начал скакать, как Ромка-попрыгун, и почему помогло уменьшение MinMoveDsiance и Skin Width я так и не понял.
>>721748 >симуляторов не существует? В симуляторах важна детерминированность событий. В аркадах на (не)детерминированность плевать.
>если ты загружаешь игру и видишь одну и ту же картину, то это не игра, а интерактивный фильм Ок, вот ты играешь в игру, на тебя бежит жуткий монстр, ты откладываешь кирпичей и закрываешь игру, предварительно сохранив её. Что ты ожидаешь увидеть, когда загрузишь это сохранение? Что монстр продолжит на тебя бежать оттуда, откуда бежал до сохранения. И если ты загрузишь это сохранение несколько раз без перезаписи, ты ожидаешь, что монстр будет каждый раз одинаково на тебя бежать. Потому что это один и тот же монстр, с одним и тем же мозгом, который принял одно и то же решение сожрать тебя, и решение это он принял до того, как ты сохранил игру.
Будет крайне нелогично, если игра ВДРУГ решит после загрузки сохранения удалить этого монстра, развернуть его в рандомном направлении или сделать ещё что-нибудь рандомное. Если она это делает и ты несколько раз загрузишь одно сохранение, ты заметишь, что монстр каждый раз выбирает рандомную стратегию поведения, ломая саму концепцию "сохранение состояния мира". Первая вещь, которую ты должен после этого сделать - создать issue с заголовком вроде "баг: поведение монстров не сохраняется". Или написать на почту разработчику. Или, если ты агрошкольник, написать гневный отзыв в стиме "эта игра даже не умеет сохранять себя!!1" - что угодно, лишь бы показать, что игра багнута. Авось разраб исправит это недоразумение.
>то что там автор пишет отсебятину это, мне кажется, нужно игнорировать Автор бьёт тревогу о совершенно очевидных вещах. Если мы обращаемся к какому-то объекту, который мы не создавали - очевидно, он используется не только нами, и его состояние может меняться без нашего ведома. Если мы хотим контролировать состояние этого объекта, мы должны создать его сами. А он выдумывает какие-то абстрактные проблемы и предлагает якобы универсальное решение всех вымышленных им проблем, дезориентируя новичков и вызывая испанский стыд у тех, кто в этом что-то понимает. Вообще не вижу смысла в его статье.
>>721913 >Почему персонаж начал скакать По-моему он не подскакивает, а пытается заехать/подняться на какое-то препятствие... >один дверной косяк с кастомным mesh коллайдером (пикрил) Зачем тебе коллайдер порога в дверном проёме? Может, на нём персонаж и подскакивал.
>почему помогло уменьшение MinMoveDsiance и Skin Width я так и не понял >Skin width >Two colliders can penetrate each other as deep as their Skin Width. Larger Skin Widths reduce jitter. Low Skin Width can cause the character to get stuck. A good setting is to make this value 10% of the Radius. >Min Move Distance >If the character tries to move below the indicated value, it will not move at all. This can be used to reduce jitter. In most situations this value should be left at 0. Судя по в всему, ты столкнулся как раз с этими jitter и stuck, дрожанием и застреванием.
Skin Width по-моему должен работать как на пикриле, но я не уверен. Проблема в том, что Character Controller не использует полноценную симуляцию физики, поэтому и может "застревать" в объектах. Вроде читал рекомендацию использовать Rigid Body вместо Character Controller, если нужно реалистичное взаимодействие персонажа с окружающими объектами...
>>721911 >Я с таким тоже сталкивался, но не на юнити. Не знаю, как это корректнее всего решить на юнити.
Спасибо за ответ. Я пока решил так, что если расстояние меньше 0,2f, то transform.position = destination, работает, но пришлось пожертвовать плавность, введя маленький прыжок.
А без этого у меня вектор движения скакал то в плюс, то в минус. Объекты был то дальше, то ближе, но никак не останавливался на точке назначения.
>>721967 >transform.position = destination я ни хрена не читал что вы тут понаписали, но если у вас перелёт когда движитесь к какой-то цели, то юзай лучше так
Я хотел двигать через RigidBody и Velocity, потому что так, насколько я знаю, не будет проблем, когда объект упирается в стенку, а если использовать transform.position, то объект будет дергаться возле стенки.
Джвач, не могу понять в чём проблема, в эдиторе код работает нормально через юнити ремоут и если инпут через мышку Но на андроиде всегда возвращает False, даже когда рейкаст по факту должен попадать куда надо
>>698843 (OP) Сап, помогите советом, как соединить визуальную новеллу и пиксельную рпг, тип андетейла, в Юнити. Планирую Пиксельную бродилку с линейным сюжетом, выборами в диалогах и анимированными (если допру как, и играбельными) вставками. Есть ток пару проблем - не ебу как 1) сделать возможность выборов в игре с последствиями (вроде как то с переменными связано) (нужно чтобы выборы сделанные при первом прохождении влияли на последующие), 2) Как бл@н сделать формат изображения (камеры) 4/3 вместо 16/9, в ютабе говорят лишь про подстраивание экрана под монитор. Может скрипы или еще чё-нить дадите, советы там.
>>722068 лол а почему спрашиваешь в треде юнити? когда это вопросы из области геймдизайна? интерфейс то нынешний в юнити легко же под разные разрешения подстраивать.
>>722011 а нахуй нуллабл структами пользуешься? че бы по старинке не bool MyFunction(input, out Vector2 resultIfTrue)
>>722006 >RigidBody и Velocity, потому что так, насколько я знаю, не будет проблем, когда объект упирается в стенку Да, он должен по идее начинать скользить вдоль стенки. Но если тебе нужно движение по местности со стенками, тогда лучше сразу определиться с каким-либо способом обнаружения стенок для перестроения маршрута вокруг них. Например, рейкастом проверять наличие препятствия и сворачивать с траектории, боковым рейкастом проверяя, не закончилась ли стенка. Или строить клеточную карту и использовать A-star или что там ещё используют для поиска маршрута. В общем, если ты знаешь, что объект может упираться в стенки на пути к цели - ты должен это как-то обрабатывать, а не оставлять решение на физический движок (который вообще нифига не детерминирован и может выкинуть любую хрень, особенно после обновления движка).
>>722068 >сделать возможность выборов в игре с последствиями (вроде как то с переменными связано) Если ты даже такое не понимаешь, то ты вообще нулевый программист. Подучи программирование перед разработкой игр. Вкратце - да, можно через переменные. Условно у тебя есть: - хранилище переменных выбора пользователя (для доступа из разных участков кода и сохранения состояния игры) - в этом хранилище есть переменная выбор1 - ситуация, которая изменяет значение хранилище.выбор1 - ситуация, на которую значение хранилище.выбор1 влияет - проверка в коде if (хранилище.выбор1 == 0} { не меняем ситуацию } else { меняем ситуацию } Ну как-то так, в самом простейшем случае. Да, к юнити это отношения не имеет, это имеет отношение к программированию в целом.
>нужно чтобы выборы сделанные при первом прохождении влияли на последующие Тогда ты должен сохранять состояние "хранилища" в отдельном файле, грузить его по нажатию "новая игра".
>Как бл@н сделать формат изображения (камеры) 4/3 вместо 16/9 RTFM, например, https://docs.unity3d.com/2020.2/Documentation/Manual/class-Camera.html А вообще, зачем тебе 4:3? На современных ультравайд мониторах твоя игра будет выглядеть как унылое говно. Лучше тогда затачивай игру на работу в маленьком окошке, типа 800x600 пикселей, так будет проще для всех.
>>722137 Орбитальная камера? Или прямо курсор в обратном направлении от центра экрана двигать? Если камера - просто умножай на -1 одну из осей там, где ты эту камеру крутишь. Если курсор - если курсор системный, то не получится/будет сложно это сделать. Если курсор в виде управляемого спрайта, а системный скрыт - аналогично камере.
Годится ли такой способ плавного увеличения какого то значения?: Код в update: obj.val = Math.Lerp(obj.val, newVal, Time.deltaTime * 2). Вроде по такому способу obj.val никогда не достигнет newVal. И длится будет не две секунды , а больше (или меньше, хз)
Математики, нужна ваша помощь. Допустим число 367 это 0% а 1567 это 100%. Как узнать, какой тогда процент составляет число 1243? Мне бы формулу, или название математической функции в Юнити, если таковая имеется.
вопрос. есть где почитать про перфоманс в самом эдиторе? много всякого говна работает в сбилженных проектах быстрей чем в эдиторе. но иногда надо писать код для самого эдитора и вот тут то приходится городить всякий пиздец.
Скажите, есть ли готовая функция, чтобы реализоваться такое: Значение x надо поменять с 1 до 5 за 2 секунды. Однако, если x уже равен 3, то остается 1 секунда, чтобы достичь 5. Чтобы скорость была постоянной
>>722189 Можешь, пожалуйста, расписать подробнее? Просто я не для себя спрашиваю, пилим с товарищем игру и он не знает как инверсию мыши сделать. Сам я вообще в кодерстве не шарю. Суть такова: В определенный момент включается мини-игра: на экране появляется картинка и на ней рандомно выскакивают спрайты, на которые надо нажимать. Стандартный курсор меняется на спрайт и надо на время этой мини-игры инвертировать мышь. По завершении мини-игры (кончилось время) мышь должна опять стандартно работать.
Если можно - подробно начиная со смены стандартного курсора на спрайт и заканчивая обратной сменой.
>>722404 ебать инверсию не может сделать. дельту мыши по нужной оси отрицательной сделать не может лол. ктож поверит что твой друг тупой такой. пускай он сюда приходит и картинками объясняет свои проблемы. у тебя явно с этим проблемы.
>>722210 >Что сейчас актуальнее А какая разница? Делаешь два apk, заливаешь в гугл. Гугл сам устанавливает клиенту тот apk, который совместим с его устройством. Если зальёшь только одну версию - люди будут находить твоё приложение, но им будет отображаться "это приложение не совместимо, бла-бла-бла, идите нахрен". Если не будешь заливать в гугл, просто выкладываешь два apk с пометками "это для такой-то платформы, это для такой-то", так обычно на 4PDA делают.
>>722297 >динамические переменные >>722329 >создавать переменные будет чаще вызываться gc Так динамические структуры (экземпляры классов, например) или просто переменные?
Динамические структуры ищут и выделяют свободный участок в куче, а "просто" переменные должны храниться на стеке. Использование стека позволяет сбросить все переменные, созданные внутри функции, просто сместив указатель стека на нужное число ячеек после завершения функции. А вот динамическая структура в куче будет храниться до тех пор, пока кто-нибудь не вызовет её деструктор (если говнокодер потерял указатель/забыл вызывать деструктор - это сделает сборщик мусора).
Правда, это всё в отрыве от языка, я не знаю, как это устроено в C#. Но судя по туториалам - не рекомендуется создавать экземпляры объектов, а вот переменные - сколько угодно, т.е. как я и говорю, затратно только выделять память в куче, а место на стеке функция в любом случае занимает.
>>722544 есть адекватные проблемы которые требуют какого-то базиса знаний, а есть всякая хуйня мелочная. над этой проблемой можно только посмеяться в том виде в котором она была обьяснена.
>>722405 вот, мужик, специально для тебя сделал профилирование на андроиде 4х-летней давности. никакого мусора локальные переменные не создают. есть разница между тем что незаметно и тем что ничего нет
>>722569 >локальные переменные Что ты подразумеваешь под "локальными переменными"? Переменные простых типов int, float, bool? А попробуй теперь создавать в цикле какие-нибудь спрайты. Ссылка на спрайт будет внутри локальной переменной и потеряется после выхода из функции, но место под спрайт будет выделяться в куче. Если ссылку потерять, т.е. не высвободить память кучи или не передать ссылку в другое место - да, сборщик мусора посчитает эту сущность мусором и удалит при первой возможности.
>>722382 >оказывается это откровенное и безобразное враньё Там чувак тестил только Vector3, тот хранит в себе только три float - x, y, z. Почему бы не протестировать на более сложных "переменных"?
>>722571 >>722572 там есть ссылка на код. скачайте, протестируйте, выложите результаты
>>722405 вот этот хрен сказал что пример из статьи на мобильных устройствах будет работать иначе. я доказал что он не прав и что мусор генерироваться не будет
Сап двач, подскажите нубяре как реализовать сохранение новелки на Юнити в любой момент и многослотовость? Сначала подумал префабами это делать, но тогда надо индексировать каждый фон и что самое главное каждую реплику, что превратится в какой-то пиздец. Гугл так же ответов не дал на тему новелл.
Алсо, пилю всë это дело на fungus, но у него сохранения погано реализованы. Думаю даже мб в ренпай на время перекатиться раз такая хуйня.
>>722576 Сохранять собрался текущее расположение в диалогов системе, в том числе фон на заднем фоне, спрайт говорящего персонажа в текущий момент и все в этом ключе.
>>722578 а нахуя тебе всё сохранять если эту информацию должна содержать сама сцена? как ты там сцены собрался сохранять твое дело. я бы сохранял в скриптабл обжектах и пользовался юнити для организации процесса. собери всё че те надо для воссоздания сцены, сохрани в ФАЙЛИК. а когда придет время ты такой читаешь файлик и у тебя уже всё что надо там есть чтобы воссоздать предыдущее состояние!
>>722581 помню во времена моей юности работали над проектом (не на юнити) и там чуваки чтоб сильно мозгами не шевелить делали на хард просто дамп оперативы. занимало тонну времени и места и программисты говорили: "да ладно, потом сделаем как надо"
Новелла: 1. [анон1]: смотрите, я сделал новеллу! [пик: скриншот новеллы] 2. [анон2]: это говно, переделывай [пик: тёмыч] 3. [анон3]: ха-ха, я такое за день делал [пик: мэдскиллз из пейнта] 4. [анон4]: сюжет вялый, я не возбудился [пик: вялый огурец] 5. [анон5]: а мне понравилось [пик: me gusta] 6. [анон2]: говноед! [пик: кот смотрит с отвращением] 7. [анон1]: неужели никому не понравилось? [пик: грустная аниметян]
Сейв.txt: 4
Что движок делает во время загрузки: - открывает сейв.тхт; - считывает число N (у нас 4); - открывает N-ю страницу новеллы (4-ю); - отображает на экране страницу (у нас будет [анон4]: сюжет вялый, я не возбудился [пик: вялый огурец]).
Зачем что-то усложнять? Поколение раздутого ПО с пелёнок учится раздувать ПО...
>>722581 - Как написать хелло ворлд? - Тащемта вопросов нет Берёшь и пишешь через обращение к консоли.
>>722592 Спасибо, это уже более внятный ответ. Я так и хотел делать изначально, но по этому принципу есть следующие проблемы: - Ну загрузишь и считаешь ты реплику номер 4, а отрисовывать фон, который должон быть в этой сцене + музыка и ранее появившиеся спрайты ты как собрался? - Если через сцены делать и сейвпоинтами, как писал анон из предыдущего ответа то это будет работать, ты сможешь сохраняться в любой момент но загружаться только с определённой сцены, но не реплики. Например в твоём случае я бы сохранился на 4 реплики, но при загрузке начал бы с 1.
>>722595 кекс у тебя каждый твой вопрос имеет в себе ответ. резиновую уточку на стол поставь
>а отрисовывать фон, который должон быть в этой сцене + музыка и ранее появившиеся спрайты ты как собрался? у тебя последовательность сцен известна ололо. если ты например менял фоновую картинку четыре диалога назад то ололо загрузи нужную тебе сцену и посмотри когда последний раз меняется фоновая картинка в предыдущих сценах.
>>722596 если у тебя есть ветвления то сохраняй помимо номера сцены номер ветки лол. будет у тебя не одно число а два.
честно говоря понятия не имею, как-то грузили. я только-только начинал прогать и моя работа была тестировать. даже что за игра уже вспомнить не могу, на сколько мне известно она потонула. приблизительно 2004-2005й год. надо было на 4х-ногом роботе-пауке по лесам ходить и расстреливать разных мобов. основной фишкой было то что юзали ik и ноги он ставил как надо
>>722629 дык ты списки новые создаёшь в апдейте, понятное дело будет мусор, он и не в апдейте будет. изначально там человек спрашивал плохо ли присваивать переменные в апдейте, что довольно странный вопрос, потом речь зашла о том что создавать их условно дорого. я скинул пример где чел ссылается на уже существующие данные генерируя при этом на него ссылки и рассказывает что мусора при этом никакого нет. я скинул подтверждение этому факту
Привет, анончики, недавно пересек планку в 100к зеленых и в связи с этим такой вопросик возник: как юнитеки узнают о прибыльности игры, если у меня нет компании и, исходя из этого, капитализации? А монетизация через гугл и донаты. Не хочется делиться заработанным потом с нахлебниками.
>>722630 Я создаю переменные, не важно списки или нет. В общем я думаю мы поняли друг друга и тому чуваку тоже теперь понятно, что можно делать, а что нужно отслеживать.
>>722581 >>722597 Это шейдерграф? Как тебе работать с ним? Многие плюются от него. Вот встала необходимость писать шейдеры, и сейчас ищу инструмент. Кодом, шейдерграфом или сторонним ассетом (Amplify ). Подскажи, каким путем лучше, если шаришь
Анон, подскажи, я миддл джавист, хочу как сайдпроджект поделать игру, может и перекатиться в гейдев, но суть не в этом. Шарп вроде похож на жаву, хочу подготовить почву, смотрю в чем различия между языками, мне интересно, на сколько глубокого погружения в кодинг требует юнити? Стоит для этого сначала поснашать учебники по шарпу или можно уже прыгать?
привет всем. делаю игру по вот этому туториалу: https://noobtuts.com/unity/2d-pong-game и столкнулся с проблемой. в туториале есть шаг когда надо написать скрипт, описывающий движение ракеток. проблема в том что при редактировании скрипта в visual studio те методы и объекты, которые указаны в уроке как будто не видны в visual studio при этом в начале скрипта прописано using UnityEngine; при попытке написать код как он выглядит в уроке и запустить проект в юнити с таким скриптом приводит к ошибке компилятора. где я проебался?
Добавил немного живости: Куки на фонарь. Плавное перемещение луча фонаря. Луч фонаря теперь немного дрожит, но, не как у алкаша, а плавно так. Это заметно если не двигаться. Ранее позиция и вращение для фонаря напрямую брались у камеры, так что не было видно теней. Все было каким-то 2D-шным. Сдвинул вниз и немного влево, примерно в то место, где обычно люди и держат фонарь. Тени появились, но они были полностью черные. То, что находилось в тени, не было видимым. Поэтому добавил несколько источников света вокруг персонажа, которые включаются с фонарем. Также фонарь теперь с фокусировкой - его rotation направлен именно в ту точку, куда смотрит камера. Дрожание при беге добавил. Сразу немного драйва и шухера добавилось.
>>722926 Если выключить тень - то вообще не понятно что он снизу, но это мне так кажется, вообще молодец. обосрался от первого появления черного мужика
Анон, посоветуй книгу для вката в математику не ради жидовки, честно. Я просто понимаю, что я нихуя не могу без неё сделать и хочу не просто копировать с гугла, а что-то допереть сам. Или может там хороший курс\канал на ютубе.
>>722595 >отрисовывать фон, который должон быть в этой сцене + музыка и ранее появившиеся спрайты Тогда можно сделать так: - если новелла кинетическая (без развилок): - - считываем номер страницы X; - - начинаем со страницы 1 и до X "мысленно пролистываем", т.е. проходим по массиву страниц со всей информацией; - - таким образом определяем, какой должен быть фон и какая фоновая музыка должна играть; - - всё это запускаем и отображаем. - второй вариант: - - как в предыдущем, но не от 1 до X, а от X в обратном порядке до тех пор, пока не найдём всю нужную информацию. - третий вариант: - - каждая страница имеет ссылку на бекграунд и музыку, и на мне нужно искать, что нужно переключить. - если новелла с развилками: - - в сейв кроме страницы сохраняем все сделанные игроком выборы; - - используем первый или второй метод с учётом развилок. - или: - - в сейве по-прежнему храним развилки, загружаем их (на всякий случай, вдруг понадобится); - - но следуя третьему варианту, нам достаточно считать страницу со всей необходимой информацией.
>загружаться только с определённой сцены, но не реплики Имхо, в текстовых/текстографических играх одна сцена = одна страница с текстом и картинкой. Либо, нужно хранить два числа - номер сцены и номер реплики.
А вообще ты изобретаешь колесо и используешь неподходящий инструмент. Нужны только новеллы - бери ренпи.
>>722631 >как юнитеки узнают о прибыльности А как налоговая узнаёт о том, что ты не плотиш нологи? Так и тут. На тебе лежит ответственность уведомить о наступлении оговоренных в договоре условий и выполнять обязательства договора, а если сознательно молчишь и нарушаешь - то когда они узнают, тебе будет а-та-та, и вряд ли это тебе понравится.
Подскажите, как лучше писать поля классов: >public float playerSpeed = 2.0f; или >[SerializeField] >float playerSpeed = 2.0f; Я слышал, что [SerializeField] позволяет оставить поле класса приватным, но при этом отобразить в редакторе сцен. А public не рекомендуют объявлять там, где не нужны собственно публичные поля. Меня просто [SerializeField] чисто визуально бесит, бросается в глаза и занимает лишнюю строчку, и я привык что есть только public/published/protected/private (Delphi/FPC).
>>723390 Просто тред старый и о нём знают лишь избранные, кто умеет пользоваться каталогом доски.
>>723513 А что тебе мешает написать [SerializeField] float playerSpeed = 2.0f; ?
Я лично всегда сериалайз использую, если нужно в инспекторе что-то настраивать\дебажить, но в целом если проект небольшой, то можно и паблики юзать но лучше нет
Установил Bolt, какие подводные он теперь будет во всех проектах или только в том, в который я его ставил? Просто процесс установки и настройки больно уж долгий, не хочется в каждый новый проектик ставить его "с нуля"...
>>723574 >А что тебе мешает написать Я пробовал, так оно ещё хуже выглядит. У этой метки могут быть параметры (Range(), например), она будет ещё длиннее становиться.
>>723583 >Установил Bolt Ещё вопрос: вот эти "ассеты" болта не попадут в билд? Это же документация на сам болт. Как юнити определяет, какие "ассеты" должны попасть в билд, а какие нет? Нужно ли вручную выпиливать такие лишние файлы?
Пацаны, такую башку покрутить не получится? Хотел сделать типа анимации оглядывания, но изменения rotation в редакторе не дает никакого эффекта, поэтому программно ее еще не изменял. Это я бесплатный ассет юзаю, 3d проекта модели не имеется
>>723513 Как альтернатива можешь писать: [SerializeField] private float m_playerSpeed = 2.0f; в одну строку, но вообще рекомендуется использовать private SerializeField только для тех, которые ты будешь через инспектор настраивать. А вот я больше 5 лет использовал паблики. Вообще вся это еботня нужна для читаемости и предсказуемости кода, если ты 1 работаешь то клади хуй и делай как ТЕБЕ удобно.
>>723584 Ты про несколько аттрибутов? Сортируй код, пиши сначала переменные с аттрибутами, а после них уже без, такой разделенный код нормально читается глазом
>>723617 >рекомендуется использовать private SerializeField только для тех, которые ты будешь через инспектор настраивать Так а я о чём? Это же самая полезная фича юнити (как и любого аналогичного движка) - ты пишешь скрипт, выставляешь наружу какие-то свойства, затем накидываешь один скрипт на несколько разных объектов и выставляешь им разные свойства через редактор сцен. С другими инструментами пришлось бы писать отдельный файлик с настройками и, если это велосипед, загружать его вручную, или давать каждому классу метод "loadConfig()" и всё в таком духе. А тут эта фича из коробки. Только синтаксис как-то не очень выглядит... Ну, я не разбираюсь в шарпе, возможно такие [директивы] - это норма.
>делай как ТЕБЕ удобно Это понятно, просто не хотелось бы словить потом какие-то проблемы с производительностью или типа того.
>>723650 Понятно. Хотя не совсем, если я считываю ассет (допустим, txt) из кода - это считается за "используется в игре"?
Заметил вчера проблему, но источник проблемы обнаружил только что. Почему окошко Variables загружает одно ядро процессора на 100% (при том на 100% системными вызовами) и на 60% 3D-рендерер видеокарты? Если это окошко закрыть или переключиться на соседнюю вкладку - нагрузка падает до почти 0%. Сцена пустая. Вообще, окошко Variables - это инструмент Bolt'а, или встроенный? Я просто не видел его раньше, Bolt поставил только вчера. Вроде штука полезная, но с такой нагрузкой юзать не хочу.
>>723690 >окошко Variables загружает одно ядро процессора на 100% Окна Graph и Gragh Inspector тоже грузят ядро процессора на 100%. Походу это проблема конкретно Bolt. Может можно как-то оптимизировать? Или я что-то неправильно сделал? Работать с юнити это не мешает, лагов нет, но меня напрягает, что что-то впустую гоняет процессор почти на пределе. Наверняка там просто нет фиксированной частоты отрисовки и окна рисуются максимальное число кадров в секунду или что-то в этом роде...
Интересный всё-таки Bolt. Хотя многого нехватает, например: - не смог найти inc()/dec() (или ++/--), прибавить единичку сложно; - многим блокам хочется ввести значение в поле, но они просят блок; - поиск по блокам довольно медленный, списки блоков не кэшируются. Иногда щупаю Automate для Android, там визуальный кодинг получше.
>>723792 >многим блокам хочется ввести значение в поле, но они просят блок Вот это больше всего смущает.
...бла-бла-бла...
...сейчас проверил - оказывается поле ввода у Add есть, но оно скрывается, если есть связь. А у блока типа Equal не может быть поля, т.к. он просит ссылку на объект (зелёная точка).
Сап, убрал превьюшку юнити перед запуском игры и залил в плеймаркет, будут ли какие либо последствия? Больше 100 скачиваний в месяц не будет, за игру скорее всего даже копейку не получу
>>723877 Эта привилегия доступна только для тех, кто пользуется платной версией, бесплатная (до 100к зелёных в год) показывает заставОчку. Хз, вряд-ли при таких числах скачиваний у тебя проблемы будут, если появятся значительные числа могут на тебя что-то вроде страйка кинуть, так что лучше не балуйся
хэлп! Где я тут проебался? Эх, хотелось бы пойти легким путем, но похоже придется засесть за изучении анимации, хотя я хочу только один персонаж надо по простому анимировать
>>724118 Отбой, эта модель кривая была видимо. Скачал другую, проделал все то же самое - работает. Это я решил покачать модели без встроенных анимаций, но с готовым аватаром, и поучиться назначять им сторонние анимации
Здравствуйте. Я совсем новичек во всем этом. Подскажите пожалуйста куда копать в моем вопросе. А именно:
Как в изометрии сделать персонажу отдельные части тела, которые двигались бы в отрыве от основного тела?
Например чтобы голова поворачивалась куда-то, и мне не приходилось делать кучу спрайтов на всю модельку, а только на голову. Тоесть в ситуации когда например герой прыгает, а его голова повернута в какую-то сторону. Я же заебусь рисовать спрайты под прыжок с каждым углом поворотом головы, а потом под условный бег, или приседание. Как это проще реализовать?
Понимаю что надо как-то тайл с головой прикрепить видимо выше тайла с телом, анимировать их отдельно, но при этом как-то связать.
Ебать пот какой-то, подскажите.
Кста, че вы свой тред не перекатываете, еле нашел его.
>>725284 Короче забейте, я понял что анимировать персонажа в изометрии это хуевая идея. Теперь встал вопрос как поместить 3д персонажа в изометрический мир
кто-нибудь долбится в UI Toolkit? мне нужно генерировать список и если в старом ui для этого нужно было делать префаб, то в то в новом я не понимаю как указать шаблон из которого элементы этого списка буду генерироваться. нужна помощь
>>725439 UI Toolkit это последняя дефолтная версия юая в юнити? Если да - абсолютно точно так же, создаешь префаб и делаешь transform.setParent(yourOwner); Если хочешь указать размер или позицию делаешь так: (transform as RectTransform).deltaSize или (transform as RectTransform).anchorPosition
>>725298 У камеры сделай ортографический прожектор и выставь правильно углы
Сап, харкач. Это тот анон, что заёбывал вас сейвами в новелке в этом треде парой десятков постами назад. Я почти допилил весь механ, но осталось одно дело, с которым я на удивление ебусь слишком долго.
Имеется: - UI Префаб. - В этом префаба UI панелька. - На этой панельке text. - В зависимости от сценария текст на панельке меняется и появляется в точке курсора при наведении на определённую область.
Собственно проблема в том, что панелька может растягиваться в зависимости от вбираемого текста, по этой причине появляется криво возле курсора, а не ровно под ним. Это происходит из-за центра объекта, так как меняются его размеры. Как сменить пивот ебаный, чтобы он всегда был в левом в верхнем углу, а не посередине, как на скрине? Реализация через объект-пустышку не канает, т.к. размеры меняются. Мб как-то настроить само расширение можно, чтобы он расширялся не пропорционально, а только вниз?
И ещё. Пытаюсь рамку красивее сделать по той же схеме, добавив чёрные края, чтобы и они менялись в зависимости от размеров серой панельки (которая в свою очередь меняется от размеров текста внутри). Но че-то получается какая-то ебала и либо черная панелька застилает серую, либо серая панелька застилает чёрную. И в том и в ином случае пропадают края. Реализаю это кстати через content size и layout group.
>>725444 нет это не последняя дефолтная версия юая в юнити. это то что у них давно в разработке на замену старого ui и с недавних пор можно запускать в рантайме. никаких, кроме родительского, gameobject там нет. по факту это flexbox css
Господа, вопрос уровня б, но пощадите и поясните дегенерату-ньюфагу за эту хуйню. Юнити 2019.4 лтс, если что. Вот на пикреле у меня настройки графики чистого проекта. Ультры выставлены в дефолт, но когда я жму плеймод - у меня автоматом выставляются минималки, что бы я не делал. Это так задумано? Пытался гуглить и нашёл только такой же вопрос на вопрос-ответе юнити, но без ответа.
>>722696 нет, разумеется, это не шейдерграф. это самописный инструмент для работы с массивами, который я собрал для простенького генератора карты. он потом оброс всяким интересным говном. результаты работы на картинке и видео. надо будет потом снова им заняться снова так как я по пути придумал всякие хитрости но они много времени требуют. да и параллельные проекты тоже двигать надо. вообще юнити конечно заебись в плане расширений его функционала. какими-то своими перделками его интерфейс очень легко обвесить и как-то упростить процесс разработки.
если у тебя встала необходимость писать шейдоры то лол это уже зависит от того в какой сорт рендеринг пайплайна у тебя там. для стандартного разумеется только что-то руками, для URP там в целом можно и руками и графом, а для HDRP там вообще гроб гроб кладбище пидор пытаться что-то руками писать. это можно, но это сложно. шейдорграф в целом ущербный по функционалу и что-то интересное с ним не сделать. если у тебя нет в нём нужды как в случае с HDRP то я не советую им пользоваться.
кодом проще. в начале сложно, много непонятных магических слов, какая-то неочевидная хуйня кругом, нет нормальной подсветки синтаксиса, документация как какой-то пазл разбросанный по всему интернету и всё такое. но лучше пользоваться им. к тому-же у тебя появится могущество использовать вычислительные шейдоры.
>>725787 >This is useful for importing camera information from 3D modeling applications that also mimic real-world cameras Что это всё значит? Мне её в играх использовать или нет?
>>725789 Я вообще почему спрашиваю- есть мнение, что использование именно физической камеры помогает сохранять на всех девайсах одинаковые аспект экрана, т.е. на всех устройствах будет одинаковая ширина изображения.
>>725791 а хуй знает. у меня нет ответа на этот вопрос. всегда можно сказать "у нас только такое разрешение" и ограничить пространство камеры добавив черные полосы если это прямо совсем суперважно. способов контролировать аспект экрана много и без этого. если надо посмотреть оба варианта то пиши с расчетом что будут использоваться оба. можно потом даже в настройки добавить.
У вас было такое, что простую задачу (или просто не шибко сложную), не получается решить? Лезут какие-то странные, неадекватные и тяжелые решения, и вроде как-то подсознательно чувствуешь, что есть решение легче, а это какая-то хуйня. А потом спустя пару дней вуаля рожаешь неплохое решение и переписываешь то говно. Хотя наверное это только со мной, нубом. Что это было, мозг устал? Захавал много сладкого и мысли стали тягучими и тупыми?
>>725829 лол да обычное дело. чё ты. каждый день такая хуйня если что-то интересное делаю. ближе к вечеру проще перестать думать и переключится на какие-то тривиальные мелкие задачи. коменты там написать, код причесать который ещё не скоро будешь переписывать. некоторые задачи требуют длительной медитации на проблему. я например некоторые сложные задачи требующие творческого подхода с хитрой математикой решаю по многу дней. в течении которых я открываю пэйнт и делаю доску с картинками на которой сам себе объясняю проблему. а когда устаю себе объяснять, то переключаюсь на другие задачи.
но к несчастью не все решения приходят вовремя, а чтобы некоторые решить попроще иногда просто не хватает опыта решения таких проблем. в таких случаях надо идти подглядывать у других и углубляться в изучение вопроса не прогрессируя в проекте.
с опытом начинаешь лучше отличать те проблемы с которыми можешь справится сам и те на которое тебе не хватает теоретических знаний. быстрей ты будешь делать только то что уже делал.
хотя иногда достаточно сменить ненадолго обстановку. мне помогает иногда сесть на краешке ванны, начать окачивать себе ноги из душа тепленькой водой. отвлекает, расслабляет, заставляет вместо монитора как предмета медитации использовать мысли в своей голове.
утомительное юнити. написать редактор который повторяет функционал стандартного редактора коллайдеров это было уже интересной задачей. но написать чтобы оно ещё скейлилось так-же как коллайдеры это было уже куда более утомительной задачей. три дня. три дня медитации на ебучие трансформации одной хуйни в другую. господи, кто придумал эту хуйню.
>>725841 Я вот кстати еще пол года назад с тобой переписывался, ты как пилишь патфаиндинг хитрый так и продолжаешь это делать? Или это старые записи? Чем вообще занимаешься, если не секрет? Работаешь где-то или фрилансишь?
>>726012 пол года назад как раз по всяким личным причинам я перестал делать всякую активность и теперь сравнительно недавно вот обратно к этому вернулся. у меня сейчас несколько параллельных проектов, но пассфайндинг наверно единственное что буду показывать. у меня накопилась стопка всяких там интересных пожеланий и идей которые следует реализовать в нём. до этого я таки перелопатил и сделал оптимизон триангуляции и перевёл координаты во время генерации на цельночисельные чтобы ошибки точности float меня больше не доебывали и вообще всячески облагородил проект. теперь вот занялся теми проблемами которые усложняют его применение в реальных проектах с множеством людей. например сделал чтобы ссылка на "зону" везде передавалась как скриптабл обжект, чтобы ничего не зависело от какого-то центрального файлика с зонами который их описывает. сделал во время генерации хранилку множества наборов маркеров, чтобы можно было добавлять во время генерации места с одинаковыми зонами, но разными свойствами. теперь например управлять навмешем через объект может всё что его меняет, а не только специальные зоны. сделал более универсальным код который накладывает зоны по карте и сделал специальный компонент который делает то-же самое для любого обьекта. так как некоторые используют свою процедурную хуйню а нормально на неё накладывать зоны нельзя.
и вот всякие такие мелочи делаю, которые расширяют и упрощают функционал который уже имеется. теперь вот сел причёсывать "маркеры" для зон. большая проблема что они игнорируют скейл. это усложняет их применение в префабах. вот несколько дней пыхтел, сделал так что они скейлятся точно так-же как коллайдеры в юнити. теперь вот ещё дальше буду делать. надо чтобы была возможность указывать зоны как Vector2[] чтобы ещё сильней упрощало работу с процедурными уровнями.
надо ещё 3 крупные фичи сделать да наверно останутся только какие-то косметические вещи из того что надо.
ну а видео старое, да. так и не закончил пока работу над избеганием групп. избегание групп есть, но над ним ещё дальше надо работать. сейчас вяло фрилансю, но стараюсь особо не брать какой-то работы. у меня осталась некоторая финансовая подушка, лучше своей хуйней займусь.
>>726064 Я знаю, что уже спрашивали это десяток раз тебя, но нахуя это всё нужно? Ты хочешь юнити не для игр использовать, а для каких-то программ специальных? Хочешь ассет продавать потом? Или хочешь в резюме указать это и потом устроиться куда-нибудь в условный гугл?
Ребят привет, начал проходить курс по программированию на юнити. Тот который закреплен в шапке. Кто из местных его пробовал, какого оно?Стоит потраченного времени? Если не стоит тратить время, можете посоветовать что нибудь на ваш взгляд более полезное(книги,ютуб, другие бесплатные курсы?)
>>726393 Вполне возможно, что анон для себя это пилит ну и для резюме По себе знаю, что если только работать - деградируешь потихоньку, поэтому стоит постоянно какой-то сайд проект иметь, за которым время убиваешь.
Была база других языков, поэтому после этого курса + пары своих проектов спокойно устроился джуном. Но вообще можешь почекать другие курсы от тех же ребят. + рекомендую Введение в ООП почитать https://newobj.ru/oop/index.php
На юдеми постоянно скидка на курсы, поэтому, если ее сейчас нет - можешь просто подождать. Или спиратить с торрента, если не жалко места диске
>>726537 Спасибо огромное)) как затравочка подойдёт курс от юнити или скорее время потрачу. И что нибудь слышал про книгу Джереми Гибсона Бонда чё то там unity и c# от идеи до реализации?
>>726540 Про книгу слышал, но не читал, ничего тебе сказать по ее поводу не могу. В любом случае время зря не потратишь, если прочитаешь. На юдеми для всех курсов сразу доступна вводная часть, можешь запустить и сам решить стоит ли брать.
Короче извиняюсь сразу за тупой вопрос, совсем не умею в программирование, планировал что этим будет заниматься другой человек, который пока не может. Смотрел тутор на Ютубе по управлению. Скачал модельку как там, сделал аниматор и написал скрипт на поворот персонажа в нужную сторону, как в видео. Все бы ничего, но персонаж вращается вокруг не той оси. Мне кажется что дело не в скрипте, и эту ось нужно ещё где-то выбрать, но никак не могу понять где.
>>727407 Я в целом понимаю, что такое ООП, знаю основные принципы, некоторые паттерны. Вопрос скорее в том, как красиво все это использовать в юнити с ecs, чтоб все не превращалось в спагетти.
дрочу баланс игры и возникла проблема. в общем я сделал scriptable object с параметрами типа фейдаутов некоторых элементов, скорости вращения камеры (она вращается по заданным углам), фризтайма и подобной мишурой. ну и сделал и нормально, а потом смотрю что у меня разные компоненты к scriptableobject ассет обращаются и понимаю что если я вдруг захочу сделать пяток конфигов и быстро их свапать, то мне придётся искать все компонент которые на него ссылаются и руками заменять. отсюда вопрос: на сколько это дурная затея сделать scriptableobject-обёртку? по сути в нём абсолютно ничего не будет кроме ссылки на другой scriptableobject, а уже на эту обёртку будут ссылаться компоненты. собственно из бонусов это я быстро могу заменять конфиги не ища где на них ссылаются, а из минусов получается какая-то колбаса в духе:
[SerializedField] private ConfigSO _config;
и дальше в коде где-нибудь обращение к переменным будет выглядеть так:
_config.configVariant.variable
есть какие-нибудь решения более элегантные или это нормальная абстракция?
Х А Л П Мне унити нужен модельки потестить. Давно на старой версии бы стандартный контроллер от первого лица. Кинул на сцену и в хуй не дуешь. А чё сейчас? Я чёт ваще нихуя не понял. Они его выпилили не предоставив альтернативы? Они ебанутые? Или чё там вместо него?
>>727449 Пиз дос Пошла жара, обмазываться кучей версий. Так а нахуя они это сделали? Ну тип. В чём звмысел? Убрать такую основополагающую вещь и нихуя не дать взамен. Я когда увидел "для 2018" думал, мол, ну ща для 2020 найду. Пиздец.
>>727450 абсолютно ненужная хуета это во первых, а во вторых это не для версии 2018, а от версии 18, так что может всё ещё работать. в любом случае там 4 файла всего и поправить их и закинуть себе на гитхаб с этим и щенок справится, а если не справится, то на гитхабе или просто в гугле решений больше чем у тебя пальцев
Посоветуйте игру, откуда можно стыбзить идею UI. Я хочу повторить похожее, прям от элементарных вещей, до чего-то сложного, на новой системе UI в Unity. Какие игры вас мотивировали больше всего? Прям хардкор, не обязательно красивое что-то. Просто хочу закрыть все возможности UI в одном проекте.
>>727519 честно говоря новая значительно удобней того что было, но у меня каждые полтора дня что-то в ней ломается, сыпятся хреновы ворненги, загружается в сейфмоуд и тд. моё предположение что всё будет ещё несколько раз переделываться, хотя проект я один уже поздамутил
>>727525 >>727526 >поздамутил это когда не на продажу, а просто собрал проект с простым функционалом который реагирует на ui и на который ui реагирует тоже. bindings там и прочее
>>727531 Мне тоже не для работы, я хочу для портфеля собрать проект, где будет пиздатенькая менюшка, какая-нибудь сложная система типа крафта, и настройки, со всякими свестоперделками. Но у меня нет идей, откуда это можно спиздить, а сам я не дизайнер, чтобы придумать.
двощи на помощь! первый раз долблюсь в ragdoll, подключил всё окей, когда отключаю аниматор – модель шлёпается на пол как нужно. теперь я кастую из камеры луч и когда он попадает в нужный коллайдер, то мне нужно отключать этот аниматор на родительском объекте, а на Rigidbody коллайдера, в который я попал, делать AddForce. внимание вопрос: я собираюсь делать проверку на наличие компонента у родителя, ну, например, NiggerController. Rigidbody, понятное дело, не знает об этом компоненте и, как следствие, такая штука у меня отменяется:
if (hit.rigidbody.tryToGetComponent(out NiggerController niggerController)) { // жмур спёкся }
как мне проверять что я пульнул именно в ниггера, а не в человека? мне что на каждый Rigidbody вешать компонент DefinitelyNigger с ссылкой на родительский NiggerController?
if (hit.rigidbody.tryToGetComponent(out DefinitelyNigger nigger) { nigger.niggerController.dieMotherfuckerDie(); }
>>727445 да. >>727632 >как мне проверять что я пульнул именно в ниггера, а не в человека? Теги? Лееры? Еще можно через скрипты проверять, но я вообще не понял, чего ты там насобирал у себя, поэтому если хочешь именно через скрипты свои делать что-то, то сам разбирайся, тебе виднее. Мне обычно решение мутных вещей таких только через пару дней приходит, просто продолжаешь работу и через некоторое время придумываешь, как это решить.
Если уж пишешь [SerializedField] private ConfigSO _config; То пиши лучше [SerializedField] private ConfigSO _config = null; Тогда не будет спамить варнинги в консоль
>>727749 проверка по тегам и слоям это проверка по строчным что само по себе неверно. честно говоря вообще не знаю зачем существуют теги, а слои только для того чтоб разделить физику нужны
>>727750 >[SerializedField] private ConfigSO _config = null; = default обычно пишу чтоб ворнингов не было
Как подружить анимацию с navmeshagent? Я скачал анимацию ходьбы, но там скорость переменная. Если я поставлю свою скорость в navmeshagent.speed, то персонаж будет скользить. Немного погуглив, нашел решение, что надо установить apple root motion = true и agent.updatePosition = false, чтобы перемещение лежало на анимации, но в этом случае персонаж у меня тупо не может правильный путь проложить, проходит сквозь препятствия, и идет не на ту точку, которую я указал.. Ох, чую, это на пару месяцев засяду... В документации по анимации и агентам вообще ни хрена не понятно. Точнее написано то подробно, про каждую галочку и чекбокс, но непонятно как?зачем?в каких случаях?смысл?
А вот с apple root motion=false и agent.updatePosition = true, все четко. Я ьы это и использовал, но мне нужна переменная скорость, чтобы соответствовало анимации. В моем случае это анимация ходьбы, где зомбак прихрамывает, и при этом скорость ниже.
У всех drag n drop всегда нормально работает? У меня изредка возникают проблемы с отсутствием срабатывания события при завершении драга и соответственно вызова OnEndDrag. Пиздец, какой трудно уловимый, редкий и только случайно воспроизводимый баг. Сейчас вписал проверку в событии OnPointerEnter, если флаг isDragging у объекта выставлен, то запускаю тот же метод что и в OnEndDrag. Может такие костыли и сработают. Может кто подскажет, почему может баг подобный возникат, или костыль получше предложить?
У персонажа несколько состояний (idle, walk, crawl, run) и я хочу реализовать, чтобы можно было перейти из любого состояние в другое. Я пока сделал, как на скринах, и это вполне себе работает.
>>727871 Можно вместо бул параметров сделать один float velocity и апдейтить через setfloat ("velocity", велосити твоего персонажа). Состояния менять по нему, волк на 2, ран на 4 и тд
idle -> walk -> run можно запаковать в blendtree и останется воще два стейта у тебя, типа grounded -> crawl (кровл обязательно соединять с бегом/ходьбой? переход из лежа сразу в бег/прыжок должен выглядеть неплавно/крипово) (
>>727915 >idle -> walk -> run Поверхностно знаком с blendtree. Как я понял, он нужен для плавной смены схожих анимаций. Например, если я хочу с idle перейти на walk, я должен плавно изменить переменную с 0 до 0.5. А если сразу на run, то с 0 до 1.То есть, когда будет смена 0 до 1, также затронется и анимация walk, не так ли. А в моем случае это будет выглядеть странно, так как в анимации walk зомби идет с вытянутыми вперед руками, а бежит без них, по нормальному. Получается, мне в bleentree лучше оставить walk и run, а idle в отдельный state.
>>727776 >честно говоря вообще не знаю зачем существуют теги Ну например чтобы решать твою проблему. Если ты действительно опытный прогер ты не писал бы тут такие вопросы. Если хочешь изобретать свой велосипед- пожалуйста, вариантов уйма. Но если ты просто хочешь решить проблему и не усложнять, то используй теги.
>>727998 >Но если ты просто хочешь решить проблему и не усложнять, то используй теги. Ты видимо плохо прочитал вопрос. Мне не просто нужно делать проверку, но и нужно получить доступ к компоненту родителя. Проверка по тегу это инструмент для тех кто вчера первый раз открыл Unity и не поймёт как и что там устроено. В идеале там нужна проверка по интерфейсу и уже взаимодействие с ним. Мой вопрос был не в том как определить в кого попал, а в том как лучше всего организовать передачу данных о коллизии родительскому классу после проверки. В моём варианте есть кэширование хотя бы, с тегами на каждой коллизии мне придётся помимо проверки по строчной переменной делать ещё и GetComponentInParent, и после этого делать nullcheck на этот компонент. Это не решение проблемы, а создания дополнительных и усложнение задачи
>>727856 Похоже в Юнити с OnEndDrag реально есть проблемы. Решил проблемы проверкой, нажата ли левая кнопка мыши при isDragging == true в функции Update. Если да, то сам вызываю метод из обработчика OnEndDrag.
>>728002 Сделай на родительском компоненте скрипт, на нем ивенты, подпиши части тела на ивент, я хуй знает. Сделай интерфейсов себе разных. Это же архитектурные проблемы, единственного верного решения не существует. >как лучше всего организовать передачу данных о коллизии родительскому классу после проверки Лично мне кажется сделай как считаешь нужным, тем более ты сам уже не чайник, оставь там TODO и в будущем переделай если надо будет но скорее всего не надо будет и ты просто прокрастинируешь тут вместо того чтобы игру делать
>>728098 >но скорее всего не надо будет и ты просто прокрастинируешь тут вместо того чтобы игру делать ну я сделал решение, написал сюда вопрос на случай если есть решение лучше и продолжил работу. залипать мне не шибко свойственно
>>728140 >1 Я бы мог загуглить за тебя, но мне лень >2 Уточни под чем ты понимаешь "загружается все"? Все сцены? Список сцен? Объекты на сцене?
>>728294 Прекрати это делать, набросай простейший список задач, потом удали все задачи "улучшить" и иди по нему. Переписывать код можно если он не подходит для твоей задачи и то лучше его расширять, а не полностью переписывать.
>>728310 Ух.. может не загружать первый уровень вместе с меню? Еще возможно используешь DontDestroyOnLoad? Если да, то оно тебе точно нужно? Если нужно, то через какой-нибудь синглтон выключай его.
Начал реализовывать паузу в игре используя timeScale = 0, и проблема оказалась в том, что хоть игра и стоит, обрабатываются все Input.GetKey, то есть, во время паузы игрок может ходить, прыгать и прочее. В итоге мне пришлось искать все места, где чел нажимает на кнопки и добавлять новую проверку if (Input.GetKeyDown(JUMP) && !Game.Pause()) {
} Потом узнал про input manager или типо того, где все нажатия должны обрабатываются в одном месте и передаются в нужные места. И проверку на Game.Pause() можно добавить только туда. Сейчас не знаю, то ли реализовать такое, опять переписав код, добавить интерфейс, то ли забить. Решил не реализовывать - теперь мучаюсь, что код говно, и чтобы было бы легче, если бы реализовал этот способ; решил сделать - становится жалко времени, ведь можно обойтись и без этого, ведь работает. Короче, с бедами в башкой как у меня в гамедев лучше не лезть
>>728363 Это норма, не парься, ты же не убийцу вов там делаешь? В следующем проекте сможешь применить свои новые классные знания и сразу написать классный код!
Привет. Мб тупой вопрос, но можно ли как то сделать анимацию через скрипт. Пытаюсь для себя сделать Ball Sorting Puzzle. Но я не понимаю. Неужели нужно для каждого шарика из всех позиций сделать анимации во все позиции. То есть если у меня одна анимация передвигает объект на 1 вправо и на 1 вниз, а другая на 2 вправо и 1 вниз, неужели мне надо разные анимации для этого делать? Можно ли как то в скрипте?
Сап геймдевы Начал читать книгу Юнити в действии, там начинают рассматривать проект Unity Car Example, который несовместим с новой версией. Подскажите похожий проект чтоб по нему учить, или более новую книгу что ли...