liko
    Preparing search index...

    Class RigidBody

    物理刚体组件,实现物理属性描述和碰撞区域定义。

    注意:RigidBody 为一个脚本,挂载到节点后,需要添加到场景中才能被激活

    // 创建一个动态刚体
    const rigidBody = new RigidBody({
    rigidType: 'dynamic',
    shapes: [{ shapeType: 'box', width: 100, height: 50 }],
    friction: 0.5,
    restitution: 0.3
    });

    // 添加碰撞事件监听
    rigidBody.onCollisionStart = (collision) => {
    console.log('碰撞开始:', collision);
    };

    // 挂载到节点
    myNode.addScript(rigidBody);

    // 施加力使物体移动
    rigidBody.applyForce({ x: 100, y: 0 });

    // 设置速度
    rigidBody.setLinearVelocity(50, -30);

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    category: string = ''

    物理分类标识,用于碰撞检测和过滤

    注意:配合 categoryAccepted 使用可以控制哪些物体能够碰撞

    friction: number = 0.2

    摩擦系数,影响物体间的滑动阻力

    取值范围:0-1,0 表示无摩擦,1 表示最大摩擦

    id: string = ''

    脚本唯一标识符,通常由编辑器指定

    isSensor: boolean = false

    是否为传感器模式

    注意:传感器只检测碰撞但不产生物理反馈,常用于触发器

    joints: IJoint[] = []

    关节列表,描述刚体之间的连接关系

    注意:关节会在组件唤醒时自动创建

    label: string = ''

    脚本标签,用于快速识别和查找

    onCollisionEnd?: (e: ICollision) => void

    碰撞结束时的回调函数

    注意:需要在组件唤醒前设置才能生效

    onCollisionStart?: (e: ICollision) => void

    碰撞开始时的回调函数

    注意:需要在组件唤醒前设置才能生效

    restitution: number = 0

    弹性系数,影响碰撞后的反弹程度

    取值范围:0-1,0 表示完全非弹性碰撞,1 表示完全弹性碰撞

    rigidType: RigidType = 'static'

    物理刚体类型,决定物体的物理行为

    • static: 静态物体,不受力影响,位置固定
    • kinematic: 运动学物体,可以移动但不受力影响
    • dynamic: 动态物体,受力影响并参与物理模拟

    注意:至少一个物体为 dynamic 才能产生碰撞反应

    shapes: IShape[] = []

    物理形状列表,描述碰撞区域

    注意:为空则默认使用与节点同大小的矩形

    Accessors

    • get allowRotation(): boolean

      是否允许旋转

      注意:设为 false 则物体保持固定方向,不会因碰撞或力矩而旋转

      Returns boolean

    • set allowRotation(value: boolean): void

      Parameters

      • value: boolean

      Returns void

    • get allowSleeping(): boolean

      是否允许休眠,用于性能优化

      注意:休眠状态下物体不参与物理计算以提高性能

      Returns boolean

    • set allowSleeping(value: boolean): void

      Parameters

      • value: boolean

      Returns void

    • get angularDamping(): number

      角阻尼系数,影响物体旋转的减速率

      注意:值越大减速越快,用于控制旋转的衰减

      Returns number

    • set angularDamping(value: number): void

      Parameters

      • value: number

      Returns void

    • get angularVelocity(): number

      角速度,物体旋转速度

      单位:弧度/秒 注意:只对 dynamic 类型物体有效

      Returns number

    • set angularVelocity(value: number): void

      Parameters

      • value: number

      Returns void

    • get awaked(): boolean

      脚本是否已被激活(添加到场景后触发)

      Returns boolean

    • get bullet(): boolean

      是否为子弹模式,用于高速物体的连续碰撞检测

      注意:高速物体设为 true 可减少穿透问题,但会增加性能开销

      Returns boolean

    • set bullet(value: boolean): void

      Parameters

      • value: boolean

      Returns void

    • get categoryAccepted(): undefined | string[]

      接受碰撞的分类列表,用于碰撞过滤

      注意:为空则与所有物体碰撞,可以是字符串(逗号分隔)或字符串数组

      Returns undefined | string[]

    • set categoryAccepted(value: undefined | string | string[]): void

      Parameters

      • value: undefined | string | string[]

      Returns void

    • get destroyed(): boolean

      脚本是否已被销毁

      Returns boolean

    • get enabled(): boolean

      脚本是否启用,禁用时不执行更新且触发 onDisable

      Returns boolean

    • set enabled(value: boolean): void

      Parameters

      • value: boolean

      Returns void

    • get gravityScale(): number

      重力缩放系数,控制物体受重力影响的程度

      注意:默认为 1,可设为负值使物体上浮,设为 0 可忽略重力

      Returns number

    • set gravityScale(value: number): void

      Parameters

      • value: number

      Returns void

    • get linearDamping(): number

      线性阻尼系数,影响物体线性运动的减速率

      注意:值越大减速越快,用于控制移动的衰减

      Returns number

    • set linearDamping(value: number): void

      Parameters

      • value: number

      Returns void

    • get linearVelocity(): IPoint

      线性速度,物体当前运动速度向量

      注意:只对 dynamic 和 kinematic 类型物体有效

      Returns IPoint

    • set linearVelocity(value: IPoint): void

      Parameters

      • value: IPoint

      Returns void

    • get mass(): number

      刚体质量,由形状和密度自动计算(只读)

      注意:质量影响物体的惯性和力的响应,无法直接设置

      Returns number

    • get scene(): undefined | IScene

      目标节点所在的场景引用(建议缓存为局部变量以提高性能)

      Returns undefined | IScene

    • get sleeping(): boolean

      是否处于休眠状态

      注意:休眠时物体暂停物理计算,可手动控制唤醒或休眠

      Returns boolean

    • set sleeping(value: boolean): void

      Parameters

      • value: boolean

      Returns void

    • get target(): T

      脚本挂载的目标节点,设置后触发 onCreate

      Returns T

    • set target(value: T): void

      Parameters

      • value: T

      Returns void

    Methods

    • 施加角冲量,立即改变物体角速度

      Parameters

      • impulse: number

        角冲量值

        注意:仅对 dynamic 类型且 allowRotation 为 true 的物体有效

      Returns void

    • 施加力,会逐渐产生速度变化

      Parameters

      • force: IPoint

        力向量,包含 x 和 y 分量

      • point: IPoint = ...

        作用点,默认为物体原点,相对于物体中心的偏移

        注意:仅对 dynamic 类型物体有效,力量需足够大才能克服摩擦和重力

      Returns void

    • 在物体中心点施加力,会逐渐改变物体速度

      Parameters

      • force: IPoint

        力向量

        注意:仅对 dynamic 类型物体有效,力量需足够大才能克服摩擦和重力

      Returns void

    • 施加线性冲量,立即改变物体速度

      Parameters

      • impulse: IPoint

        冲量向量

      • point: IPoint = ...

        作用点,默认为物体原点

        注意:仅对 dynamic 类型物体有效,效果比施加力更直接

      Returns void

    • 施加扭矩,会逐渐产生角速度变化

      Parameters

      • torque: number

        扭矩值

        注意:仅对 dynamic 类型且 allowRotation 为 true 的物体有效

      Returns void

    • 销毁脚本实例

      Returns void

      销毁后脚本将不再可用,系统会自动:

      • 触发 onDestroy 回调
      • 清除在 target、scene、stage、timer 上的所有监听
      • 解除与目标节点的关联
      • 设置 destroyed 状态为 true
      • 设置 enabled 状态为 false

      注意: 如果使用了 Timer.system 的监听,需要在 onDestroy 中手动清除

    • 销毁指定标签的关节

      Parameters

      • label: string

        关节标签

        注意:销毁后关节连接将断开,相关物体将不再约束

      Returns void

    • 获取刚体当前旋转角度

      Returns number

      旋转角度(弧度)

    • 组件唤醒时初始化物理刚体

      设置刚体类型、添加形状、设置初始位置和角度,并注册碰撞事件和关节

      Returns void

    • 当脚本的 target 被设置时触发的回调函数

      Returns void

      生命周期中的第一个回调,此时:

      • target 已经设置完成
      • 可以访问 target 的属性和方法
      • 但 scene 和 stage 可能还未初始化
    • 每帧更新物体位置和旋转

      同步物理引擎计算结果到游戏对象,并检测边界。如果物体超出边界则销毁

      Returns void

    • 设置刚体线性速度

      Parameters

      • Optionalx: number

        x 方向速度,为 undefined 则保持当前速度

      • Optionaly: number

        y 方向速度,为 undefined 则保持当前速度

        注意:只对 dynamic 和 kinematic 类型物体有效

      Returns void

    • 设置刚体位置

      Parameters

      • x: number

        x 轴坐标

      • y: number

        y 轴坐标

        注意:如果物体使用了刚体,直接修改 node.position 是无效的,必须使用此方法

      Returns void

    • 批量设置脚本属性

      Parameters

      • Optionalprops: Record<string, unknown>

        要设置的属性键值对

      Returns this

      当前实例,支持链式调用

    • 设置刚体旋转角度

      Parameters

      • rotation: number

        旋转角度(弧度)

        注意:会同时更新物理刚体和游戏对象的旋转

      Returns void

    • 向同场景的其他脚本发送信号

      Parameters

      • key: string

        信号类型标识符

      • Optionalparams: Record<string, any>

        可选的信号参数对象

      Returns void

      发送的信号可以在同场景其他脚本的 onSignal 方法中被监听到,用于脚本间通信。

      注意:

      • 必须在脚本销毁前发送信号,否则无法正确触发
      • 信号只能在同一场景内传递
      • key 不区分大小写
    • 执行脚本的更新逻辑

      Parameters

      • delta: number

        距离上一帧的时间间隔(毫秒)

      Returns void

      系统每帧调用一次,用于更新脚本状态。

      执行条件:

      • 脚本必须处于启用状态(enabled = true)
      • 脚本必须已经激活(awaked = true)
      • 如果是首次执行,会先触发 onAwake