Лекция
Привет, Вы узнаете о том , что такое unity , Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое unity , настоятельно рекомендую прочитать все из категории Кросс-платформенное программирование.
Unity (unity в переводе с англ. — «единство», произносится как «ю́нити») — кроссплатформенная среда разработки компьютерных игр, разработанная американской компанией Unity Technologies. Unity позволяет создавать приложения, работающие на более чем 25 различных платформах, включающих персональные компьютеры, игровые консоли, мобильные устройства, интернет-приложения и другие. Выпуск Unity состоялся в 2005 году и с того времени идет постоянное развитие.
Основными преимуществами Unity являются наличие визуальной среды разработки, межплатформенной поддержки и модульной системы компонентов. К недостаткам относят появление сложностей при работе с многокомпонентными схемами и затруднения при подключении внешних библиотек.
На Unity написаны тысячи игр, приложений, визуализации математических моделей, которые охватывают множество платформ и жанров. При этом Unity используется как крупными разработчиками, так и независимыми студиями
Редактор Unity имеет простой Drag&Drop интерфейс, состоящий из различных окон, благодаря чему можно производить отладку игры прямо в редакторе. Движок использует для написания скриптов C#. Ранее поддерживались также Boo (диалект Python, поддержку убрали в 5-й версии) и модификация JavaScript, известная как UnityScript (поддержка прекращена в версии 2017.1). Расчеты физики производит физический движок PhysX от NVIDIA для 3D физики и Box2D для 2D физики . Графический API — DirectX (на данный момент DX 11, поддерживается DX 12)
Проект в Unity делится на сцены (уровни) — отдельные файлы, содержащие свои игровые миры со своим набором объектов, сценариев, и настроек. Сцены могут содержать в себе как, собственно, объекты (модели), так и пустые игровые объекты — объекты, которые не имеют модели («пустышки»). Объекты, в свою очередь содержат наборы компонентов, с которыми и взаимодействуют скрипты. Также у объектов есть название (в Unity допускается наличие двух и более объектов с одинаковыми названиями в одной сцене), может быть тег (метка) и слой, на котором он должен отображаться. Так, у любого объекта на сцене обязательно присутствует компонент Transform — он хранит в себе координаты местоположения, поворота и размеров объекта по всем трем осям.
Также Unity поддерживает физику твердых тел и ткани, а также физику типа Ragdoll (тряпичная кукла).
В редакторе имеется система наследования объектов; дочерние объекты будут повторять все изменения позиции, поворота и масштаба родительского объекта.
Скрипты в редакторе прикрепляются к объектам в виде отдельных компонентов.
При импорте текстуры в Unity можно сгенерировать alpha-канал, mip-уровни, normal-map, light-map, карту отражений, однако непосредственно на модель текстуру прикрепить нельзя — будет создан материал, которому будет назначен шейдер, и затем материал прикрепится к модели. Редактор Unity поддерживает написание и редактирование шейдеров. Редактор Unity имеет компонент для создания анимации, но также анимацию можно создать предварительно в 3D-редакторе и импортировать вместе с моделью, а затем разбить на файлы.
Unity 3D поддерживает систему Level Of Detail (сокр. LOD), суть которой заключается в том, что на дальнем расстоянии от игрока высокодетализированные модели заменяются на менее детализированные, и наоборот, а также систему Occlusion culling, суть которой в том, что у объектов, не попадающих в поле зрения камеры, не визуализируется геометрия и коллизия, что снижает нагрузку на центральный процессор и позволяет оптимизировать проект. При компиляции проекта создается исполняемый (.exe) файл игры (для Windows), а в отдельной папке — данные игры (включая все игровые уровни и динамически подключаемые библиотеки).
Движок поддерживает множество популярных форматов. Модели, звуки, текстуры, материалы, скрипты можно запаковывать в формат.unitypackage и передавать другим разработчикам, или выкладывать в свободный доступ. Этот же формат используется во внутреннем магазине Unity Asset Store, в котором разработчики могут бесплатно и за деньги выкладывать в общий доступ различные элементы, нужные при создании игр. Чтобы использовать Unity Asset Store, необходимо иметь аккаунт разработчика Unity.
UNet (библиотека для реализации мультиплеера в играх на Unity) была удалена, начиная с версии 2018.4; решение «из коробки» для мультиплеера отсутствует. Также можно использовать подходящий пользователю способ контроля версий. К примеру, Tortoise SVN, Git или Source Gear.
В Unity входит Unity Asset Server — инструментарий для совместной разработки на базе Unity, являющийся дополнением, добавляющим контроль версий и ряд других серверных решений.
Как правило, игровой движок предоставляет множество функциональных возможностей, позволяющих их задействовать в различных играх, в которые входят моделирование физических сред, карты нормалей, динамические тени и многое другое. В отличие от многих игровых движков, у Unity имеется два основных преимущества: наличие визуальной среды разработки и межплатформенная поддержка . Первый фактор включает не только инструментарий визуального моделирования, но и интегрированную среду, цепочку сборки, что направлено на повышение производительности разработчиков, в частности, этапов создания прототипов и тестирования. Под межплатформенной поддержкой предоставляется не только места развертывания (установка на персональном компьютере, на мобильном устройстве, консоли и т. д.), но и наличие инструментария разработки (интегрированная среда может использоваться под Windows и Mac OS).
Третьим преимуществом называется модульная система компонентов Unity, с помощью которой происходит конструирование игровых объектов, когда последние представляют собой комбинируемые пакеты функциональных элементов. В отличие от механизмов наследования, объекты в Unity создаются посредством объединения функциональных блоков, а не помещения в узлы дерева наследования. Такой подход облегчает создание прототипов, что актуально при разработке игр .
В качестве недостатков приводятся ограничение визуального редактора при работе с многокомпонентными схемами, когда в сложных сценах визуальная работа затрудняется. Вторым недостатком называется отсутствие поддержки Unity ссылок на внешние библиотеки, работу с которыми программистам приходится настраивать самостоятельно, и это также затрудняет командную работу. Еще один недостаток связан с использованием шаблонов экземпляров (англ. prefabs). С одной стороны, эта концепция Unity предлагает гибкий подход визуального редактирования объектов, но с другой стороны, редактирование таких шаблонов является сложным. Также, WebGL-версия движка, в силу специфики своей архитектуры (трансляция кода из C# в C++ и далее в JavaScript), имеет ряд нерешенных проблем с производительностью, потреблением памяти и работоспособностью на мобильных устройствах.
Unity - это популярный игровой движок, который используется для создания различных видеоигр, виртуальной реальности, анимаций и других интерактивных контентов. Вот несколько основных понятий, связанных с Unity:
Сцена (Scene): Сцена в Unity - это пространство, где размещаются и взаимодействуют игровые объекты. Она может включать в себя персонажей, объекты, свет, камеры и другие элементы.
Игровой объект (Game Object): Игровой объект представляет собой основную сущность в Unity. Это может быть персонаж, объект, камера, свет и т. д.
Компонент (Component): Компоненты прикрепляются к игровым объектам и определяют их поведение. Например, компоненты могут контролировать движение, визуализацию, звук, столкновения и так далее.
Трансформация (Transform): Каждый игровой объект имеет компонент трансформации, который определяет его положение, вращение и масштаб в пространстве.
Камера (Camera): Камера определяет, что видит игрок. Она определяет видимую область сцены и определяет, как происходит отображение игрового мира.
Ресурсы – это расположенные на диске сущности, из которых состоит игровой проект. К ним относятся сети (модели), текстуры, спрайты, звуки и другие ресурсы.
Материал (Material): Материалы определяют внешний вид объекта, включая цвет, текстуры и свойства отражения.
Ассет (Asset): Ассеты в Unity - это ресурсы, используемые в игре, такие как текстуры, звуки, модели и другие файлы.
Скрипт (Script): Скрипты написаны на языке программирования C# или JavaScript и прикрепляются к игровым объектам для определения их поведения и взаимодействия.
Физика (Physics): Unity включает в себя встроенный движок физики, который позволяет объектам взаимодействовать с окружающим миром, учитывая гравитацию, столкновения и т. д.
Анимация (Animation): Unity позволяет создавать анимации для игровых объектов, управляя их движением, вращением и другими свойствами.
Unity Physics - это система физики, встроенная в Unity, которая позволяет разработчикам создавать реалистичные физические эффекты в своих играх. Вот некоторые основные понятия, связанные с Unity Physics:
Эти основные понятия являются основой для работы с физической системой Unity и позволяют разработчикам создавать интересные и реалистичные физические эффекты в своих проектах.
В Unity математика играет важную роль при разработке игровых приложений, особенно в областях, таких как графика, физика и анимация. Вот несколько основных понятий математики, которые часто используются в Unity:
Лучевая трассировка (Raycasting): Это один из наиболее распространенных способов использования лучей. Лучевая трассировка позволяет определить, пересекает ли луч какой-либо объект, и получить информацию о точке пересечения, объекте, с которым произошло пересечение, и другие параметры. Это часто используется для обнаружения столкновений, стрельбы по объектам или измерения расстояний.
Лучевые линии (Ray Lines): Лучи также могут быть использованы для визуализации линий или визуальных эффектов в сцене. Например, лучи могут использоваться для создания лазерных лучей, пуль, лучей света или других эффектов.
Измерение расстояний (Distance Measurement): Лучи могут быть использованы для измерения расстояний между объектами в сцене. Об этом говорит сайт https://intellect.icu . Проведя луч между двумя точками, можно определить расстояние между ними.
Лучи для отладки (Debugging Rays): В разработке игры лучи также часто используются для отладки и визуализации определенных аспектов игровой механики. Например, лучи могут использоваться для визуализации области обнаружения персонажа или области действия некоторого объекта.
Эти основные математические концепции помогают разработчикам Unity создавать реалистичные и увлекательные игры, а также эффективно управлять объектами и данными в игровых приложениях.
Основные понятия графики в Unity включают в себя различные компоненты, настройки и технологии, которые используются для создания визуального контента в игровом мире. Вот некоторые из них:
Это лишь общий обзор основных понятий графики в Unity. Каждое из этих понятий имеет множество подробностей и настроек, которые могут быть использованы для создания красивых и увлекательных визуальных эффектов в игровом мире.
В Unity примитивы - это предварительно созданные объекты, которые могут быть легко добавлены в сцену для быстрого создания простых форм и объектов. Эти примитивы обычно используются в качестве основы для создания декораций, тестовых уровней или прототипирования игровых механик. Некоторые из наиболее часто используемых примитивов в Unity включают в себя:
Для добавления примитива в сцену в Unity, вы можете выполнить следующие шаги:
Выберите объект, к которому вы хотите добавить примитив, или создайте новый пустой объект.
Нажмите правой кнопкой мыши на объекте в иерархии или в сцене.
В контекстном меню выберите "Create Empty" (Создать пустой) или "3D Object" (3D объект).
В подменю "3D Object" выберите нужный вам примитив, например, "Cube" (Куб), "Sphere" (Сфера) и т.д.
Unity автоматически добавит выбранный примитив к вашей сцене.
После того как примитив добавлен в сцену, вы можете его изменить, перемещать, масштабировать и вращать так же, как и любой другой объект в Unity. Примитивы представляют собой удобный и быстрый способ создания простых форм и объектов без необходимости моделирования их с нуля.
UI элемент в Unity - это объект, предназначенный для отображения интерфейсных элементов в пользовательском интерфейсе (UI) игры. Он позволяет создавать кнопки, текстовые поля, изображения, полосы прокрутки и другие элементы, которые пользователь может видеть и с которыми взаимодействовать.
UI элементы в Unity обычно используются для создания интерфейса пользователя, такого как главное меню, инвентарь, здоровье персонажа, счетчики и т. д. Они могут быть созданы как для двухмерного, так и для трехмерного пространства, в зависимости от требований проекта.
Некоторые типы UI элементов в Unity:
Button (Кнопка): Позволяет создать кнопку, которую пользователь может нажать для выполнения определенного действия.
Text (Текст): Используется для отображения текста на экране, например, для отображения названия или описания объекта.
Image (Изображение): Позволяет отображать изображение на экране, например, иконку предмета или фоновое изображение.
Slider (Ползунок): Позволяет пользователю выбирать значение из заданного диапазона, перемещая ползунок.
Toggle (Флажок): Позволяет пользователю переключать между двумя состояниями (включено/выключено) путем нажатия на флажок.
Dropdown (Раскрывающийся список): Позволяет пользователю выбирать один из нескольких вариантов из выпадающего списка.
Input Field (Поле ввода): Позволяет пользователю вводить текст с клавиатуры.
Scroll View (Область прокрутки): Позволяет отображать большие объемы контента, прокручиваемые по вертикали или горизонтали.
Эти элементы могут быть настроены и стилизованы с помощью компонентов и свойств в Unity, чтобы соответствовать дизайну и потребностям вашего проекта.
HUD (Head-Up Display) в Unity - это пользовательский интерфейс, который отображается поверх игровой сцены и обычно содержит информацию, которая помогает игроку взаимодействовать с игрой или отслеживать различные параметры игрового процесса. HUD обычно включает в себя элементы, такие как здоровье персонажа, количество боеприпасов, миникарту, индикаторы целей и другую важную информацию.
В Unity HUD может быть реализован с использованием Canvas, как это описано в предыдущем ответе. Вот примеры элементов, которые могут присутствовать в HUD в Unity:
Реализация HUD в Unity обычно требует создания и настройки элементов пользовательского интерфейса с использованием компонентов Canvas, Text, Image и других элементов UI. Эти элементы могут быть размещены на Canvas и настроены с помощью скриптов для обновления их содержимого и поведения в соответствии с игровой логикой.
Canvas:
Таким образом, Hierarchy of Objects относится к структуре объектов в сцене Unity, в то время как Canvas - это специальный объект, предназначенный для отображения элементов пользовательского интерфейса. Оба концепта играют важную роль в разработке игр на Unity, обеспечивая организацию и отображение контента в игровом мире.
ECS в Unity означает "Entity-Component-System" и представляет собой парадигму разработки игр, которая отличается от традиционного объектно-ориентированного программирования (ООП). Основано на DOP - Дата-ориентированное проектирование – это подход к оптимизации программ, предполагающий, что расположение структур данных в памяти должно тщательно оптимизироваться. Также требуется учитывать, как такой подход отражается на автоматической векторизации и использовании кэша ЦП .
Вот краткое объяснение каждого компонента ECS:
Преимущество ECS в Unity заключается в том, что он позволяет разработчикам лучше масштабировать и оптимизировать свои игры, особенно для проектов с большим количеством объектов и сложной логикой. Он также упрощает параллельную обработку данных, что может значительно увеличить производительность игры.
Unity внедрил ECS с помощью системы DOTS (Data-Oriented Technology Stack), которая предлагает инструменты и подходы для создания высокопроизводительных и масштабируемых игровых приложений. DOTS включает в себя не только ECS, но и другие технологии, такие как Job System и Burst Compiler, которые помогают оптимизировать код и использовать многопоточность для улучшения производительности.
В Unity создание компонентов и систем в рамках ECS (Entity-Component-System) осуществляется с использованием API DOTS (Data-Oriented Technology Stack). Вот краткое руководство по созданию компонентов и систем:
Создание компонентов:
Определите структуру данных вашего компонента. Например, если вы хотите создать компонент для хранения информации о скорости объекта, вы можете создать структуру данных, содержащую переменные для хранения значений скорости по осям X, Y и Z.
Унаследуйтесь от IComponentData или IComponentData, чтобы объявить вашу структуру данных как компонент ECS. Например:
using Unity.Entities; using Unity.Mathematics; public struct SpeedComponent : IComponentData // or MonoBehavior
{ public float3 Value; // Значение скорости по осям X, Y и Z }
Создайте экземпляр вашего компонента и добавьте его к сущности. Например:
var entity = EntityManager.CreateEntity(typeof(SpeedComponent)); EntityManager.SetComponentData(entity, new SpeedComponent { Value = new float3(1f, 0f, 0f) });
Создание систем:
Определите класс вашей системы и унаследуйтесь от SystemBase. Этот класс будет содержать логику обработки компонентов. Например:
using Unity.Entities; using Unity.Physics; using Unity.Physics.Systems; public class MovementSystem : SystemBase // or MonoBehavior { protected override void OnUpdate() { float deltaTime = Time.DeltaTime; Entities.ForEach((ref Translation translation, in SpeedComponent speed) => { translation.Value += speed.Value * deltaTime; }).Schedule(); } }
Регистрируйте вашу систему в World (мире) и добавляйте необходимые зависимости. Например:
using Unity.Physics.Systems; public class GameWorldInitializationSystem : ComponentSystem { protected override void OnCreate() { var physicsSystemGroup = World.GetOrCreateSystem(); var movementSystem = World.GetOrCreateSystem(); physicsSystemGroup.AddDependency(movementSystem); } }
Запускайте вашу систему в нужный момент времени. В примере выше, система будет запускаться автоматически в каждом кадре.
Это простое руководство по созданию компонентов и систем в рамках ECS в Unity. ECS предоставляет мощные инструменты для создания высокопроизводительных и масштабируемых игр, позволяя разработчикам эффективно управлять данными и логикой игры.
Каждый игровой объект состоит из компонентов.
Компонент реализует четко определенный набор поведений, необходимых, чтобы мог выполниться GameObject. Все, благодаря чему объект получается таким, каков он есть — это вклад компонентов, из которых он состоит:
У единственного «видимого» элемента машины будет компонент Renderer, который отрисовывает машину и, вероятно, компонент Collider, задающий для нее границы столкновений.
Если машина представляет персонажа, то у самого объекта car может быть Player Input Controller (Контроллер ввода от персонажа), принимающий все события, связанные с нажатиями клавиш, и транслирующий их в код, отвечающий за движение машины.
Притом, что можно писать большие и сложные компоненты, где компонент 1 в 1 равен кодируемому объекту (напр., компонент player содержит код, полностью описывающий персонажа, а компонент enemy, в свою очередь, полностью кодирует противника) обычно принято извлекать логику, дробя ее на небольшие «обтекаемые» кусочки, соответствующие конкретным признакам. Например:
В коде есть MonoBehavior, вездесущий родительский класс для представления компонентов. Большинство невстроенных компонентов будут наследовать от MonoBehavior, который, в свою очередь, наследует от Behavior и Component, соответственно.
Все объекты, обладающие здоровьем, будь то Player (Игрок) или Enemy (Враг) могут иметь компонент LivingObject, задающий исходное значение здоровья, принимающий урон и приводящий в исполнение смерть, когда объект умирает.
В Unity термин "префаб" (Prefab) используется для обозначения объекта, который содержит готовый набор компонентов, настроек и данных, который можно многократно использовать в проекте. Префабы позволяют создавать объекты с определенными свойствами и поведением и использовать их многократно без необходимости создания каждого объекта заново.
Основные преимущества использования префабов:
Удобство и скорость создания объектов: Префабы позволяют создавать объекты с предварительно настроенными компонентами и свойствами, что упрощает и ускоряет процесс разработки.
Многократное использование: Созданные префабы могут быть использованы многократно в различных частях проекта. Изменения, внесенные в префаб, автоматически отразятся на всех экземплярах этого префаба в проекте.
Обновление: Изменения, внесенные в префаб, могут быть легко применены ко всем его экземплярам в проекте, что делает обновление и поддержание консистентности объектов проще и удобнее.
Улучшенное управление: Unity предоставляет инструменты для управления префабами, такие как вложенные префабы, префабы с несохраненными изменениями и префабы в редакторе сцен, что облегчает организацию и управление большим количеством объектов.
Чтобы создать префаб в Unity, вы можете просто перетащить объект из иерархии или сцены в панель Префабов (Prefabs) в окне Проекта (Project). После этого объект станет префабом и может быть использован в любой части вашего проекта.
Использование префабов рекомендуется для создания модульного и эффективного проекта в Unity, особенно когда вам нужно многократно использовать однотипные объекты.
Все ресурсы, сцены и объекты вашего проекта долговременно сохраняются на диске. При редактировании игры эти объекты загружаются в память, а затем сохраняются обратно на диск с помощью системы сериализации, действующей в Unity. При тестовых прогонах игры объекты и сцены, находящиеся в памяти, загружаются при помощи одной и той же системы сериализации. Эта система также соотносит ресурсы, находящиеся в скомпилированном пакете, с загруженными/выгруженными объектами сцены в памяти.
Поток сериализации/десериализации, действующий в движке Unity, загружает в память ресурсы, расположенные на диске (в вашем проекте: для редактирования или тестового прогона игры, либо в самой игре, при загрузке сцены) и отвечает за сохранение состояния отредактированных вами объектов и компонентов обратно в соответствующие сцены и шаблонные экземпляры.
Следовательно, система сериализации также является ключевым элементом работы с редактором Unity. Чтобы MonoBehavior мог принять ввод при конструировании сцены в ходе ее инициализации, эти поля должны быть сериализованы.
Большинство базовых типов Unity, в частности, GameObject, MonoBehavior и ресурсы поддаются сериализации и могут получать исходные значения при создании прямо из редактора Unity. Публичные поля в вашем MonoBehavior сериализуются по умолчанию (если относятся к сериализуемому типу), а приватные поля для этого сначала нужно пометить атрибутом Unity [SerializeField], и тогда они тоже могут быть сериализованы.
Это лишь несколько основных понятий в Unity. При работе с движком важно освоить эти и другие термины для более эффективной разработки.
Для большего понимания прочитайте официальную документацию или посетите платные или бесплатные курсы
Если есть дополнительные вопросы пишите в коментариях
В Unity стейт машина (State Machine) - это способ организации и управления поведением объекта или системы на основе его текущего состояния. Стейт машины используются для определения различных действий и переходов между состояниями в зависимости от определенных условий или событий.
Основные компоненты стейт машины в Unity:
Состояния (States): Каждое состояние представляет определенное поведение или сценарий, в котором находится объект. Например, состояния могут быть "идти", "бегать", "атаковать", "ожидать" и т. д.
Переходы (Transitions): Переходы определяют условия, при которых объект переходит из одного состояния в другое. Например, переход из состояния "идти" в состояние "атаковать" может произойти, когда объект обнаруживает противника в пределах определенного радиуса.
Действия (Actions): Действия определяют конкретные действия, которые выполняются в каждом состоянии. Например, в состоянии "бегать" объект может перемещаться по определенному пути, а в состоянии "атаковать" он может выполнять атакующие действия.
Преимущества использования стейт машин в Unity:
Модульность и гибкость: Стейт машины позволяют легко добавлять, изменять и удалять состояния и переходы без изменения основной логики объекта.
Читаемость и отладка: Структура стейт машины обычно является понятной и легко читаемой, что упрощает отладку и понимание поведения объекта.
Управление сложным поведением: Стейт машины идеально подходят для управления сложным поведением объектов, таких как персонажи в играх или автоматизированные системы.
Unity предоставляет несколько способов реализации стейт машин, включая написание собственных скриптов, использование ассетов сторонних разработчиков или использование встроенных инструментов, таких как Animator Controller для управления анимациями объектов.
Исследование, описанное в статье про unity , подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое unity и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Кросс-платформенное программирование
Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.
Комментарии
Оставить комментарий
Кросс-платформенное программирование
Термины: Кросс-платформенное программирование