Войти
Unity

Unity

Создание игр на движке Unity

СтатьиФорумИнфо

Статьи

Создание веревки в Unity на базовых SpringJoint.
Создание веревки в Unity на базовых SpringJoint.

В этой статье я расскажу к какому способу создания веревок (тросов, цепей) я смог прийти в ходе разработки игры для конкурса Платформеров на GameDev.ru. Пример будет разобран на 2Д проекте, но думаю нет никаких сложностей адаптировать его для 3Д проекта.

Читать
24 дек 2021

Контент-ориентированная генерация уровня в Unity в конкурсе «Храм Хаоса»
Контент-ориентированная генерация уровня в Unity в конкурсе «Храм Хаоса»

Я, как и обещал, делюсь своими идеями насчет процедурной генерации уровней. Все то, что я опишу далее, ни в коем разе не претендует на истину, новаторство и, тем более, на что-то амбициозно-гениальное. Все это родилось лишь из непонимания общепринятых принципов современной процедурщины и математики, а также жгучего желания облегчить себе жизнь.

Читать | Комментарии [8]
15 мая 2020

Unity Character Motor
Unity Character Motor

Когда-то давно, еще во времена Unity 3, мне стало интересно как работает физика персонажа. И я заглянул в класс CharacterMotor. Класс был написан на JavaScript, был огромный, страшный и непонятный. Я решил переписать его на C#, попутно отрефакторив. Недавно я вспомнил про свой старый CharacterMotor, решил еще немного подправить его и поделиться им. Тем более, тема физики персонажа не очень популярная (я вообще не видел никакой информации), хотя довольно интересная.

Читать | Комментарии [61]
29 июня 2016

Реализуем multi-touch жесты самостоятельно
Реализуем multi-touch жесты самостоятельно

В этой статье будет рассмотрена реализация pan (перемещения) и pinch zoom (масштабирования двумя пальцами) изображения. В результате получится некий аналог приложения для просмотра фотографий.

Читать | Комментарии [2]
20 окт 2012

Блог

Unity приобрела Ziva Dynamics

Компания Unity пополнила свои покупки компанией Ziva Dynamics – лидером в симуляции компьютерных персонажей. В линейку приобретений компании уже входят Weta Digital, SpeedTree, SyncSketch, Pixyz, and RestAR.
Подробнее…

Ссылка | Комментарии [46]
25 янв 2022

Unity приобрела создателя SpeedTree

Компания Unity приобрела компанию Interactive Data Visualization (IDV) — разработчика пакета SpeedTree. SpeedTree — инструмент моделирования растительности для игр и компьютерных симуляций.

Трехмерное моделирование вручную и с нуля растительности, такой как трава и деревья, достаточно сложное и трудоемкое занятие. Однако SpeedTree через автоматизацию позволяет ускорить и облегчить этот процесс. Инструмент SpeedTree достаточно популярен и занимает лидирующие позиции на рынке. SpeedTree использовался для моделирования растительности в таких проектах, как Horizon: Zero Dawn, Call of Duty: War Zone, The Witcher 3, Assassin’s Creed: Valhalla, Hitman III, and Ghost of Tsushima.

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

Ссылка
22 июля 2021

На Stackoverflow добавлена community-документация

На Stackoverflow в рамках проекта Documentation создан раздел для Unity.
Это позволяет пользоваться документацией к Unity, созданной сообществом.

У такой документации есть преимущества:

  • Любую недоработку в документации может исправить кто угодно.
  • В любой момент можно добавить недостающую информацию.
  • Карма, полученная в рамках этого проекта, идёт в общую карму stackoverflow.

Есть и недостатки:

  • Данный ресурс не является официальным источником информации.
  • Поиск нужного раздела может быть затруднён, так как проект страдает от последствий унификации интерфейса с основным сайтом stackoverflow.

Запросы на добавление недостающей документации можно добавлять через кнопку "Request Topic".
Также можно голосовать за добавление недостающих разделов на главной странице тега Unity.

Ссылка
24 июля 2016

В Unity 5.4 будет прекращена поддержка WebPlayer

