# 物理

# 索引

事件
描述
PhysXJointBreakServerEvent 服务端 脚本创建的PhysX关节受力超过SetJointBreakForce设置的阈值并断裂后触发
PhysXPostSimulateClientEvent 客户端 客户端本地玩家当前维度完成 PhysX fetchResults 后触发,可通过 PhysX 组件读取当前帧最新线速度、角速度和四元数旋转
PhysXPostSimulateServerEvent 服务端 服务端每个参与物理模拟的维度完成 PhysX fetchResults 后触发,可读取当次模拟产生的最新 PhysX 线速度、角速度和旋转状态
PhysXPreSimulateClientEvent 客户端 客户端本地玩家当前维度执行 PhysX simulate 前触发,可用于轻量的视觉预测准备
PhysXPreSimulateServerEvent 服务端 服务端每个参与物理模拟的维度执行 PhysX simulate 前触发。在本事件中对当前维度刚体施加的力或扭矩会参与当次模拟
PhysxTouchClientEvent 客户端 给自定义刚体添加的碰撞体,与其他碰撞体或原版实体发生碰撞/结束碰撞时触发。需要在碰撞体创建时使用PxEventMask.Client才会触发
PhysxTouchServerEvent 服务端 给自定义刚体添加的碰撞体,与其他碰撞体或原版实体发生碰撞/结束碰撞时触发。需要在碰撞体创建时使用PxEventMask.Server才会触发
PhysxTriggerClientEvent 客户端 给自定义刚体添加的触发器,与其他碰撞体或原版实体进入/离开触发器时触发。需要在触发器创建时使用PxEventMask.Client才会触发
PhysxTriggerServerEvent 服务端 给自定义刚体添加的触发器,与其他碰撞体或原版实体发生进入触发器/离开触发器时触发。需要在触发器创建时使用PxEventMask.Server才会触发

# 物理

# PhysXJointBreakServerEvent

服务端

  • 描述

    脚本创建的PhysX关节受力超过SetJointBreakForce设置的阈值并断裂后触发

  • 参数

    参数名
    数据类型
    说明
    jointId int 已断裂关节的ID
    entityId0 str或None 关节第0端实体ID;该端连接世界时为None
    entityId1 str或None 关节第1端实体ID;该端连接世界时为None
    jointType int 关节类型:0固定关节,1距离关节,2球关节,3铰链关节,4滑动关节
    breakForce float 断裂当次模拟中关节承受的线性约束力大小
    breakTorque float 断裂当次模拟中关节承受的角约束力矩大小
    dimensionId int 关节所在维度ID
  • 返回值

    无

  • 备注

    • 事件在PhysX模拟完成后同步触发。同一关节最多触发一次;事件触发后关节仍可通过IsJointBroken查询,并应使用DestroyJoint显式释放

# PhysXPostSimulateClientEvent

客户端

  • 描述

    客户端本地玩家当前维度完成 PhysX fetchResults 后触发,可通过 PhysX 组件读取当前帧最新线速度、角速度和四元数旋转

  • 参数

    参数名
    数据类型
    说明
    dimensionId int 当前完成物理模拟的维度id
    deltaTime float 本次物理模拟的固定时间步长,固定为0.05秒
  • 返回值

    无

  • 备注

    • 仅在本地玩家当前维度实际执行物理模拟时触发。事件为同步高频事件,回调中不要执行耗时IO,也不要销毁实体、维度或物理场景
    • 该事件触发时 PhysX 刚体状态已更新,但普通实体的位置与旋转组件可能尚未完成本游戏刻回写。需要读取当帧结果时应使用 PhysX 组件的速度或四元数接口
    • 事件名大小写敏感,名称中的 PhysX 必须使用大写 X;不要写成 PhysxPostSimulateClientEvent。旧事件 PhysxTouchClientEvent 与 PhysxTriggerClientEvent 的命名不同

# PhysXPostSimulateServerEvent

服务端

  • 描述

    服务端每个参与物理模拟的维度完成 PhysX fetchResults 后触发,可读取当次模拟产生的最新 PhysX 线速度、角速度和旋转状态

  • 参数

    参数名
    数据类型
    说明
    dimensionId int 当前刚完成物理模拟的维度id
    deltaTime float 本次物理模拟的固定时间步长,固定为0.05秒
  • 返回值

    无

  • 备注

    • 该事件触发时PhysX刚体状态已更新,但普通实体位置与旋转组件可能尚未完成本游戏刻回写。需要读取当帧结果时应使用PhysX组件的速度或状态接口
    • 该事件为同步高频事件,回调中应只执行轻量读取,不要执行耗时IO,也不要销毁实体、维度或物理场景
    • 事件名大小写敏感,名称中的 PhysX 必须使用大写 X;不要写成 PhysxPostSimulateServerEvent。旧事件 PhysxTouchServerEvent 与 PhysxTriggerServerEvent 的命名不同

