This page has been translated automatically.
Видеоуроки
Интерфейс
Основы
Продвинутый уровень
Подсказки и советы
Основы
Программирование на C#
Рендеринг
Профессиональный уровень (SIM)
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Контроль версий
Настройки и предпочтения
Работа с проектами
Настройка параметров ноды
Setting Up Materials
Настройка свойств
Освещение
Sandworm
Использование инструментов редактора для конкретных задач
Расширение функционала редактора
Встроенные объекты
Ноды (Nodes)
Объекты (Objects)
Эффекты
Декали
Источники света
Geodetics
World-ноды
Звуковые объекты
Объекты поиска пути
Player-ноды
Программирование
Настройка среды разработки
Примеры использования
C++
C#
UnigineScript
UUSL (Unified UNIGINE Shader Language)
Плагины
Форматы файлов
Материалы и шейдеры
Rebuilding the Engine Tools
Интерфейс пользователя (GUI)
VR Development
Двойная точность координат
API
Animations-Related Classes
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
VR-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Визуальный редактор материалов
Material Nodes Library
Miscellaneous
Input
Math
Matrix
Textures
Art Samples
Учебные материалы

Архитектура движка

There are different approaches to setting up game architecture, ranging from all-in-one solutions, where game logic is fused with an engine, to a heap of separate modules, each of which is responsible for one part of functionality. UNIGINE is somewhere in the middle of this scale, it incorporates everything one needs to implement a game or other 3D application, except for the application logic, networking, and AI. UNIGINE includes only typical game logic, common for applications of all types, and this is done intentionally. Существуют разные подходы к настройке игровой архитектуры, от комплексных решений, в которых игровая логика объединена с движком, до кучи отдельных модулей, каждый из которых отвечает за одну часть функциональности. UNIGINE находится где-то посередине этой шкалы, он включает в себя все, что нужно для реализации игры или другого 3D-приложения, за исключением логики приложения, сетей и ИИ. UNIGINE включает в себя только типичную игровую логику, общую для приложений всех типов, и это сделано намеренно.

This may not seem an advantage, because in order to create a game, one needs to do a great deal of programming and by themselves implement common functionality widely used in games of the required genre. However, lack of the genre-specific game logic is not so bad, as it makes UNIGINE a general-purpose library, easily re-usable in different projects. Moreover, developers are not bound to some specific genre, they can experiment with several genres at once, which is extremely difficult if a special-purpose engine is used. For example, it's difficult to make a mix of a shooter and a racing game out of an engine created solely for first-person shooters. Also, UNIGINE allows plugging of external modules, which can contain genre-specific functionality and can be re-used, too. This all makes UNIGINE a rather flexible base for a wide range of 3D applications. Это может показаться не преимуществом, потому что для создания игры нужно много программировать и самостоятельно реализовывать общие функции, широко используемые в играх требуемого жанра. Тем не менее, отсутствие логики игры, ориентированной на определенный жанр, не так уж плохо, поскольку делает UNIGINE универсальной библиотекой, которую легко использовать в различных проектах. Более того, разработчики не привязаны к какому-то конкретному жанру, они могут экспериментировать сразу с несколькими жанрами, что крайне сложно, если используется специализированный движок. Например, сложно совместить шутер и гоночную игру на движке, созданном исключительно для шутеров от первого лица. Кроме того, UNIGINE позволяет подключать внешние модули, которые могут содержать специфичные для жанра функциональные возможности, а также могут использоваться повторно. Все это делает UNIGINE довольно гибкой базой для широкого спектра 3D-приложений.

To understand the architecture of UNIGINE is very important both for developers and for content creators. The former will know what they are allowed to do, what they can achieve, and what to expect from UNIGINE. The latter will understand how their content is going to be processed. Понять архитектуру UNIGINE очень важно как для разработчиков, так и для создателей контента. Первые будут знать, что им разрешено делать, чего они могут достичь и чего ожидать от UNIGINE. Последние поймут, как будет обрабатываться их контент. Вот почему эта статья представляет собой краткий общий обзор рабочего процесса UNIGINE.

Примечание
A more detailed and more programmer-oriented description of UNIGINE workflow can be found in the article Execution Sequence. Более подробное и ориентированное на программиста описание рабочего процесса UNIGINE можно найти в статье Execution Sequence .

The diagram below demonstrates interrelations between internal components of UNIGINE and different external entities.Приведенная ниже диаграмма демонстрирует взаимосвязи между внутренними компонентами UNIGINE и различными внешними объектами.

Everything starts when the custom application calls UNIGINE C++ API functions. These calls are done using C++/C#. A C++ application directly calls functions of the API. A C# application uses the C# Wrapper (UnigineSharp.dll), which, in turn, uses the C Wrapper (UnigineWrapper.dll, UnigineWrapper.so) to interact with the UNIGINE API.Все начинается, когда пользовательское приложение вызывает функции C++ API UNIGINE. Эти вызовы выполняются с использованием C++/C#. C++ приложение напрямую вызывает функции API. Приложение C# использует C# Wrapper (UnigineSharp.dll), которое, в свою очередь, использует C Wrapper (UnigineWrapper.dll, UnigineWrapper.so) для взаимодействия с UNIGINE API.

The application logic can be implemented right in the AppWorldLogic, AppSystemLogic and AppEditorLogic classes or via a set of Components using the Component System included in the API.Логика приложения может быть реализована непосредственно в классах AppWorldLogic, AppSystemLogic и AppEditorLogic или через набор Компонентов с использованием Компонентной системы, включенной в API.