Согласно Unity 5.4.0b1 release notes и Роадмап Unity Web Player, в Unity 5.4, выпуск которого запланирован на март 2016 года, будет прекращена поддержка платформы WebPlayer.

Официальный блог Unity3D рекомендует переводить игры, использовавшие WebPlayer, на платформу WebGL.
Тем не менее, сами Unity признают, что WebGL всё ещё накладывает серьёзные ограничения на некоторые игры, изначально создаваемые для WebPlayer.

Чтобы помочь разработчикам сориентироваться в новой технологии WebGL, на форуме Unity была создана специальная тема WebGL Roadmap, которая помогает понять, какие ограничения есть у WebGL и как их можно обойти. Тема была создана полгода назад, поэтому рекомендуется следить за Unity roadmap и официальным блогом, чтобы быть в курсе изменений платформы WebGL.

Ссылка | Комментарии [10]
14 янв 2016

Редактор Unity появится на Linux

Unity Technologies планируют портировать редактор Unity на Linux.
Он обязательно будет поддерживать Ubuntu версии не менее 12.04 и будет настолько же функциональным, как и его версии для Mac OS и Windows, кроме сборки игр под iOS.
В данный момент редактор существует в виде отдельной экспериментальной ветки внутри компании. Unity Technologies планируют в скором времени собрать экспериментальную сборку редактора и представить её публике.

Ссылка | Комментарии [9]
12 июля 2015

Видеоуроки по программированию на C# Unity для начинающих

Программирование на C# под Unity.
Смотрим на Ютубе.

Ссылка | Комментарии [2]
29 июня 2015

Вышел Unity 4.6

Сегодня вышла новая версия Unity 4.6. Главным нововведением в этой версии стала новая система создания пользовательского интерфейса, которая позволяет легко настраивать интерфейс игры в редакторе.
Подробнее…

Ссылка
27 ноя 2014

Открытая бета Unity 4.6 доступна для скачивания
Unity4.6 Open Beta | Открытая бета Unity 4.6 доступна для скачивания

Стала доступной открытая бета-версия Unity 4.6: http://unity3d.com/unity/beta/4.6
Главное новшество в ней - новая система UI, которая наконец-таки соответствует современным стандартам.

Приятным бонусом также является исходный код встроенных в Unity шейдеров, который можно скачать на той же странице. Это является следствием инициативы Unity по открытию исхдных кодов своих компонентов: http://blogs.unity3d.com/2014/08/20/more-open-source-initiatives-from-unity/

Ссылка | Комментарии [9]
21 авг 2014

Форум

Архитектура игры7 фев 202312:42KolyaL

Рад буду услышать мнения о лучших способах организации архитектуры игрового проекта.

Например, есть типичный проект - сплэш, главное меню (какая-то несложная структура), игра.

Есть, например, такой вариант - одна пустая сцена, каждый экран отдельный префаб. Соответственно, добавляем/убираем эти префабы со сцены. Или одна сцена для меню, отдельная сцена для игры. Или все в отдельные сцены.

Есть какая-то устоявшаяся практика для работы с этим всем?

Если кто-то использовал ECS, то ECS накладывает какие-то ограничения на архитектуру игры или наоборот?

Правка: 8 фев 2023 1:11

Wave Function Collapse для процедурной генерации в Unity30 янв 202310:22Unicorn Developer

Wave Function Collapse – это алгоритм, c помощью которого можно реализовать генерацию чего угодно, что можно было бы описать с помощью правил или конкретным примером. В этой статье мы рассмотрим, как использовать WFC для генерации карты в Unity.

image1 | Открытая бета Unity 4.6 доступна для скачивания

Идея написания этой статьи была навеяна одним любопытным проектом, найденным на просторах GitHub. В нём Wave function collapse применялась для генерации продолжения изображения по его небольшому кусочку.

Приятного чтения!

Идея Wave Function Collapse
Wave Function Collapse – это алгоритм, вдохновленный идеями квантовой механики. Согласно одной из таких идей для каждого объекта существует огромное множество возможных состояний.

