Gamedev

Ответить в тред Ответить в тред
Unity thread # 12 Аноним 15/09/20 Втр 09:57:27 6988431
u1.png 268Кб, 673x768
673x768
u2.jpg 47Кб, 516x389
516x389
u3.png 14Кб, 240x240
240x240
u4.jpg 245Кб, 1950x1300
1950x1300
Добро пожаловать в тред Unity - лучшего 3D и 2D игрового движка современности!

Прошлый тред: https://2ch.hk/gd/res/659486.html

Официальный сайт: https://unity3d.com/ru
Документация: https://docs.unity3d.com/ru/current/Manual/index.html
Уроки: https://unity3d.com/ru/learn/tutorials
Форум: https://forum.unity3d.com/
Магазин ассетов: https://unity3d.com/ru/asset-store
UnityWiki: http://wiki.unity3d.com/index.php/Main_Page

На Unity сделано много замечательных игр - Rust, Блицкриг 3, Pillars of Eternity, Tyranny, Kerbal Space Program и многие другие. Главным преимуществом Unity перед другими движками является его простота для одиночной разработки. Не нужно иметь целую компанию девелоперов, чтобы сделать хорошую игру. Если ты один или имеешь небольшую команду и хочешь сделать хорошую игру без претензий на ААА, то Unity станет лучшим выбором. Тем не менее, даже крупные корпорации зачастую выбирают для своих игр именно Unity.

FAQ

- Какие у Unity сильные стороны?
- Простота разработки, удобный инструментарий, кроссплатформенность, богатая документация, огромное сообщество.

- Какие у Unity слабые стороны?
- Сложность в создании фотореалистичной графики. Для графики "как в Crysis" рекомендуется взять другой движок. Хотя Unity вполне способен выдавать не уступающую любым другим движкам картинку, это требует определённого навыка от разработчика.

- На каких языках я могу писать скрипты для Unity?
- На выбор два языка - C# и UnityScript. UnityScript - это что-то среднее между JavaScript и ActionScript. Выбирай язык по своему вкусу, они оба вполне удобны, но помни, что большинство примеров написано на C#.

- Для каких жанров подходит Unity?
- Для абсолютно любых! Жанр ограничивается лишь фантазией разработчика (и его умением писать скрипты, разумеется). Можно создавать и РПГ, и стратегии, и слэшеры. Можно делать VR-проекты или Minecraft-подобные песочницы.

- На каких платформах работают созданные с помощью Unity игры?
- Windows, Linux, MacOS, SteamOS, Android, iOS, Windows Phone, PlayStation4, Xbox One, WebGL, Oculus Rift и многие другие. Полный список можно найти на официальном сайте. Таким образом, игры Unity работают на десктопах, на смартфонах, планшетах, приставках, в браузерах, VR-очках и некоторых других системах.

- Часто вижу скриншоты с красивой природой на Unity. Как такое создать?
- Очень просто! В Unity встроены удобные инструменты для создания террейна и SpeedTree для создания деревьев и готовая реализация ветра - не нужно ничего писать или скачивать и подключать плагины - ландшафт в Unity создаётся в пару кликов.

- Что такое стартер киты?
- Starter Kit - это набор скриптов и префабов, а зачастую и графических элементов для игры. Они призваны облегчить разработку игры определённого жанра и как правило разбиты по жанрам (Action-RPG Starter Kit, RTS Starter Kit, 3D Shooter Starter Kit, Space Game Starter Kit, VR Starter Kit и так далее). Также бывают стартер киты различных игровых элементов, не связанных с геймплеем (Nature Starter Kit с дополнительными природными объектами, Medieval Starter Kit со средневековыми объектами и так далее). По сути, стартер киты выполняют в разработке игры ту же роль, что и фреймворки в программировании. Однако стоит отметить, что использование геймплейного стартер кита принуждает разработчика изучать большое количество чужого кода и чужой структуры для внесения своих изменений и полноценного использования. В связи с этим большинство разработчиков предпочитает писать почти всё с нуля, получая полное понимание работы своей игры. Новичкам крайне не рекомендуется начинать знакомство с Unity со стартер китов.

- Что нужно уметь делать для создания полноценной игры, кроме Unity-разработки?
- Кроме непосредственной разработки игры на Unity, требуется также уметь создавать 3D модели (3ds Max, Blender, ZBrush), 2D рисунки (GraphicsGale, Aseprite, Piskel), текстуры (Substance Designer, NeoTextureEdit), музыку (FruityLoops, Ableton). Не обязательно учить это всё - например, в 2D играх не нужны 3D модели, а музыка необходима далеко не всегда. Также вы можете скачивать элементы для ваших игр на бесплатных сайтах. Если у вас есть деньги, то все необходимые элементы можно заказать у фрилансеров на https://www.fl.ru/ (русскоязычный) или https://www.upwork.com/ (англоязычный).

- Бесплатен ли Unity?
- Можно свободно скачивать, использовать и продавать готовые игры на Unity с лицензией Personal - это абсолютно бесплатно! Но на бесплатной версии при запуске игры будет появляться короткий стартовый ролик "Made with Unity", а также ваши доходы ограничены 100 000 долларов в год. Для снятия этих ограничений нужно приобретать платные версии лицензий Unity. В конечном итоге, платные варианты используются лишь крупными компаниями с огромными доходами, тогда как обычные разработчики в большинстве своём используют бесплатную Personal лицензию.

Обучение

- Язык
Итак, с чего же начать изучение этого замечательного движка? Прежде всего, с изучения языка. Самые основы C# можно узнать на интерактивных курсах здесь:
https://dotnetcademy.net/CSharp/Beginner
или в текстовом туториале здесь:
https://www.tutorialspoint.com/csharp/csharp_quick_guide.htm
Для изучения основ UnityScript выучи вначале основы JavaScript:
https://learn.javascript.ru/
Помни, что далеко не все элементы JS есть в US. Чтобы понять, в чём разница между этими двумя языками, прочти эту статью:
http://wiki.unity3d.com/index.php/UnityScript_versus_JavaScript
Помни, что тебе достаточно одного языка из двух и учить их оба одновременно не нужно.

- Движок
Если ты уже умеешь использовать язык, то можно приступать непосредственно к изучению движка. Крайне рекомендется купить/скачать книгу Unity in action (Unity в действии). В ней подробно описываются множество возможностей движка.
http://www.ozon.ru/context/detail/id/34792570/
Также посмотри на видеотуториалы с официального сайта:
https://unity3d.com/learn/tutorials
Если же ты не любишь видеотуториалы (или не понимаешь разговорный английский) и предпочитаешь текст, то посмотри здесь:
http://catlikecoding.com/unity/tutorials/
Тут крайне подробно описан процесс разработки и приведены примеры кода. Эти туториалы универсальны и описывают множество различных частей игры, от работы с текстурами до генерации карты мира. А вот в этом туториале описыватся разработка двухмерной игры с видом сверху:
https://www.raywenderlich.com/61532/unity-2d-tutorial-getting-started
Это будет полезно, даже если ты планируешь разрабатывать трёхмерную игру. Ни в коем случае нельзя обойти вниманием этот сборник туториалов:
https://noobtuts.com/unity
В нём подробно описывается процесс пошагового создания разных игр - двухмерных и трёхмерных.

Разумеется, все эти туториалы охватывают лишь часть возможностей Unity. Самый надёжный способ выучить Unity - это начать делать игру и по мере разработки гуглить непонятные моменты.

Шапка: http://www.writeurl.com/publish/zukmrogwv45ptyuseyol
Аноним 15/09/20 Втр 11:00:37 6988492
image.png 13Кб, 401x200
401x200
Аноним 15/09/20 Втр 13:12:41 6988683
>>698832 →
Ну там-то вроде и курс по шарпу(а потом по юнити, если ты про полный), поэтому вроде нормально, что там погромач. Но то, что чел просто зачитывает - это печально. Хотя может это просто введение, а потом будет подкрепление с примерами. Я вот думал взять первый месяц за 5к посмотреть, но как-то хз. Я не особо хочу становиться программистом c# со знанием юнити, у меня вообще был план сделать парочку гиперказуалок просто потому что скучно. Решил чекнуть инфоцыган местных и увидел этого странного чела.
Аноним 15/09/20 Втр 13:25:14 6988694
15997395522240.jpg 3Кб, 225x225
225x225
Как лучше работать с данными в юнити?
Например, я хочу иметь что-то типа базы данных абилок, где у меня будут храниться все их параметры, название, иконка, стоимость, кулдаун, и т.д.
Таких абилок может быть много, десятки, сотни, с ними должно быть легко и удобно работать через инспектор, поэтому просто в коде в массивчике хранить не хочу.
Но и префаб на каждую абилку городить не хочу, это кажется неправильным, все-таки это не геймобжект, размещаемый на сцене, а именно набор данных.
Думал про табличку в экселе, и потом импортировать, но тоже не очень удобно, хочется все-таки иконки через инспектор драг н дропом кидать, а не просто прописывать путь.
Есть что-то из коробки в юнити, или надо смотреть в сторону ассетов?
Databox выглядит похожим на то, что мне нужно, но неужели до сих пор нет из коробки похожего функционала?
Аноним 15/09/20 Втр 13:44:07 6988745
15834138583181.png 129Кб, 921x495
921x495
Что будет, если я куплю ассет, использую его в проекте, потом скину проект другу, у которого этого ассета нет, у него он не будет работать? Или когда добавляешь ассет в проект, он копируется в него целиком, и после этого можно запускать этот проект на другой версии юнити без купленного ассета?
Аноним 15/09/20 Втр 13:56:48 6988766
6a96da07172fba0[...].png 113Кб, 499x595
499x595
>>698874
Ассеты импортируются в проект, проблем быть не должно.
Аноним 15/09/20 Втр 15:24:46 6988857
15834138583170.png 68Кб, 658x384
658x384
>>698876
Даже ассеты, которые состоят только из кода, без моделек/текстур/префабов?
Сейчас же даже убрали браузер с ассет стором из юнити, чтобы облегчить редактор, и перевели на package manager, это не значит, что в проекте подключенные ассеты будут качаться через него при первом запуске?

И еще вопрос ко всем в треде, есть ли список must have ассетов, которые стоит по дефолту использовать в любом проекте?
Имею ввиду не ресурсы для игор, а именно полезные расширения редактора или утилиты, которые упрощают и ускоряют разработку.
Например, odin крутая штука, но дорогая, может есть что-нибудь в таком духе, но бесплатное?
Или не бесплатное, но хотя бы не очень дорогое, что стоит купить и потом использовать во всех проектах.
В общем, пишите ваши любимые ассеты, что стоит посмотреть.
Аноним 15/09/20 Втр 16:56:14 6988918
>>698885
Ну я такой ассет и юзал и он импортируется.
Угадай с какой игры спиздил механику Людвиг 15/09/20 Втр 17:02:28 6988929
2020-09-15 17-2[...].mov 6829Кб, 1280x720, 00:00:20
1280x720
2020-09-15 02-0[...].mov 4653Кб, 1280x720, 00:00:16
1280x720
Делаю игру, в которой разными предметами персонажи пользуются по особенному. В планах сделать так, чтобы предметы позволяли пользоваться механиками из ретро игр. Сегодня допилил функционал лопаты. Кто играл в эту игру в детстве?
Аноним 15/09/20 Втр 17:58:00 69889610
1.jpg 69Кб, 600x330
600x330
>>698892
Если бы это были плейсхолдеры, то ты бы не заморачивался на анимацию... Надеюсь этов сё же плейсхолдеры. Иначе мне даже подумать страшно, что у тебя в голове.
Аноним 15/09/20 Втр 18:12:54 69889811
>>698869
ScriptableObject + твой интерфейс ISkill например.
Так ты сможешь переиспользовать свои скилы и менять их параметры через инспектор.

>>698874
Ассет это zip архив, встречал ассеты которые просят тебя регаться на емейл - такие НАВЕРНОЕ не будут работать без твоей учетки, но 99% ассетов просто "вот тебе пара .cs файлов"

Аноним 15/09/20 Втр 18:24:36 69889912
>>698892
>Угадай с какой игры спиздил механику
Изи, Duck Tales
Аноним 15/09/20 Втр 18:26:21 69890113
15749985410790.jpg 7Кб, 217x217
217x217
>>698898
>ScriptableObject
Спс, то что нужно.
Только у меня в голове не укладывается, почему он называется ScriptableObject, если это объект для хранения данных, почему не DataObject, например. Он же не скриптуется, почему scriptable?
Аноним 15/09/20 Втр 18:54:04 69890414
image.png 314Кб, 800x700
800x700
>>698892
Это не плейсолдеры. Я программист а не художник
Аноним 15/09/20 Втр 18:56:08 69890515
>>698896
Кстати, если интересно посмотреть что у меня в голове, предлагаю чекнуть мои посты по разработке. https://pikabu.ru/@Peregon
Аноним 15/09/20 Втр 18:58:45 69890616
>>698905
Всё понятно с тобой.
Аноним 15/09/20 Втр 18:59:38 69890717
>>698905
Тащемта, анимации неплохие, ты всё сам делал?
Где анимировал, спайн или прямо в юнити?
Они у тебя процедурные, завязанные на физику?
Мне только кровищи не хватает на твоих гифках, хотелось бы крови и угара в такой игре, а не просто всплывашку в стиле детских мультиков
Аноним 15/09/20 Втр 19:08:34 69890818
2020-09-15 22-0[...].mov 2459Кб, 1280x720, 00:00:16
1280x720
>>698907
Всё делал сам, анимировал в юнити, часть анимаций процедурные, на физику анимаций не завязано. Есть и кровища. Но пока только в одном из захватов.
Аноним 15/09/20 Втр 19:12:05 69890919
>>698908
Бля, аж взвизгнул с происходящего.
Как монетизировать планируешь?
Думаю, такая игра зашла бы всяким стримерам, которые стримят треш-игры.
Аноним 15/09/20 Втр 19:13:46 69891020
>>698909
На текущий момент ебашу ради процесса, мой изначальный ориентир - Duck game. Поэтому и монетизацию наверное стал делать бы как там, просто пэй ту плей. Одноразовая выплата. Но, в теории, здесь легко клепать скины и всякие элементы кастомизации.
Аноним 15/09/20 Втр 19:27:45 69891121
Аноним 15/09/20 Втр 19:37:05 69891222
>>698911
Я из Казахстана, если вопрос об этом
Аноним 16/09/20 Срд 07:56:36 69897223
>>698901
Наверное под scriptable понимается, что его можно скриптовать, но по факту этого объекта не будет в игре как GameObject-а. Юнете оч старая и скорее всего над неймингами долго не думали, потом так и оставили.
Аноним 16/09/20 Срд 14:09:32 69901324
image.png 2396Кб, 1920x1280
1920x1280
Хочу сделать FOW в topdown игруле. Как в Darkwood. Куда посоветуете копать? Гугл выдает только ассет за 60$, да и всё...
Аноним 16/09/20 Срд 14:14:04 69901525
>>699013
На хабре стетье 10 лет, а это значит что на гавно-мобилках будет 60фпс выдавать в наше время
https://habr.com/ru/post/350396/
Вообще загугли: "habr unity3d 2d shadow", там много результатов и выбери реализацию, которая тебе больше всего нравится/подходит.
Удачи
Аноним 16/09/20 Срд 14:27:15 69901926
>>699013
>FOW
FOV
>быстрофикс

