游戏内脚本
使用方法
- 参考 模板 和 示例 的书写方式编写好脚本
- 将脚本 导入 编辑器
- 如果脚本内使用了 触碰事件 或 触发器事件,请确保元件启用并设置好了相应的组件和功能
- 在
执行器组件中添加脚本,并设置好需要的变量 - 进入游戏,脚本将自动执行
钩子
游戏内共提供了 6 个钩子,参见 BST/_Typings/gameApi/exportFuncs.d.ts。
init
ts
export const init: (self: Item, vars: { [key: string]: any }) => void执行器加载脚本时执行,在所有事件之前执行,只会执行一次。
注意
在此函数中不要进行任何有关游戏内物体的操作,因为此时场景尚未加载完成。
self:执行器组件所在元件的引用vars:执行器上设置的变量,以键值对的形式传入
execute
ts
export const execute: (...args: any[]) => void游戏中使用 execute() 被其他执行器调用时执行。
registerEvents
ts
export const registerEvents: RegisterEvent[]导出一个 string 数组,注册需要接收的事件。
事件列表
注意
事件中所有传递的信息均为数组。
OnPhysicsUpdate物理更新OnLoadLevel当关卡加载结束,开始关卡前OnStartLevel开始关卡时,包括第一次进入及重开后OnQuitLevel未完成游戏退出关卡时OnTimerActive生成玩家球启用计时器时OnPreRestartLevel执行重开关卡前- 可取消
- 不包括完成关卡后的重开
OnPostRestartLevel执行重开关卡后OnPrePlayerDeadStart玩家掉入死亡区 / 耐久归零 / 自杀前- 可取消
OnPostPlayerDeadStart玩家掉入死亡区 / 耐久归零 / 自杀后OnPlayerDeadEnd死亡动画结束后OnPreCheckpointReached到达检查点前- 消息:
[Item]检查点元件 - 可取消
- 消息:
OnPostCheckpointReached到达检查点后- 消息:
[Item]检查点元件
- 消息:
OnPreDestinationReached到达终点前- 消息:
[Item]终点元件 - 可取消
- 消息:
OnPostDestinationReached到达终点后- 消息:
[Item]终点元件
- 消息:
OnPreGetCollection获取收集物前- 消息:
string[]被收集的收集品名字 - 可取消
- 消息:
OnPostGetCollection获取收集物后- 消息:
string[]被收集的收集品名字
- 消息:
OnPreSwitchBallStart变球动画开始前- 消息:
[BallType]变球类型 - 可取消
- 消息:
OnPreSwitchBallEnd变球动画结束前- 消息:
[BallType]变球类型 - 可取消
- 消息:
OnPostSwitchBallEnd变球动画结束后- 消息:
[BallType]变球类型
- 消息:
OnPreTransferBallStart传球动画开始前- 消息:
[Item, Item]传送器元件,第一个是当前传送器,第二个是目标传送器 - 可取消
- 消息:
OnPreTransferBallEnd传球动画结束前- 消息:
[Item, Item]传送器元件,第一个是当前传送器,第二个是目标传送器 - 可取消
- 消息:
OnPostTransferBallEnd传球动画结束后- 消息:
[Item, Item]传送器元件,第一个是当前传送器,第二个是目标传送器
- 消息:
OnPlayerCollideEnter玩家碰撞进入事件- 消息:
CollisionEvent[]碰撞事件
- 消息:
OnPlayerCollideStay玩家碰撞持续事件- 消息:
CollisionEvent[]碰撞事件
- 消息:
OnPlayerCollideExit玩家碰撞离开事件- 消息:
CollisionEvent[]碰撞事件
- 消息:
OnReceiveCustomEvent接收到自定义事件时- 消息:
any[]自定义事件的值
- 消息:
OnTntExplodedTNT 爆炸事件- 消息:
Float3[]所有 TNT 的爆炸位置
- 消息:
onEvents
ts
export const onEvents: (self: Item, events: Events) => void注册的事件触发时执行。
self:执行器组件所在元件的引用events:触发的事件及其传递的消息,以键值对的形式传入,键为事件名,值为传递的消息数组
onTrigger
ts
export const onTrigger: (
self: Item,
triggeredItem: Item,
type: "Enter" | "Stay" | "Exit"
) => void触发器触发时执行。
self:触发器组件所在元件的引用triggeredItem:触发触发器的元件或玩家引用type:触发事件类型
onCollide
ts
export const onCollide: (self: Item, collisionEvent: CollisionEvent) => void物体发生碰撞时执行。
self:碰撞发生的物体的引用collisionEvent:碰撞事件对象,包含了碰撞的物体、碰撞的类型、碰撞的位置等信息
模块
游戏内共提供了以下 10 个模块:
具体参见 BST/_Typings/gameApi/modules。
使用如下语法导入模块:
js
import {
// player
player,
// modules
console,
scene,
variables,
settings,
audioManager,
levelManager,
inputManager,
tweenManager,
math,
uiCanvas,
// basic data types
Float2,
Float3,
Float4,
ColorRGBA,
Bool3,
Trans,
Quaternion,
} from "gameApi"提示
如需导入工程内的自制模块,请使用 BME 的资源路径,如:
js
import { dotProduct } from "Scripts/Utility/MathExtension.js"注意
此处的 .js 后缀 不能 被省略。
模板
参见 BST/Templates/gameTemplate.js。