# 物理

# 索引


接口
描述
AddBoxGeometry 服务端 给自定义刚体创建盒形碰撞体
AddBoxTrigger 服务端 给自定义刚体创建盒子形触发器
AddCapsuleGeometry 服务端 给自定义刚体创建胶囊形碰撞体
AddForce 服务端 对自定义刚体的质心添加力,对运动学刚体无效
AddForceAtPos 服务端 对自定义刚体的指定位置添加力,对运动学刚体无效
AddForceAtPosLocal 服务端 对自定义刚体的指定位置添加力,对运动学刚体无效
AddSphereGeometry 服务端 给自定义刚体创建球形碰撞体
CreatePxActor 服务端 给实体创建自定义刚体
GetQuaternion 服务端 获取自定义刚体的四元数旋转
GetQuaternion 客户端 获取自定义刚体的四元数旋转
Raycast 服务端 射线检测,获取与射线相交的碰撞体。目前仅支持获取自定义刚体
Raycast 客户端 射线检测,获取与射线相交的碰撞体。目前仅支持获取自定义刚体
SetActorFlag 服务端 设置物理实体的行为开关
SetGlobalPose 服务端 设置自定义刚体的变换(直接瞬移)
SetKinematicTarget 服务端 设置运动学刚体的目标变换,仅对开启了PxRigidBodyFlag.eKINEMATIC的自定义刚体生效
SetRigidBodyFlag 服务端 设置自定义刚体的行为开关
SetRigidDynamicLockFlags 服务端 设置自定义刚体的约束

# AddBoxGeometry

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    给自定义刚体创建盒形碰撞体

  • 参数

    参数名
    数据类型
    说明
    localTransform tuple(float,float,float) 盒子中心相对实体原点的偏移
    halfX float 表示盒子长度的一半
    halfY float 表示盒子高度的一半
    halfZ float 表示盒子宽度的一半
    staticFriction float 静摩擦系数
    dynamicFriction float 动摩擦系数
    restitution float 弹性恢复系数,范围:[0, 1]
    eventMask int PxEventMask枚举,用于监听碰撞事件,默认为PxEventMask.Null,即不需要碰撞事件
    userData None或str 可记录自定义数据,长度不超过20,默认为None
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 备注

    • 目前只能在AddEntityServerEvent事件中使用,不存档
    • 世界中同时存在的碰撞体上限为8192个
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.AddBoxGeometry((0, 0.9, 0), 0.3, 0.9, 0.3, 0.05, 0.05, 0)

# AddBoxTrigger

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    给自定义刚体创建盒子形触发器

  • 参数

    参数名
    数据类型
    说明
    localTransform tuple(float,float,float) 盒子中心相对实体原点的偏移
    halfX float 盒子在x轴方向的一半长度
    halfY float 盒子在y轴方向的一半长度
    halfZ float 盒子在z轴方向的一半长度
    eventMask int PxEventMask枚举,用于监听碰撞事件,默认为PxEventMask.Null,即不需要碰撞事件
    userData None或str 可记录自定义数据,长度不超过20,默认为None
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 备注

    • 目前只能在AddEntityServerEvent事件中使用,不存档
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.AddBoxTrigger((0, 0.9, 0), 0.3, 0.9, 0.3)

# AddCapsuleGeometry

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    给自定义刚体创建胶囊形碰撞体

  • 参数

    参数名
    数据类型
    说明
    localTransform tuple(float,float,float) 胶囊中心相对实体原点的偏移
    radius float 胶囊半径
    halfHeight float 胶囊高度的一半
    staticFriction float 静摩擦系数
    dynamicFriction float 动摩擦系数
    restitution float 弹性恢复系数,范围:[0, 1]
    eventMask int PxEventMask枚举,用于监听碰撞事件,默认为PxEventMask.Null,即不需要碰撞事件
    userData None或str 可记录自定义数据,长度不超过20,默认为None
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 备注

    • 目前只能在AddEntityServerEvent事件中使用,不存档
    • 世界中同时存在的碰撞体上限为8192个
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.AddCapsuleGeometry((0, 0.9, 0), 0.3, 0.9, 0.05, 0.05, 0)