Вот я дебил. Ошибся тут, и ошибся в гугле, введя вообще FOG.
>>699015
Спасибо!
Аноним 16/09/20 Срд 17:10:15 69906027
Привет аноны, в процессе создания игры на мобилки возникла такая проблема: я создал сцену, накинул на нее канвас с кнопками и обработчиком событий. По-моему замыслу при нажатии по экрану в любом свободном месте должна начинаться сама игра, а при нажатии на кнопки соответственно должны срабатывать кнопки. Так вот, в редакторе все работает как надо но при портировании на телефон оно работает через жопу и либо работают кнопки, либо работает тап по экрану для начала игры, а вместе они работать не хотят. Как быть?
Аноним 16/09/20 Срд 17:11:49 69906128
>>699060
> По-моему замыслу при нажатии по экрану в любом свободном месте должна начинаться сама игра
И как это реализовано?
Аноним 16/09/20 Срд 17:15:05 69906429
>>699061
через вот этот if в update
if(Input.GetMouseButtonDown(0) && cubeToPlace != null && allCubes != null && !EventSystem.current.IsPointerOverGameObject())
Аноним 16/09/20 Срд 17:17:36 69906730
>>699064
> cubeToPlace != null && allCubes != null
Хуй знает что это у тебя за условия такие, но что будет если их выкинуть из конструкции?
Аноним 16/09/20 Срд 17:21:32 69906831
>>699064
Что за хуйню ты наговнокодил?
Делаешь обьект картинку на весь экран, поверх ставишь кнопки, эвент тригер при нажатию на картинку->начать игру, при нажатие на кнопки вызвать функции кнопок.
Аноним 16/09/20 Срд 17:23:02 69906932
>>699064
> EventSystem.current.IsPointerOverGameObject()
> в редакторе все работает как надо но при портировании на телефон оно работает через жопу
Может быть, потому что на телефоне нет указателя мышки?
Аноним 17/09/20 Чтв 19:16:05 69930733
>>698912
Бро, здесь все из Казахстана.
Это казахстанская доска на самом деле, но об этом не принято говорить вслух.
Аноним 18/09/20 Птн 00:43:09 69934134
>>698849
Слейте на трекер
>/thread
Аноним 18/09/20 Птн 01:18:11 69934335
33cb33bca42f8ec[...].png 1043Кб, 794x798
794x798
для тех кто не очень часто читает ченджлоги оповещу, что в новой бете (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, то теперь ты не долбоёб. принимай поздравления анон
Аноним 18/09/20 Птн 02:20:23 69934536
>>699343
>то теперь ты не долбоёб
Человек, опередивший время.
Аноним 18/09/20 Птн 11:28:06 69939237
>>699343

Заебись, пошли на поводу у школьников-говноделов, найс.



Это как майкрософт пихала кучу костылей в ядро NT что бы какой-то там Sim City, эксплуатирующий недокументированное поведение своим говнокодом шёл.
Аноним 18/09/20 Птн 14:01:34 69943238
>>699392
в данном случае это не костыль и, честно говоря, я рад введению. но когда читал, то деда включил и примерно так же жаловался
Аноним 18/09/20 Птн 15:04:54 69944939
>>699392
>Это как майкрософт пихала кучу костылей в ядро NT что бы какой-то там Sim City, эксплуатирующий недокументированное поведение своим говнокодом шёл.
Подробнее, пожалуйста. Интересно было бы почитать.
Аноним 18/09/20 Птн 15:27:44 69946040
Аноним 19/09/20 Суб 22:08:30 69966441
aa1.jpg 7Кб, 600x400
600x400
aa2.jpg 23Кб, 600x400
600x400
Почему в нормальных играх cutout антиалиасится, а в юнити нет?
Аноним 20/09/20 Вск 10:09:23 69969442
huyunity.jpg 10Кб, 560x159
560x159
Зачем я только обновился с LTS до 2020.1 (даже не бета 2020.2), теперь в случайные моменты редактор зависает и только убийство процесса помогает.
Господи, почему в юните с каждым патчем появляются более жуткие баги...
Аноним 20/09/20 Вск 18:42:09 69981443
Как нужно делать карты для 2д игры?
Grid, Tilemap, все дела. по 1 размеру, никаких доп настроек. Заливка отключена в настройках. Стоило в 2 слоя покрасить 100x100 клеточек примерно(очень маленькая область), как все начинает дико зависать, то есть не не в процессе игры, а именно становится невозможно дальше оперировать редактором с этой сценой, на которой только один Grid с Tilemap-ом.

Я, конечно, знаю много альтернативных решений, по типу генерации карты в реальном времени, прогружая кусками, можно как-нибудь напердолиться, но я думал раз уже все придумали до меня, раз есть редактор и такая возможность, то значит надо нарисовать всю карту, и там уже плясать от этого, активуруя объекты и двигая камеру. Все таки 100х100 и так лагать мне не дает покоя, я что-то не так понимаю, объясните плиз.
Аноним 20/09/20 Вск 22:08:53 69983844
Юнитач, хочу сделать так, чтобы в конце уровня игрок мог выбрать 1 из 3 случайных улучшений. Т.е в конце раунда на экране появляется UI на котором три кнопки - игрок нажимает одну из них и загружается следующий уровень.

Как сделать так, чтобы улучшения, которые предлагаются игроку, выбирались рандомно из пула?
Есть идея просто добавить их все как отключённые кнопки в UI и включать через foreach child'ы этого UI, пока их не включится 3. Но мне кажется есть вариант получше
Аноним 21/09/20 Пнд 05:47:30 69985645
>>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 фпс во всяком случае
Аноним 21/09/20 Пнд 08:22:52 69986146
>>698843 (OP)

Ну че там, этот ваш дата ориен тированный подход в прод уже выкатили? Как там оптимизаторный гений из сонибляди наоптимизировал, летать стало?
Аноним 21/09/20 Пнд 08:33:34 69986347
>>699856
Редактор, говорю же. На сцене ничего кроме этого нет.
Никакой физики вообще, вообще ничего.

Не хочу накаркать, пока детально не смотрел, но кажется частично решил проблему - надо выделять куски и делать Break Prefab Instance, вроде я даже поле дорисовал, не знаю как дальше пойдет.

>1к на 1к на ноуте
На это буду ориенироваться, сяп.
Аноним 21/09/20 Пнд 21:33:13 69997648
>>698843 (OP)

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 бесплатно.

Вот пидары, могли бы асетстор сделать бесплатным.
Аноним 21/09/20 Пнд 22:26:20 69998149
image.png 80Кб, 1015x602
1015x602
Сосонг, что такое Editor Loop?
Аноним 21/09/20 Пнд 22:37:18 69998250
>>699981
Рендер редактора юнити.
, 22/09/20 Втр 01:53:53 69999851
Где можно почитать, посмотреть пример годной архитекторы не совсем простой 2D игры? Делаю игру, но мучает ощущение, что путаюсь в сущностях и есть некоторая неконсистеность
Аноним 22/09/20 Втр 12:49:20 70000952
ананасы! последнее время страдаю каким-то ебаным декаплингом и разбиением на кучку скриптов и не знаю нужно ли так делать. начну с того что в основном всё что я делаю это 2д. привожу пример:

2д платформер
есть персонаж, он должен уметь ходить и прыгать

делаю скрипт с инпутом. он отслеживает нажатие кнопок и вызывает свои события например так:

>PlayerInput.cs
public event Action onJumped;
private void Update() {
if (Input.GetKeyDown("space")) {
onJumped?.Invoke();
}
}

этот скрипт вешается на песонажа и создаётся обработчик событий, например

>PlayerActions.cs
public void onJumped;
private void PlayerInput _input;
private void Awake() {
_input = GetComponent<PlayerInput>();
}
private void OnEnabled() {
_input.onJumped += Jump;
}
private void Jump() {
if (_isGrounded == false) {
return;
}
_rigidbody.velocity.y = 5;
onJumped?.Invoke();
}

как вы могли заметить тут есть точно такое же событие onJumped, но нужно оно для того чтоб к нему мог подключиться другой скрипт это событие уже вызывается после проверки, в данном случае _isGrounded; (стоит ли персонаж на земле)

и третий скрипт у меня отвечает за анимации

>PlayerView.cs
private void PlayerActions _actions;
private void Awake() {
_actions = GetComponent<PlayerActions>();
}
private void OnEnabled() {
_actions.onJumped += Jump;
}
private void Jump() {
GetComponent<Animator>().SetTrigger("Jump");
}

Отсюда вопрос: не слишком ли я всё усложняю? с одной стороны я могу добавить ещё скрипт который будет отвечать за стрельбу и он будет отдельным небольшим файлом, а с другой у меня получается очень дохуя мелких скриптов. не знаю стоит ли так дробить. и возможно делать такие связи через event Action не самая лучшая затея? есть у кого соображения на эту тему?
Аноним 22/09/20 Втр 14:34:34 70001653
>>700009
Оо, таким же шаблоном реализую логику, задаюсь теми же вопросами.
Как альтернатива смотрел https://m.habr.com/ru/post/281783/ - тип любой скрипт можно дёрнуть через дерево appkication>controller>...
Проще отследить, что на что завязано, но все как-то гвоздями прибито. Я ещё думал о dependency injection, но тут сложности с инъекцией конструктора у monobehavior из-за особенностей инициализации
, 22/09/20 Втр 16:56:06 70003454
>>700009
Ещё, как вариант, отдельный класс для рассылки сообщений. Оба класса чарактера подписываются на событие с конкретным названием, а плееринпут его бродкастит - все это происходит через Мессенджер. Мессенджер содержит список всех методов, которые подписались на это сообщение и вызывает их всех. И в итоге тебе не нужно отдельно из чар контроллера ещё вью дергать
Вот, кажется, пример реализации http://wiki.unity3d.com/index.php/Advanced_CSharp_Messenger
Аноним 22/09/20 Втр 19:25:30 70005355
OnCollisionEnter2D, как и Stay и Exit не работают
тот же Trigger работает идеально
Я rigidbody есть и там и там, тестировал разные типы, галка стоит\не стоит, область коллайдера нормального размера(иначе бы trigger не работал).
И тем не менее, OnCollision не работает, я уж думал он Deprecated, но нет.
Всегда обходился без него, а тут понадобилось сделать стенки, нужна информация о стороны с которой произошло столкновение, Collision.GetContacts то бишь. Но я не могу получить данные потому что сообщение OnCollision не работает.
Ломаю голову как определить сторону столкновения с OnTrigger. Сталкивался кто?
Аноним 22/09/20 Втр 20:17:48 70006356
>>700053
on trigger enter дает же коллайдер other со ввсей хуйней не?
Аноним 22/09/20 Втр 20:31:56 70006757
>>700063
Нет. \\This collider is attached to the Collision2D.otherRigidbody.
Trigger оповещает что дескать есть столкновение с чем-то, но он не надет данных о самом столкновении. Только само столкновение, логично, дает данные о столкновении.
https://docs.unity3d.com/ScriptReference/Collision2D.GetContacts.html
А для этого надо получить сообщение которое не работает ><.
Аноним 22/09/20 Втр 21:02:24 70007258
>>700067
я тож с on collision не работал
хуй знает, проверь чтобы ригибади был не кинематик

если тебе надо просто сторону с которой пришло столкновение то
vector3 direction = (other.transform.position - this.transform.position).normalized;
Аноним 22/09/20 Втр 21:57:45 70007459
Аноним 23/09/20 Срд 02:38:44 70010060
>>700074
рейкастик пульни тогда и получи точку, как чувачок там и предлагает
Аноним 23/09/20 Срд 06:28:49 70010561
>>700100
О, дошло, премного благодарен!
Аноним 23/09/20 Срд 06:56:25 70010662
>>700009
Чеб нет, но мне кажется сложно, обычно лучше делать ДЕКОМПОЗИЦИЮ вместо ДЕКАПЛИНГА т.к. композиция была был такой:
components = new IComponents[new OnJump(this), new OnShoot(this)];
и в update: components.ForEach(com => com.Update());
Плюсы: легко добавлять и удалять компоненты без анальной event += -=, придется использовать интерфейсы, а не реализацию, а значит эти же компоненты сможешь использовать для врагов (переиспользование короче)
>>700016
Я юзал DI, есть специальные для юнете, нашел на хабре заготовку и допилил под свои нужды.
>>700034
Медленно работает, так же как и GetComponent
Аноним 23/09/20 Срд 07:13:37 70010763
>>699976
Это ты пидор тупой, все юнитивские ассеты и так всегда бесплатными были, за бабки продаются аутсорсные авторские ассеты, это стимул независимым разрабам и художникам делать контент и высталвять его на продажу.
Аноним 23/09/20 Срд 09:34:07 70011464
UNET по дефолту выпилен из Unity 2019. И планируется быть замененным. Значит я зря сейчас читаю про мультиплеер в оф доках. Что сейчас использовать для создания мультиплеерной игры в юнити, аноны?
Аноним 23/09/20 Срд 09:45:45 70011665
>>700072
>>700100
Кстати нашел еще способ решения проблемы. Просто к объекту добавлять еще 4 объекта на каждом из которых будет по коллайдеру.
Аноним 23/09/20 Срд 10:08:33 70011966
>>700106
Почему медленно? Просто лист с ссылками на конкретные методы дергается
Аноним 23/09/20 Срд 10:12:37 70012067
>>700106
Про Di и хабр - это где инъекция свойства? Там ж все вручную?
Аноним 23/09/20 Срд 12:24:52 70015368
есть задача сохранять кучу мелких спрайтов в текстуру. на пол проливается много кровищи и после того как я спрайт лужи растянул хочу сохранять его в текстуру пола и сам спрайт удалять ибо память надо экономить. подскажете в какую сторону смотреть?
Аноним 23/09/20 Срд 12:44:13 70016569
>>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, из минусов - встречаются баги т.к. пилится парой бразильцев.
Можешь взять фотон (как, видимо, делают все), а можешь подождать пару лет и возможно выйдет что-то новое для сети (но что они могут придумать? все уже придумано)
Аноним 23/09/20 Срд 15:19:21 70019970
>>700165
>Тоже думал, взял colyseus, из минусов - встречаются баги т.к. пилится парой бразильцев.
>Можешь взять фотон (как, видимо, делают все), а можешь подождать пару лет и возможно выйдет что-то новое для сети (но что они могут придумать? все уже придумано)

Я в интернете увидел советы использовать Mirror. Colyseus и Photon лучше?
Аноним 23/09/20 Срд 15:27:56 70020171
>>700165
>Просто так менять спрайт нельзя

мне спрайты менять не надо. надо их запекать в текстуру чтоб у меня не было огромного кол-ва спрайтов луж крови на сцене. наверное стоит добавить что сцена вся 2д
Аноним 23/09/20 Срд 18:02:52 70021072
Двощ спасай. Делаю мобилку, в эдиторе всё выглядит нормально, а на телефоне качество картинки очень сильно падает.
Аноним 23/09/20 Срд 18:39:11 70021773
>>700210
Это была проблема Unity Remote, скачал АПК, установил - картинка нормальная.
Другой вопрос - как сделать так, чтобы спрайты растягивались под разрешение экрана?
Аноним 23/09/20 Срд 19:58:14 70022074
150635-annotati[...].jpeg 35Кб, 550x449
550x449
кто знает как в URP сделать чтоб камера себя не очищала в каждом кадре? мне нужен Don't Clear на скриншоте, только для URP
Аноним 23/09/20 Срд 20:11:43 70022175
>>700220
ну или что-то в том духе. у меня есть текстура на которую рендерится одна из камер. там система частиц выдаёт частицы разного цвета и они должны намазываться на предыдущие создавая относительно психоделический эффект
Аноним 23/09/20 Срд 20:27:49 70022276
Аноним 23/09/20 Срд 20:32:53 70022577
>>700222
>Зачем тебе URP?
испльзую shader graph и vfx graph
Аноним 23/09/20 Срд 22:04:48 70023178
Посоны, подскажите с вопросом. Есть NavMeshAgent в сцене, двигается в точку нажатия мышкой. Как детектить его прибытие в точку назначения? Мне нужно, чтобы после остановки проигрывался звук и менялся цвет, но я не могу понять, как прописать завершение движения.
Аноним 23/09/20 Срд 22:40:49 70023479
image.png 30Кб, 557x409
557x409
Юнитач, есть сцена пикрелейтед. По нажатию кнопки корабль должен устанавливать таблетку под собой в центре условной клетки, если эта клетка пустая. Функционал установки таблетки должен быть реализован через работу с координатами коллайдеров астероидов, находящихся вокруг корабля. (пересечение коллайдеров)

Как это сделать? Может я просто что-то не так понимаю, но натурально в душе не ебу как это реализовать.

да, юнитач, это ТЗ, с меня тонны нефти
Аноним 23/09/20 Срд 22:45:22 70023580
>>700234
> как это
способов много, начни делать монолитно, как станет тяжело читать сразу начнешь разгребать функционал
Аноним 23/09/20 Срд 22:58:57 70023781
>>700235
>способов много
Ну, мне нужна наводочка хоть на какой, потому что голова уже вообще не варит.
Аноним 23/09/20 Срд 22:59:39 70023882
>>700234
а нахуя тебе знать координаты коллайдеров если ты просто можешь округлять положение таблетки?

типа:

Vector3 spawnPosition = new Vector3(Mathf.Round(ship.transform.position.x), Mathf.Round(ship.transform.position.y), 0f);

Instantiate(pillPrefab, spawnPosition, Quaternion.identity);
Аноним 23/09/20 Срд 23:03:16 70023983
>>700238
По условиям ТЗ нужно сделать именно так, если бы не это я бы уже давно закончил
Аноним 23/09/20 Срд 23:06:54 70024084
>>700239
я просто не пойму, типа корабль может залетать на астероиды и тогда нужно делать проверку? или таблетка может быть установлена только между двумя астероидами?
Аноним 23/09/20 Срд 23:10:20 70024185
>>700240
На астероиды корабль залетать не может, таблетку как я понимаю можно установить только рядом с астероидом
Аноним 23/09/20 Срд 23:14:02 70024286
Аноним 23/09/20 Срд 23:35:01 70024487
>>700242
Нужно чтобы таблетка ставилась ровно посередине в центре условной координаты, даже если корабль стоит чуть сбоку. И нужна проверка не стоит ли уже на этой координате таблетка.
Аноним 23/09/20 Срд 23:40:44 70024588
>>700244
ну тогда делай как я выше писал
Vector3 spawnPosition = new Vector3(Mathf.Round(ship.transform.position.x), Mathf.Round(ship.transform.position.y), 0f);

это округлённая координата твоего корабля.

и делай Physics2D.CircleCast на этой же координате. только не забудь исключить слой с самим кораблём. тебе Physics2D.CircleCast сообщит были ли там коллизии и если их нет, то ставь таблетку
Аноним 23/09/20 Срд 23:45:13 70024689
>>700245
Проблема в том, что все астероиды стоят с небольшим смещением по X координате, поэтому каждый из них чуть правее\левее и при округлении таблетки ставятся не на нужную координату, а со смещением На пике этого не было видно, я проебался чутка
Аноним 23/09/20 Срд 23:57:06 70024890
16008900507630.png 27Кб, 557x409
557x409
>>700246
а зачем так сделано? сделай верно. как тебе ещё вычислить координату Х? например в этом положении у тебя рядом только один коллайдер и тут в лучшем случае можно получить Y ко коллайдеру
Аноним 23/09/20 Срд 23:59:55 70024991
>>700248
Ну я же говорю, такое ТЗ, нужно чтобы они стояли со смещением. Если хочешь дай ТГ - скину тебе его полностью, чтобы понятней было.
Аноним 24/09/20 Чтв 00:03:01 70025192
>>700249
а сюда кинуть нельзя чтоль? хуле мне тут свой тг палить
Аноним 24/09/20 Чтв 00:14:47 70025593
image.png 34Кб, 739x393
739x393
>>700251
Как-то так. + все астероиды смещены в сторону, пикрил.
При нажатии на правую часть экрана, корабль должен устанавливать таблетку. (DONE)

Таблетка может быть установлена только в пустую клетку

Таблетка должна быть установлена в середину клетки.

Функционал установки таблетки должен быть реализован через работу с координатами коллайдеров камней, находящихся вокруг корабля (пересечение коллайдеров)
Аноним 24/09/20 Чтв 00:29:45 70025794
16008956888860.png 36Кб, 739x393
739x393
>>700255
если я верно понял, то пустые клетки это те что я отметил красным. тогда делается следующим образом:

тебе нужно сделать Physics2D.CircleCast из положения своего корабля с радиусом который может захватить 4 астероида, но не больше (синий круг). тут нужно не забыть, что нужно использовать contactFilter чтоб игнорировать сам коллайдер корабля, иначе корабль будет возвращаться в результате коллизий тоже

CircleCast возвращает int значение с кол-вом коллайдеров с которым он взаимодействует и ещё заполняет массив RaycastHit2D[] всеми хитами.

тебе нужно чтоб CircleCast вернул 4 и чтоб все коллайдера были астероидами. для нубского варианта прокатит и по тегу проверка.

таблетку ты будешь ставить по координатам хитов (x1 + x2 + x3 + x4) / 4 и (y1 + y2 + y3 + y4) / 4 и тогда она будет точно там где красная точка
Аноним 24/09/20 Чтв 00:39:40 70025895
>>700257
Завтра уже как проснусь попробую, спасибо.
Аноним 24/09/20 Чтв 05:41:36 70026296
>>700199
Колизеусом я сейчас пользуюсь и он мне нравится больше чем стандартное юнете решение.
На фотоне уже тонна игр сделана и туториалов, будет легко разобраться.
>Mirror
Ага, видел что советуют, сам не пользовался, можешь попробовать

>>700201
Я хотел сказать, что если ты создашь спрат с размерами 1,1,1 и отскейлишь его до 2,2,2 тебе нужо будет посчитать world distance т.к. текстура будет мылиться
Аноним 24/09/20 Чтв 07:01:21 70026697
>>700153
DECAL
E
C
A
L

https://docs.unity3d.com/ru/530/Manual/shader-NormalDecal.html

В этом направлении и двигайся. Позиция декалей должна расчитываться кастомно, это все через шейдерграф можно настроить.

Перезаписывать текстуру через интеграцию спрайта еще больше говна поешь, т.к. сначала придется спрайт переводить в текстуру, потом перезаписывать саму базовую (фоновую) текстуру. Охуеешь от того как это ресурсоемко, особенно если фоновая текстура имеет большое разрешение.
Аноним 24/09/20 Чтв 07:03:50 70026798
>>700217
Screen.width даст ширину экрана, под него подгончешь спрайт.
Аноним 24/09/20 Чтв 07:07:41 70026899
>>700231
Вешаешь скрипт на объект который двигается, в нем запоминаешь ссылку на объект NavMeshAgent, в скрипте в апдейте сравниваешь NavMeshAgent destination с положением объекта с каким-то округлением, если положение совпало делаешь свои грязные вещи. Ну еще как-то нужно фильтровать что объект не сдвинулся с последней точки которой он достиг, думаю сам придумаешь.
Аноним 24/09/20 Чтв 08:11:12 700271100
>>700231
if(navAgent.remainingDistance < 0.1){
navAgent.stop();
PlaySound();
}
Аноним 24/09/20 Чтв 11:53:01 700274101
Аноним 24/09/20 Чтв 12:46:53 700276102
>>700257
Можно как-то через ContactFilter игнорировать все, кроме астероидов?
Пробовал сделать через filter.layerMask = AsteroidLayerMask, но дебаг всё равно показывает коллизию и с игроком, и с границами поля. Не совсем понимаю как ContactFilter работает, а мануал не спасает
Аноним 24/09/20 Чтв 12:53:53 700278103
>>700276
Только написал и сам разобрался
Аноним 24/09/20 Чтв 16:23:06 700295104
image.png 14Кб, 380x191
380x191
Сосонг, как установить поддержку Android 4.2+?
Или я что-то не понимаю и Android 4.4 будет поддерживать и меньшие версии?
Аноним 24/09/20 Чтв 16:49:20 700297105
Два вопроса юнити господам. У меня прила на юните. То есть полный аналог андроид материала, только на юнете. Меня волнует
1)Почему фпс падает при переходе с 2019.2 на более новые версии? Рили печёт с этого.
2)Кто-нибудь уже работал с on demand rendering api? Как оно? Я делал тесты, и не скажу что батарея очень сильно экономится.
Аноним 24/09/20 Чтв 17:08:42 700299106
Аноним 24/09/20 Чтв 17:35:01 700300107
>>700257
>таблетку ты будешь ставить по координатам хитов (x1 + x2 + x3 + x4) / 4 и (y1 + y2 + y3 + y4) / 4
Почему-то вычисляются пивот поинты, не могу понять как изменить на центр. Бтв работает, спасибо.
Аноним 24/09/20 Чтв 17:43:46 700301108
>>700300
>Почему-то вычисляются пивот поинты
вроде пивотпоинты обычно и являются центрами, но если тебе нужен центр коллайдера, то в массиве RaycastHit2D[] у каждого элемента ты можешь взять .collider.bounds.center
Аноним 24/09/20 Чтв 22:40:16 700340109
у меня на сцене много юнитов, ну например 5000, и они идут в сторону башни. башня должна атаковать ближайшего юнита. 5000 опросов дистанции в кадре это очень тяжело для мобилы. есть клёвые варианты решения этой проблемы?
Аноним 25/09/20 Птн 05:25:28 700355110
>>700340
Если у тебя все 5000 солдат в массиве или листе - нет, не сложно, твой компик миллиард таких операций делает в секунду.
А если очень хочется, можешь посмотреть на Unity.Jobs - звучит как то, что тебе нужно - будет паралельно на всех потоках считать дистанцию
Аноним 25/09/20 Птн 08:25:11 700358111
>>700340
У башни очевидно есть дальность стрельбы? Значит делаем радикальный таргет и опрашиваем только тех кто в него вступил. Если юниты движутся с одной скоростью то ещё лучше, просто записываем по очереди всех юнитов которые старгетились и по этой же очереди потом их расстреливаем.
Аноним 25/09/20 Птн 12:43:52 700368112
>>700340
Сортированый список, от ближайшего к дальнему
Аноним 25/09/20 Птн 18:11:23 700580113
>>700355
к сожалению это не так. собери простой проект, сделай инстансы спрайтов и считай между ними расстояние. ты удивишься как быстро начнёт загибаться приложение