# PhysXPreSimulateClientEvent

客户端

  • 描述

    客户端本地玩家当前维度执行 PhysX simulate 前触发,可用于轻量的视觉预测准备

  • 参数

    参数名
    数据类型
    说明
    dimensionId int 当前即将执行物理模拟的维度id
    deltaTime float 本次物理模拟的固定时间步长,固定为0.05秒
  • 返回值

    无

  • 备注

    • 仅在本地玩家当前维度实际执行物理模拟时触发。该事件为同步高频事件,回调中不要执行耗时IO,也不要销毁实体、维度或物理场景
    • 当前客户端 PhysX 组件未提供 AddForce 或 AddTorque 接口,不能通过本事件向本地刚体施加力或扭矩;客户端可写接口的用途仅限本地视觉预测
    • 事件名大小写敏感,名称中的 PhysX 必须使用大写 X;不要写成 PhysxPreSimulateClientEvent。旧事件 PhysxTouchClientEvent 与 PhysxTriggerClientEvent 的命名不同

# PhysXPreSimulateServerEvent

服务端

  • 描述

    服务端每个参与物理模拟的维度执行 PhysX simulate 前触发。在本事件中对当前维度刚体施加的力或扭矩会参与当次模拟

  • 参数

    参数名
    数据类型
    说明
    dimensionId int 当前即将执行物理模拟的维度id
    deltaTime float 本次物理模拟的固定时间步长,固定为0.05秒
  • 返回值

    无

  • 备注

    • 该事件为同步高频事件,每个参与模拟的维度每游戏刻触发一次。回调中应只执行轻量的物理状态读写,不要执行耗时IO,也不要销毁实体、维度或物理场景
    • 事件名大小写敏感,名称中的 PhysX 必须使用大写 X;不要写成 PhysxPreSimulateServerEvent。旧事件 PhysxTouchServerEvent 与 PhysxTriggerServerEvent 的命名不同

# PhysxTouchClientEvent

客户端

  • 描述

    给自定义刚体添加的碰撞体,与其他碰撞体或原版实体发生碰撞/结束碰撞时触发。需要在碰撞体创建时使用PxEventMask.Client才会触发

  • 参数

    参数名
    数据类型
    说明
    touch list(dict) 开始接触的碰撞体对的信息。一个碰撞体在创建时使用了PxEventMask.Found,他与其他碰撞体/原版实体开始接触时,会出现在列表中
    lost list(dict) 结束接触的碰撞体对的信息。一个碰撞体在创建时使用了PxEventMask.Lost,他与其他碰撞体/原版实体结束接触时,会出现在列表中
  • 返回值

    无

  • 备注

    • touch列表每个元素的内容:
      {
          "entityId0": str,    // 一个碰撞体所属实体的entityId
          "identifier0": str,  // 一个碰撞体所属实体的identifier
          "shape0": str或None, // 一个碰撞体的userData
          "entityId1": str,    // 另一个碰撞体所属实体的entityId
          "identifier1": str,  // 另一个碰撞体所属实体的identifier
          "shape1": str或None,  // 另一个碰撞体的userData
          "pos": (float,float,float),  // 碰撞点的世界坐标。其中一个碰撞体在创建时使用了PxEventMask.Found_Detail才有该字段
          "normal":(float,float,float)  // 碰撞产生的力的方向,由碰撞体1指向碰撞体0。其中一个碰撞体在创建时使用了PxEventMask.Found_Detail才有该字段
      }
      
      lost列表每个元素的内容:
       {
          "entityId0": str,     // 一个碰撞体所属实体的entityId
          "identifier0": str,   // 一个碰撞体所属实体的identifier
          "shape0": str或None,  // 一个碰撞体的userData
          "entityId1": str,     // 另一个碰撞体所属实体的entityId
          "identifier1": str,   // 另一个碰撞体所属实体的identifier
          "shape1": str或None   // 另一个碰撞体的userData
      }
      
    • 列表中的碰撞对不分先后,每个碰撞对中的碰撞体0与碰撞体1也不分先后

# PhysxTouchServerEvent

