游戏内脚本
使用方法
- 参考 模板 和 示例 的书写方式编写好脚本
- 将脚本 导入 编辑器
- 如果脚本内使用了 触碰事件 或 触发器事件,请确保元件启用并设置好了相应的组件和功能
- 在
执行器
组件中添加脚本,并设置好需要的变量 - 进入游戏,脚本将自动执行
钩子
游戏内共提供了 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[]
自定义事件的值
- 消息:
OnTntExploded
TNT 爆炸事件- 消息:
Float3[]
所有 TNT 的爆炸位置
- 消息:
onEvents
ts
export const onEvents: (self: Item, events: Events) => void
注册的事件触发时执行。
self
:执行器组件所在元件的引用events
:触发的事件及其传递的消息,以键值对的形式传入,键为事件名,值为传递的消息数组
onTrigger
ts
export const onTrigger: (
self: Item,
triggeredItem: Item | Player,
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 {
// 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。