>>700358
что такое радикальный таргет? юниты движутся не с одной скоростью

>>700368
мне этот список сортировать же постоянно надо, следовательно в каждом кадре нужно замерять расстояние

пока что я сижу читаю про quadtree, но похоже что и этого мало. есть вариант с расчётом дистанции внутри compute shader, но это на данном этапе слишком сложно

Аноним 25/09/20 Птн 19:23:48 700604114
>>700580
Для дохуища объектов как раз и придумали всякие ECS и Jobs. Или используй их, или терпи слайд-шоу. Никаких заклинаний не существует.
Аноним 25/09/20 Птн 19:26:14 700605115
>>700340
мне кажется можно разбить на клетки игровое поле
так збс и столкновения находить, и для твоей задачи тоже ок
Аноним 25/09/20 Птн 19:42:10 700606116
Сколько платят за 30 секундный рекламу без скипа за снг пользователя?
ПРОБЛЕМКА Аноним 25/09/20 Птн 22:50:26 700617117
Безымянный4.png 24Кб, 721x544
721x544
Безымянный5.png 147Кб, 1323x673
1323x673
Сап двач, почему у меня Unity обратно не меняет размер объекта? По логике же всё отлично вроде как
Аноним 26/09/20 Суб 00:05:55 700618118
>>700617
Добавь else перед вторым if'ом.
У тебя он выполняется сразу же после первого if'а
Аноним 26/09/20 Суб 15:18:43 700658119
>>700618
Так странно, вчера пробовал с else, и тоже ничего не работало. А сейчас решил перепроверить, перед тем как тебе написать, и вдруг внезапно всё заработало

Люблю программирование. Спасибо всё равно
Аноним 26/09/20 Суб 15:26:27 700660120
>>700618
Но почему с if не работает? По идее он же должен одно из этого выполнять, так как они противоположны
Аноним 26/09/20 Суб 16:27:13 700665121
>>700660
в первом иф устанавливаешь значение в true, и во втором сразу же проверяешь
Аноним 26/09/20 Суб 17:30:54 700674122
>>700665
Но ведь если в первом if будет true, то во втором if будет false по условию. И наоборот: если в первом false, то во втором true

Разве не должно в таком случае выполняться только одно из условий?
Аноним 26/09/20 Суб 18:20:30 700676123
>>700617
Поясняю -

if(cubeisbig)
{
Если bool - true выполняем эти действия
}
else
{
Если bool - false эти
}

Всё, тут нечего ебаться, одновременно они никак не могут выполниться даже если во время тика произойдёт изменение этой самой bool.
Боже хотя бы основы программирования изучили, или хотяб уроки с ютуба поделали, основы основ же.
Аноним 26/09/20 Суб 18:20:57 700677124
>>700674
В первом if ты ставишь cubeisbug = true, после него сразу выполняется второй if, который принимает твое cubeisbug = true и возвращает к cubeisbug = false.

Если во втором добавишь else if (или просто else) - оно не будет выполняться, если выполнилось действие до него

прим.
if (оп = хуй)
{
оп != хуй
}
else if (оп != хуй)
{
оп = хуй
}


Если оп у нас хуй, то выполнится первое действие, а второе - нет. Если же тут будет if + if, то выполнится сначала первое, потом второе.



Аноним 26/09/20 Суб 21:02:49 700693125
Не очень понимаю, как корректно организовать взаимодействие сущеностей. Как лучше организовать архитектуру, чтобы норм было? Есть какая-то обучающая инфа по архитектуре всего проекта?
Аноним 26/09/20 Суб 21:05:15 700694126
1026061260.jpg 279Кб, 838x1200
838x1200
>>700693
SOLID тебе в помощь.
И пикрилейтед.
Аноним 26/09/20 Суб 21:12:28 700696127
Аноним 26/09/20 Суб 21:43:01 700698128
>>700674
ты в первом ифе условие меняешь а
саму переменную меняешь, которую потом проверяешь
Аноним 26/09/20 Суб 21:46:21 700699129
Аноним 27/09/20 Вск 07:03:07 700736130
Анончик, тут назрел такой вопрос

У меня есть нерабочий скрипт foo.cs (на самом деле у меня там сотни таких скриптов - это древний ассет, который на новой юньке не работает - но там много того что мне подходит, куда я смотрю).

Как сделать чтобы гребанная юнити игнорировала этот скрипт? Потому что хотя этот скрипт нигде не используется - я не могу из-за него свой же проект запустить в редакторе.

Он мне нужен для примеров. Переименовывать не вариант - удобно смотреть в студии, плюс пользоваться всякими поиском определений чтобы быстро находить нужное.

Неужели в юнити не завезли опцию с которой я бы мог указать что этот скрипт ей не нужен для компиляции? В студии же так можно делать

Я просто заебался два проекта юнити запускать. Ноут, неудобно, да еще и тормозит.
Аноним 27/09/20 Вск 07:34:38 700738131
>>700736
В самое начало скрипта пишешь "#if false", а в самый конец "#endif"
Аноним 27/09/20 Вск 08:25:34 700741132
>>700736
Если файлов много, то можно попробовать добавить в начало названия папки, где они лежат добавить "~" или ".", тогда юнька их будет игнорировать
Как убрать шлейф за синим прицелом? Аноним 27/09/20 Вск 16:49:42 700786133
x.mp4 7448Кб, 1840x1024, 00:00:09
1840x1024
Как убрать шлейф за синим image? ничего не гуглится.
Аноним 27/09/20 Вск 17:03:43 700788134
>>700786
думаю это твой ебучий монитор
Аноним 27/09/20 Вск 17:09:45 700789135
>>700788
Я же видео записал на компе а не с монитора
Аноним 27/09/20 Вск 17:10:43 700791136
>>700789
дык у меня шлейфа на твоём видео и нет
Аноним 27/09/20 Вск 17:12:09 700792137
>>700791
ну проскакивает слева справа от синих штук - видно же
Аноним 27/09/20 Вск 17:13:38 700794138
>>700792
у меня на экране ничего не проскакивает, потому я и думаю что это твой ебучий монитор
Аноним 27/09/20 Вск 17:19:13 700796139
>>700792
Бля, да походу монитор ебучий - посмотрел на паузе
Аноним 27/09/20 Вск 19:14:30 700823140
Аноним 27/09/20 Вск 23:38:56 700844141
transparent.png 798Кб, 2141x1232
2141x1232
Почему материал с прозрачной текстурой не отбрасывает тень?

У юнити уже имеется такая встроенная фича?
Аноним 28/09/20 Пнд 02:37:26 700849142
hdrp.png 902Кб, 1963x742
1963x742
Короче это работает только в HDRP режиме с флажком Alpha Clipping
Аноним 28/09/20 Пнд 11:31:16 700886143
>>700340
ECS + JOBS. Со столь объемным массивом объектов только так, придется изучать эту область. Но работать будет заебись.
Аноним 28/09/20 Пнд 11:51:02 700887144
Есть три класса: Incel, Listva, Sich, которые наследуют от общего класса Dvacher, который наследует от монобихевиора.

Класс двачер имеет открытые поля и абстрактный метод PuknutVTred().

Каждый из трех классов имеет свои уникальные поля и методы.

Реализуемый метод PuknutVTred вызыватся во всех экземлярах классов инцел, листа и сыч через цикл по списку типа Dvacher.

Вопрос - как из списка объектов Dvacher получить ссылки на объекты инфела, листвы и сыча?
Аноним 28/09/20 Пнд 12:24:05 700888145
>>700887
Загугли что такое интерфейсы, скорее всего это то что тебе нужно.
Аноним 28/09/20 Пнд 18:26:56 700938146
image.png 22Кб, 480x332
480x332
Аноним 28/09/20 Пнд 21:03:31 700979147
01.png 20Кб, 412x779
412x779
02.png 11Кб, 599x337
599x337
03.png 7Кб, 979x512
979x512
>>700887
Не сильно понял что тебе нужно. Это?
Аноним 28/09/20 Пнд 21:35:37 700982148
>>700979
нужно получить ссылку на объект, как там написано было. Т.е., я так понимаю, что речь идет о том, чтобы из листа dvachers по вызову индекса, например, dvachers[0] можно было вернуть экземпляр не родительского класса, а именно экземпляр класса Incel, т.к. он имеет индекс 0; по dvachers[1] получить экземпляр Listva и т.д.

