基础概念
本节主要介绍脚本有哪些构成,以及脚本是如何运行的。
构建单元
构建单元 在 Virtools 术语中称作 Building Block,社区简称 BB。本手册其余部分均会使用简称。
BB 是脚本中的最小单位,它代表了一个 功能。例如一个 BB 可以代表“当玩家球与某个物体发生碰撞时”,或者另一个 BB 可以代表“播放一个音效”。
提示
BB 可以大致类比成其它编程语言中“函数”或者“类”的概念,或者类比为“芯片”。
一个完整的脚本通常是由多个 BB 连接而成的。BB 的内部负责实现具体的代码功能,而我们编写脚本时只需要使用即可。
举例说明,当我们需要为一个物体设置坐标时,可以使用 Set Position BB。但具体 如何设置坐标、如何与游戏引擎交互 等,则不需要我们关心。我们只需要添加这个 BB,然后将其正确连接,最后提供具体坐标即可。
关于 BB 的具体介绍详见 构建单元概述。
连接线
连接线分为两种:实线和虚线。其中实线负责逻辑流,表示逻辑顺序;虚线负责数据流,表示数据传递。
对于一个 BB 来说,控制逻辑的出入口一般位于左右两侧,控制数据输入输出的口一般位于上下两侧。所以读一个脚本的正确方式是,沿着实线阅读,先了解脚本依次使用了哪些 BB,然后详细分析时再观察具体的某个 BB 使用了哪里来的数据。
逻辑连接线上的数字表示它的延迟,单位是帧(Frame),一般情况下延迟默认为 0。当连接一根线会导致脚本形成回环时,延迟会自动变为 1,这是为了防止没有延迟的脚本无限运行,防止游戏卡死,因此在一个回环中至少需要 1 帧的延迟。
双击一根逻辑连接线可以修改它的延迟。如果你需要延时固定的时长,建议不要直接修改连接线的延迟,因为游戏时的帧率是不确定的,因此延时也是不确定的。需要延时可以使用 Delayer BB。
变量
变量是用来临时储存“值”的一种机制。在 vt 中变量默认的形态是一个较扁的灰色长方体。当双击 BB 编辑他们的参数时,实际上自动创建了对应的变量。
变量有多种类型,大部分类型几乎不会用到。下表列出了经常会用到的部分类型:
| 类型 | 解释 |
|---|---|
| Integer | 整数 |
| Float | 浮点数 |
| Vector 3D | 三维向量 |
| Quaternion | 四元数,表示旋转 |
| Matrix | 4x4 矩阵,可以同时表示旋转和缩放 |
| Color | 颜色 |
| String | 字符串 |
| Behaviour Object | 行为对象,绝大部分物体都派生自行为对象 |
| 3D Entity | 3D 实体,游戏中可见的绝大部分物体 |
更多的类型可以在使用时再详细了解。
由于脚本一定要附属在某个行为对象上,所以存在一种特殊的 This 变量,指向的是当前脚本所附属的行为对象。
Initial Conditions
初始条件(Initial Conditions),在 vt 中称作 IC,是 vt 中的一种特殊机制,用于记录行为对象的初始状态。
例如为一个物体设置 IC(右键菜单可以 Set IC)后,不论对其进行什么样的操作,只要重置 IC(Restore IC),即可将这个物体恢复到设置 IC 时的状态。
要注意的是,如果使用 Level 右键然后选择 Save As... 的方式直接保存为 nmo,那么所有物体的 IC 信息都将丢失。因为 nmo 格式并不储存 IC 信息。
然而 Ballance 只能加载以 nmo 后缀结尾的关卡,因此,如果需要在游戏中使用 IC,需要直接将关卡保存为 cmo(使用左上角工具栏 File - Save As... 或 Ctrl + S 快捷键均可),并手动将后缀改为 nmo。