# AddForce

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    对自定义刚体的质心添加力,对运动学刚体无效

  • 参数

    参数名
    数据类型
    说明
    dir tuple(float,float,float) 在全局坐标系中定义的力/冲量
    mode int PxForceMode枚举,施加力/冲量时使用的模式
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
from common.minecraftEnum import PxForceMode
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 添加一个向上的速度
comp.AddForce((0,1,0), PxForceMode.eVELOCITY_CHANGE)

# AddForceAtPos

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    对自定义刚体的指定位置添加力,对运动学刚体无效

  • 参数

    参数名
    数据类型
    说明
    force tuple(float,float,float) 在全局坐标系中定义的力/冲量
    mode int PxForceMode枚举,施加力/冲量时使用的模式
    pos tuple(float,float,float) 在全局坐标系中定义的力/冲量作用点位置
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
from common.minecraftEnum import PxForceMode
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 添加一个向上的速度
comp.AddForceAtPos((0,1,0), PxForceMode.eVELOCITY_CHANGE, (0,81,0))

# AddForceAtPosLocal

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    对自定义刚体的指定位置添加力,对运动学刚体无效

  • 参数

    参数名
    数据类型
    说明
    force tuple(float,float,float) 在全局坐标系中定义的力/冲量
    mode int PxForceMode枚举,施加力/冲量时使用的模式
    pos tuple(float,float,float) 在局部坐标系中定义的力/冲量作用点偏移
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
from common.minecraftEnum import PxForceMode
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 对实体左侧位置添加一个向前的力
comp.AddForceAtPosLocal((0,0,1000), PxForceMode.eFORCE, (1,0,0))

# AddSphereGeometry

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    给自定义刚体创建球形碰撞体

  • 参数

    参数名
    数据类型
    说明
    localTransform tuple(float,float,float) 球心相对实体原点的偏移
    radius float 球半径
    staticFriction float 静摩擦系数
    dynamicFriction float 动摩擦系数
    restitution float 弹性恢复系数,范围:[0, 1]
    eventMask int PxEventMask枚举,用于监听碰撞事件,默认为PxEventMask.Null,即不需要碰撞事件
    userData None或str 可记录自定义数据,长度不超过20,默认为None
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 备注

    • 目前只能在AddEntityServerEvent事件中使用,不存档
    • 世界中同时存在的碰撞体上限为8192个
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.AddSphereGeometry((0, 0.9, 0), 0.3, 0.05, 0.05, 0)

# CreatePxActor

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    给实体创建自定义刚体

  • 参数

  • 返回值

    数据类型
    说明
    bool 是否成功
  • 备注

    • 只能在AddEntityServerEvent事件中使用,不存档
    • 只能对自定义生物使用,不支持玩家与原版实体。自定义生物需移除minecraft:physics等原生物理组件,并且使用SetBlockControlAi关闭ai
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.CreatePxActor()

# GetQuaternion

服务端客户端

# 服务端接口

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    获取自定义刚体的四元数旋转

  • 参数

  • 返回值

    数据类型
    说明
    tuple(float,float,float,float) 四元数
  • 备注

    • 非自定义刚体返回(0,0,0,1)
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
print comp.GetQuaternion()

# 客户端接口

method in mod.client.component.physxCompClient.PhysxComponentClient

  • 描述

    获取自定义刚体的四元数旋转

  • 参数

  • 返回值

    数据类型
    说明
    tuple(float,float,float,float) 四元数
  • 备注

    • 非自定义刚体返回(0,0,0,1)
  • 示例

import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreatePhysx(entityId)
print comp.GetQuaternion()

# Raycast

服务端客户端