Аноним 28/09/20 Пнд 23:09:09 700991149
>>700982
Ну в примере так оно и есть. Так как ты не знаешь, какой именно наследник находится по данному индексу, нужно делать проверку через is.
Аноним 29/09/20 Втр 06:01:20 701006150
>>700991
В примере не возвращается экземпляр класса, а вызывается метод в нем.
Аноним 29/09/20 Втр 06:14:22 701007151
>>701006
Так у тебя есть ссылка на него, делай с ним что хочешь, хоть метод вызывай, хоть в рот еби.
Аноним 29/09/20 Втр 12:39:11 701087152
image.png 357Кб, 600x337
600x337
как сделать такую яркую картинку?
Аноним 29/09/20 Втр 14:26:13 701133153
>>701087
Использовать такие яркие цвета.
Аноним 29/09/20 Втр 17:58:02 701300154
01.png 12Кб, 1073x638
1073x638
У меня есть условная платформа, которая рандомно скейлится на Instantiate(). Я хочу, чтобы она использовала тайлящийся спрайт, но изменение скейла объекта в трансформе растягивают его, а не тайлят, даже если в спрайт рендере включет тайлинг.
Вопрос: как можно имплементировать скейлозависимый тайлинг спрайтов?
Желательно легковесный на ресурсы, это гиперказуалка на мобилки.
Аноним 30/09/20 Срд 00:36:56 701383155
Привет, двач. Сегодня начинаю изучать юнити и постепенно делать на нем небольшую 2D стратегию. Eсли что, поможете? Я знаю C# более-менее, но игры на нем никогда не писал (только "змейку" в System.Drawing).
Аноним 30/09/20 Срд 13:23:09 701416156
>>701383
>Сегодня начинаю изучать юнити и постепенно делать на нем небольшую 2D стратегию
И ты уже обосрался с масштабом.
Если уже делал змейку, то сделай её ещё раз, но на юньке. А ещё лучше понг. А потом простенький платформер или раннер. А потом тетрис.
Стратегии это невъебенно сложный жанр требующий понимания движка которое приходит спустя месяцы дроча.
Аноним 30/09/20 Срд 13:46:10 701420157
>>701416
Понг только что закончил делать, по туториалу. Моя "стратегия" - это игра наподобие Plants vs Zombies, по которой тоже есть туториалы, причем даже не высокого уровня (180 строк кода).
Аноним 30/09/20 Срд 18:56:47 701476158
>>700886
я написал quadtree и моя проблема ушла. поднял фреймрейт с 20 до 110
Аноним 30/09/20 Срд 19:58:24 701483159
Есть годные туториалы которые учат делать менюшки? Желательно с кучей вкладок и сменяймых окон
Можно на английском
Аноним 02/10/20 Птн 06:56:02 701695160
У меня есть юниты и соответственно компонент их характеристик. Статы у юнитов различаются. Это нормальная практика, когда изменения в характеристиках прописаны в самой иерархии объектов?
Я просто не представляю как это сделать скриптово. Разве что сделать один компонент уникальный для каждого юнита, а второй, общий, будет перенимать из него статы. (Сам задал вопрос, сам ответил)))) Но все равно хочу услышать ваше мнение по поводу практики и как лучше делается это.
Аноним 02/10/20 Птн 09:00:00 701698161
>>701695
Создаётся скрипт база всех юнитов(характеристики), при создании юнита от туда по его id назначаются нужные характеристики, это самое лучшее решение. Если же у каждого юнита свой скрипт с назначение, это тоже решение но намного хуже оптимизированное, и сложнее отлаживаемое.
Аноним 02/10/20 Птн 09:21:56 701701162
>>701698
Я правильно понимаю, если у меня на один юнит примерно 30 характеристик, всего юнитов 10, то в скрипте-базе должно быть 300 строчек характеристик?
Аноним 02/10/20 Птн 09:27:02 701702163
>>701701
>создаешь один скрипт с хар-ками через [serializedField]
>вешаешь на всех юнитов
>настраиваешь через инспектор
>сохраняешь префабы
>???
>Profit
Аноним 02/10/20 Птн 09:46:59 701704164
>>701702
А, то есть все таки через инспектор\иерархию.
Ладно, спасибо, главное не запутаться.
Аноним 02/10/20 Птн 09:52:54 701705165
>>701704
Ну это самый простой вариант. Можешь конечно сделать один скрипт не совсем понимаю что тебе пойдёт, но думаю подойдёт скорее интерфейс, чем монобехейвер и в скрипте каждого юнита задавать ему в старте через ID юнита (который ты тоже сам ему присвоишь) его хар-ки, но как по мне это куда геморней и проще и быстрей уже будет через инспектор
Аноним 02/10/20 Птн 10:04:37 701707166
Аноним 02/10/20 Птн 12:05:15 701742167
Аноним 02/10/20 Птн 13:01:06 701773168
Анон, как вы дебажите под iOS? Это ж пиздец гемор по сравнению с ведром, или я что-то не то делаю?
Аноним 03/10/20 Суб 11:59:30 701958169
Аноним 03/10/20 Суб 13:07:15 701969170
>>701133
Чёт кекнул с ответа.
Аноним 03/10/20 Суб 17:45:57 701990171
>>701958
Нахуй ты мне это говно скинул, дебик?
Аноним 03/10/20 Суб 18:06:42 701992172
у меня пена ротом уже идёт. это вообще возможно нарисовать свой растровый шрифт и использовать textmesh pro? я нарисовал в фотошопе буквы и цифры которые мне нужны, а как впердолить это в tmp я ниебу. вроде там можно генерить шрифты из ttf, но как сгенерить ttf из изображения тоже нихуя не пойму. помогите аноны
Аноним 03/10/20 Суб 20:31:44 702009173
Посоны, совет нужон. Есть scriptable object класс модификация, он содержит тип слота в который ставится и массив характеристик, а также некоторые другие параметры, но не суть. Этих модификаций предвидится большое количество, и надо как-то их организовать в нечто вроде картотеки, чтобы например мастерская первого уровня могла просто и без индусского кода получить все модификации первого уровня и показать их игроку например.

Можно конечно вручную создать класс базы данных модификаций и заносить туда лапами каждую по одной, но это пиздец! А если я удолю одну, то надо будет и лезть в базу и там выпиливать вручную ее упоминание. А если будет сто модификаций, а если 500? Надо как-то автоматом закидывать модификацию в массив в базе при создании и выпиливать ее оттуда тоже автоматом если она удаляется, ну и апдейтить, когда я меняю ее характеристики. Можно как-то такое организовать?
Аноним 03/10/20 Суб 22:54:29 702012174
>>702009
Ну да, организовать такое как-то можно
Аноним 04/10/20 Вск 11:18:16 702031175
Я правильно понимаю, что порядок вызова Awake и OnEnable сохраняется только для конкретного скрипта на объекте?

Если на одном объекте 2 скрипта с Awake и OnEnable. То после активации объекта сначала в одном скрипте вызовется Awake->OnEnable, а потом в другом Awake->OnEnable.

Но как быть, если в Awake происходит инициализация скриптов и при этом один из скриптов зависит от другого? Хули эти пидорасы из юнити не сохранили порядок вызова на уровне объекта.
Аноним 04/10/20 Вск 11:32:06 702032176
>>702031
неправильно понимаешь
Awake при создании обьекта, OnEnable перед первым кадром
Аноним 04/10/20 Вск 11:39:55 702033177
>>702032
Сейчас вот такой порядок вызова:
Script_1.Awake()
Script_1.OnEnable()
Script_2.Awake()
Script_2.OnEnable()
Script_3.Awake()
Script_3.OnEnable()

Script_1.Start()
Script_2.Start()
Script_3.Start()

Но что, если Script_1 зависит от Script_2. И Script_1 в OnEnable ожидает, что Script_2 уже инициализировался. Но на деле же, в Script_2 метод Awake всё ещё не был вызван. Поэтому придётся делать инициализацию по запросу, что неудобно.
Аноним 04/10/20 Вск 11:43:29 702035178
>>702033
а, перепутал OnEnable со Start, но что мешает использовать старт в таком случае?
Аноним 04/10/20 Вск 11:47:04 702036179
>>702035
Это относится к интерфейсу. Игрок нажимает кнопку, включается окно с его инвентарём. То есть задаётся Active объекта, а далее скрипты через OnEnable отображают контент.
Аноним 04/10/20 Вск 12:27:19 702038180
image.png 56Кб, 628x527
628x527
Аноним 04/10/20 Вск 12:34:20 702039181
изображение.png 9Кб, 578x643
578x643
изображение.png 39Кб, 729x279
729x279
Уже несколько дней ломает, как сделать UI по макету пикрил. Есть область вывода записей. Каждая запись это объект UI с названием и областью для вывода записей потомков. Каждая вложенная запись также имеет область вывода записей-потомков. Я им ставлю vertical layout group, и потомки нормально выводятся лесенкой, но записи одного уровня вложенности выводятся неправильно. Они должны учитывать размер друг друга, а они лепятся поверх вложенных, на расстоянии, определенном в vertical layout group - spacing.

Как сделать так, чтобы вложенные элементы каждого элемента включались в расчет его высоты?
Аноним 04/10/20 Вск 12:40:42 702040182
>>702039
Посмотри компонент ContentSizeFitter.
Аноним 04/10/20 Вск 12:55:45 702041183
А, и LayoutElement, если ты его не заметил.
Аноним 04/10/20 Вск 14:33:22 702048184
Такой вопрос:
Есть класс для разных уровней mvc:
- В модели храню данные
- В контроллере описываю логику
- В вью пытаюсь иметь только связь с геймобъектами и, возможно, анимацией.

Как взаимодействовать слоям между собой? Как взаимодействовать разным игровым объектами между собой?

Контроллер должен хранить ссылку на экземпляр модели и вьюхи?

Как должны взаимодействовать делегаты разных игровых объектов между собой? Должен быть какой-то класс, который содержит их экземпляры, или они подписываются на действия друг друга или как?


Аноним 04/10/20 Вск 14:41:53 702050185
>>702048
И более того - как взаимодействовать со всякими контроллерами\менеджерами ui, звука и тп?
Аноним 04/10/20 Вск 14:42:56 702051186
>>702048
>MVC
Ты уверен, что тебе нужны все эти извращения из Веба? Как по мне, так они только усложняют проект, усложняют отладку.

Тебе нужно почитать про Dependency Injection в реалиях юнити. Посмотреть аналог Service Locator'a для юнити.

- Model: какой-нибудь интерфейс, через который ты получаешь данные. Реализовывать его может ScriptableObject.
- Controller: скрипт, который запрашивает интерфейс репозитория через сервис локатор и потом получает нужные данные.
- View: ещё один скрипт, который привязан к геймобджектам на сцене. Контроллер ему говорит, у игрока 10 HP, а скрипт вьюшки выводит его уже на конкретный Text компонент и изменяет Progress Bar.
Аноним 04/10/20 Вск 14:55:26 702054187
>>702051
>Ты уверен, что тебе нужны все эти извращения из Веба?
Честно говоря, нет, ищу что-то оптимальное. По началу было, норм, сейчас уже есть какая-то путаница и неконсистентность.
Есть какой-нибудь пример\статья по адекватному построению в юнити?

>Тебе нужно почитать про Dependency Injection в реалиях юнити. Посмотреть аналог Service Locator'a для юнити.
Есть ли примеры? Я слышал, что специальные DI контейнеры для юнити такие себе.

Спасибо!
Аноним 04/10/20 Вск 15:10:49 702057188
>>702054
>Есть какой-нибудь пример\статья по адекватному построению в юнити?
Посмотри многочисленные видео по запросу "unity architecture". Есть много докладов от самих разработчиков Unity. Посмотри "Unite Austin 2017 - Game Architecture with Scriptable Objects" и "Unite 2016 - Unity Architecture in Pokémon Go".

Ещё чужой код полезно смотреть.

>Есть ли примеры? Я слышал, что специальные DI контейнеры для юнити такие себе.
Конечно. Я не пользовался DI, поэтому ничего конкретного посоветовать не могу.

Может если ты приведёшь конкретные примеры для которых нужно продумать архитектуру, то я смогу что-нибудь посоветовать.
Аноним 04/10/20 Вск 16:31:41 702066189
изображение.png 51Кб, 1040x663
1040x663
>>702057
Спасибо большое за помощь!

Вкратце вот пример:
Есть игровой персонаж. Есть комнаты, в одной из комнат находится телевизор. Игрок может его включить.тогда тв издает звук. Если Тв включен, но находится не в одной комнате с игроком, тогда тв звучит тише.

Сейчас реализовано так:
Есть базовый класс Interactable, все производные классы от него(например, включение тв или переход в другую комнату) бродкастят сообщение, о том, что действие возможно и передают в сообщении экземпляр класса, который соответствует конкретному действию (переход в другую комнату, включение тв и тп).
Подписчики - это, как правило, ui(который, отображает игроку, что действие доступно) и ActionExecutor, который управляет действиями. Как только ActionExecutor получает сообщение, он сохраняет его у себя и проверяет в update, была ли нажата кнопка , требуемая для этого действия (она хранится в самом классе действия).
Если да, то там большой ActionExecutor дергает нужные классы и инициирует действие. Вот тут и начинается путаница(См скрин 1), как он дергает остальные. Сейчас есть объект app, который содержит ссылки на остальные объекты (а остальные на него), часть через него. еще часть -через мессенджер.

Например, после того, как тв включили, громкость должна регулироваться после смены комнаты (тип, хуже слышно в другйо комнате) - как это должно быть реализовано? Сейчас объект со звуком подписывается на сообщение о смене комнаты,но в целом все сводится к "отправить сообщение, чтобы отправить сообщение"





Аноним 04/10/20 Вск 17:00:09 702068190
>>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);
Аноним 04/10/20 Вск 18:00:01 702069191
Аноним 04/10/20 Вск 18:52:10 702074192
>>702068
Все-таки еще вопрос:
На смену комнаты завязано несколько событий:
1) Включение следующей и выключение текущей комнаты
2) Регулировался звук разных объектов (рассчитывается в зависимости от расстояния комнаты от текущей - т.е. метод должен дергаться каждый переход). Объекты могут менять по ходу игры.

Каждый объект должен сам заниматься этим всем или имеет смысл подписаться на сообщение, после которого будет запускаться соответствующий процесс?

Просто получается не единообразно, что все действия у меня резолвает ActionExecutor, а переход по комнатам - каждый по своему.
>В методе Update делаем проверку:
>if (tvRoom == World.CurrentPlayerRoom)
>SetHalfVolume();
>else
>SetFullVolume();