Изначально сам объект находится в некотором обобщённом состоянии, представляющим собой линейную комбинацию всех элементов этого множества. Однако под влиянием окружения состояние объекта конкретизируется в пользу одного из возможных состояний.

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

Представьте, что пространство, где должна быть ваша карта, представляет собой плоскость, разделённую на множество квадратов. Каждый квадрат – это ячейка, в которую вы можете поместить один из множества кусочков вашей карты. Каждый кусочек (далее будем называть его модулем) — это возможное состояние этой ячейки.

Пока ячейка пуста, в неё можно поместить совершенно любой модуль из множества. Можно сказать, она находится в некотором обобщённом состоянии или суперпозиции.

Однако, если поместить в ячейку произвольный модуль (например, участок земли с дорогой) мы определим для неё конкретное состояние из множества возможных.

Но как это отразится на состоянии других ячеек в карте? Логично предположить, что если в одном участке карты у нас есть дорога, то на соседнем участке, в сторону которого эта дорога ведёт, должно быть её продолжение или какое-то завершение, будь то ворота, дом или мост. И было бы неправильно, если бы дорога вдруг упёрлась в стену, дерево или какое-либо другое препятствие или просто неожиданно оборвалась.

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

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

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

Наверняка на этом месте некоторые подумают: "да-да, на словах всё прекрасно, но как реализовать такое поведение в коде?". На самом деле не так сложно, как может показаться на первый взгляд. Далее мы познакомимся с алгоритмом процедурной WFC-генерации, а после кратко рассмотрим его простую реализацию.

Алгоритм процедурной WFC-генерации
В общем виде алгоритм процедурной генерации на основе Wave Function Collapse выглядит следующим образом:

1. Имеется пространство, условно разбитое на несколько одинаковых частей – ячеек. Для каждой такой ячейки существует несколько модулей, которые можно в неё поместить. Этот набор модулей можно назвать множеством состояний ячейки, а сами модули – состояниями этой ячейки. Изначально множество состояний ячейки включает все возможные состояния:

image2 | Открытая бета Unity 4.6 доступна для скачивания

2. Далее выбирается случайная ячейка, для которой существует наименьшее количество возможных состояний (но не менее двух). Все модули выбранной ячейки, за исключением одного, удаляются, а оставшийся считается "определённым состоянием" этой ячейки. Можно сказать, что модуль "поместили" в эту ячейку. Способ, с помощью которого этот модуль будет выбираться, может быть произвольным. Для простоты определить состояние ячейки можно случайным образом:

image3 | Открытая бета Unity 4.6 доступна для скачивания

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

image4 | Открытая бета Unity 4.6 доступна для скачивания

4. Если из множества состояний соседней ячейки был удалён хотя бы один модуль, аналогичным образом обновляются и состояния её соседних ячеек: удаляются те модули, которые не сочетаются ни с одним модулем обновленной ячейки. Эта операция выполняется для всех ячеек, затронутым "волновым" обновлением:

image5 | Открытая бета Unity 4.6 доступна для скачивания

5. Пункты 2-4 повторяются, пока хотя бы для одной ячейки существует более одного состояния:

image6 | Открытая бета Unity 4.6 доступна для скачивания

6. В результате пункта 5 состояние всех ячеек должно быть определенно, то есть в их множествах состояний должен остаться только 1 элемент. Однако может быть и так, что во множестве состояний вообще не останется элементов. В таком случае нужно откатить все изменения в карте на один или более шагов назад и попробовать другие комбинации модулей. Если же всё в порядке, остается только соединить модули, соответствующие ячейкам, вместе:

image7 | Открытая бета Unity 4.6 доступна для скачивания

Прекрасно! Наша карта успешно сгенерирована!

В следующем пункте мы рассмотрим вариант базовой реализации этого алгоритма. Хочу отметить, что описанная далее реализация не предназначена для генерации готовых игровых уровней. Однако она может служить наглядным примером, который поможет лучше понять принципы использования WFC-алгоритма в Unity.

Возможная реализация WFC для процедурной генерации карты
Итак, давайте посмотрим, как может выглядеть базовая реализация алгоритма Wave Function Collapse в контексте процедурной генерации местности в Unity.