# 服务端接口

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    射线检测,获取与射线相交的碰撞体。目前仅支持获取自定义刚体

  • 参数

    参数名
    数据类型
    说明
    dimensionId int 维度id
    origin tuple(float,float,float) 射线的起点
    dir tuple(float,float,float) 射线的方向
    maxDist float 射线的最大长度,最大128
    maxHits int 获取射线相交的前N个碰撞体,最大为16,默认为1
  • 返回值

    数据类型
    说明
    list(dict) 返回相交的碰撞体的信息,。每个元素的内容见备注
  • 备注

    • 返回列表的每个元素为一个dict,内容如下: { "entityId": str, # 碰撞体所属的实体id "userData": str或None, # 碰撞体的userData "pos": (float,float,float), # 相交的位置 "normal": (float,float,float), # 碰撞体在相交位置的法线 "dist": float, # 射线起点与相交点的距离 }
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(levelId)
print comp.Raycast(0, (0,80,0), (0,1,0), 5)

# 客户端接口

method in mod.client.component.physxCompClient.PhysxComponentClient

  • 描述

    射线检测,获取与射线相交的碰撞体。目前仅支持获取自定义刚体

  • 参数

    参数名
    数据类型
    说明
    origin tuple(float,float,float) 射线的起点
    dir tuple(float,float,float) 射线的方向
    maxDist float 射线的最大长度,最大128
    maxHits int 获取射线相交的前N个碰撞体,最大为16,默认为1
  • 返回值

    数据类型
    说明
    list(dict) 按顺序返回相交的碰撞体的信息。每个元素的内容见备注
  • 备注

    • 返回列表的每个元素为一个dict,内容如下: { "entityId": str, # 碰撞体所属的实体id "userData": str或None, # 碰撞体的userData "pos": (float,float,float), # 相交的位置 "normal": (float,float,float), # 碰撞体在相交位置的法线 "dist": float, # 射线起点与相交点的距离 }
  • 示例

import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreatePhysx(levelId)
print comp.Raycast(0, (0,80,0), (0,1,0), 5)

# SetActorFlag

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    设置物理实体的行为开关

  • 参数

    参数名
    数据类型
    说明
    flag int PxActorFlag枚举
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
from common.minecraftEnum import PxActorFlag
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 不受重力
comp.SetActorFlag(PxActorFlag.eDISABLE_GRAVITY, True)

# SetGlobalPose

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    设置自定义刚体的变换(直接瞬移)

  • 参数

    参数名
    数据类型
    说明
    pos tuple(float,float,float)或None 目标位置,None表示位置不变
    rot tuple(float,float,float,float)或None 目标旋转,用四元数表示,None表示旋转不变
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 瞬移到0,80,0,旋转不变
comp.SetGlobalPose((0,80,0), None)

# SetKinematicTarget

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    设置运动学刚体的目标变换,仅对开启了PxRigidBodyFlag.eKINEMATIC的自定义刚体生效

  • 参数

    参数名
    数据类型
    说明
    pos tuple(float,float,float)或None 目标位置,None表示位置不变
    rot tuple(float,float,float,float)或None 目标旋转,用四元数表示,None表示旋转不变
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 位置移动到0,80,0,旋转不变
comp.SetKinematicTarget((0,80,0), None)

# SetRigidBodyFlag

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    设置自定义刚体的行为开关

  • 参数

    参数名
    数据类型
    说明
    flag int PxRigidBodyFlag枚举
    val bool 开关
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
from common.minecraftEnum import PxRigidBodyFlag
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
comp.SetRigidBodyFlag(PxRigidBodyFlag.eKINEMATIC, True) # 设置为运动学刚体

# SetRigidDynamicLockFlags

服务端

method in mod.server.component.physxCompServer.PhysxComponentServer

  • 描述

    设置自定义刚体的约束

  • 参数

    参数名
    数据类型
    说明
    flag int PxRigidDynamicLockFlag枚举
  • 返回值

    数据类型
    说明
    bool 是否成功
  • 示例

import mod.server.extraServerApi as serverApi
from common.minecraftEnum import PxRigidDynamicLockFlag
comp = serverApi.GetEngineCompFactory().CreatePhysx(entityId)
# 锁定xyz轴旋转
comp.SetRigidDynamicLockFlags(PxRigidDynamicLockFlag.eLOCK_ANGULAR_X | PxRigidDynamicLockFlag.eLOCK_ANGULAR_Y | PxRigidDynamicLockFlag.eLOCK_ANGULAR_Z)

AddBoxGeometry

AddBoxTrigger

AddCapsuleGeometry

AddForce

AddForceAtPos

AddForceAtPosLocal

AddSphereGeometry

CreatePxActor

GetQuaternion

服务端接口

客户端接口

Raycast

服务端接口

客户端接口

SetActorFlag

SetGlobalPose

SetKinematicTarget

SetRigidBodyFlag

SetRigidDynamicLockFlags