Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

Unity кроссплатформенная среда разработки компьютерных игр -Основы

Лекция



Привет, Вы узнаете о том , что такое 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  кроссплатформенная среда разработки компьютерных игр -Основы

В качестве недостатков приводятся ограничение визуального редактора при работе с многокомпонентными схемами, когда в сложных сценах визуальная работа затрудняется. Вторым недостатком называется отсутствие поддержки Unity ссылок на внешние библиотеки, работу с которыми программистам приходится настраивать самостоятельно, и это также затрудняет командную работу. Еще один недостаток связан с использованием шаблонов экземпляров (англ. prefabs). С одной стороны, эта концепция Unity предлагает гибкий подход визуального редактирования объектов, но с другой стороны, редактирование таких шаблонов является сложным. Также, WebGL-версия движка, в силу специфики своей архитектуры (трансляция кода из C# в C++ и далее в JavaScript), имеет ряд нерешенных проблем с производительностью, потреблением памяти и работоспособностью на мобильных устройствах.

Основные понятия юнити

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

  1. Сцена (Scene): Сцена в Unity - это пространство, где размещаются и взаимодействуют игровые объекты. Она может включать в себя персонажей, объекты, свет, камеры и другие элементы.

  2. Игровой объект (Game Object): Игровой объект представляет собой основную сущность в Unity. Это может быть персонаж, объект, камера, свет и т. д.

  3. Компонент (Component): Компоненты прикрепляются к игровым объектам и определяют их поведение. Например, компоненты могут контролировать движение, визуализацию, звук, столкновения и так далее.

  4. Трансформация (Transform): Каждый игровой объект имеет компонент трансформации, который определяет его положение, вращение и масштаб в пространстве.

  5. Камера (Camera): Камера определяет, что видит игрок. Она определяет видимую область сцены и определяет, как происходит отображение игрового мира.

  6. Ресурсы – это расположенные на диске сущности, из которых состоит игровой проект. К ним относятся сети (модели), текстуры, спрайты, звуки и другие ресурсы.

  7. Материал (Material): Материалы определяют внешний вид объекта, включая цвет, текстуры и свойства отражения.

  8. Ассет (Asset): Ассеты в Unity - это ресурсы, используемые в игре, такие как текстуры, звуки, модели и другие файлы.

  9. Скрипт (Script): Скрипты написаны на языке программирования C# или JavaScript и прикрепляются к игровым объектам для определения их поведения и взаимодействия.

  10. Физика (Physics): Unity включает в себя встроенный движок физики, который позволяет объектам взаимодействовать с окружающим миром, учитывая гравитацию, столкновения и т. д.

  11. Анимация (Animation): Unity позволяет создавать анимации для игровых объектов, управляя их движением, вращением и другими свойствами.

Физика в юнити - основные понятия

Unity Physics - это система физики, встроенная в Unity, которая позволяет разработчикам создавать реалистичные физические эффекты в своих играх. Вот некоторые основные понятия, связанные с Unity Physics:

  • Collider (Коллайдер): Коллайдеры используются для определения областей пространства, которые могут взаимодействовать с физикой. Они не имеют визуального представления и используются исключительно для обнаружения столкновений. Unity предоставляет различные типы коллайдеров, такие как BoxCollider, SphereCollider, CapsuleCollider и т. д.
  • Rigidbody (Твердое тело): Твердое тело добавляется к игровому объекту для придания ему физических свойств, таких как масса, гравитация, скорость и т. д. Оно позволяет объекту реагировать на физические силы, такие как гравитация, столкновения и приложенные силы.
  • Physics Material (Физический материал): Физический материал определяет поведение столкновений между объектами. Он может влиять на такие свойства, как трение, упругость и передача энергии при столкновениях.
  • Raycasting (Лучевое трассирование): Лучевое трассирование используется для определения, находится ли объект на пути луча, и получения информации о точке столкновения и объекте, с которым произошло столкновение.
  • Collision Detection (Обнаружение столкновений): Unity предоставляет различные методы обнаружения столкновений между объектами, включая динамическое обнаружение столкновений с помощью коллайдеров и статическое обнаружение столкновений с помощью физического движка.
  • Physics Layers (Слои физики): Слои физики позволяют настраивать, какие объекты могут взаимодействовать друг с другом в рамках физической системы. Это помогает управлять тем, какие объекты должны обнаруживать столкновения и взаимодействия между собой.
  • Physics Joints (Физические соединения): Физические соединения используются для создания жестких или гибких связей между объектами. Они позволяют моделировать различные виды механизмов и соединений в игровом мире.
  • Гравитация - это сила, которая притягивает объекты с массой друг к другу. В Unity гравитация обычно настраивается на уровне проекта и влияет на все физические объекты, которые не имеют своей собственной настройки гравитации.По умолчанию гравитация в Unity направлена вниз по оси Y с силой 9.81 м/с², что соответствует примерной силе притяжения на Земле.Объекты с включенным компонентом Rigidbody подвержены действию гравитации, если они не находятся в режиме кинематики.
  • Кинематика определяет, как объекты двигаются в игровом мире, и включает в себя понятия скорости, ускорения, угловой скорости и другие аспекты движения.
    В Unity объекты могут быть либо динамическими, либо кинематическими. Объекты с компонентом Rigidbody, который не имеет установленный флаг isKinematic, считаются динамическими и подвержены физическим воздействиям, таким как гравитация и столкновения. Кинематические объекты (с установленным флагом isKinematic) не подвержены физическим воздействиям и управляются программно.
    Кинематические объекты часто используются для управляемых объектов, таких как игровые персонажи или движущиеся платформы, где необходимо точное управление движением без вмешательства физического движка.

Эти основные понятия являются основой для работы с физической системой Unity и позволяют разработчикам создавать интересные и реалистичные физические эффекты в своих проектах.

Математика в юнити - основные понятия

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

  • Координаты В Unity координаты используются для определения положения объектов в трехмерном пространстве сцены или на экране. Существует несколько систем координат, которые могут быть использованы в Unity, в зависимости от контекста.(World , Local ,Screen Coordinates)
  • Векторы (Vectors): Векторы представляют собой величины, имеющие как направление, так и величину. В Unity они широко используются для определения позиции, направления, скорости и других параметров объектов в трехмерном пространстве.
  • Матрицы (Matrices): Матрицы используются для выполнения преобразований объектов, таких как вращение, масштабирование и перемещение. Они также используются для преобразования координат между различными системами координат.
  • Тригонометрия (Trigonometry): Тригонометрические функции, такие как синус, косинус и тангенс, используются для работы с углами и расчетов в треугольниках. Они широко применяются в графике, анимации и физике.
  • Кватернионы (Quaternions): Кватернионы используются для представления поворотов объектов в трехмерном пространстве. Они предоставляют эффективный способ работы с вращениями и избегают проблем, связанных с углами Эйлера.
  • Интерполяция (Interpolation): Интерполяция используется для плавного перемещения объектов от одной позиции к другой через определенное время или расстояние. Это важный аспект анимации и создания плавных переходов в игровых приложениях.
  • Скалярное произведение (Dot Product): Скалярное произведение используется для вычисления угла между двумя векторами или для проекции одного вектора на другой. Оно широко применяется в физике, освещении и анимации.
  • Векторное произведение (Cross Product): Векторное произведение используется для нахождения вектора, перпендикулярного двум другим векторам. Это часто используется для расчета нормалей к поверхностям и направлений вращения.
  • Геометрия (Geometry): Геометрия играет важную роль в разработке игровых миров, включая расчеты коллизий, определение границ уровней и создание трехмерных моделей.
  • Лучевая трассировка (Raycasting): Это один из наиболее распространенных способов использования лучей. Лучевая трассировка позволяет определить, пересекает ли луч какой-либо объект, и получить информацию о точке пересечения, объекте, с которым произошло пересечение, и другие параметры. Это часто используется для обнаружения столкновений, стрельбы по объектам или измерения расстояний.

  • Лучевые линии (Ray Lines): Лучи также могут быть использованы для визуализации линий или визуальных эффектов в сцене. Например, лучи могут использоваться для создания лазерных лучей, пуль, лучей света или других эффектов.

  • Измерение расстояний (Distance Measurement): Лучи могут быть использованы для измерения расстояний между объектами в сцене. Об этом говорит сайт https://intellect.icu . Проведя луч между двумя точками, можно определить расстояние между ними.

  • Лучи для отладки (Debugging Rays): В разработке игры лучи также часто используются для отладки и визуализации определенных аспектов игровой механики. Например, лучи могут использоваться для визуализации области обнаружения персонажа или области действия некоторого объекта.

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

Графика в юнити основные понятия


Основные понятия графики в Unity включают в себя различные компоненты, настройки и технологии, которые используются для создания визуального контента в игровом мире. Вот некоторые из них:

  • Меш (Mesh): Меш представляет собой трехмерный объект, состоящий из вершин, ребер и граней. Он определяет форму и структуру объекта в трехмерном пространстве и может содержать информацию о текстурах, цветах, нормалях и других атрибутах.
  • Материал (Material): Материал определяет визуальные свойства объекта, такие как цвет, текстуры, блеск и прозрачность. Он устанавливается на меш и влияет на то, как объект отображается на экране.
  • Шейдер (Shader): Шейдер - это программа, которая определяет визуальный стиль объекта, включая расчет освещения, текстурирование и эффекты. Unity поддерживает различные типы шейдеров, включая шейдеры поверхности, объемные шейдеры и шейдеры изображений.
  • Освещение (Lighting): Освещение определяет, как объекты отображаются в сцене в зависимости от источников света и их распределения. Unity поддерживает различные виды источников света, такие как направленное освещение, точечные источники и прожекторы.
  • Текстуры (Textures): Текстуры используются для добавления деталей и реализма к поверхности объектов. Они могут содержать изображения, бумажные карты, нормальные карты и другие данные, которые влияют на визуальное представление объекта.
  • Камера (Camera): Камера определяет точку обзора в сцене и параметры отображения, такие как поле зрения, перспектива и отображение в портретной или альбомной ориентации. Камеры используются для рендеринга изображений на экране.
  • Анимация (Animation): Анимация позволяет создавать движение и изменение объектов в игровом мире. Она может включать в себя изменение позиции, поворота, масштаба и других атрибутов объектов.
  • Пост-обработка (Post-Processing): Пост-обработка - это процесс применения дополнительных эффектов к изображению после его рендеринга. Эти эффекты могут включать в себя размытие, цветокоррекцию, эффекты смазывания движения и многое другое.

Это лишь общий обзор основных понятий графики в Unity. Каждое из этих понятий имеет множество подробностей и настроек, которые могут быть использованы для создания красивых и увлекательных визуальных эффектов в игровом мире.

Примитивы в юнити

В Unity примитивы - это предварительно созданные объекты, которые могут быть легко добавлены в сцену для быстрого создания простых форм и объектов. Эти примитивы обычно используются в качестве основы для создания декораций, тестовых уровней или прототипирования игровых механик. Некоторые из наиболее часто используемых примитивов в Unity включают в себя:

  • Куб (Cube): Простой куб с одинаковой длиной, шириной и высотой.
  • Сфера (Sphere): Сфера с равномерно распределенными вершинами.
  • Капсула (Capsule): Форма капсулы, состоящая из двух полусфер, соединенных цилиндром.
  • Цилиндр (Cylinder): Прямой цилиндр с определенным радиусом и высотой.
  • Плоскость (Plane): Бесконечная плоскость, которая может быть размещена в любой плоскости координат.
  • Конус (Cone): Конус с определенным радиусом основания и высотой.

Для добавления примитива в сцену в Unity, вы можете выполнить следующие шаги:

Выберите объект, к которому вы хотите добавить примитив, или создайте новый пустой объект.
Нажмите правой кнопкой мыши на объекте в иерархии или в сцене.
В контекстном меню выберите "Create Empty" (Создать пустой) или "3D Object" (3D объект).
В подменю "3D Object" выберите нужный вам примитив, например, "Cube" (Куб), "Sphere" (Сфера) и т.д.
Unity автоматически добавит выбранный примитив к вашей сцене.
После того как примитив добавлен в сцену, вы можете его изменить, перемещать, масштабировать и вращать так же, как и любой другой объект в Unity. Примитивы представляют собой удобный и быстрый способ создания простых форм и объектов без необходимости моделирования их с нуля.

UI элементы , HUD (Head-Up Display) и "Canvas" Unity

UI элемент в Unity - это объект, предназначенный для отображения интерфейсных элементов в пользовательском интерфейсе (UI) игры. Он позволяет создавать кнопки, текстовые поля, изображения, полосы прокрутки и другие элементы, которые пользователь может видеть и с которыми взаимодействовать.

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

Некоторые типы UI элементов в Unity:

  1. Button (Кнопка): Позволяет создать кнопку, которую пользователь может нажать для выполнения определенного действия.

  2. Text (Текст): Используется для отображения текста на экране, например, для отображения названия или описания объекта.

  3. Image (Изображение): Позволяет отображать изображение на экране, например, иконку предмета или фоновое изображение.

  4. Slider (Ползунок): Позволяет пользователю выбирать значение из заданного диапазона, перемещая ползунок.

  5. Toggle (Флажок): Позволяет пользователю переключать между двумя состояниями (включено/выключено) путем нажатия на флажок.

  6. Dropdown (Раскрывающийся список): Позволяет пользователю выбирать один из нескольких вариантов из выпадающего списка.

  7. Input Field (Поле ввода): Позволяет пользователю вводить текст с клавиатуры.

  8. Scroll View (Область прокрутки): Позволяет отображать большие объемы контента, прокручиваемые по вертикали или горизонтали.

Эти элементы могут быть настроены и стилизованы с помощью компонентов и свойств в Unity, чтобы соответствовать дизайну и потребностям вашего проекта.

Unity  кроссплатформенная среда разработки компьютерных игр -Основы

HUD (Head-Up Display) в Unity - это пользовательский интерфейс, который отображается поверх игровой сцены и обычно содержит информацию, которая помогает игроку взаимодействовать с игрой или отслеживать различные параметры игрового процесса. HUD обычно включает в себя элементы, такие как здоровье персонажа, количество боеприпасов, миникарту, индикаторы целей и другую важную информацию.

В Unity HUD может быть реализован с использованием Canvas, как это описано в предыдущем ответе. Вот примеры элементов, которые могут присутствовать в HUD в Unity:

  • Здоровье персонажа: Полоса здоровья или числовое значение, отображающее текущее состояние здоровья игрового персонажа.
  • Боеприпасы: Индикатор, показывающий количество доступных боеприпасов для игрового персонажа или оружия.
  • Миникарта: Маленькая карта, отображающая область окружающего мира и местоположение игрока или других объектов.
  • Информация о цели: Информация о текущей цели или задании, которое игрок должен выполнить.
  • Счетчики и уведомления: Уведомления о полученном опыте, прогрессе выполнения заданий, количестве убитых врагов и т. д.
  • Меню и интерфейс управления: Кнопки для вызова игрового меню, изменения настроек или выхода из игры.

Реализация HUD в Unity обычно требует создания и настройки элементов пользовательского интерфейса с использованием компонентов Canvas, Text, Image и других элементов UI. Эти элементы могут быть размещены на Canvas и настроены с помощью скриптов для обновления их содержимого и поведения в соответствии с игровой логикой.

Unity  кроссплатформенная среда разработки компьютерных игр -Основы

Canvas:

  • Canvas в Unity - это объект, предназначенный для отображения пользовательского интерфейса (UI) в игре. Он представляет собой контейнер, на котором располагаются все элементы UI, такие как текст, изображения, кнопки и другие.
  • Canvas обеспечивает координатную систему для размещения элементов UI на экране игры. Он также позволяет настраивать параметры масштабирования и рендеринга элементов UI для поддержки различных разрешений экрана.
  • Unity поддерживает несколько типов Canvas, таких как Screen Space - Overlay, Screen Space - Camera и World Space, каждый из которых предоставляет различные способы расположения и отображения элементов UI на экране.

Таким образом, Hierarchy of Objects относится к структуре объектов в сцене Unity, в то время как Canvas - это специальный объект, предназначенный для отображения элементов пользовательского интерфейса. Оба концепта играют важную роль в разработке игр на Unity, обеспечивая организацию и отображение контента в игровом мире.

Entity-Component-System в Unity

ECS в Unity означает "Entity-Component-System" и представляет собой парадигму разработки игр, которая отличается от традиционного объектно-ориентированного программирования (ООП). Основано на DOP - Дата-ориентированное проектирование – это подход к оптимизации программ, предполагающий, что расположение структур данных в памяти должно тщательно оптимизироваться. Также требуется учитывать, как такой подход отражается на автоматической векторизации и использовании кэша ЦП .

Unity  кроссплатформенная среда разработки компьютерных игр -Основы

Вот краткое объяснение каждого компонента ECS:

  • Сущность (Entity): Это просто идентификатор или контейнер, который представляет объект в игровом мире. Сущности обычно не содержат данных или логики; они служат только для идентификации объектов.
  • Компонент (Component): Компоненты - это данные, которые содержат информацию о поведении или характеристиках объекта. Например, компоненты могут представлять скорость, здоровье, видимость объекта и т. д. (являются скриптами или серриализироваваными свойствами и настраивать можно через инспектор)
  • Система (System): Системы обрабатывают компоненты для выполнения различных действий или расчетов. Например, система может обновлять позиции объектов на основе их скорости и времени.. (являются скриптами или серриализироваваными свойствами и настраивать можно через инспектор)

Преимущество 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. При работе с движком важно освоить эти и другие термины для более эффективной разработки.

Для большего понимания прочитайте официальную документацию или посетите платные или бесплатные курсы

Если есть дополнительные вопросы пишите в коментариях

стейт машина (State Machine)

В Unity стейт машина (State Machine) - это способ организации и управления поведением объекта или системы на основе его текущего состояния. Стейт машины используются для определения различных действий и переходов между состояниями в зависимости от определенных условий или событий.

Основные компоненты стейт машины в Unity:

  1. Состояния (States): Каждое состояние представляет определенное поведение или сценарий, в котором находится объект. Например, состояния могут быть "идти", "бегать", "атаковать", "ожидать" и т. д.

  2. Переходы (Transitions): Переходы определяют условия, при которых объект переходит из одного состояния в другое. Например, переход из состояния "идти" в состояние "атаковать" может произойти, когда объект обнаруживает противника в пределах определенного радиуса.

  3. Действия (Actions): Действия определяют конкретные действия, которые выполняются в каждом состоянии. Например, в состоянии "бегать" объект может перемещаться по определенному пути, а в состоянии "атаковать" он может выполнять атакующие действия.

Преимущества использования стейт машин в Unity:

  • Модульность и гибкость: Стейт машины позволяют легко добавлять, изменять и удалять состояния и переходы без изменения основной логики объекта.

  • Читаемость и отладка: Структура стейт машины обычно является понятной и легко читаемой, что упрощает отладку и понимание поведения объекта.

  • Управление сложным поведением: Стейт машины идеально подходят для управления сложным поведением объектов, таких как персонажи в играх или автоматизированные системы.

Unity предоставляет несколько способов реализации стейт машин, включая написание собственных скриптов, использование ассетов сторонних разработчиков или использование встроенных инструментов, таких как Animator Controller для управления анимациями объектов.

Вау!! 😲 Ты еще не читал? Это зря!

Исследование, описанное в статье про unity , подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое unity и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Кросс-платформенное программирование

Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.

создано: 2024-02-04
обновлено: 2024-11-12
3



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Кросс-платформенное программирование

Термины: Кросс-платформенное программирование