- MapSize – размер карты;
- CellSize – размер одной ячейки карты (предполагается, что ячейка имеет форму квадрата);
- MapModules – набор шаблонов модулей, из вариантов которых будет генерироваться карта;
- ContactTypes – список типов контактов и их ограничений. Контакт представляет собой одну из граней ячейки. Каждый контакт имеет тип, а также список типов других контактов, с которыми соединение запрещается.

image8 | Открытая бета Unity 4.6 доступна для скачивания

2. Создаётся набор шаблонов модулей для генерации. К каждому шаблону прикрепляется скрипт MapModulePrefab.cs. В демонстрационных целях я подготовил 4 простеньких шаблона:

image9 | Открытая бета Unity 4.6 доступна для скачивания

3. В скрипте MapModulePrefab каждого из шаблонов задаётся тип контакта для каждой стороны шаблона. Также задаётся объект Map, который используется для получения списка с ограничениями для данного типа.

image10 | Открытая бета Unity 4.6 доступна для скачивания

4. На этом наша работа заканчивается и начинается работа Unity. Жмём кнопку Play и смотрим на результат.

image11 | Открытая бета Unity 4.6 доступна для скачивания

На первый взгляд выглядит вполне эффектно. Тем не менее вскоре на глаза попадаются недочёты: отсутствие проходов в некоторые части карты, а стены, что расположены по краям, иногда упираются в воздух. Однако все это решается дополнительными доработками к базовой процедурной WFC-генерации, которые зависят от вашей конкретной идеи.

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

В заключение этого пункта давайте в общем виде рассмотрим основные классы, которые входят в данную реализацию:

1. Класс Map. Является компонентом Unity. Представляет собой генерируемую карту. С помощью остальных классов он реализует 3 основных этапа генерации:

- Инициализация пустой карты в виде двумерного массива объектов класса MapCell. В множество состояний каждого такого объекта помещаются все возможные варианты модулей, из которых может генерироваться карта (объекты класса MapModuleState);
- Выбор конкретного состояния для каждой ячейки в карте с помощью алгоритма Wave Function Collapse (сам алгоритм по большей части реализован в классе MapCell);
- Создание модулей, соответствующих состояниям ячеек, на сцене.

Кроме этого, Map содержит информацию о типах контактов и их ограничениях в виде объектов MapModuleContact.

2. Класс MapModule. Является компонентом Unity. Реализует функционал для генерации списка вариантов шаблона с разным вращением вокруг оси Y (объекты класса MapModuleState). Так как основание модуля представляет собой квадрат, поворот каждого последующего варианта отличается от предыдущего на 90 градусов. В классе Map этот функционал используется для формирования списка всех возможных состояний.

3. Класс MapModuleState. Не является компонентом Unity. Объекты этого класса представляют собой варианты модулей с различным поворотом вокруг оси Y. Помимо поворота объекта, MapModuleState также содержит информацию о контактах модуля в виде коллекции Dictionary, в которой key имеет тип Vector2 и указывает в какую сторону направлен контакт, а value – экземпляр класса MapModuleContact. Также класс MapModuleState реализует функционал для проверки на возможность соединения одного модуля с другим.

4. MapModuleContact. Не является компонентом Unity. Объект этого класса хранит информацию о типе контакта одного модуля и список типов, с которыми соединение этого контакта запрещено. Он также реализует метод для проверки на возможность соединения этого контакта с другим. Этот функционал используется в MapModuleState для реализации проверки на возможность соединения модулей.

5. Класс MapCell. Не является компонентом Unity. Представляет собой ячейку карты. Реализует функционал для определения конкретного состояния объекта с последующим "волновым" обновлением множеств состояний других ячеек. На случай, если в результате такого обновления для одной из ячеек не осталось возможных состояний, предусмотрен откат обновлений с последующим выбором другого состояния для ячейки.

Заключение

На мой взгляд, процедурная WFC-генерация — очень интересная механика, которая определённо поможет разнообразить вашу игру. В примере данной статьи карта генерировалась из очень простых составляющих. Однако с тем же успехом могут быть использованы и более интересные модули с интерактивными объектами, персонажами и т. д. Да и сам алгоритм можно значительно усовершенствовать. Таким образом, процедурная WFC-генерация может использоваться как основа вашего проекта.