服务端

  • 描述

    给自定义刚体添加的碰撞体,与其他碰撞体或原版实体发生碰撞/结束碰撞时触发。需要在碰撞体创建时使用PxEventMask.Server才会触发

  • 参数

    参数名
    数据类型
    说明
    touch list(dict) 开始接触的碰撞体对的信息。一个碰撞体在创建时使用了PxEventMask.Found,他与其他碰撞体/原版实体开始接触时,会出现在列表中
    lost list(dict) 结束接触的碰撞体对的信息。一个碰撞体在创建时使用了PxEventMask.Lost,他与其他碰撞体/原版实体结束接触时,会出现在列表中
  • 返回值

    无

  • 备注

    • touch列表每个元素的内容:
      {
          "entityId0": str,    // 一个碰撞体所属实体的entityId
          "identifier0": str,  // 一个碰撞体所属实体的identifier
          "shape0": str或None, // 一个碰撞体的userData
          "entityId1": str,    // 另一个碰撞体所属实体的entityId
          "identifier1": str,  // 另一个碰撞体所属实体的identifier
          "shape1": str或None,  // 另一个碰撞体的userData
          "pos": (float,float,float),  // 碰撞点的世界坐标。其中一个碰撞体在创建时使用了PxEventMask.Found_Detail才有该字段
          "normal":(float,float,float)  // 碰撞产生的力的方向,由碰撞体1指向碰撞体0。其中一个碰撞体在创建时使用了PxEventMask.Found_Detail才有该字段
      }
      
      lost列表每个元素的内容:
       {
          "entityId0": str,     // 一个碰撞体所属实体的entityId
          "identifier0": str,   // 一个碰撞体所属实体的identifier
          "shape0": str或None,  // 一个碰撞体的userData
          "entityId1": str,     // 另一个碰撞体所属实体的entityId
          "identifier1": str,   // 另一个碰撞体所属实体的identifier
          "shape1": str或None   // 另一个碰撞体的userData
      }
      
    • 列表中的碰撞对不分先后,每个碰撞对中的碰撞体0与碰撞体1也不分先后

# PhysxTriggerClientEvent

客户端

  • 描述

    给自定义刚体添加的触发器,与其他碰撞体或原版实体进入/离开触发器时触发。需要在触发器创建时使用PxEventMask.Client才会触发

  • 参数

    参数名
    数据类型
    说明
    found list(dict) 进入触发器的碰撞体对的信息。它与其他碰撞体/原版实体进入触发器时,会出现在列表中
    lost list(dict) 离开触发器的碰撞体对的信息。它与其他碰撞体/原版实体离开触发器时,会出现在列表中
  • 返回值

    无

  • 备注

    • found列表每个元素的内容:
      {
          "entityId0": str,    // 触发器所属实体的entityId
          "identifier0": str,  // 触发器所属实体的identifier
          "shape0": dict|None, // 触发器的userData (NeEvent::Object)
          "entityId1": str,    // 另一方实体的entityId
          "identifier1": str,  // 另一方实体的identifier
          "shape1": dict|None  // 另一方碰撞体的userData (NeEvent::Object)
      }
      
      lost列表每个元素的内容:
       {
          "entityId0": str,     // 触发器所属实体的entityId
          "identifier0": str,   // 触发器所属实体的identifier
          "shape0": dict|None,  // 触发器的userData
          "entityId1": str,     // 另一方实体的entityId
          "identifier1": str,   // 另一方实体的identifier
          "shape1": dict|None   // 另一方碰撞体的userData
      }
      

# PhysxTriggerServerEvent

服务端

  • 描述

    给自定义刚体添加的触发器,与其他碰撞体或原版实体发生进入触发器/离开触发器时触发。需要在触发器创建时使用PxEventMask.Server才会触发

  • 参数

    参数名
    数据类型
    说明
    found list(dict) 进入触发器的碰撞体对的信息。一个碰撞体在创建时使用了PxEventMask.Found,它与其他碰撞体/原版实体进入触发器时,会出现在列表中
    lost list(dict) 离开触发器的碰撞体对的信息。一个碰撞体在创建时使用了PxEventMask.Lost,它与其他碰撞体/原版实体离开触发器时,会出现在列表中
  • 返回值

    无

  • 备注

    • found列表每个元素的内容:
      {
          "entityId0": str,    // 触发器所属实体的entityId
          "identifier0": str,  // 触发器所属实体的identifier
          "shape0": str或None, // 触发器的userData (NeEvent::Object)
          "entityId1": str,    // 进入触发器的碰撞体所属实体的entityId
          "identifier1": str,  // 进入触发器的碰撞体所属实体的identifier
          "shape1": str或None  // 进入触发器的碰撞体的userData (NeEvent::Object)
      }
      
      lost列表每个元素的内容:
          {
          "entityId0": str,     // 触发器所属实体的entityId
          "identifier0": str,   // 触发器所属实体的identifier
          "shape0": str或None,  // 触发器的userData (NeEvent::Object)
          "entityId1": str,     // 离开触发器的碰撞体所属实体的entityId
          "identifier1": str,   // 离开触发器的碰撞体所属实体的identifier
          "shape1": str或None   // 离开触发器的碰撞体的userData (NeEvent::Object)
      }
      
    • 列表中的碰撞对不分先后,每个碰撞对中的碰撞体0与碰撞体1的具体角色取决于底层触发逻辑。

PhysXJointBreakServerEvent

PhysXPostSimulateClientEvent

PhysXPostSimulateServerEvent

PhysXPreSimulateClientEvent

PhysXPreSimulateServerEvent

PhysxTouchClientEvent

PhysxTouchServerEvent

PhysxTriggerClientEvent

PhysxTriggerServerEvent