Есть ли смысл каждый апдейт дергать, если менять звук по факту нужно только при переходе из комнаты?
Аноним 04/10/20 Вск 19:40:38 702081193
Application.LoadLevel или SceneManager.LoadScene?
Аноним 04/10/20 Вск 20:30:06 702090194
>>702074
>Есть ли смысл каждый апдейт дергать, если менять звук по факту нужно только при переходе из комнаты?
Смысл в том, что это гибкое решение. Ты можешь легко его изменять или дополнять. Вдруг ты захочешь динамически изменять громкость в зависимости от дистанции. Или в зависимости от препятствий. А если игрок временно оглох? Ты ещё одно событие добавишь на этот случай? Или игрок зайдёт в звуконепроницаемую комнату. Ты всеми этими событиями связываешь себе руки.
Аноним 04/10/20 Вск 20:30:44 702091195
>>702081
>Application.LoadLevel
Уже устарел давно. Используй SceneManager.
Аноним 04/10/20 Вск 21:16:42 702092196
>>702090
Это аргумент, спасибо!
Аноним 04/10/20 Вск 23:50:26 702108197
Где и какие примеры готовых и адекватных игр в плане архитектуры можно посмотреть? Интернет выдает статьи с "make your first game"
Аноним 05/10/20 Пнд 15:00:42 702259198
>>702108
затрахался с этим вопросом, везде лепят в духе brackeys от балды и так что хуй потом добавишь новый функционал без батхёрта, НО! пришёл к выводу что куда полезней чем трахаться с этим вопросом в лоб, просто делать мелкие игры и через процесс приходит понимание куда и чего вставлять. за последний год код и архитектура стали в разы чище и лучше, но всё ещё есть пробелы
Аноним 05/10/20 Пнд 15:27:12 702267199
Аноним 05/10/20 Пнд 19:37:14 702333200
Inspirational g[...].mp4 20032Кб, 1280x720, 00:01:15
1280x720
Аноним 06/10/20 Втр 09:59:16 702381201
Аноним 06/10/20 Втр 11:35:07 702386202
>>702381
Почему это говно завирусилось? Интернет настойчиво мне кидает это название. Чем больше кидает тем больше я не хочу иметь дело с этим.
Аноним 06/10/20 Втр 12:04:52 702393203
trADzhldbj8.jpg 818Кб, 1920x1080
1920x1080
>>702386
Зря, очень аддиктивная гриндилка.
Похуй что клон ботвы, зато какой. Даже не клон, а развитие идей. Мне вот стилистика зельды не зашла, а тут прям то что надо, и вайфу есть, и боёвка продуманнее. Кое-что кастрировали конечно (физических паззлов например почти нет), но в угоду чему-то другому.
Настораживает что она фритуплей, но я наиграл 30 часов, каких-то пейволлов пока замечено не было. К тому же на старте дают до жопы кристаллов за регистрацию и последующие активности, за которые я выбил пару 4 персов, одного 5 и несколько пушек 4*. В принципе весь контент спокойно проходят и ф2п персами не юзая кристаллы вообще, но всё может поменяться в будущем.
Аноним 06/10/20 Втр 12:31:39 702401204
Аноним 06/10/20 Втр 15:04:56 702433205
>>702393
>Даже не клон, а развитие идей.
Какое же это развитие идей, если физон вырезали?
Аноним 06/10/20 Втр 15:46:29 702444206
>>702386
>Почему это говно завирусилось
Китайцы деньги блогерам и стримерам отсыпали
Месяц пройдет, все забудут
Аноним 06/10/20 Втр 20:29:12 702504207
Аноним 06/10/20 Втр 20:51:13 702505208
>>702386
>Чем больше кидает тем больше я не хочу иметь дело с этим.
Зря, постарайся избавиться от мыслей "мейнстрим параша, а я - нитакойкакфсе с уникальными вкусами", а то много хорошего и интересного пройдет мимо тебя.
Я в соседнем треде отписывался, почему это важная игра для юнити >>702406 →
Думаю, на сегодняшний день это самая технологически продвинутая и высокобюджетная игра на юнити, демонстрирующая на практике потенциал движка, до этого такого масштаба еще никто не делал.
Поправь меня, если есть более продвинутые/высокобюджетные игры на юнити.
Аноним 07/10/20 Срд 01:01:01 702533209
>>702505
>парашная китайская анимедрочильня с фирменным китайским бекдором "античитом"
>интересное
Ботнет залогинся.
Аноним 07/10/20 Срд 09:23:00 702554210
Destroy или DestroyImmediate?
Аноним 07/10/20 Срд 09:37:19 702555211
Аноним 07/10/20 Срд 09:43:07 702556212
>>702259
Лол, а ты чтотли был из тех долбаебов, которые без опыта разработки от а до я, пытаются сделать убийцу скайрима?
Аноним 07/10/20 Срд 10:10:58 702560213
>>702504
Охуительный подход к архитектуре. Надо чаще использовать скриптаблеобжект.
Аноним 07/10/20 Срд 10:28:21 702562214
>>702554
Второе в документации не советуют использовать.
Аноним 07/10/20 Срд 14:45:22 702598215
>>702554
Destroy убивает обьект только в самом конце кадра, когда все соотв. калбеки прилетели, т.е. на момент дестроя обьект все еще не нулл.
DestroyImmediate форсит флаг что обьект убит сразу на момент вызова, но может приводить к багам и не рекомендуется типо.
Аноним 07/10/20 Срд 20:02:23 702649216
Аноним 07/10/20 Срд 22:51:05 702681217
>>702555
на вики доступная статья есть. по сути ты разбиваешь объекты на группы в каждом кадре и опрашиваешь только нужные тебе группы тем самым очень сильно уменьшая кол-во запросов
, 08/10/20 Чтв 10:19:13 702719218
Какие обычно взаимоотношения у MVC классов?
Контроллер имеет ссылки на инстансы модели и вьюхи? В какой момент(и где) создаётся контроллер и модель? Как другие классы получают данные из какой-то модели или тригерят контроллер?
Аноним 08/10/20 Чтв 12:40:39 702735219
1.png 89Кб, 1440x900
1440x900
2.png 24Кб, 276x420
276x420
3.png 24Кб, 279x418
279x418
4.png 32Кб, 978x695
978x695
Аноны, ньюфаг нуждается в помощи.

Есть комната, состоящая из тайлов стен и пола. Каждой координате соответствует только один тайл, где нет тайлов геймобджектов нет вообще, это все я уже проверил - пик 1.

Настройки слоев, тагов и коллайдеров тайлов стены и пола на пиках 2 и 3.

На персонаже висит код, пик 4. В инспекторе для GroundFloor я выбрал соответствующий слой.

Но возникает ситуация, что персонаж не останавливается перед стенкой, а входит в стенку, но при этом когда он в стенке в следующий тайл стенки (слева или справа) он войти уже не может, только вернуться на тайл пола. Что я делаю не так?
Аноним 08/10/20 Чтв 12:41:46 702736220
5.png 90Кб, 1440x900
1440x900
>>702735

Пик с тем, как персонаж зашел в стену. При этом когда он уже в нее зашел все вроде как работает корректно, на другой тайл стены он не может сдвинуться, в область где тайлов нет вообще тоже, вернуться на тайл пола может.
Аноним 08/10/20 Чтв 13:11:59 702737221
>>702735
Если я не ошибаюсь, то условие для начала движение у тебя содержит проверку, что персонаж столкнулся с объектом с тагом walkable. Ну так на начало движения, если он находится не в клеточке со стеной, он и будет collision с объектом, у которого есть таг walkable. Мне кажется, нужно проверять, что он не сталкивается с объектом с тэгом notwalkable или что-то ьакое
Аноним 08/10/20 Чтв 13:13:16 702738222
>>702737
В смысле если он начинает движение в клеточке с полом
Аноним 08/10/20 Чтв 13:19:07 702740223
>>702737

Добавил стене тег unwalkable, сделал проверку tag. != "unwalkable", теперь он входит в стену и не двигается больше никуда.
Аноним 08/10/20 Чтв 13:21:20 702742224
>>702740
Так убери проверку с волкебл
Аноним 08/10/20 Чтв 13:23:10 702743225
Он сейчас у тебя двигается, только если волкебл касается
Аноним 08/10/20 Чтв 13:29:50 702745226
>>702743

Убрал. В общем как я понимаю, в чем проблема. Луч кастится и проходит через две клетки, клетку на которой есть персонаж, и клетку рядом по направлению движения. И если хотя бы на одной из этих двух клеток есть тайл с тегом волкабл, он позволяет движение. Именно поэтому можно зайти в стену, потому что перед этим ты стоишь на волкабл клетке. И именно поэтому нельзя двигаться внутри стены, потому что обе клетки получаются без тега волкабл. То есть нужно сделать луч, который и начинается и заканчивается на клетке рядом, не задевая клетку, на которой стоит персонаж.
Аноним 08/10/20 Чтв 13:33:06 702746227
>>70274
Зачем тебе проверка волкабл?
Ты ее убрал и после этого работает ожидаемо или нет?
Аноним 08/10/20 Чтв 13:34:39 702747228
>>702746

Не-а, доходит до стены, застревает в ней и даже не может вернуться.
Аноним 08/10/20 Чтв 13:42:10 702748229
>>702747
Можешь полное условие показать?
, 08/10/20 Чтв 13:50:57 702750230
Вощем, я бы предложил перенести проверку, что тэг не notwalkable в ты с проверкой, нажата ли кнопка
Аноним 08/10/20 Чтв 13:55:49 702755231
А вы какой порядок публичных полей для скриптов используете? Сначала у вас идут ссылки, а потом параметры, или наоборот?
Аноним 08/10/20 Чтв 14:29:39 702758232
Как в стандартном FirstPersonController сделать так, чтобы игрок когда останавливался, двигался еще какое-то время вперед. Не предлагайте Rigidbody Controller использовать, он вообще неудобный. Перепробовал все, продолжал движение игрока по таймеру, после отпускания W, но все это как-то убого и рывками выглядит, нужна ваша помощь.
Аноним 08/10/20 Чтв 14:35:43 702760233
>>698843 (OP)
Как создать копию лайтмапы в озу?
В случае Texture2D ltluma = LightmapSettings.lightmaps[0].lightmapFar получается ссылка на лайтмапу в видеопамяти. Соответственно, меняя содержимое ltluma, меняется и лайтмапа в видео. А надо иметь независимую копию, с каждым кадром которая будет складывается с мапой/текстурой самописного динамического света и только после этого записываться в видеопамять по адресу оригинальной лайтмапы. Эдакий динамический свет для видеокарт без пиксельных шейдеров, как было в первохл/ку/ку2.
Аноним 08/10/20 Чтв 14:43:21 702765234
>>702758
Ябысделол так. Принцип, надеюсь, поймешь, копипастить несоветую - дроч памяти. А вообще имхо хуёвая фича, создается ощущение симулятора катания на льду.

public float CharSpeed = 10.0f;
public float BrakeSpeed = 3.0f;
protected float acceleration = 0.0f;
Update()
{
if (Input.GetKey)
{
acceleration = CharSpeed;
}
if (acceleration > 0.0f)
{
move(dirrection,acceleration Time.deltaTime);
acceleration -= BrakeSpeed
Time.deltaTime;
}
}
}
Аноним 08/10/20 Чтв 15:14:58 702769235
>>702765
>А вообще имхо хуёвая
Дрочь какая-то получается, проще наверное будет повторять действия игрока какое-то определенное время, но у меня не получается, кто может посмотреть FirstPersonController из Standard Assets и скинуть сюда решение, буду благодарен.
Аноним 08/10/20 Чтв 16:54:03 702780236
>>702769
тебе скинули самое простое и стандартное решение
повторение намного сложнее и получится говно
Аноним 08/10/20 Чтв 17:17:50 702784237
15992110057821.png 346Кб, 600x398
600x398
>>702719
Бамп вопросу. Покажите какой-нибудь пример из вашей архитектуры, если кто может, плз
Аноним 08/10/20 Чтв 19:24:22 702798238
>>702780
Где можно почитать все фишки языка C#, которые используются в Шилдте, нет времени все это читать, нужно каждую фишку быстренько изучить, делегаты, ну и прочую полезную залупу, помогите плз.
Аноним 08/10/20 Чтв 19:26:13 702799239
>>702765
>копипастить несоветую - дроч памяти
Почему дроч памяти? Делаю примерно так же.
Аноним 08/10/20 Чтв 20:04:09 702801240
Нашествие кирила?
Аноним 08/10/20 Чтв 20:04:40 702802241
>>702801
Кирилла правильнее.
Аноним 08/10/20 Чтв 23:00:34 702822242
~пару сотен достаточно простых объектов, физика жрет ~30фпс
Обычные триггеры и кинематика, никакой статики-динамики.
Как фиксить?
Аноним 08/10/20 Чтв 23:43:40 702827243
>>702822
1)Объектов оказалось было чуть больше, раза в 2 или 4, то есть ~500...
2)Отключил Vsync. Жизнь хороша!
Был бы рад услышать еще предложения.
Аноним 09/10/20 Птн 01:08:07 702840244
CpCqbKiWcAAcvm7[...].jpg 47Кб, 604x411
604x411
Сделал подобие сервис локатора, но не понял, зачем

Короче, есть класс, производный от monobehavior. Назовем Zalupa.
У него есть [SerializeField] LIst, в который можно впихнуть все менеджеры -хуенеджеры, которые производные от ScriptableObject.
Этот класс имеет метода Get<T>() where T : ScriptableObject - выкидывает инстансы этих классов по типу.

Как дальше сделать по -человечески: чтобы не в каждом классе дергать эту залупу, а какую то логическую прямую получить?
Аноним 09/10/20 Птн 08:48:35 702861245
>>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ов ноги растут (только растут как-то криво)
Аноним 09/10/20 Птн 09:06:04 702863246
>>702861
>поменяй fixedDeltaTime 50% буст
Ты няша
Аноним 09/10/20 Птн 09:53:50 702873247
Аноним 09/10/20 Птн 10:26:02 702877248
>>702861
Спасибо! А как в случае 2д игры всё-таки обычно:
Вью висит на конкретно объекте и является производной от monobehavior. Какая обычно связь с контроллером, который либо просто класс, либо скриптабл обжеккт? Он находится и создаётся во вьюехе или где обычно?
Аноним 09/10/20 Птн 10:41:39 702879249
>>702877
2д так же как и 3д работает.. или я вопроса не понял.
Ты MVC или MVVM хочешь сделать?
Самый простой способ (как мне кажется) держать ссылки на основные классы в синглтонах (GameManager какой-нибудь) и из твоей вьюхи можешь дернуть через евенты инспектора GameManager.YourStaticMethod, но думаю лучше дергать не напрямую а из вьюхи.
Аноним 09/10/20 Птн 10:43:46 702880250
>>702879
Во, норм варик. Спасибо!
Аноним 09/10/20 Птн 13:58:54 702895251
Аноним 09/10/20 Птн 16:00:04 702901252
Стоит ли переходить с 2019.2 на 2019 lts или 2020.1?
Аноним 09/10/20 Птн 16:29:10 702903253
>>702901
Ну когда я перешел с 2019 lts на 2020 у меня пропал баг перетаскивания окна (если менял размер внутренних окон, весь редактор становился черным и вылетал с ошибкой стабильно)
Аноним 09/10/20 Птн 18:31:42 702920254
Аноним 09/10/20 Птн 19:24:12 702930255
image.png 252Кб, 1158x1170
1158x1170
image.png 17Кб, 407x335
407x335
image.png 92Кб, 676x798
676x798
image.png 67Кб, 715x959
715x959
Аноны, помогите, пожалуйста, разобраться в чем проблема. Я создал простенький таймер обратного отсчета. Он считает от 10 до 0.

1. Таймер запускается после нажатия на кнопку Start/Restart.
2. Если время обратного отсчета еще не истекло и нажать Start/Restart, то отсчет пойдет по новой.
3. Если время обратного отсчета истекло и нажать Start/Restart, то отсчет тоже пойдет по новой.

Проблема:
Когда во время отсчета я нажимаю на кнопку, то все работает, как надо. Но когда время истекает и я нажимаю на кнопку, то таймер больше не запускается и отображается цифра 1.
Аноним 09/10/20 Птн 20:59:52 702945256
>>702930
Ты нихера неправильно сделал. Могу за 500 р. сделать тебе правильно.
Аноним 09/10/20 Птн 21:08:46 702948257
>>702945
>Могу за 500 р. сделать тебе хорошо.
исправил
Аноним 09/10/20 Птн 21:10:43 702950258
>>702948
Бля. Ну ладно тогда.
Аноним 09/10/20 Птн 21:57:35 702954259
>>702945
Эх, жаль. У меня нет денег
Аноним 09/10/20 Птн 23:36:38 702981260
image.png 44Кб, 1240x538
1240x538
Вкатываюсь с абсолютного нуля в эту вашу решетку. Чому он кириллические строки не розумиет? Что сделать чтоб кириллицу можно было юзать?
Аноним 10/10/20 Суб 00:06:45 702987261
image.png 52Кб, 1384x527
1384x527
>>702981
А впрочем похуй, уже сам нашел
Аноним 10/10/20 Суб 00:30:17 702992262
Всем привет. Делаю свой клон хотлайн миами, нужно сделать подбор, кидание, хуяние оружия. В голову приходит только скрывать оружее которое я поднял, а потом в момент броска спавнить перед игроком, ну или может прятать на слой ниже и делать то же самое. Но мне кажется что это костыль хуйня говно какоето, как это можно реализовать нормально?
Аноним 10/10/20 Суб 01:07:10 702995263
>>702930
Короче. Я реализовал данный функционал без корутин и все работает должным образом. Но может кто-то знает в чем тут у меня ошибка? Это может быть баг у Юнити?
Аноним 10/10/20 Суб 01:58:27 702998264
Как организовать архитектуру, чтобы в каждом менеджере не приходилось делать GameObject.FindObjectOfType<CharacterController>();
Аноним 10/10/20 Суб 08:40:08 703010265
>>702998
Добавить методы Initialize или Fill (или другое "заполняющее" слово) и заполнять эти менеджеры самому

