xr-frame / Exports / Rigidbody
# Class: Rigidbody
刚体组件。
让物体在物理系统中成为一个有质量的刚体。只有添加了这个组件之后,物体才有可能在物理系统的物理模拟阶段发生位移和旋转。
# Hierarchy
-
↳
Rigidbody
# Table of contents
# Events
# Properties
# Accessors
- angularDamping
- angularVelocity
- centerOfMass
- collisionDetectionMode
- detectCollisions
- el
- freezeRotation
- inertiaTensor
- isKinematic
- linearDamping
- mass
- maxAngularVelocity
- maxDepenetrationVelocity
- position
- positionConstraints
- rotation
- rotationConstraints
- scene
- sleepThreshold
- solverIterations
- solverVelocityIterations
- useGravity
- velocity
- version
# Methods
- AddExplosionForce
- AddForceAtPosition
- addForce
- addRelativeForce
- addRelativeTorque
- addTorque
- applyData
- closestPointOnBounds
- disable
- enable
- getData
- getPointVelocity
- getRelativePointVelocity
- getWorldCenterOfMass
- isSleeping
- movePosition
- moveRotation
- resetCenterOfMass
- resetInertiaTensor
- setData
- setDataOne
- setDensity
- sleep
- wakeUp
# Events
# onAdd
▸ onAdd(parent
, data
): void
所挂载的element
被挂载到场景时触发的回调。
# Parameters
Name | Type |
---|---|
parent | Element |
data | IRigidbodyData |
# Returns
void
# Inherited from
# onRelease
▸ onRelease(data
): void
从被挂载的element
上被移除,或是element
被销毁时,触发的回调。
一般用于释放持有的资源。
# Parameters
Name | Type |
---|---|
data | IRigidbodyData |
# Returns
void
# Inherited from
# onRemove
▸ onRemove(parent
, data
): void
所挂载的element
从父节点parent
被移除时,或者自己从element
上被移除时,触发的回调。
一般用于消除功能的运作。
如果一个组件的元素直接被销毁了,那这个组件就不会经历onRemove而是直接进入onRelease。
# Parameters
Name | Type |
---|---|
parent | Element |
data | IRigidbodyData |
# Returns
void
# Inherited from
# onTick
▸ onTick(dateTime
, data
): void
渲染每帧触发的回调。
# Parameters
Name | Type |
---|---|
dateTime | number |
data | IRigidbodyData |
# Returns
void
# Inherited from
# onUpdate
▸ onUpdate(data
, preData
): void
数据更新时触发的回调。
# Parameters
Name | Type |
---|---|
data | IRigidbodyData |
preData | IRigidbodyData |
# Returns
void
# Inherited from
# Properties
# priority
• Readonly
priority: number
= 401
自定义组件的更新优先级。
# Overrides
# schema
• Readonly
schema: IComponentSchema
自定义组件的schema
。
# Overrides
# EVENTS
▪ Static
EVENTS: string
[] = []
# Inherited from
# Accessors
# angularDamping
• get
angularDamping(): number
角速度阻尼。 影响物体的角速度。
limit
angularDamping >= 0
default
0.05
# Returns
number
• set
angularDamping(v
): void
角速度阻尼。 影响物体的角速度。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# angularVelocity
• get
angularVelocity(): Vector3
刚体的角速度。
# Returns
• set
angularVelocity(v
): void
刚体的角速度。
# Parameters
Name | Type |
---|---|
v | Vector3 |
# Returns
void
# centerOfMass
• get
centerOfMass(): Vector3
刚体的质心相对于LocalTransform的偏移量。 如果不手动设置这一项,会自动根据刚体附着的轮廓来计算质心。
# Returns
• set
centerOfMass(v
): void
刚体的质心相对于LocalTransform的偏移量。 如果不手动设置这一项,会自动根据刚体附着的轮廓来计算质心。
# Parameters
Name | Type |
---|---|
v | Vector3 |
# Returns
void
# collisionDetectionMode
• get
collisionDetectionMode(): CollisionDetectionMode
设置刚体的碰撞检测模式。 详见{@link CollisionDetectionMode}。
default
{@link CollisionDetectionMode.Discrete}
# Returns
CollisionDetectionMode
• set
collisionDetectionMode(v
): void
设置刚体的碰撞检测模式。 详见{@link CollisionDetectionMode}。
# Parameters
Name | Type |
---|---|
v | CollisionDetectionMode |
# Returns
void
# detectCollisions
• get
detectCollisions(): boolean
unimplemented
default
true
# Returns
boolean
• set
detectCollisions(v
): void
# Parameters
Name | Type |
---|---|
v | boolean |
# Returns
void
# el
• get
el(): Element
挂载的元素。
# Returns
# freezeRotation
• get
freezeRotation(): boolean
是否允许物理模拟过程中对刚体进行旋转。
default
true
# Returns
boolean
• set
freezeRotation(v
): void
是否允许物理模拟过程中对刚体进行旋转。
# Parameters
Name | Type |
---|---|
v | boolean |
# Returns
void
# inertiaTensor
• get
inertiaTensor(): number
刚体的转动惯量。 如果不手动设置的话,会自动根据刚体上附着的轮廓计算得出。
# Returns
number
• set
inertiaTensor(v
): void
刚体的转动惯量。 如果不手动设置的话,会自动根据刚体上附着的轮廓计算得出。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# isKinematic
• get
isKinematic(): boolean
是否为运动学(Kinematic) 刚体。 设置为运动学刚体后,除非手动调用movePosition,否则物体不会在物理模拟阶段发生位移或旋转。可以理解为,刚体的行为完全在用户的控制之下。
default
false
# Returns
boolean
• set
isKinematic(v
): void
是否为运动学(Kinematic) 刚体。 设置为运动学刚体后,除非手动调用movePosition,否则物体不会在物理模拟阶段发生位移或旋转。可以理解为,刚体的行为完全在用户的控制之下。
# Parameters
Name | Type |
---|---|
v | boolean |
# Returns
void
# linearDamping
• get
linearDamping(): number
线性阻尼。 影响物体的线性速度。
limit
linearDamping >= 0
default
0
# Returns
number
• set
linearDamping(v
): void
线性阻尼。 影响物体的线性速度。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# mass
• get
mass(): number
刚体的质量。
limit
mass > 0
default
1
# Returns
number
• set
mass(v
): void
刚体的质量。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# maxAngularVelocity
• get
maxAngularVelocity(): number
最大角速度(弧度)。
default
7
# Returns
number
• set
maxAngularVelocity(v
): void
最大角速度(弧度)。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# maxDepenetrationVelocity
• get
maxDepenetrationVelocity(): number
最大分离速度。 物理模拟解决碰撞(相交)的过程中,最大能允许的分离速度。
default
Infinity
# Returns
number
• set
maxDepenetrationVelocity(v
): void
最大分离速度。 物理模拟解决碰撞(相交)的过程中,最大能允许的分离速度。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# position
• get
position(): Vector3
直接获取或修改刚体在物理系统中的位置。 物理系统中的位置是独立于Transform组件的。
*如果你不清楚修改这一项的后果,请不要手动修改它。修改Transform.position来代替。
# Returns
• set
position(v
): void
直接获取或修改刚体在物理系统中的位置。 物理系统中的位置是独立于Transform组件的。
*如果你不清楚修改这一项的后果,请不要手动修改它。修改Transform.position来代替。
# Parameters
Name | Type |
---|---|
v | Vector3 |
# Returns
void
# positionConstraints
• get
positionConstraints(): boolean
[]
限制物体的位移(X轴,Y轴,Z轴)。
default
[false, false, false]
# Returns
boolean
[]
• set
positionConstraints(v
): void
限制物体的位移(X轴,Y轴,Z轴)。
# Parameters
Name | Type |
---|---|
v | boolean [] |
# Returns
void
# rotation
• get
rotation(): Quaternion
直接获取或修改刚体在物理系统中的旋转(以四元数表示)。 物理系统中的旋转是独立于节点系统中的Transform的,详见{@link //TODO}。
*如果你不清楚修改这一项的后果,请不要手动修改它。修改{@link Transform3D.euler}或{@link Transform3D.quaternion}来代替。
# Returns
• set
rotation(v
): void
直接获取或修改刚体在物理系统中的旋转(以四元数表示)。 物理系统中的旋转是独立于节点系统中的Transform的,详见{@link //TODO}。
*如果你不清楚修改这一项的后果,请不要手动修改它。修改{@link Transform3D.euler}或{@link Transform3D.quaternion}来代替。
# Parameters
Name | Type |
---|---|
v | Quaternion |
# Returns
void
# rotationConstraints
• get
rotationConstraints(): boolean
[]
限制物体的旋转(X轴,Y轴,Z轴)。
default
[false, false, false]
# Returns
boolean
[]
• set
rotationConstraints(v
): void
限制物体的旋转(X轴,Y轴,Z轴)。
# Parameters
Name | Type |
---|---|
v | boolean [] |
# Returns
void
# scene
• get
scene(): Scene
当前场景。
# Returns
# sleepThreshold
• get
sleepThreshold(): number
设置刚体进入休眠的动能阈值。
default
0.005
# Returns
number
• set
sleepThreshold(v
): void
设置刚体进入休眠的动能阈值。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# solverIterations
• get
solverIterations(): number
设置物理模拟过程中解决碰撞的迭代次数。 更高的迭代次数,会消耗更多性能,产生更自然的物理碰撞效果。 如果发现静息状态的刚体(比如说放在地面上),会发生抖动,可以考虑提高这项数值。
limit
solverIterations > 0
default
6
# Returns
number
• set
solverIterations(v
): void
设置物理模拟过程中解决碰撞的迭代次数。 更高的迭代次数,会消耗更多性能,产生更自然的物理碰撞效果。 如果发现静息状态的刚体(比如说放在地面上),会发生抖动,可以考虑提高这项数值。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# solverVelocityIterations
• get
solverVelocityIterations(): number
设置物理模拟过程中计算碰撞后速度的迭代次数。 更高的迭代次数,会消耗更多性能,产生更准确的分离速度。
limit
solverVelocityIterations > 0
default
1
# Returns
number
• set
solverVelocityIterations(v
): void
设置物理模拟过程中计算碰撞后速度的迭代次数。 更高的迭代次数,会消耗更多性能,产生更准确的分离速度。
# Parameters
Name | Type |
---|---|
v | number |
# Returns
void
# useGravity
• get
useGravity(): boolean
刚体是否受重力影响。
default
true
# Returns
boolean
• set
useGravity(v
): void
刚体是否受重力影响。
# Parameters
Name | Type |
---|---|
v | boolean |
# Returns
void
# velocity
• get
velocity(): Vector3
刚体的线性速度。
*修改这一项会造成速度突变,一般情况下可以使用addForce来代替。
# Returns
• set
velocity(v
): void
刚体的线性速度。
*修改这一项会造成速度突变,一般情况下可以使用addForce来代替。
# Parameters
Name | Type |
---|---|
v | Vector3 |
# Returns
void
# version
• get
version(): number
当前版本,每次有数据更新都会增加,可以用作和其他组件合作的依据。
# Returns
number
# Methods
# AddExplosionForce
▸ AddExplosionForce(explosionForce
, explosionPosition
, explosionRadius
, upwardsModifier
, mode
): void
生成一次模拟爆炸的力。 爆炸范围可以视作一个球状物体,如果球体和刚体产生相交,则会在刚体上产生推力。 推力的大小和相交点与球心的距离有关,推力的方向从球心指向相交点,推力作用位于相交点。
视刚体有无附着的轮廓,分为两种情况:
- 无轮廓(或爆炸球心在刚体轮廓内) 相交的判定使用刚体的质心;相交点也取刚体的质心。
- 有轮廓 相交的判定使用刚体的所有轮廓;相交点取轮廓距离球心最近的那一点。
limit
explosionForce > 0
# Parameters
Name | Type | Description |
---|---|---|
explosionForce | number | 爆炸力的大小。 |
explosionPosition | Vector3 | 爆炸球体的球心位置。 |
explosionRadius | number | 爆炸球体的半径。 |
upwardsModifier | number | 使用相对数值来修改推力的作用位置的y坐标。 |
mode | ForceMode | 力的类型。 |
# Returns
void
# AddForceAtPosition
▸ AddForceAtPosition(force
, position
, mode
): void
# Parameters
Name | Type | Description |
---|---|---|
force | Vector3 | 世界坐标下矢量形式的力,作用在position位置上。 |
position | Vector3 | 力的作用位置。 |
mode | ForceMode | 力的类型。 |
# Returns
void
# addForce
▸ addForce(force
, mode
): void
为刚体施加力,会影响刚体的线性速度。
# Parameters
Name | Type | Description |
---|---|---|
force | Vector3 | 世界坐标下矢量形式的力,作用在物体质心上。 |
mode | ForceMode | 力的类型。 |
# Returns
void
# addRelativeForce
▸ addRelativeForce(force
, mode
): void
为刚体施加力,会影响刚体的线性速度。
# Parameters
Name | Type | Description |
---|---|---|
force | Vector3 | 局部坐标下矢量形式的力,作用在物体质心上。 |
mode | ForceMode | 力的类型。 |
# Returns
void
# addRelativeTorque
▸ addRelativeTorque(torque
, mode
): void
为刚体施加力矩,会影响刚体的角速度。
# Parameters
Name | Type | Description |
---|---|---|
torque | Vector3 | 局部坐标下矢量形式的力矩。 |
mode | ForceMode | 力矩的类型。 |
# Returns
void
# addTorque
▸ addTorque(torque
, mode
): void
为刚体施加力矩,会影响刚体的角速度。
# Parameters
Name | Type | Description |
---|---|---|
torque | Vector3 | 世界坐标下矢量形式的力矩。 |
mode | ForceMode | 力矩的类型。 |
# Returns
void
# applyData
▸ applyData(data
): void
# Parameters
Name | Type |
---|---|
data | IRigidbodyData |
# Returns
void
# closestPointOnBounds
▸ closestPointOnBounds(position
): Vector3
测试刚体表面上距离某点最近的位置。 如果给予的position在刚体内部,会返回position。 如果刚体无附着的轮廓,会返回[Infinity, Infinity, Infinity]。
# Parameters
Name | Type |
---|---|
position | Vector3 |
# Returns
# disable
▸ disable(): void
# Returns
void
# enable
▸ enable(): void
# Returns
void
# getData
▸ getData<T
>(key
): IRigidbodyData
[T
]
获取一个当前值。
# Type parameters
Name | Type |
---|---|
T | extends keyof IRigidbodyData |
# Parameters
Name | Type |
---|---|
key | T |
# Returns
# Inherited from
# getPointVelocity
▸ getPointVelocity(worldPoint
): Vector3
获取刚体内某一点在世界坐标下的速度。
# Parameters
Name | Type | Description |
---|---|---|
worldPoint | Vector3 | 世界坐标下的位置(其实在刚体外也可以)。 |
# Returns
# getRelativePointVelocity
▸ getRelativePointVelocity(relativePoint
): Vector3
获取刚体内某一点在局部坐标下的速度。
# Parameters
Name | Type | Description |
---|---|---|
relativePoint | Vector3 | 局部坐标下的位置(其实在刚体外也可以)。 |
# Returns
# getWorldCenterOfMass
▸ getWorldCenterOfMass(): Vector3
# Returns
刚体质心在世界坐标中的位置。
# isSleeping
▸ isSleeping(): boolean
see
sleep
# Returns
boolean
刚体是否处于休眠状态。
# movePosition
▸ movePosition(position
): void
对于非运动学刚体来说,等于直接修改position; 对于运动学刚体来说,位置变化会在下一帧生效。可以视作物体在这一帧的物理模拟中沿直线路径移动到了目的地。
see
isKinematic
# Parameters
Name | Type | Description |
---|---|---|
position | Vector3 | 位移的终点 |
# Returns
void
# moveRotation
▸ moveRotation(rotation
): void
unimplemented
暂未支持,请使用rotation属性或{@link Transform3D.quaternion}代替。
# Parameters
Name | Type |
---|---|
rotation | Quaternion |
# Returns
void
# resetCenterOfMass
▸ resetCenterOfMass(): void
手动触发,根据刚体附着的轮廓重新计算刚体的质心。
see
centerOfMass
# Returns
void
# resetInertiaTensor
▸ resetInertiaTensor(): void
手动触发,根据刚体附着的轮廓重新计算刚体的转动惯量。
see
inertiaTensor
# Returns
void
# setData
▸ setData(data
): void
不通过xml
而是直接设置data
,注意值的类型需要和schema
中一致。
# Parameters
Name | Type |
---|---|
data | Partial <IRigidbodyData > |
# Returns
void
# Inherited from
# setDataOne
▸ setDataOne<T
>(key
, value
): void
设置一个数据。
# Type parameters
Name | Type |
---|---|
T | extends keyof IRigidbodyData |
# Parameters
Name | Type |
---|---|
key | T |
value | IRigidbodyData [T ] |
# Returns
void
# Inherited from
# setDensity
▸ setDensity(density
): void
根据给定的密度和刚体附着的轮廓,来计算刚体的质量。
see
mass
# Parameters
Name | Type |
---|---|
density | number |
# Returns
void
# sleep
▸ sleep(): void
强迫刚体进入休眠状态(至少一帧),休眠状态详见{@link //todo}。 *如果下一帧发生碰撞则会立刻醒来。
# Returns
void
# wakeUp
▸ wakeUp(): void
强制唤醒刚体(离开休眠状态)。
see
sleep
# Returns
void