Вторым возможным применением является генерация прототипов. Здесь уже подходит более простая реализация. Вместо того, чтобы моделировать всю карту вручную, можно поступить следующим образом:

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

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

**

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

- Зачем разработчикам игр на Unity использовать статический анализ?
- Ошибки в коде движка Unity: часть 1, часть 2.

На этом всё — чистого вам кода и успешных проектов. :)

Оригинал статьи

Правка: 12:38

Инвентарь25 янв 202310:31mitay-walle

Всем привет.

Регулярно начинаю писать систему предметов для синглплеерной игры с сохранениями и всегда получается херня.

Предметы стакаются и имеют список примитивных свойств (string, int)

Есть несколько контекстов:
- база данных ( обычно ScriptableObject, данные о предметах, их названия, иконки, id, фабрика для создания дефолтного предмета )
- сохранения ( предмет включает id  и список примитивных свойств, опционально guid и позицию на сцене)
- сцена ( непосредственно пикапы предметов, контейнеры с предметами на сцене, инвентари, магазины)
- ui ( инвентарь, перекладывание в контейнер, покупка в магазине, экипировка предметов в руки персонажей)

Может у кого-то есть под рукой хороший пример реализации такой системы из выпущенной игры?

туторы или готовые фреймворки - не предлагайте. Они многие аспекты или отбрасывают или перегружают.

Есть 3 ключевые проблемы:
1.когда реализую добавление предметов в контейнер, учитывая существующие стаки, мне кажется, что я что-то делаю не так. Эта функция возвращает остаток предметов, и если он 0, то исходный объект предмета ( пикап или объект в другом контейнере) уничтожится, если больше 0, то поменяется количество. А в самой функции он должен попытаться, предварительно добавить в каждый существующий стак такого предмета, и вычетать из исходного количества. Какие еще варианты реализаций вы знаете?

2. Как совместить данные о стаке и свойства предмета? Получается что у каждого предмета в стаке могут быть те же свойства. Единственное что я придумал более менее адекватное - массив свойств для каждого предмета в стаке, но только если свойства не default

3. Как связать контексты, не создав спагетти?

Оптимизация списка объектов Unity24 янв 202314:56Qwerqe

Задача состоит в том, чтобы создавать одинаковые объекты и ставить их в строчку, удаляя каждый через t секунд. В итоге имеем дорожку определенного размера, которая движется в направлении спавна следующего объекта.

Чтобы не создавать и потом удалять каждый отдельный объект, реализован паттерн Список объектов. Если есть свободные объекты (activeInHierarchy(false)), то ищу его в List<List<GameObject>> usedObjects[типОбъекта][номер], присваиваю activeInHierarchy(true), устанавливаю на нужную позицию.
Если свободных нету, то создаю такой (Instantiate(gameObject)), присваиваю activeInHierarchy(true), добавляю в лист usedObjects.
Одновременно объектов около 3000.

В профайлере я заметил, что Object.Instantiate занимает в разы меньше времени чем поиск по листу и проверка каждого значения на activeInHierarchy.


Получается, паттерн Список объектов не имеет смысла?
Или я не туда смотрю?
Или это мои кривые куки?

Screenshot | Открытая бета Unity 4.6 доступна для скачивания
private GameObject GetObject(int objName)
    {
        GameObject obj = null;

        if (usedObjects[objName].Count > 0)
            for (int i = 0; i < usedObjects[objName].Count; i++)
                if (!usedObjects[objName][i].activeInHierarchy)
                    obj = usedObjects[objName][i];
        
        if (notEnoughtObjectsInPool)
        {
            obj = Instantiate(objectPool[objName].obj);
            obj.SetActive(false);
            usedObjects[objName].Add(obj);
        }

        return obj;
    }
Нужна помощь с URP, освещением за шоколадку или банку пива.18 янв 202318:22crankyns

Ищу доблестного человека, который поможет понять все процессы визуальной настройки сцены с помощью URP и объяснит, как работает свет, запекание, ligth probes, reflection probes и т.д.

