关卡拓展
本节课我们会使用编辑器的3个功能来丰富关卡,这个3个功能分别是冲量对象、预制体、世界UI
1.使用冲量对象制作障碍物
冲量对象的具体作用大家可以阅读下方这个文档,在这里我们需要使用冲量对象来制作障碍物。
下图展示了向场景中添加冲量对象的步骤
①在资源库中点击功能对象
②选择“运动功能对象”
③将冲量对象拖动到场景中
④在对象管理器选中冲量对象
⑤修改冲量力的类型,将其由矢量力修改为径向力
⑥修改冲量值为660
由于冲量对象是透明的,我们可以使用一个特效或者模型来装饰这个冲量对象。
①向场景中拖入一个半球体
②将半球体作为冲量对象的父物体(方便管理)
效果演示
角色碰到冲量对象就会被弹开
2.使用预制体制作即死块
目前游戏中只有当碰到地面的时候才会让角色死亡,现在我们可以通过预制体,制作一个即死块,让角色碰到它的时候就死亡。
2.1.创建预制体
①在工程内容中点击“预制体”
②点击“新建预制体”
③将预制体的名称修改为“即死块”并双击打开
④拖动一个正方体到预制体窗口中
⑤修改正方体的缩放(我在这里还将正方体的材质改为了红色)
⑥将网络状态修改为客户端
2.2.创建并挂载即死块脚本
①新建一个脚本,命名为DeathBlock,并挂载到正方体下。
②在正方体的属性面板上,将“碰撞”修改为“仅开启检测”。(原因后面会讲)
2.3.编写DeathBlock脚本
该脚本使用了一个类Model。每个静态模型都会有一个Model,我们可以将Model理解成模型的网格,这个Model也可以像触发器一样用来计算碰撞。所以我们从正方体上获取到Model,然后为其添加onTouch事件,当有角色触碰到这个方块时,就调用关卡管理器的死亡函数来让角色死亡。
TIP
使用Model的onTouch事件的前提是:物体的碰撞需要为“仅开启检测”状态。(见图5)
ts
import { LevelManager } from "./LevelManager"
@Component
export default class DeathBlock extends Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
// 当角色 碰到方块 就让角色死亡
// 获取挂载到的物体的Model
let model = this.gameObject as Model
// 给物体的onTouch事件添加逻辑
model.onTouch.add((other: GameObject) => {
if (other instanceof Character) {
// 让角色死亡
LevelManager.instance.charDeath(other)
}
})
}
}
import { LevelManager } from "./LevelManager"
@Component
export default class DeathBlock extends Script {
/** 当脚本被实例后,会在第一帧更新前调用此函数 */
protected onStart(): void {
// 当角色 碰到方块 就让角色死亡
// 获取挂载到的物体的Model
let model = this.gameObject as Model
// 给物体的onTouch事件添加逻辑
model.onTouch.add((other: GameObject) => {
if (other instanceof Character) {
// 让角色死亡
LevelManager.instance.charDeath(other)
}
})
}
}
2.4.向场景中布置即死块
我们切换到场景视图,然后将即死块预制体拖动到场景上合适的位置即可。
2.5.效果演示
角色碰到即死块就会死亡
3.使用世界UI制作提示牌
世界UI的具体作用可以阅读这个文档:世界 UI | 产品手册 (ark.online)
我们可以利用世界UI,向场景中添加一些提示牌,从而达到丰富关卡的目的。
3.1.制作显示内容
世界UI的作用是将UI渲染在场景上,所以我们首先需要创建一个UI,并制作好需要显示的内容。
如下图所示,我用文字和背景制作了一个UI,UI名为SayHellow。
3.2.使用世界UI
使用世界UI可以将我们上一步制作的UI显示在场景中,具体步骤如下:
①在资源库中选中功能对象
②选中“游戏功能对象”
③找到“世界UI”并拖动到场景上
④将SayHellow这个UI拖动到世界UI属性面板上的“绑定UI对象”里