Обзор программирования
В этой статье описаны способы создания проектов в Unigine.
Основная цель статьи - дать представление о настройке среды разработки и дать обзор программирования. Он содержит ссылки на другие статьи, которые помогут вам подготовить среду разработки, выбрать язык программирования и так далее.
Языки#
Для создания собственного проекта с Unigine вы можете использовать следующие языки программирования:
- UnigineScript
- C ++, используя C ++ API
- C #, используя C # API
UnigineScript можно легко расширить с помощью Unigine API. Движок Unigine позволяет экспортировать код C ++ и C # и наоборот. Вы можете написать некоторые функции, используя язык C ++ или C #, и экспортировать их в UnigineScript. См. Статьи с примерами использования C++ API и C# API, чтобы узнать больше.
Платформы#
Unigine поддерживает следующие платформы:
- Windows (10/11)
- Linux (kernel 4.19+)
Для разработки приложений с использованием UNIGINE 2 SDK требуется 64-битная система. Движок полностью и эффективно использует многоядерную архитектуру ЦП.
С помощью Unigine вы можете создавать приложения для этих платформ с единой базой кода.
Подробнее о Требованиях к оборудованию .
Среды разработки#
Вы можете использовать любую из этих платформ ПК для написания вашего проекта на базе Unigine:
- Windows
- Linux
Помимо UNIGINE SDK, для каждой платформы требуется определенное программное обеспечение, которое необходимо установить, чтобы начать кодирование. Вы можете найти требования для каждой платформы здесь:
Последовательность выполнения#
Application Logic System Unigine имеет три основных логических концепции:
-
System logic - логика приложения. Вы можете реализовать свою логику, которая будет выполняться в течение жизненного цикла приложения. Пользовательская логика может быть помещена в файл системного скрипта ( с использованием только UnigineScript API ) или вы можете унаследовать класс SystemLogic и реализовать свою логику ( API C ++ и C # ).
Файл системного скрипта UnigineScript unigine.usc создается автоматически в папке вашего проекта. Когда вы создаете новый проект C ++ / C # , он уже унаследовал класс системной логики с реализованными методами для размещения кода вашей логики внутри.
-
World logic - логика мира - сюда следует поместить логику виртуальной сцены . Логика вступает в силу, когда мир загружен. Вы можете поместить свою логику в файл world script ( используя только UnigineScript API ) или унаследовать класс WorldLogic и реализовать свою логику ( API C ++ и C # ).
Файл сценария мира *.usc автоматически создается с новым миром и имеет имя вашего проекта. Когда вы создаете новый проект C ++ / C # , он уже унаследовал мировой логический класс с реализованными методами для помещения вашего логического кода внутрь.
-
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; }
Когда вы создаете новый C ++ / C # проект , он уже унаследовал класс логики редактора с реализованными методами для размещения кода вашей логики внутри.
Внутренний код движка UNIGINE и логика приложения выполняются в заранее определенном порядке:
- Этап инизиализации. На этом этапе подготавливаются и инициализируются необходимые ресурсы. Как только эти ресурсы готовы к использованию, движок переходит в основной цикл.
- Основной цикл . Когда UNIGINE входит в основной цикл, все его действия можно разделить на три этапа, которые выполняются один за другим в цикле:
- Этап обновления , содержащий всю логику вашего приложения, которая выполняется каждый кадр
- Этап рендеринга , содержащий все операции, связанные с рендерингом, вычислениями моделирования физики и поиском пути.
- Этап Swap , содержащий все операции синхронизации, выполняемые для переключения между буферами.
Этот цикл повторяется каждый кадр во время работы приложения.
- Этап Shutdown. Когда UNIGINE останавливает выполнение приложения, он выполняет операции, связанные с завершением работы приложения и очисткой ресурсов.
Прочтите эту статью , чтобы узнать, где разместить свой логический код.
Также прочтите статьи Execution Sequence и Logic System , чтобы узнать подробный рабочий процесс движка Unigine.
Применение логики к объектам#
Для удобной интеграции объекта в логику приложения используются свойства (properties). Свойства определяют набор определяемых пользователем параметров и способ поведения объекта и его взаимодействия с другими объектами и средой сцены. После того, как свойство назначено узлу (или поверхности, если свойство унаследовано от surface_base), оно определяет логику, которая будет применяться к этому объекту.
Свойство, являющееся «материалом» для логики приложения, представляет собой набор связанных с логикой параметров . Например, свойства могут использоваться для указания очков здоровья персонажа или параметров материала поверхности, которые могут использоваться в физических взаимодействиях.
Узнайте, как получить доступ к узлам и ресурсам, указанным в полях параметров свойства, в соответствующей статье Доступ к узлам и файлам через свойства .
Компонентная система
Свойство и связанную с ним логику можно интегрировать с помощью Component System для расширения функциональности узлов.
В то время как свойство представляет тег для логики и предоставляет набор определяемых пользователем параметров, компонент логики объединяет узел, класс C ++, содержащий логическую реализацию, и свойство.
Основной рабочий процесс выглядит следующим образом:
- Наследуйте новый класс, представляющий ваш компонент, от класса ComponentBase .
- В заголовочном файле определите и объявите список параметров, которые будут использоваться этим компонентом. Все эти параметры со значениями по умолчанию (если они указаны) будут сохранены в специальном файле свойств.
- Реализуйте компонентную логику внутри определенных методов (init(), update(), render() и т. д.), которые будут вызываться соответствующими функциями основного цикла Engine .
- Назначьте созданное свойство узлу, чтобы придать ему желаемую функциональность.
См. пример использования в статье Использование системы компонентов C ++ .
Пересечения#
Взаимодействия между объектами можно обрабатывать с помощью Пересечений (intersections). Пересечение - это общая точка определенной области (или линии) и объекта. В Unigine есть разные методы обнаружения пересечений.
Есть три основных типа пересечений:
- World intersection - пересечение с объектами и узлами .
- Physics intersection - пересечение с формами и объектами столкновения .
- Game intersection - пересечение с узлами поиска пути, такими как препятствия .
Примеры использования#
Есть три раздела с примерами использования:
Программный код одинаков для всех поддерживаемых платформ, разница заключается в компиляции.
Для всех этих примеров мы создаем новые проекты с помощью Project Generator . Генератор проектов создает новый мир с источником World Light и плоской сеткой.