Превратить нужно голый fbx в такое tunnel

p.s. Да, туториалы и документация это круто, но это не то.

Генерация меша, определение прямой видимости точек. Подскажите плз. алгоритм.15 янв 202316:57FourGen

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

Вопрос такого плана, как найти все точки, которые находятся в прямой видимости от новой точки?
(Наверняка уже 100 раз придумано и просто надо знать что посмотреть.)
Может кто подскажет, как это называется, что почитать?

Если порисовать картинки, то невооруженным взглядом видно, что есть логика с пристроением перпендикуляров, определением их пересечений и расстояний до них, но как-то не могу сформулировать общую концепцию, если кроме одной координаты например Z использовать 2 координаты например X и Z. В каком случае по какой определять? А если их будет все 3?

Как проще всего определить находится ли точка в прямой видимости и не перекрывается самой фигурой?

VisibleZone | Открытая бета Unity 4.6 доступна для скачивания
FPSController 3d (CameraController + PlayerController)14 янв 202322:24SatoshiMoto

(Обновлено 17.01.2023)

Довольно сильно пришлось мозг понасиловать но код вроде довольно неплох). Частично написан с помощью нейронки ChatGPT.

Может поможет кому нужно будет.

PlayerController.cs

Ходьба на W, A, S, D, Space, Left Shift, Left Ctrl, проверка на землю и падение если нет земли

CameraController.cs

Настройка сенсы, привязка поворота вправо и влево к персонажу, ограничение поворота от -90 до 90 (в моем от -89 до 89) не советую менять на 90+ на меньше можно.

Чтобы все работало нужно в unity создать пустой объект (Create Empty) назовите FPSController и накинуть на нево Character Controller и скрипт PlayerController.cs . Внутри пустого объекта закиньте камеру, вашего персонажа, и создайте еще пустой объект (Create Empty) назовите GroundCheck и отмасштабируйте к пяткам (он будет проверять есть земля под ногами).
Еще все объекты карты должны будут находиться внутри 1 слоя и в Layer добавить тег Ground и сменить Layer тег всех объектов на Ground.

В PlayerController.cs есть поля Ground Check (закидуем наш объект GroundCheck) в Ground Mask выбираем тег Ground который вы накинули на все объекты.

Скрипт CameraController.cs закиньте в камеру (в Player закиньте FPScontroller не персонажа).

А да думаю вы знаете но на всякий камера должна быть перед глазами) https://prnt.sc/VZaMTs1ep6XJ

Правка: 17 янв 2023 5:19

Шейдер прозрачности10 янв 202316:43Ascanio

Всем привет. Сразу извиняюсь за столь примитивный вопрос, однако я не хочу углубляться в кодовые дебри юнити, мне просто нужны выставить сценку. У меня есть плейн с текстурой цепи которая отображается лишь с одной стороны, то есть заводя камеру плейну за спину мы не видим вообще ничего. В сабстенсе можно просто поменять шейдер и вуаля. Какие махинации мне нужно провести в юнити?

Правка: 17:21

Исчезают спрайты на сцене8 янв 20233:36Lenin_Lib

Всем доброе утро ! Столкнулся с такой проблемкой ,что у меня куча спрайтов на сцене ( делаю 2D раннер) и Unity почему-то берёт и вырезает некоторые спрайты ,что ведёт к жестокому визуальному багу . Грешил как на нехватку ОЗУ,но даже увеличив лимиты не получилось починить. Кто знает,как это возможно фиксануть вообще ?

Как сделать логику рукопашного боя PVE с парными анимациями?5 янв 202319:29Neptun

Всем привет! Делаю файтинг, два персонажа, игрок и противник, несколько вариантов атак(например прямой рукой, апперкот, удар ногой, подсечка), блок, кувырок назад/влево/вправо с уклонением от удара.
  Пытаюсь придумать как должна выглядеть общая логика всего этого, какой нужен набор классов для этого, чтобы все выглядело красиво и удобно для доработок. Может быть есть подходящиий паттерн-шаблон или набор паттернов для такой архитектуры?

Правка: 19:30