编程概述
本文介绍了在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位系统。该引擎完全有效地使用了多核CPU架构。
使用Unigine,您可以使用单个代码库为这些平台构建应用程序。
详细了解硬件要求。
开发环境#
您可以使用这些PC平台中的任何一个来编写由Unigine支持的项目:
- Windows
- Linux
除UNIGINE SDK外,每个平台还需要安装特定软件才能开始编码。您可以在此处找到每个平台的要求:
执行顺序#
Unigine的应用逻辑系统具有三个主要的逻辑概念:
-
System logic-应用程序的逻辑。您可以实现将在应用程序生命周期中执行的逻辑。您的自定义逻辑可以放在系统脚本文件中(仅使用UnigineScript API ),也可以继承 SystemLogic类并实现您的逻辑( C ++和C#API )。
UnigineScript unigine.usc系统脚本文件是在项目文件夹中自动创建的。 创建新的 C ++ / C#项目时,它已经继承了带有已实现方法的系统逻辑类,可以将您的逻辑代码放入其中。
-
World logic - 世界的邏輯-在這裡您應該放置虛擬場景的邏輯。 邏輯在加載世界時生效。 您可以將邏輯放入世界腳本 文件中 (僅通過使用UnigineScript API), 或者,您可以從WorldLogic類繼承一個類並在其中實現您的邏輯(C++ and C# APIs)。
世界脚本*.usc文件是使用新世界自动创建的,并具有您的项目名称。 当您创建新的 C ++ / C#项目时,它已经继承了带已实现方法的世界逻辑类,可以将您的逻辑代码放入其中。
-
Editor logic-编辑器的逻辑。如果您需要实现自己的编辑器,将使用此组件。 它有更多的实现方法,让您清楚地了解当前的引擎事件(节点已创建、属性已删除、材质已更改等)。你可以继承EditorLogic 类并在 C++ 或 C# 中实现您的逻辑。
编辑器的默认 UnigineScript 逻辑从存储在 editor2.ung 中的 editor2/editor.usc 文件加载。 您可以通过在 data 文件夹中创建一个名为 editor2 的文件夹并将包含以下代码的 editor.usc 文件放在那里来覆盖此 UnigineScript 逻辑文件 (您可以修改此脚本,但不要删除现有的 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进入主循环时,其所有动作可分为三个阶段,每个阶段一个周期地执行:
在应用程序运行时每帧重复此循环。
- 关闭 。当UNIGINE停止执行应用程序时,它将执行与应用程序关闭和资源清除相关的操作。
阅读本文以了解将逻辑代码放在何处。
另外,请阅读执行顺序和 Logic System 文章,以了解Unigine引擎的详细工作流程。
将逻辑应用于对象#
为了将对象方便地集成到应用程序逻辑中,使用了 属性 。属性指定一组用户定义的参数以及对象的行为方式以及与其他对象和场景环境交互的方式。将属性分配给节点(或属性,如果该属性是从surface_base继承的),则它指定将应用于此对象的逻辑。
作为应用程序逻辑的“材质”的属性表示一组与逻辑相关的 参数 。例如,可以使用属性来指定角色的健康点或可以在物理交互中使用的表面材质参数。
在相应的 通过属性访问节点和文件 文章中了解如何访问在属性的参数字段中指定的节点和资源。
组件系统
通过使用 组件系统 扩展节点的功能,可以集成属性和与其关联的逻辑。
属性代表逻辑标记并提供一组用户定义的参数,而逻辑 component 则集成了节点,包含逻辑实现的C ++类和属性。
基本工作流程如下:
- 从 ComponentBase 类继承一个表示您的组件的新类。
- 在头文件中,确定并声明此组件将使用的参数列表。所有这些参数及其默认值(如果已指定)将存储在专用属性文件中。
- 在某些方法(init(), update(), render()等)内实现组件逻辑,这些逻辑将由引擎的主循环的相应功能调用。
- 将创建的属性分配给节点以赋予其所需的功能。
请参见 使用C ++组件系统 文章中的用法示例。
交叉口#
对象之间的交互可以使用 交叉点 处理。交叉点是定义的区域(或线)和对象的共享点。 Unigine有多种检测交叉点的方法。
有三种主要的相交类型:
使用范例#
有三个带有用法示例示例的部分:
所有受支持平台的编程代码都是相同的,不同之处在于编译。
对于所有这些示例,我们使用 Project Generator 创建新项目。 Project Generator使用 World Light 源和平面网格创建一个新世界。