>>702930
Когда вызываешь StartCoroutine(YourMethod()) - оно возвращает ссылку на коротину, которую нужно отменить, нет?
Аноним 10/10/20 Суб 10:17:32 703012266
>>702992

Наверное ремув геймобжект оружия, в момент подъема, с добавлением в переменную типа ArmedWeapon значения, соответствующего этому оружию. А по нажатию на кнопку броска ты спавниш перед игроком оружие соответствующего переменной типа, а саму переменную приравниваешь к нулю.
Аноним 10/10/20 Суб 11:01:48 703013267
>>702998
Если ты повсюду ищешь контроллер персонажа, значит у тебя изначально кривая архитектура.
Аноним 10/10/20 Суб 12:22:28 703016268
>>703013
Ну пока в одном месте, но уже напрягло.
Наверное, для таких взаимодействий, луче сообщения
Аноним 10/10/20 Суб 12:44:19 703018269
>>702998
Например через синглтоны. На Awake в CharacterController заполняешь статическое поле Instance, в остальных классах пишешь CharacterController.Instance для взятия экземпляра.
Аноним 10/10/20 Суб 18:31:11 703058270
Короче, такая проблема:
Есть класс, производны от monobehavior. Все менеджеры приклепляются к нему как ScriptableObjectы, а их "апдейты" прикрепляются к эвенту этого класса, который дергается раз в Update().

Внезапно, в какой-то момент Updatа. Один из методов одного менеджера прерывается на update другого класса. Это возможно?
Аноним 10/10/20 Суб 18:35:26 703059271
>>703058
А даже не так, гораздо проще.
Метод дергается эвентом, который завязан на столкновение персонажа с объектом. Метод начинает выполняться и в какой-то момент внезапно начинается апдейт другого объекта. МОжет быть такое?
Аноним 10/10/20 Суб 18:59:14 703063272
>>703059
Чегоо..
В юнетях обработка скриптов идет линейно пока ты не подключишь новые потоки, так вот, ответ- ДА ты можешь вызвать апдейт одного менеджера из другого по своему желанию и работать оно будет как ты сделал.
Аноним 10/10/20 Суб 18:59:40 703064273
>>703059
Все, разобрался. Если кому-нибудь интересно, то былая такая ситуация:

В ходе выполнения метода я дергал list для которого нет экземпляра. В итоге должен вылететь эксепшн - но он не вылетает, а просто вся цепочка прекращается и происходит переход к следующему апдейту
Аноним 10/10/20 Суб 22:00:58 703075274
image.png 47Кб, 624x727
624x727
image.png 55Кб, 661x727
661x727
image.png 19Кб, 353x216
353x216
почему оно не выводит стринг в лог?
Аноним 10/10/20 Суб 22:29:26 703076275
>>703075
а если инт ставлю то выводитса, объясните в чем проблема?
Аноним 10/10/20 Суб 23:00:31 703081276
>>703075
Всё оно верно выводит, ты в Start объект создал, присвоил wen - стринг этого объекта, потом в конце Start этот объект разрушается вместе с тем полем, в итоге в wen лежит теперь непойми что, поэтому он тебе это и выводит в лог.

Сделай PlayerWeapons pw глобальным: объяви его под "public string wen;"
Аноним 11/10/20 Вск 00:45:20 703089277
>>703081
Хуйню несёшь. Встретились два шарписта от бога, блеать.

>>703075
pw.currentWeapon - string? Или там есть свойство / метод, который возвращает строку, вроде .ToString() или .Name?

>>703076
> а если инт ставлю то выводитса
Где именно ты ставишь int? Как тип wen?
Аноним 11/10/20 Вск 01:58:25 703093278
>>703089
Там два скриншота.
>>703075
Видимо, на момент, когда дергается Start() класса weapon, для класса player он ещё не дёргался. Перенест содержимое из метода Start в метод Awake.

Общая идея, что в авейках лучше держать настройки текущего монобихейвира, а в стартах - завязки на другие

Аноним 11/10/20 Вск 02:28:03 703095279
>>703093
> Перенест содержимое из метода Start в метод Awake.
То есть ты намекаешь, что wen == null?
Аноним 11/10/20 Вск 05:12:09 703096280
>>703075
ПОРЯДОК ОБРАБОТКИ
В юнете можно указать приоритеты скриптов в твоем случае PlayerWeapons.Start может выполниться ПОСЛЕ Weapon.Start и из-за этого строка будет null.

int выводит (скорее всего 0?) т.к. int wah; даже без прямой инициализации будет иметь default value, а точнее 0.

Аноним 11/10/20 Вск 10:30:42 703111281
>>703075
>почему оно не выводит стринг в лог?
Потому что ты даже базовые туториалы не посмотрел, лалка.
Аноним 11/10/20 Вск 11:45:43 703123282
>>70309>>703093
Почему тогда не выводится пустая строка, как в нормальных шарпах?
Аноним 11/10/20 Вск 11:56:01 703130283
>>703123
Дебаж и посмотри что там лежит
, 11/10/20 Вск 12:04:21 703133284
Посоны, на скок плохо иметь много монобихейвиоров?
Лучше ли по возможности переносить из них все скриптабл оьжекты или ещё лучше в стандартные C# классы, которые не будут иметь дубликаты на стороне юнитовского c++?
На сколько тогда плохо пользоваться юнити эвентами?
Аноним 11/10/20 Вск 12:07:58 703134285
>>703133
Что значит плохо? Решай проблемы по мере их поступления.

Насчёт скриптабле обджект. Если у тебя есть shared data, то её стоит хранить в СО. Смотри доклады от команды Юнити. Там у них много полезного.

Видео по теме
https://www.youtube.com/watch?v=6vmRwLYWNRo
Аноним 11/10/20 Вск 12:50:45 703149286
>>703134
>Что значит плохо?
В плане перформанса, т.к. для каждого юнитивского класса есть класс в С++ , а у монобихейвиара еще и постоянно дергающийся коллбек в виде апдейта.
>Решай проблемы по мере их поступления.
Тогда нужно будет все готовое переделывать жи

>Видео по теме
Я смотрел, потом и задался таким вопросом
Аноним 11/10/20 Вск 13:15:59 703155287
>>703134
Посмотрел все-таки в профайлере, пока все норм. Буду тогда действительно походу решать
Аноним 11/10/20 Вск 13:55:22 703162288
Как лучше связывать управление персонажа и движение?
1) Персонаж имеет экземпляр класса управления и получает от него инструкции, если нужно двигаться
2) Управление - синглотон и публичным эвентом. Персонаж подписывается и в случае нажатия дергается соответствующий метод
Аноним 11/10/20 Вск 15:42:17 703183289
>>703162
Двигайся от частного к общему.
1) InputSystem. Надстройка над дефолтным инпутом Юнити. Знает, нажал ли игрок кнопку Стрелять или направление движения, и т.п.
2) CharacterMotor управляет движением персонажа. У него есть публичные свойства, которые указывают хочет ли персонаж прыгнуть или направление движения.
3) CharacterController передаёт из InputSystem команды в CharacterMotor.

Какие ивенты, какие синглоты. Что-то ты городишь за ебанутую, сложную систему.
Аноним 11/10/20 Вск 16:22:25 703198290
>>703183
> CharacterController передаёт из InputSystem команды в CharacterMotor.
Так вот как они связаны? Композиция, ассоциация или что?
>Какие ивенты
Если по нажатию, кроме действия персонажа, должно еще что-то происходить?

Аноним 11/10/20 Вск 16:55:35 703208291
1.jpg 121Кб, 800x600
800x600
>>703198
Объект 'Character' хранит три синих компонента с изображения. Ссылки на друг друга они получают через GetComponent.

UI узнаёт о состоянии персонажа через компонент CharacterState. Как UI получит ссылку на объект этого компонента? Например, пускай её хранит тот, кто создаёт персонажа. Компонент World. Как к нему обращаться? Через статическую переменную, но пускай это будет не синглтон. У него будет статическая переменная Current. Она задаётся в методе OnEnable и стирается в методе OnDisable. Более того, UI напрямую знать о персонаже не обязательно. Будет ещё один контроллер, который хранит ссылку и на персонажа, и на UI, и обновляет состояние интерфейса в зависимости от состояния персонажа.

Это как я вижу. Но что тебе на самом деле подойдёт - чёрт знает.
Аноним 11/10/20 Вск 17:26:46 703222292
>>703208
Спасибо! У меня один класс вместо двух Character Controller и motor. Сейчас понял, что хорошая затея разделить, если захочется переиспользовать для движения не через инпут.

> но пускай это будет не синглтон
Почему, какая разница?


Аноним 11/10/20 Вск 17:42:47 703229293
>>703222
>Почему, какая разница?
Синглтон должен быть доступен всегда и везде. В данном же случае World будет доступен только во время игры и нигде больше. В меню его уже не будет, например. Если ты обратишься к нему в меню, ссылка будет null.
Аноним 11/10/20 Вск 17:49:42 703232294
То есть в данном случае ты создашь объект уровня сцены, но с глобальным доступом.

Держи код:
https://pastebin.com/igL6WwsU
Аноним 11/10/20 Вск 18:18:47 703240295
>>703229
Так и синглтон же тоже нулл будет до первого обращения? Ну лан, спасибо, надо посмотреть!
Аноним 11/10/20 Вск 18:22:40 703241296
>>703240
>Так и синглтон же тоже нулл будет до первого обращения?
Синглтон всегда доступен. Иначе это не синглтон. И его статическая ссылка Instance никогда не будет null.
Аноним 11/10/20 Вск 18:23:55 703242297
Есть еще такая проблема( я писал где-то выше. но лучше не стало), схожая с той, что выше:
Игрок подходит к объекту, у него отображается, что он может провести действие. Если он нажимает кнопку, происходит действие, которое может затрагивать разные классы (звук, окружение, UI, инвентарь, самого персонажа).
Как лучше сделать - один класс, который будет дергать все, что нужно, в зависимости от типа действия(например, воспроизвести текст, если персонаж хочет что-то сказать\прочитать) или действие само нотифицирует все классы и по эвенту дергауются нужные методы подписчиков?

Аноним 11/10/20 Вск 18:27:34 703244298
>>703241
Я под синглтоном имею в виду определение типа этого https://metanit.com/sharp/patterns/2.3.php

Экземпляр создается при первом запросе и, если запроса не было, то не создается вообще.
Если экземпляр создается на OnEnable, то действительно создается всегда и, если я верно понимаю, это просто попытка симулировать статический класс, расследуемый от monobehavior но это не точно,
Аноним 11/10/20 Вск 18:28:02 703245299
Аноним 11/10/20 Вск 18:31:09 703246300
Аноним 11/10/20 Вск 19:04:46 703251301
Аноним 11/10/20 Вск 19:05:51 703252302
>>703096
> int выводит (скорее всего 0?) т.к. int wah; даже без прямой инициализации будет иметь default value, а точнее 0.
Ну вот, значит в строке 12 надо написать:

public string wen = "";
Аноним 11/10/20 Вск 19:07:16 703253303
>>703252
З.Ы. И/или использовать if (String.IsNullOrEmpty(wen)) return;
Аноним 11/10/20 Вск 20:17:25 703261304
>>698843 (OP)
Были кнопочки, управляющие геймплеем. Добавил два элемента типа text, в итоге кнопки вообще перестали реагировать на нажатия. Что это может быть?
Аноним 11/10/20 Вск 20:29:00 703266305
>>703261
Точнее даже так. У меня на сцене два канваса, вот тот, что с кнопками управления, ни на что не реагирует. А второй, с другими элементами, работает нормально.
Аноним 11/10/20 Вск 20:50:22 703283306
Аноним 12/10/20 Пнд 09:37:34 703332307
>>703261
Когда создаешь panel там есть флаг raycastTarget или interactable - выключи эти флаги т.к. по z-order-у они видимо выше и блокируют твои кнопки своими телами.

>>703283
Ну смотри, по идее лучше из евента дергать все классы по отдельности.
Спустя некоторое время если видишь, что некоторые куски повторяются больше чем другие - их уже выносишь в другой класс для "переиспользования"
Аноним 12/10/20 Пнд 10:03:48 703335308
Аноним 12/10/20 Пнд 12:08:00 703360309
>>703242
Тебе нужен Observer, который наблюдает за действиями игрока и он уже дёргает методы, либо Юнити События. При этом Observer ничего не знает об UI, о звуковой системе, о инвентаре и так далее. Он знает только о наблюдаемом объекте, то есть об игроке.
Аноним 12/10/20 Пнд 14:19:25 703418310
>>703360
Спасибо! Я примерно так и сделал:
Когда игрок касается предмета, с которым можно взаимодействовать, этому классу(далее менеджер действий) прилетает нотификация с этим предметом. Менеджер действий подготавливает действие. Если игрок жмакает кнопку использовать, то этот класс дёргает у предмета метод StartAction(). Предмет уже и отправляет нотификация кому нужно и с чем нужно.

Класс предмета можно сделать абстрактным и каждый реальный предмет будет реализовать его (можно было бы с интерфейсом, кстати).
Но я сделал один monobehavior класс, который чисто передает действие менеджеру действий. А само действие - scriptableObject, который вешается на компонент интерактивного предмета
Аноним 12/10/20 Пнд 16:47:22 703525311
Имеет ли смысл читать книжки по шарпу, чтобы лучше понимать юньку?
Аноним 12/10/20 Пнд 17:26:44 703539312
>>703525
А что ты от нее хочешь?
Если делать игры, то, конечно, нужно
Аноним 12/10/20 Пнд 17:29:09 703540313
>>703539
Просто складывается впечатление, что юнитивский шапрп настолько сам в себе, что к классическому яп имеет очень малое отношение.
Аноним 12/10/20 Пнд 17:35:06 703543314
>>703540
Это ложное впечатление. Там нет другого синтаксиса. Есть ситуации, когда какие-то техники C# юнити резервирует для своих нужд(например, конструкторы), но это не значит, что не придется писать на "голом" C#
Может, ты с js путаешь?
Аноним 12/10/20 Пнд 17:51:19 703544315
Как думаете, как лучше организовать работу с git на трёх человек(2 кодера и 1 артист)? Стоит ли разделять работу каждого на разные ветки? Пуллреквесты думаю сразу нафиг, ибо все изменения обсуждаются в мессенджере.
Аноним 12/10/20 Пнд 17:53:41 703547316
>>703544
А код вы в мессенджер тоже проверяете?
Я б стандартно делал. Основная ветка и каждый раз новая на новую бранчу
Аноним 12/10/20 Пнд 17:56:24 703549317
>>703547
На новую функцию
Аноним 12/10/20 Пнд 17:58:03 703551318
>>703549
Каждый раз новая ветка? Как-то это слишком, по-моему. Не лучше сделать ветку main с релизами, ветку dev и каждому разработчику по ветке, из которой потом всё перетекает в dev.
Аноним 12/10/20 Пнд 18:04:10 703556319
>>703551
Так и знал, что ты это скажешь.
То, что я описал - стандартный метод работы с гит.
Если каждый будет вести по своей ветке, вы потом, как пить дать, свою жизнь возненавидите, когда конфликты резолвать начнет. Траст ми.
Хорошая практика - ветка на конкретный не оч большой участок когда. Иначе разъедетесь и пиздец
Аноним 12/10/20 Пнд 18:05:49 703559320
>>703556
Кто-то из нас заводит ветку на фичу и потом любой может вносить туда изменения до тех пор, пока фича не будет реализована? А если потом решим её дополнить?
Аноним 12/10/20 Пнд 18:05:51 703560321
>>703556
Ну, конечно, если вы будете себе дев подливать постоянно и следить за актуальностью веток, то ради бога но этого не будет
Аноним 12/10/20 Пнд 18:08:22 703564322
>>703559
Ну у фичи должны быть конкретные acceptance criteria. Если хотите дополнить(при этом она рабочая на этом этапе), заливайте фичу в дев, делаете бранч от дева.
Аноним 12/10/20 Пнд 18:27:10 703573323
>>703564
Хм, и здесь рекомендуют заводить бренчи на фичи
https://www.youtube.com/watch?v=ISW2nS_v3Ic

