Обзор программирования
This article describes ways of creating projects in Unigine. В этой статье описаны способы создания проектов в Unigine.
The main purpose of the article is to provide insight into setting up the development environment and give the overview of programming. It contains links to other articles that help you to prepare the development environment, choose the language to programming and so on. Основная цель статьи - дать представление о настройке среды разработки и дать обзор программирования. Он содержит ссылки на другие статьи, которые помогут вам подготовить среду разработки, выбрать язык программирования и так далее.
LanguagesЯзыки#
To create your own project with Unigine, you can use the following programming languages: Для создания собственного проекта с Unigine вы можете использовать следующие языки программирования:
- UnigineScript UnigineScript
- C++, by using C++ API C ++, используя C ++ API
- C#, by using C# API C #, используя C # API
UnigineScript can be easily extended through the Unigine API. The Unigine engine enables exporting the C++ and C# code and vice versa. You can write some functionality by using the C++ or C# language, and export it to the UnigineScript. See usage examples articles of C++ API and C# API to know more. UnigineScript можно легко расширить с помощью Unigine API. Движок Unigine позволяет экспортировать код C ++ и C # и наоборот. Вы можете написать некоторые функции, используя язык C ++ или C #, и экспортировать их в UnigineScript. См. Статьи с примерами использования C++ API и C# API, чтобы узнать больше.
PlatformsПлатформы#
Unigine supports the following platforms: Unigine поддерживает следующие платформы:
- Windows (10/11)
- Linux (kernel 4.19+)
A 64-bit system is required to develop applications using UNIGINE 2 SDK. The engine fully and efficiently uses multi-core CPU architecture. Для разработки приложений с использованием UNIGINE 2 SDK требуется 64-битная система. Движок полностью и эффективно использует многоядерную архитектуру ЦП.
With Unigine you can build applications for these platforms with a single codebase. С помощью Unigine вы можете создавать приложения для этих платформ с единой базой кода.
Read more about the Hardware Requirements. Подробнее о Требованиях к оборудованию .
Development EnvironmentsСреды разработки#
You can use any of these PC platforms to write your Unigine-powered project: Вы можете использовать любую из этих платформ ПК для написания вашего проекта на базе Unigine:
- Windows
- Linux
In addition to UNIGINE SDK, each platform requires specific software that you need to install in order to start coding. You can find requirements for each platform here: Помимо UNIGINE SDK, для каждой платформы требуется определенное программное обеспечение, которое необходимо установить, чтобы начать кодирование. Вы можете найти требования для каждой платформы здесь:
Execution SequenceПоследовательность выполнения#
Unigine's Application Logic System has three main concepts of logic: Application Logic System Unigine имеет три основных логических концепции:
-
System logic - the logic of the application. You can implement your logic that will be performed during application life cycle. Your custom logic can be put in the system script file (by using UnigineScript API only), or you can inherit SystemLogic class and implement your logic (C++ and C# APIs).
System logic - логика приложения. Вы можете реализовать свою логику, которая будет выполняться в течение жизненного цикла приложения. Пользовательская логика может быть помещена в файл системного скрипта ( с использованием только UnigineScript API ) или вы можете унаследовать класс SystemLogic и реализовать свою логику ( API C ++ и C # ).
UnigineScript unigine.usc system script file is created automatically in the your project's folder. When you create a new C++ / C# project, it has already inherited system logic class with implemented methods to put your logic code inside. Файл системного скрипта UnigineScript unigine.usc создается автоматически в папке вашего проекта. Когда вы создаете новый проект C ++ / C # , он уже унаследовал класс системной логики с реализованными методами для размещения кода вашей логики внутри.
-
World logic - the logic of the world - here you should put the logic of the virtual scene. The logic takes effect when the world is loaded. You can put your logic inside the world script file (by using UnigineScript API only), or you can inherit WorldLogic class and implement your logic (C++ and C# APIs).
World logic - логика мира - сюда следует поместить логику виртуальной сцены . Логика вступает в силу, когда мир загружен. Вы можете поместить свою логику в файл world script ( используя только UnigineScript API ) или унаследовать класс WorldLogic и реализовать свою логику ( API C ++ и C # ).
The world script *.usc file is automatically created with the new world and has the name of your project. When you create a new C++ / C# project, it has already inherited world logic class with implemented methods to put your logic code inside. Файл сценария мира *.usc автоматически создается с новым миром и имеет имя вашего проекта. Когда вы создаете новый проект C ++ / C # , он уже унаследовал мировой логический класс с реализованными методами для помещения вашего логического кода внутрь.
-
Editor logic - this component is to be used in case you need to implement your own Editor. It has more implemented methods providing you with clear understanding of the current Engine events (a node has been created, a property has been deleted, a material has been changed, etc.). You can inherit EditorLogic class and implement your logic in C++ or C#.
Default UnigineScript logic for the Editor is loaded from the editor2/editor.usc file stored inside editor2.ung. You can override this UnigineScript logic file by creating a folder named editor2 in your data folder and putting there the editor.usc file with the following code (you can modify this script, but do not remove existing include lines as they are required for Editor operation): Editor logic - этот компонент следует использовать в случае, если вам нужен собственный редактор. В нем реализовано больше методов, дающих вам четкое представление о текущих событиях Engine (создана нода, удалено свойство, изменен материал и т.д.). Вы можете унаследовать свой класс от класса EditorLogic и реализовать свою логику на C++ или C#.
Логика UnigineScript по умолчанию для Редактора загружается из файла editor2/editor.usc, хранящегося внутри editor2.ung. Вы можете переопределить этот файл UnigineScript-логики, создав папку с именем editor2 внутри папки data и поместив туда файл editor.usc со следующим кодом (вы можете изменить этот скрипт, но не удаляйте существующие строки include, поскольку они необходимы для работы Редактора):editor.usc
#include <editor2/editor_tracker.h> #include <editor2/editor_video_grabber.h> int init() { return 1; } int update() { return 1; } int shutdown() { return 1; }
When you create a new C++ / C# project, it has already inherited editor logic class with implemented methods to put your logic code inside. Когда вы создаете новый C ++ / C # проект , он уже унаследовал класс логики редактора с реализованными методами для размещения кода вашей логики внутри.
The UNIGINE engine internal code and the application logic are executed in the pre-defined order: Внутренний код движка UNIGINE и логика приложения выполняются в заранее определенном порядке:
- Initialization. During this stage, the required resources are prepared and initialized. As soon as these resources are ready for use, the engine enters the main loop.Этап инизиализации. На этом этапе подготавливаются и инициализируются необходимые ресурсы. Как только эти ресурсы готовы к использованию, движок переходит в основной цикл.
- Main loop. When UNIGINE enters the main loop, all its actions can be divided into three stages, which are performed one by one in a cycle:
- Update stage containing all logic of your application that is performed every frameUpdate stage containing all logic of your application that is performed every frame
- Rendering stage containing all rendering-related operations, physics simulation calculations, and pathfindingRendering stage containing all rendering-related operations, physics simulation calculations, and pathfinding
- Swap stage containing all synchronization operations performed in order to switch between the buffersSwap stage containing all synchronization operations performed in order to switch between the buffers
This cycle is repeated every frame while the application is running.This cycle is repeated every frame while the application is running.
Update stage containing all logic of your application that is performed every frameRendering stage containing all rendering-related operations, physics simulation calculations, and pathfindingSwap stage containing all synchronization operations performed in order to switch between the buffersThis cycle is repeated every frame while the application is running. Основной цикл . Когда UNIGINE входит в основной цикл, все его действия можно разделить на три этапа, которые выполняются один за другим в цикле:- Update stage containing all logic of your application that is performed every frame Этап обновления , содержащий всю логику вашего приложения, которая выполняется каждый кадр
- Rendering stage containing all rendering-related operations, physics simulation calculations, and pathfinding Этап рендеринга , содержащий все операции, связанные с рендерингом, вычислениями моделирования физики и поиском пути.
- Swap stage containing all synchronization operations performed in order to switch between the buffers Этап Swap , содержащий все операции синхронизации, выполняемые для переключения между буферами.
This cycle is repeated every frame while the application is running. Этот цикл повторяется каждый кадр во время работы приложения.
- Shutdown. When UNIGINE stops execution of the application, it performs operations related to the application shutdown and resource cleanup.Этап Shutdown. Когда UNIGINE останавливает выполнение приложения, он выполняет операции, связанные с завершением работы приложения и очисткой ресурсов.
Read this article to know where to put your logic code. Прочтите эту статью , чтобы узнать, где разместить свой логический код.
Also, read the Execution Sequence and Logic System articles to know the detailed workflow of the Unigine engine. Также прочтите статьи Execution Sequence и Logic System , чтобы узнать подробный рабочий процесс движка Unigine.
Applying Logic to ObjectsПрименение логики к объектам#
Для удобной интеграции объекта в логику приложения используются свойства (properties). Свойства определяют набор определяемых пользователем параметров и способ поведения объекта и его взаимодействия с другими объектами и средой сцены. После того, как свойство назначено узлу (или поверхности, если свойство унаследовано от surface_base), оно определяет логику, которая будет применяться к этому объекту.
Свойство, являющееся «материалом» для логики приложения, представляет собой набор связанных с логикой параметров . Например, свойства могут использоваться для указания очков здоровья персонажа или параметров материала поверхности, которые могут использоваться в физических взаимодействиях.
Узнайте, как получить доступ к узлам и ресурсам, указанным в полях параметров свойства, в соответствующей статье Доступ к узлам и файлам через свойства .
Компонентная система
Свойство и связанную с ним логику можно интегрировать с помощью Component System для расширения функциональности узлов.
В то время как свойство представляет тег для логики и предоставляет набор определяемых пользователем параметров, компонент логики объединяет узел, класс C ++, содержащий логическую реализацию, и свойство.
Основной рабочий процесс выглядит следующим образом:
- Наследуйте новый класс, представляющий ваш компонент, от класса ComponentBase .
- В заголовочном файле определите и объявите список параметров, которые будут использоваться этим компонентом. Все эти параметры со значениями по умолчанию (если они указаны) будут сохранены в специальном файле свойств.
- Реализуйте компонентную логику внутри определенных методов (init(), update(), render() и т. д.), которые будут вызываться соответствующими функциями основного цикла Engine .
- Назначьте созданное свойство узлу, чтобы придать ему желаемую функциональность.
См. пример использования в статье Использование системы компонентов C ++ .
IntersectionsПересечения#
Interactions between objects can be processed using Intersections. Intersection is a shared point of the defined area (or line) and an object. Unigine has different methods to detect intersections.Взаимодействия между объектами можно обрабатывать с помощью Пересечений (intersections). Пересечение - это общая точка определенной области (или линии) и объекта. В Unigine есть разные методы обнаружения пересечений.
There are three main types of intersections:Есть три основных типа пересечений:
- World intersection - an intersection with objects and nodes. World intersection - пересечение с объектами и узлами .
- Physics intersection - an intersection with shapes and collision objects. Physics intersection - пересечение с формами и объектами столкновения .
- Game intersection - an intersection with pathfinding nodes like obstacles. Game intersection - пересечение с узлами поиска пути, такими как препятствия .
Usage ExamplesПримеры использования#
There are three sections with usage example samples: Есть три раздела с примерами использования:
The programming code is the same for all supported platforms, the difference is in compiling. Программный код одинаков для всех поддерживаемых платформ, разница заключается в компиляции.
For all of these samples we create new projects by using Project Generator. Project Generator creates a new world with the World Light source and the plane mesh. Для всех этих примеров мы создаем новые проекты с помощью Project Generator . Генератор проектов создает новый мир с источником World Light и плоской сеткой.