【Unity】入门学习笔记180523——API(13)——Rigidbody类——实例方法

Rigidbody类

模拟GameObject对象在现实世界中的物理特性

对Rigidbody对象属性的赋值代码通常放在脚本的OnFixedUpdate()方法中


B、Rigidbody类实例方法

1、AddExplosionForce

public void AddExplosionForce(float explosionForce, Vetor3 explosionPosition, float explosionRadius);

public void AddExplosionForce(float explosionForce, Vetor3 explosionPosition, float explosionRadius, float upwardModifier);

public void AddExplosionForce(float explosionForce, Vetor3 explosionPosition, float explosionRadius, float upwardModifier, ForceMode mode);

#explosioForce为爆炸点施加的力的大小

#explosionPosition为爆炸点坐标,相对世界坐标系

#explosionRadius为爆炸作用力有效半径

#upwardsModifier为爆炸力作用点在y轴方向上的偏移

#mode为爆炸力的作用模式,默认为ForceMode.Force

此方法用于对刚体添加一个模拟爆炸效果的作用力。

设爆炸力大小为F,爆炸点坐标为E,有效半径为R,y轴的偏移量为y_m,刚体A的坐标为P,A受到的爆炸作用力为A.AddExplosionForce(F,E,R,y_m);

#爆炸力作用在刚体上的力的大小和方向是分开计算的;

爆炸力作用到A的大小为:

FA=(R-|EB|)*F/R,

#当爆炸点E固定时,刚体在某个范围移动时受到的爆炸力的大小可能不变

#当作用力半径R=0,所有接受爆炸点E作用的刚体收到的作用力大小都为F


2、AddForceAtPosition

public void AddForceAtPosition(Vector3 force, Vector3 position);

public void AddForceAtPosition(Vector3 force, Vector3 position, ForceMode mode);

#force为扭矩向量

#position为作用点坐标值

#mode为力的作用方式

此方法用于为参数position点增加一个力force,其参考坐标系为世界坐标系,作用方式为mode,默认值为ForceMode.Force

该方法与AddForce不同之处在于,AddForce方法对刚体施加力时不会产生扭矩使物体发生旋转,而AddForceAtPosition方法是在某个坐标点对刚体施加力,这样很可能会产生扭矩使刚体产生旋转

#当力的作用点在刚体重心时,刚体不发生旋转

#当力的作用点不在刚体重心时,刚体发生旋转,但当作用力的方向晋国刚体的重心坐标时不发生旋转


3、AddTorque

public void AddTorque(Vector3 torque) ;

public void AddTorque(Vector3 torque, ForceMode mode) ;

public void AddTorque(float x, float y, float z);

public void AddTorque(float x, float y, float z, ForceMode mode);

参数torque为扭矩向量,参数mode为力的作用方式

此方法用于给刚体添加一个扭矩torque,扭矩的作用力方式由mode决定,默认为ForceMode.Force


不同形状的刚体及不同的转轴,其转动惯量1的计算方式是不同的。

刚体有最大角速度的限制,默认值为7.0f,可以通过属性maxAngularVelocity更改刚体的最大角速度


4、ClosestPointOnBounds

public Vector3 ClosestPointOnBounds(Vector3 position);

参数position为爆炸点坐标

此方法用于求爆炸点到刚体Colloder表面的作用点,通常用在AddExplosionForce中计算爆炸力的大小

返回值为刚体Collider表面上的某一点,而不是Mesh上的点


5、GetPointVelocity

public Vector3 GetPointVelocity(Vector3 worldPoint);

worldPoint为世界坐标系中的点坐标

此方法用于获取世界坐标系中worldPoint点在刚体局部坐标系中对应位置的速度 

往往是刚体重心的移动速度和点绕刚体重心的角速度


6、GetRelativePointVelocity

public Vector3 GetRelativePointVelocity(Vector3 relativePoint);

参数relativePoint为刚体自身坐标系中的点坐标

此方法用于获取刚体自身坐标系中relativePoint点的速度,速度的计算会受刚体角速度的影响

此方法和GetPointVelocity作用类似,只是GetPointVelocity使用世界坐标系中的坐标来确定位置,而此方法是使用自身坐标系中的坐标来确定位置。

可以将上述两种方法的点理解为刚体子类物体的重心坐标值。


7、MovePosition

public void MovePosition(Vector3 postion);

刚体的位置移动,通常用在刚体失去动力学模拟的情况下,即isKinematic为true时


8、Sleep

public void Sleep();

此方法可使刚体进入休眠状态,且至少休眠一帧


9、SweepTest

public bool SweepTest(Vector3 direction, out RaycastHit hitInfo);

public bool SweepTest(Vector3 direction, out RaycastHit hitInfo, float distance);

参数direction为探测方向,参数distance为有效探测距离,默认为无穷大

此方法用于检测在刚体的direction方向是否有碰撞器对象,且对象的有效探测距离不大于distance

#distance为A物体右表面到B物体左表面的距离,而非它们重心坐标之间的距离

#B物体只要含有Collider组件即可,无需含Rigidbody组件

#direction的方向为A在世界坐标系中的方向

#SweepTest的返回结果只是第一个被探测到的物体


10、SweepTestAll

public RaycastHit[ ] SweepTestAll(Vector3 direction);

public RaycastHit[ ] SweepTestAll(Vector3 direction, float distance);

此方法用于探测刚体的direction方向的distance距离内是否含有碰撞器,并返回所有探测到的物体的RaycastHit

与SweepTest的不同之处在于返回每个探测到的物体的RaycastHit


11、WakeUp

public void WakeUp( )

此方法用于将刚体从休眠状态唤醒,除了调用WakeUp方法外,在发生以下4种情况时,刚体会被自动唤醒

①其他刚体与休眠种的刚体发生了碰撞

②使用关节连接的其他刚体发生了移动

③刚体的属性发生了改变

④给休眠中的刚体施加了一个外力










猜你喜欢

转载自blog.csdn.net/dylan_day/article/details/80414304
今日推荐