Надо подумать, как перейти на такую систему. Пока кажется, что это тяжело...
Аноним 12/10/20 Пнд 18:35:38 703576324
>>703573
Понимаешь, это не зависит от инструмента. Когда в принципе работает команда (неважно, дом строит или очередной велосипед собирает), должно быть понятно, кто что и в какой момент делает и чего хотят добиться.
Работа с веткой на человека - просто, но до момента, как вы поймёте, что делали два задних колеса или вообще два разных велосипеда, которые не собрать в один
Аноним 12/10/20 Пнд 19:32:28 703596325
>>703540
Можешь относиться к юньке как к MonoGame-у или XNA.
Да у юньки есть такое, что она дергает методы по имени (привет awake,start,update), а могла бы через интерфейс..
Но вообще в неё уже притащили часть либ из ентерпрайза (и тех кто это делают закидывают гавном).
И да - у юньки есть свои "тонкости" из-за которых сказывается такое впечатление.
Аноним 12/10/20 Пнд 20:16:49 703607326
Я снова вернулся.
Аноним 12/10/20 Пнд 20:26:01 703608327
Аноним 12/10/20 Пнд 23:51:51 703633328
На линуксах в Юнити работал кто-нибудь? Это адекватно вообще?
Аноним 13/10/20 Втр 12:10:57 703688329
Читал тут про оптимизацию для мобилок. Разработчики отказались от батчинга, объединили всю сцену в один меш и выводили её за один раз. Батчинг реально не стоит использовать, если хочешь максимально оптимизировать сцену?

https://dtf.ru/gamedev/7533-mobilnyy-shuter-guns-of-boom-optimizaciya-grafiki
Допустим, есть статический и динамический батчинг. Нашему проекту стало существенно лучше, когда мы вообще всё это выключили. Нет ничего — только сцена, которая рендерится вся сразу. Это ограничение как раз и привело к тому, что карты не очень большие. Куда бы ты на карте не смотрел — нет отсечения, вся сцена рендерится всё время.
Аноним 13/10/20 Втр 13:26:25 703696330
>>703688
Про рендеринг 250к полигонов одним тиком, вместо 50к, но через 10 dc - сомнительно.
Рендеринг полигонов сам по себе простая операция, даже 10 лет назад на android 4 мой проект с 60к полигонов стабильно держал 45фпс.
Сжатие текстур - вот это уже лучше, юнитеки уже давно советуют батчить текстуры в атласы и так их использовать, в этом нет открытия для тех кто давно в этом варится.
Аноним 14/10/20 Срд 19:34:52 704086331
а как в два дэ игре с видом сверху настроить физику так чтобы все работало нормально? например если прикладывать силу к обьекту, но с гравитацией в ноль он будет постоянно тормозить, а если включить гравитация то все будет падать вниз
Аноним 14/10/20 Срд 19:35:44 704087332
>>704086
>например если прикладывать силу к обьекту, но с гравитацией в ноль он будет постоянно тормозить
Не будет тормозить*
Аноним 14/10/20 Срд 20:34:58 704109333
>>704086
Смотря какого эффекта хочешь добиться, если персонажа двигаешь то велоситом при нажатии задаёшь, а при отпускании клавиши вырубаешь
Аноним 14/10/20 Срд 23:29:42 704144334
>>704109
кидаю оружее адд форсом, хочу чтобы оно терлось об пол и само по себе тормозило
Аноним 15/10/20 Чтв 00:34:53 704147335
TheGameR6yq2Gbw[...].png 1599Кб, 1920x1080
1920x1080
Desktop-2020.10[...].mp4 11117Кб, 1920x1080, 00:00:17
1920x1080
Пилю бесшовные материалы в дизайнере. Позавчера запилил обои, вчера потолок, сегодня пол. Действия игры будут в нежилом деревянном многоквартирном доме советских времен.
Надо напольный и потолочный плинтус ебануть, чтобы эти углы глаза не резали. Впрочем, думаю, и плинтуса тоже будут глаза резать
Аноним 15/10/20 Чтв 01:16:02 704153336
>>704144
orugie.velocity = Vector2.Lerp(orugie.velocity,Vector2.zero,skorostTormozheniya * Time.deltaTime);
Аноним 15/10/20 Чтв 19:08:37 704304337
>>704147
Делай стык плинтуса с сантиметровой щелью, на половину забитой грязью. И в плоскости соприкосновения с полом/стеной должны быть полукруглые щели из-за выгнувшихся половиц. Половицы должны скрипеть и как бы постукивать когда на них наступаешь.
Аноним 15/10/20 Чтв 23:39:59 704378338
Хочу сделать SceneLoader статичным классом и пользовать его из других скриптов без использования синглтона и поиска его в каждой сцене, но проблема в том, что он также должен висеть на кнопке, а кнопка, при прикреплении к ней статичного скрипта, его не видит, и может работать только с обьектами на сцене. Как быть как фиксить, или может есть способы получше?
Аноним 16/10/20 Птн 00:34:38 704388339
>>704378
>также должен висеть на кнопке
Нет, не должен, это кнопка должна быть на подсосе

А во вторых как ты статик собираешься повесить на кнопку, лол
Аноним 16/10/20 Птн 16:30:48 704510340
Кто-нибудь использовал "RuntimeInitializeLoadType.AfterAssembliesLoaded" для инициализации всяких внутренних сервисов/синглтонов? Я даже не знал, что оказывается у RuntimeInitializeOnLoadMethod можно задать тип загрузки. Что он может загружаться не только после сцены, но и перед загрузкой сцены.
Аноним 16/10/20 Птн 20:56:50 704562341
>>698843 (OP)
Имеется сцена с объектами, напротив каждого объекта кнопка, тыкая по кнопке, выбираешь нужный объект, потом он у тебя в игре появляется соответственно.
Как лучше в скрипте прописать выбор? У меня пока только одна идея: повесить на каждую кнопку отдельный скрипт с булевой переменной, и в зависимости от того, какая переменная активирована, респаунить объект, но это как-то топорно. Есть более качественное решение?
Аноним 16/10/20 Птн 21:37:53 704574342
>>704562
Пишешь простой МенеджерРеспавнаОбъектов, который принимает данные, что спавнить и где спавнить, а на кнопки вешаешь функцию из менеджера, в которую эти данные и передаются по клику. Для удобства еще можно обернуть в enum типы того, что спавнишь
Аноним 16/10/20 Птн 21:41:28 704576343
>>704574
почему какойто там сакутин постоянно и везде твердит что менеджеры/контроллеры это каловая масса для лохов, но все повсеместно пишут менеджеры, да контроллеры?
Аноним 16/10/20 Птн 21:43:09 704577344
>>704574
>а на кнопки вешаешь функцию из менеджера, в которую эти данные и передаются по клику.
Как это делается?
Аноним 16/10/20 Птн 21:43:21 704579345
>>704576
Не знаю кто что пишет, но как по-другому контролить жизненный цикл однотипных объектов в простой форме?
Аноним 16/10/20 Птн 21:45:22 704580346
UI-Buttons-Add-[...].jpg 39Кб, 381x445
381x445
>>704577
Вот тут добавляешь поле, в него можно будет перетащить объект со сцены с скриптом менеджера и у него выбрать нужную функцию, которую следует вызывать при клике, там же можно указать что в функцию передать нужно
Аноним 16/10/20 Птн 21:49:08 704581347
Аноним 16/10/20 Птн 22:35:25 704591348
image.png 52Кб, 802x451
802x451
Как в юнити текст делать менее вырвиглазным?
Писали что при увелечении шрифта он делается более четким, и для статов сработало(50 стоит)
Но в боксе пиздец вытикают глаза если смотреть и никак исправить не могу
Аноним 16/10/20 Птн 22:45:51 704594349
Аноним 17/10/20 Суб 00:55:48 704609350
TheGameYu9ISg9s[...].jpg 449Кб, 1920x1080
1920x1080
Добавил плинтуса. Пусть так, все равно никто разглядывать будет. Там будут шкафы, кровати и прочее. От резкости избавился и ладно.
Аноним 17/10/20 Суб 09:20:59 704629351
Какие есть подводные камни от использования Zenject? Или только одни плюсы?
Аноним 17/10/20 Суб 11:00:28 704637352
>>704609
С плинтусами теперь прям заебись. Красиво.
Аноним 17/10/20 Суб 11:55:46 704644353
>>704609
Прям детство вспомнилось
Аноним 17/10/20 Суб 12:19:43 704649354
Моно Девелоп же автоматически вместе с юнити скачивается? Или надо вручную? У меня почему то из доступных редакторов только обоссаная визуал студио
Аноним 17/10/20 Суб 13:00:08 704654355
>>704649
>обоссаная визуал студио
Ты что - сумасшедший? Качай бесплатную студию 2019 года. Ну, или Rider, если есть деньги. А маня-девелоп это позапрошлый век. Даже не знаю, кто в здравом уме будет в этой залупе работать.
Аноним 17/10/20 Суб 13:16:29 704656356
>>704654
Что значит "работать"? Код писать? Это обычный текстовый редактор. Что, вс как-то отступы магическим образом расставляет?
Аноним 17/10/20 Суб 13:23:52 704658357
Аноним 17/10/20 Суб 14:44:45 704666358
>>704649
VS CODE ставь, визуал Студио тут нахуй не нужна с лишними процессами
17/10/20 Суб 15:29:29 704668359
>>704666
Двачую этого.
>>704656
Зачем пользоваться обычным если есть необычные?
Аноним 17/10/20 Суб 16:04:17 704669360
Все обучающие материалы, это что такое функция, что такое переменная, и никто, абсолютно никто не говорит о вещах для среднего уровня и выше. Может быть это специфика языка, когда кроме как знаний паттернов, возможностей Unity и базовой основы (переменные, функции, коллайдеры, корутины) больше ничего не нужно? Я сам на своих проектах сталкиваюсь только с базисом, так как нужно если было бы что-то реализовать, а я бы не смог, я бы давно обратился в гугл и нашел решение. Нужно ли читать книги посвященные C#, или достаточно знать паттерны, уметь проектировать проекты до старта и всё?
Аноним 17/10/20 Суб 16:09:08 704670361
>>704669
Или я обычный говнокодер? Но вопрос изучения остается открытым, как мне узнать о всех нюансах, не проработав где-то в офисе 5 лет, я хочу чтобы мне сразу объяснили чем тот или иной метод лучше и в какие моменты, чтобы я мог соревноваться с хорошими кодерами.
Аноним 17/10/20 Суб 16:10:28 704672362
>>704670
>я хочу
Хоти.
У тебя есть документация, берешь её и читаешь.
Аноним 17/10/20 Суб 19:05:04 704684363
>>704670
У меня схожая проблема
Вкатился зимой 20го в Пыху, выкатился после полугода, понял что веб не моё. До этого немного ковырялся стажёром - джуном в вебе у товарища в конторе

В итоге ушёл в геймдев, заинтересовал юнити, т.к. вроде простой и понятный софт для новичка(ага)
Си шарп довольно комфортный язык, там всё весьма наглядно, нет нужды прописывать кучу ерунды как в пыхе, надо только библиотеки вовремя подключать, ага
Но вот только непонятна сама сфера - на шарпах можно делать кучу всего а меня интересует именно геймдев.
Вроде неграмотно ограничивать себя в изучении, но сдуру можно увлечься, нахвататься поверхностных знаний и в итоге даже майнкрафт(который вообще на Java) собрать

Вот и непонятно - что же делать?
Изучить шарпы? Насколько плотно их изучить?
Изучить юнити? Интерфейс? Библиотеки? Какие то консольные команды, характерные для этого софта?
Что и в каком количестве имеет значение как для новичка, так и для стремящегося? И вроде на все эти вопросы есть ответы в ОП посте, так что заранее пардон, просто раздуваю
Аноним 17/10/20 Суб 19:17:48 704685364
>>704670
>>704684
Не забывайте, что кодинг — лишь инструмент, а не сама цель.
Аноним 17/10/20 Суб 23:50:14 704736365
image.png 7Кб, 322x255
322x255
Есть один алгоритм, процедурно генерирующий данжи. Использую тайлмапы и тайлы. Есть два вопроса:
1) У меня нет опции создать тайлмап в ассетах, только отдельный тайл. Пришлось создать прямо в иерархии две тайлмапы, пикрил. А мне религия не позволяет держать в иерархии то, что можно держать в виде ассета/префаба. Хотя может я что то не понимаю и так и надо.
2) Я что то не разобрался, как менять цвет тайлов.
Заранее спасибо, аноны.
Аноним 18/10/20 Вск 05:46:06 704749366
image.png 22Кб, 217x134
217x134
image.png 28Кб, 209x168
209x168
Сосач, есть лестница в 2Д платформере, чтобы игрок зависал на ней, а не падал - во время соприкосновение с лейером лестницы rigidbody2d игрока задается gravity = 0.

Проблема 1: когда игрок стоит на последней лесенке пик1 - невозможно прыгнуть потому что параметр гравитации всё ещё ноль.

Проблема 2: когда игрок пробегает по лестнице пик2 - трансформ падает на ~0.02, что визуально незаметно, но из-за чего персонаж застряет в клетке, и вылезти можно только зажав "вверх" чтобы лезть по лестнице и "влево\вправо". Предполагаю, что сие тоже из-за гравитации.

В общем в поисках решения как реализовать "игрок не падает с лестницы, когда залез на половину и остановился" иным способом.
Аноним 18/10/20 Вск 05:47:12 704750367
>>704749
бля, я еблан, два одинаковых пика загрузил. Ну по описанию вроде всё и так понятно
Аноним 18/10/20 Вск 08:52:44 704754368
>>704749
>>704750
Обычный свич запили.

Если коллизия с лестницей верна И если игрок нажал клавишу вниз - гравитация 1 и сколько у тебя там, иначе гравитация 0.
Аноним 18/10/20 Вск 08:54:43 704755369
>>704736
>цвет
В палитре или в самой мапе. Если не получится проверь чтобы у тебя был .png с прозрачностью.
Аноним 18/10/20 Вск 09:26:13 704757370
Не понял, и как это проблему решит?
Если игрок нажимает клавишу вниз, то вместо спуска по лестнице - он будет просто падать. А если не нажимает, то гравитация всё ещё 0 и он всё ещё не может прыгнуть
Аноним 18/10/20 Вск 10:52:06 704767371
>>704755

Я имел ввиду програмно. В палитре то понятно.
Аноним 18/10/20 Вск 12:14:57 704774372
Чики двощ. Ищу как реализовать в 3д физику мягких тел. Проблема в том, что у меня микс процедурных и baked анимаций. Obi вроде как не подходит для skinned rigged meshes. Какие-либо альтернативы есть ещё?
Аноним 18/10/20 Вск 13:54:27 704777373
Как вы относитесь к пробелам в названиях объектов на сцене, в названиях префабов, сцен? Мне кажется, так гораздо читабельней выходит. И только ресурсы стоит называть без пробелов и в начале писать тип/назначение ресурса, потом после символа подчеркивания уже его название.
Аноним 18/10/20 Вск 14:46:25 704785374
>>704774
Мне стало интересно как в генши импакт сделали и физику тел и физику одежд еще это всё и на телефоне запустили в 120fps
Аноним 18/10/20 Вск 14:56:54 704787375
>>704785
Так она ж там на минималочках, а одежда - анимация, а не физика
Аноним 18/10/20 Вск 16:57:57 704805376
>>698843 (OP)
Я не знаю, это только у меня так или что. Когда добавляют компонент cloth на объект и пытаюсь выделить точки, эти точки появляются только под определенным углом и то еще бывает не все. То есть мне просто приходится хуевертить камеры вокруг, чтобы они соизволили появится. Это баг какой-то или что?
Аноним 18/10/20 Вск 17:14:22 704809377
На чем написан мультиплеер для игры Heartstone? Хотелось бы во время изучения мультиплеера взять уровень повыше, чем использование библиотеки Photon. Поэтому интересуют хоть обычные ключевые запросы благодаря которым я смогу понемногу изучить как пишется сеть в такой игре. Спасибо.
Аноним 18/10/20 Вск 18:12:22 704818378
>>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.)
Аноним 19/10/20 Пнд 05:57:01 704911379
>>704787
Точно?
https://www.youtube.com/watch?v=HbE2gWODNMs

+ делать 360 анимаций (повернул влево на 5 на 10 15* и тд очень муторно, вряд ли они так делали).
По плащу видно как он ломается при повороте, мне кажется это все же физон

>>704805
От полигона зависит т.е. с обратной стороны полигона могут быть проблемы, с лицевой у меня все норм было

>>704818
Есть пример с++ сервера какого-нибудь? Или игрового сервера на гите? Не обязательно ХС-а, чего угодно
Аноним 19/10/20 Пнд 09:41:13 704935380
>>704818
СТРОНК прогаминг скилз, такие ниибические требования как будто в НАСА зовут, а по итогу багерное говно тупого говнас такой-то фирмой и бюджетом, которое мог бы пофиксить любой васян из мухосранского вуза, но нет. Что ли лично Беня(уже нерелейтд, но всеж) делал? Пичот.
Аноним 19/10/20 Пнд 09:42:03 704936381
Аноним 19/10/20 Пнд 10:57:00 704939382
>>704935