Примечание
C# Component System is a part of the C# Wrapper. Система компонентов C# является частью оболочки C#.

The application functionality can be extended with Engine Plugins. UNIGINE provides a set of ready-to-use plugins, however, you can implement a custom one. You can also implement custom Editor Plugins that extend functionality of the UNIGINE Editor.Функциональность приложения может быть расширена с помощью плагинов движка. UNIGINE предоставляет набор готовых к использованию плагинов, однако вы можете реализовать пользовательский. Вы также можете реализовать пользовательские плагины редактора , которые расширяют функциональность редактора UNIGINE.

API calls are passed to the Engine, which initializes required resources: registers extensions, loads core data, configuration files, user interface files, plugin directories. As all these resources are organized in a special data directory and, moreover, can be packed, they are loaded by means of the File System. In addition, the file system tracks the endianness of files. Note that if you add files to this directory after the initialization is completed, you need to reload the file system component.Вызовы API передаются Движку, который инициализирует необходимые ресурсы: регистрирует расширения, загружает основные данные, файлы конфигурации, файлы пользовательского интерфейса, каталоги плагинов. Поскольку все эти ресурсы организованы в специальном каталоге данных и, более того, могут быть упакованы, они загружаются с помощью Файловой системы. Кроме того, файловая система отслеживает порядковый номер файлов. Обратите внимание, что если вы добавляете файлы в этот каталог после завершения инициализации, вам необходимо перезагрузить компонент файловой системы.

After initialization, the Engine runs the other subsystems. The scheme above contains the main ones:После инициализации Движок запускает другие подсистемы. Приведенная выше схема содержит основные из них:

  • App manages the main loop and controls the graphic context (manages events of the controls, updates window parameters).App управляет основным циклом и управляет графическим контекстом (управляет событиями элементов управления, обновляет параметры окна).
  • Render renders the scene. It needs additional resources to complete its tasks: textures, meshes, and animations. The required graphics resources are passed to the Render from the File System.Render рендерит сцену. Для выполнения своих задач ему нужны дополнительные ресурсы: текстуры, сетки и анимация. Необходимые графические ресурсы передаются для рендеринга из файловой системы .
  • World loads files which are required to build the current scene, and determines the set of visible nodes, which later will be sent to the Render. The World also tells the Sound, when and how to play environmental sounds, which sources are placed somewhere in the world and have spatial properties. The World cooperates with the Physics, which performs physical calculations (collision detection, joints solving, fluid buoyancy, and so on). To put it shortly, the World does not draw objects, play sounds, or perform physical calculations on its own. Instead, it delegates these tasks to corresponding subsystems.World загружает файлы, необходимые для построения текущей сцены, и определяет набор видимых нод, которые позже будут отправлены на Рендеринг. Мир также сообщает Sound, когда и как воспроизводить звуки окружающей среды, какие источники расположены где-то в мире и обладают пространственными свойствами. Мир работает вместе с Physics, который выполняет физические вычисления (обнаружение столкновений, решение стыков, плавучесть жидкости и так далее). Короче говоря, Мир не рисует объекты, не воспроизводит звуки и не выполняет физические вычисления сам по себе. Вместо этого он делегирует эти задачи соответствующим подсистемам.
  • Game passes to the World (on demand) the time in seconds it took to complete the last frame. The World is updated according to the received value.Game передает Миру (по запросу) время в секундах, которое потребовалось для завершения последнего кадра. Мир обновляется в соответствии с полученным значением.
  • Physics controls the simulation of physics in the World.Physics управляет симуляцией физики в Мире.
  • Input (Controls) handles input from the Input Devices and passes the feedback. The application can read and somehow process the obtained input, if required.Input (элементы управления) обрабатывает ввод от устройств ввода и передает обратную связь. Приложение может прочитать и каким-то образом обработать полученные входные данные, если требуется.
  • Materials and Properties manages materials and properties. They are loaded from the File System.Materials и Properties управляет материалами и свойствами. Они загружаются из файловой системы .
  • Sounds receives sounds from the File System and passes them to the Sound Card to be played.Sound получает звуки из файловой системы и передает их на звуковую карту для воспроизведения.
  • GUI draws the user interface. In UNIGINE, GUI objects can be either stand-alone or a part of the displayed virtual world. In the latter case, they are managed by the World just like other nodes. When the rendered image, possibly containing the GUI, is displayed, the user starts interacting with the world. The user can influence the world by means of various input devices. Input from these devices is sent to the GUI and to the Controls. The GUI processes the input, detects the clicked element, and executes the corresponding callback function. The Controls subsystem processes input that is not related to the GUI, for example the player's actions in the game. Note that the GUI always gets the input data before the Controls and, therefore, has a higher priority. GUI рисует пользовательский интерфейс. В UNIGINE объекты GUI могут быть как автономными, так и частью отображаемого виртуального мира. В последнем случае они управляются миром так же, как и другие ноды. Когда отображается визуализированное изображение, возможно, содержащее графический интерфейс, пользователь начинает взаимодействовать с миром. Пользователь может влиять на мир с помощью различных устройств ввода. Входные данные с этих устройств отправляются в графический интерфейс пользователя и в Controls. Графический интерфейс обрабатывает входные данные, обнаруживает выбранный элемент и выполняет соответствующую функцию обратного вызова. Подсистема Controls обрабатывает входные данные, которые не связаны с графическим интерфейсом, например действия игрока в игре. Обратите внимание, что графический интерфейс всегда получает входные данные перед элементами управления и, следовательно, имеет более высокий приоритет.
Последнее обновление: 15.10.2022
Build: ()