Обычные проблемы менеджмента в раздутом крупняке. Ты же кулстори о разработке Last of Us 2 слышал, как там пол отдела моделило уже заведомо завернутый контент прямо в Recycle Bin?
Аноним 19/10/20 Пнд 11:00:57 704940383
>>704939
>Ты же кулстори о разработке Last of Us 2 слышал, как там пол отдела моделило уже заведомо завернутый контент прямо в Recycle Bin?
Где почитать?
мимо
Аноним 19/10/20 Пнд 11:08:23 704942384
Аноним 19/10/20 Пнд 12:54:00 704967385
Нужно двигать персонажа постоянно вперед в рамках уровня
вроде такого https://apps.apple.com/US/app/id1499812410?l=en , на уровне также есть повороты в сторону, на повороте камера, находящаяся чуть выше и сбоку от персонажа двигается вместе с ним. Как реализовать перемещение?
Аноним 19/10/20 Пнд 13:08:40 704974386
>>704936
Спасибо правда спасибо

А что-нибудь по проще, уровня крестики-нолики онлайн, сможешь найти?

Прост хочу в кресты вкатиться через написание сервера.
Аноним 19/10/20 Пнд 14:02:53 704987387
>>704974

Тебе бы тогда просто с изучения крестов путем написания диалоговой адвенчуры с применением стандартной библиотеки и пердолинга консольки начать, а уже потом сетью заниматься.

Аноним 19/10/20 Пнд 14:26:44 704994388
image.png 94Кб, 921x508
921x508
>>704967
Бля, это выглядит очень просто, но я всё ещё не могу понять как реализовать.
Пока всё что приходит в голову - привязать игрока к камере и двигать её вдоль уровня. Но всё ещё нужно как-то ограничить движения игрока краями дороги. как-то не хочется по-инвалидному по 5 box collider'ов цеплять
Аноним 19/10/20 Пнд 14:52:06 704997389
Анон, есть где-нибудь готовый ассет ближней боевки от первого лица?

Хочу сделать что-то типа hexen по геймплею. Начал писать свой велосипед - получается хуево, как-то я делаю не так - мобов надо прям выцеливать чтобы пнуть, а они наоборот дерут так что не спасешься - вместо фана одно раздражение.
Аноним 19/10/20 Пнд 15:21:04 705003390
>>704997
На ютубе выбери плейлист Soulslike игры и делай по нему
Аноним 19/10/20 Пнд 15:25:37 705005391
>>705003
>Soulslike
я про fps - от первого лица
Аноним 19/10/20 Пнд 16:23:36 705028392
>>704669
А чё ты хочешь-то?
>Может быть это специфика языка, когда кроме как знаний паттернов, возможностей Unity и базовой основы (переменные, функции, коллайдеры, корутины) больше ничего не нужно

Кому не нужно? Какого языка? Почитай про делегаты, например. Наследование, нтерфейсы, абстрактные классы, виртуальные методы. Наверное, ты конструкторы даже не используешь, если через юнити залез в шарпы. Но может тебе и не надо, я не знаю, какая у тебя архитектура.
В моем понимании, твоя инженерная мысль при реализации той или иной функции будет ограничена кругозором. Какие-то вещи можно сделать лучше/быстрее/проще, а ты об этом и не знаешь
Аноним 19/10/20 Пнд 16:24:42 705029393
>>705005
>Начал писать свой велосипед
>мобов надо прям выцеливать чтобы пнуть, а они наоборот дерут так что не спасешься
Кириль дальше ИИ, понятно что ты тупо через навмеш приближаешь врага к игроку, уменьшай скорость, делай рывки в разные стороны, разнообразь игру
, 19/10/20 Пнд 16:44:03 705033394
Ребята, где можно посмотреть примеры готовых 2д игорянов на предмет адекватной архитектуры? Не туториалы, а полноценные игры
Аноним 19/10/20 Пнд 19:10:42 705069395
Анон, подскажи.
Хочу сделать функцию, показывающую диалог (да/нет) в виде bool res = ShowDialog().
Внутри этой функции канвас диалога делаю активным и при нажатии на да/нет попадаю в скрипт-обработчик этих кнопок.
Как мне вернуть результат в ShowDialog?
Аноним 19/10/20 Пнд 19:43:18 705077396
>>705069
Можешь подробнее описать, не оч понятно? А вызов нужных методов из этих обработчиков в методе ShowDialog почему не сделать? Или эвент не дёрнуть?
Аноним 19/10/20 Пнд 20:38:07 705079397
>Можешь подробнее описать, не оч понятно?
Есть условный UIManager

public static class UIManager
{
private static IDialog _testDialog;

public static bool ShowTestDialog()
{
_testDialog.Show(); //внутри происходит Canvas.enabled = true;
}
}

Вызываем Show(), появляется UI диалога. После этого, например, жмем на кнопку "да".
Нажатие кнопки обрабатывает скрипт TestDialogHandler

public class TestDialogHandler : MonoBehaviour
{
public void OnYes()
{
Debug.Log("Yes");
}
}

Вопрос в том, как в ShowTestDialog получить результат (в нашем случае true) из OnYes

>А вызов нужных методов из этих обработчиков в методе ShowDialog почему не сделать? Или эвент не дёрнуть?

Попробовал сделать что-то вроде такого:

public static bool ShowTestDialog()
{
bool res = false;

TestDialogHandler.DialogResultEvent.AddListener((dialogResult) =>
{
res = dialogResult;
});

_testDialog.Show();

return res;
}

Но тут надо какую-то задержку ставить, чтобы до срабатывания эвента из метода выход не случился.

Аноним 19/10/20 Пнд 20:38:31 705080398
Аноним 19/10/20 Пнд 21:16:07 705089399
Как залететь в юнити ? Уже 2 недели пытаюсь что-то сделать, гуглю если не получается и пытаюсь снова и снова, но у меня только жопа сгорает с того, что я нихуя не умею. Как вы влетели в юнити ?
Аноним 19/10/20 Пнд 21:25:14 705092400
>>705089
>только жопа сгорает
Через это
Аноним 19/10/20 Пнд 22:17:08 705105401
Аноним 19/10/20 Пнд 22:36:42 705108402
>>705089
Начни по готовым примерам из книги или видосов
Аноним 19/10/20 Пнд 23:01:44 705112403
image.png 264Кб, 1920x1040
1920x1040
>>705108
Ну у меня успехи. Я заставил объект двигаться. Но это спустя сотни нервов... Неужели все так
Аноним 19/10/20 Пнд 23:07:08 705113404
>>705089
>>705112
Купи курсы и смотри видеоуроки, делай копии простых игр.

Ну и вообще да, настоятельно рекомендую курсы, как минимум основы с них получишь. С литературой сложнее и дольше, из литературы лучше почитать что-нибудь про ООП или паттерны.
Аноним 19/10/20 Пнд 23:11:21 705115405
>>705113
Ну давай так, ты покупал/записывался на курсы ? И если да , дай советик , пожалуйста. Просто кинуть куда-то деньги и получить ничего
Аноним 19/10/20 Пнд 23:27:29 705118406
>>705113
> что-нибудь про ООП или паттерны
и сломать мозг новичку окончательно.
ооп не нужен если ты не пилишь какой-то АА* проект
Аноним 19/10/20 Пнд 23:31:18 705120407
>>705118
>ООП не нужен
Скажи это любому работодалю. Может ты ещё скажешь, что и паттерны не нужно знать?

>>705115
На юдеми есть много курсов, смотри топ по рейтингу\популярности само собой на английском, если жалко денег - на рутрекере спирачены почти все популярные курсы.
Стоят они на скидке 10-15$, а скидка там постоянно. Если сейчас нет - подожди пару дней-неделю и будет.
Аноним 19/10/20 Пнд 23:33:55 705121408
Аноним 19/10/20 Пнд 23:37:43 705124409
>>705112
Нет, в следующий раз, когда ты столкнешься с аналогичной проблемой, для тебя она будет уже типовой и ты справишься быстрее.

>>705118
Мозг быстрее ломается как раз без ООП, как мне кажется.
Аноним 20/10/20 Втр 07:34:37 705163410
>>705069
Тебе нужно что-то типа промисов (либо тасков), гугли unity promise
Аноним 20/10/20 Втр 08:53:10 705171411
>>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();
}
});
}
Аноним 20/10/20 Втр 11:16:38 705186412
>>705171
А где асинк авэйт? Этот код же подвесит систему? Или нет?
Аноним 20/10/20 Втр 11:27:23 705189413
>>705186
Нет, суть в том, что ты создаешь делегат и отдаешь его своему скрипту диалога, с этого момента выполнение скрипта закончилось и update метод работает как и всегда.
Потом когда нажимаешь да или нет то у тебя сохранен делегат и он вызовется нормально.
Там есть еще что улучшать, например сохраненный делегат (который callback(_result)) лучше обнулять после закрытия формы, короче просто попробуй так сделать, это не долго и не сложно.
Правильный ответ Аноним 20/10/20 Втр 11:27:58 705190414
>>705069
Делай в стиле ДОД.
Возвращаемое диалогом значение - это данные.
Состояние видимости диалога - это данные.
Все данные пиши в базу данных, которую видит и скрипт диалоговых кнопок и скрипт вызывающего объекта.
Логика вызывающего такова:
Чекаю в БД поле диалог-открыт, если открыт - прерываю работу.
В БД в поле диалог-результ записываю нулль.
Вызываю диалог, передаю ему некоторый текст.
В апдейте чакаю в БД, открыт ли диалог? Если диалог закрыт, чекаю в БД поле диалог-результ и действую соответствующе.

В диалоге логика:
Я родился!
Я записал в БД что я видимый.
Я прочитал во входных данных текст и отобразил его.
Если я стал невидимым, я записываю нет/отмена/ложь в БД.
Если я стал невидимым, но кнопка да была нажата, я записываю в БД да/правда/ОК.
В любом случае я обязательно что-то записываю в БД, иначе никак.
Записываю в БД также, что я невидим.
Умираю!
Аноним 20/10/20 Втр 11:29:52 705191415
>>705189
Код очень потоконебезопасный и ты сам это понимаешь.
Аноним 20/10/20 Втр 11:31:59 705193416
>>705190
Ты не ту задачу пришел сюда решать, у нас не модальные диалоги, а 1 инстанс больше не будет, понимаешь? нахуй нам бд нужно вообще, что ты несешь вообще

>>705191
а мне и не надобыло решать эту проблему, вопрос в другом был
Аноним 20/10/20 Втр 12:46:18 705224417
Пытаюсь собрать несколько префабов в AssetBundle, пробовал разные способы из интернета, пробовал передавать в BuildPipeline.BuildAssetBundles() карту из префабов и все равно всегда Unity начинает обходить все ассеты в проекте, застревает на каждом проклятом png и весь процесс создания AssetBundle занимает больше двух часов. Гугл выдает только несколько несчастных, которых задаются тем же вопросом, что и я, и им просто никто не отвечает.
Почему так долго? Почему Unity идет по каждому ассету, когда я вот прямо ей даю список, из которого я хочу получить AssetBundle?
Может сейчас уже есть более удобная альтернатива бандлам? В документации написано: лучший совет по организации ассетов, не использовать Resources, а использовать AssetBundles.
, 20/10/20 Втр 13:55:40 705250418
Чуваки, раз подняли тему асинхронных методов - на сколько это вообще здравая идея в юнити их использовать?
Аноним 20/10/20 Втр 14:00:05 705253419
bandicam 2020-1[...].mp4 2902Кб, 1016x592, 00:00:12
1016x592
Почему я не могу фэйд нормально сделать? Материал Standart, Rendering Mod Transparent, ошибка очевидно в коде, но я не могу найти проблему, скиньте как вы это используете.

if(fadeOut){
Color objectColor = carsObj[way].gameObject.GetComponent<MeshRenderer>().material.color;
float fadeAmount = objectColor.a + (1 * Time.deltaTime);
objectColor = new Color(objectColor.r, objectColor.g, objectColor.b, fadeAmount);
carsObj[way].gameObject.GetComponent<MeshRenderer>().material.SetColor("_Color", objectColor);

if(objectColor.a >= 255){
fadeOut = false;
}
}
Аноним 20/10/20 Втр 14:22:31 705256420
>>705253
Да, в коде ошибка, сделал через Color.Lerp.
Аноним 20/10/20 Втр 14:24:37 705258421
>>705191
Так просто синглтон заменить на обычный объект, нет?
Аноним 20/10/20 Втр 14:59:59 705266422
>>705120
>Скажи это любому работодалю
ну, ежели работодателю, то да... И там не только ООП надо знать, не так ли, а туеву кучу всего, без чего обычный инди-разработчик вполне может обойтись
Аноним 20/10/20 Втр 15:02:32 705267423
>>705266
Ну для себя и узкого круга можно и говнокод пилить, конечно на уровне яндере симулятора, но мне кажется всяко лучше, если код чистый, красивый и понятный. Знание ООП, СОЛИДа и базовых патернов лишним всё равно никогда не будет.

Но в общем ты прав, конечно, для себя можно и без этого. но нахуя, если можно с?
Аноним 20/10/20 Втр 16:28:22 705304424
image.png 84Кб, 931x733
931x733
image.png 66Кб, 645x470
645x470
image.png 54Кб, 699x486
699x486
Салам Алейкум Программисты и модельеры, есть функция на первой картинке, которая двигает обьект вилоситей и при ударении об стену вращает его на угол отражения, но, проблема в том что в первом случае отражается правильно, а во втором неправильно, подскажите пожалуйста, как пофиксить, а то я ебло 2 дня только рэйкаст писал
Аноним 20/10/20 Втр 16:31:51 705306425
image.png 105Кб, 310x440
310x440
image.png 93Кб, 247x431
247x431
Помоги юнитач. Нужно сделать так, чтобы по тапу на экран блоки заполнялись зеленым. Есть нужные спрайты, но не понимаю как реализовать. Метод тапа и всё прочее уже готово, нужно просто чтобы зеленый спрайт было видно только внутри боксов. или может как-то можно слайдером реализовать или чем, я хз
Аноним 20/10/20 Втр 16:39:27 705309426
Аноним 20/10/20 Втр 16:52:04 705316427
>>705309
У меня это UI
Не спрайты, а имэджы
Аноним 20/10/20 Втр 17:00:49 705323428
>>705316
Разобрался
Там нужен image и компонент mask
В целом даже ещё удобней, чем с спрайтмасками. Спасибо
Аноним 20/10/20 Втр 17:27:05 705349429
1.PNG 889Кб, 1010x719
1010x719
Привет, девелопперы.
Давно мечтаю сделать игру: 2D визуально-диалоговая песочница рпг... короче клон "Валета плетей". С юнити очень мало знаком, но кодить умею.
Реквестирую план вкатывания, при котором потрачу минимум времени на изобретение окошек с кнопками, и максимум времени на логику с механиками.
Может там в магазе есть фреймворки для визуальных новелл, или какие то удобные наборы компонентов?
Или достаточно пару видосов глянуть, и уроков читнуть и никакие васяны не нужны?
Аноним 20/10/20 Втр 17:43:49 705360430
Unity2020102020[...].mp4 7437Кб, 1504x720, 00:00:05
1504x720
>>698843 (OP)
>>698843 (OP)
Анончики, в юнити есть возможность прописать путь допустим звука, чтобы не назначать ручками этот звук каждому объекту со скриптом? Пользовался вот таким решением:
_sound = (AudioClip)UnityEditor.AssetDatabase.LoadAssetAtPath("Assets/_Data/Sound/SFX/menuTouch.wav", typeof(AudioClip));
но оно работает только в редакторе, и билд с таким кодом нельзя сделать, ошибка cs0234.
Аноним 20/10/20 Втр 17:44:11 705361431
Есть массив, в нем изначально 0 элементов, я в него помещаю сначала первый объект, потом второй. Когда кол-во объектов достигает трех, мне нужно удалить первый объект. Короче суть в чем, максимум 2 объекта, если больше, то первый удаляется и в конец добавляется новый, но у меня какая-то проблема, я сделал вот так, но потом появляется баг из-за которого что-то не до конца очищается и объекты зависают и это действие не выполняется.

fadeLists.Add(newFade);
if(fadeLists.Count == 3){
fadeLists[0].Reset();
fadeLists.RemoveAt(0);
}
Аноним 20/10/20 Втр 18:23:33 705380432
>>705349
А почему ты РПГ мейкер не хочешь использовать? Ровно под твою задачу