UnityAPI.Rigidbody刚体 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
UnityAPI_Rigidbody_V01_1.0 |
严立钻 |
|
2018.08.17 |
|
|
|
|
|
|
#《UnityAPI.Rigidbody刚体》发布说明:
++++“UnityAPI.Rigidbody刚体”是对UnityAPI中Rigidbody类的剖析和拓展;
#Rigidbody刚体 |
#Rigidbody刚体
++++A、Description描述
++++B、Variables变量
++++C、Public Function共有变量
++++D、Message消息
#A、Description描述 |
++A、Description描述
++++A.1、通过物理模拟控制一个物体的位置;
++++A.2、添加Rigidbody组件到一个对象,这就置于了Unity的物理引擎下使其运动;
--即使没有添加任何代码,刚体对象也将在重力的影响下下落,如果带有碰撞器的对象与之碰撞,并将作出反应;
++++A.3、从脚本添加力到刚体对象上,以真实的物理方法来控制它;
--例如,轿车的行为可以给轮胎施加力,物理引擎处理的运动的其他方面,因此,会有更真实的加速度和正确的碰撞反应;
++++A.4、在脚本,FixedUpdate函数中被推荐放置应用力以及修改刚体设置(相对于Update,应用其他大部分更新任务);
--物理更新的时间间隔与Update是不一致的,在每个物理更新之前,FixedUpdate被立即调用,所以所做的任何改变会直接处理;
++++A.5、当刚体运行开始常见的问题是:游戏物理引擎看上去运行像“慢镜头”;
--这实际上由于模型的大小,默认重力设置假定为每世界单位1米距离;
--对非物理游戏,模型缩放100单位也没有多大差别,但当使用物理引擎,它们将被视为非常大的对象;
--如果应该是小物体使用较大的缩放,它们将出现下落很慢,物理引擎认为它是非常大的对象,下落较大的距离;
--考虑到这一点,请确保对象接近真实生活的大小(例如,轿车应该是大约4单位=4米);
#B、Variables变量 |
++B、Variables变量
++++B.1、angularDrag 刚体的角阻力
++++B.2、angularVelocity 刚体的角速度向量
++++B.3、centerOfMass 相对于变换原点的质心
++++B.4、collisionDetectionMode 刚体的碰撞检测模式
++++B.5、constrains 控制该刚体模拟允许的自由度
++++B.6、detectCollisions 碰撞检测是否启用
++++B.7、drag 刚体的阻力
++++B.8、freezeRotation 控制物理是否改变物体的旋转
++++B.9、inertiaTensor 相对于重心的质量的惯性张量对角线
++++B.10、inertiaTensorRotation 惯性张量的旋转
++++B.11、interpolation 插值允许以固定的帧率平滑物理运行效果
++++B.12、isKinematic 控制物理是否能够影响这个刚体
++++B.13、mass 刚体的质量
++++B.14、maxAngularVelocity 刚体的最大角速度
++++B.14、maxDepenetrationVelocity 当非穿透状态时刚体的最大速度
++++B.15、position 该刚体的位置
++++B.16、rotation 刚体的旋转角度
++++B.17、sleepThreshold 哪个对象开始进入休眠状态的质量归一化的能量阀值
++++B.18、solverIterationCount 允许覆盖每个刚体的求解迭代次数
++++B.19、useConeFriction 用于该刚体的锥型摩擦力
++++B.20、useGravity 控制重力是否影响整个刚体
++++B.21、velocity 刚体的速度向量
++++B.22、worldCenterOfMess 在世界坐标空间的刚体的质量中心
##B.1、angularDrag 刚体的角阻力 |
++B.1、angularDrag 刚体的角阻力
++++立钻哥哥:Rigidbody.angularDrag 角阻力;
public float angularDarg; |
++Description描述
++++立钻哥哥:刚体的角阻力;
++++角阻力可用来减缓刚体的旋转。(阻力越高旋转越慢)
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void Update(){ if(Input.GetKeyDown(“space”)){ rb.angularDrag = 0.8F; }else{ rb.angularDrag = 0; } }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.2、angularVelocity 刚体的角速度向量 |
++B.2、angularVelocity 刚体的角速度向量
++++立钻哥哥:Rigidbody.angularVelocity 角速度;
public Vector3 angularVelocity; |
++Description描述
++++立钻哥哥:刚体的角速度向量;
++++在大多数情况下,不应该直接修改它,因为这会导致不真实的行为;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Material fastWheelMaterial; public Material slowWheelMaterial; public Rigidbody rb; public MeshRenderer rend;
void Start(){ rb = GetComponent<Rigidbody>(); rend = GetComponent<MeshRenderer>(); }
void Update(){ if(rb.angularVelocity.magnitude < 5){ rend.sharedMaterial = slowWheelMaterial; }else{ rend.sharedMaterial = fastWheelMaterial; } }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.3、centerOfMass 相对于变换原点的质心 |
++B.3、centerOfMass 相对于变换原点的质心
++++立钻哥哥:Rigidbody.centerOfMass 质量中心;
public Vector3 centerOfMass; |
++Description描述
++++立钻哥哥:相对于变换原点的质心;
++++如果不从脚本设置质心,那么会从附加到该刚体的所有碰撞器自动计算。(自定义质心之后,它将不再自动重新计算修改,如添加或移除碰撞器、移动、缩放等。)(要恢复到自动计算质心,使用Rigidbody.ResetCenterOfMass)
++++当模拟车辆使其更稳当,设置质心通常很有用。(车轮较低的质心更不容易翻车)
++++注意:centerOfMass是相对于变换的位置和旋转,但是不会受到缩放的影响;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Vector3 com; public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); rb.centerOfMass = com; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.4、collisionDetectionMode 刚体的碰撞检测模式 |
++B.4、collisionDetectionMode 刚体的碰撞检测模式
++++立钻哥哥:Rigidbody.collisionDetectionMode 碰撞检测模式;
public CollisionDetectionMode collisionDectectionMode; |
++Description描述
++++立钻哥哥:刚体的碰撞检测模式;
++++使用这个设置刚体的连续碰撞检测,用来防止快速移动的物体,从没有碰撞检测的其他物体穿过,为了获得最佳效果,为快速移动的物体设置该值为CollisionDetectionMode.ContinuousDynamic,以及为其他需与之碰撞的物体设置这个值为CollisionDetectionMode.Continuous。(该值对物理性能有很大影响,假如快速物体的碰撞没有任何问题,那么该值设置为CollisionDetectionMode.Discrete)(连续碰撞检测只支持刚体的球体、胶囊或盒碰撞器)
namespace UnityEngine{ public enum CollisionDetectionMode{ Discrete, Continuous, ContinuousDynamic } //立钻哥哥:public enum CollisionDetectionMode{}
} //立钻哥哥:namespace UnityEngine{} |
##B.5、constrains 控制该刚体模拟允许的自由度 |
++B.5、constrains 控制该刚体模拟允许的自由度
++++立钻哥哥:Rigidbody.constraints 约束;
public RigidbodyConstrains constraints; |
++Description描述
++++立钻哥哥:控制该刚体模拟允许的自由度;
++++默认设置是RigidbodyConstraints.None,允许沿所有轴自由旋转和移动。(在某些情况下,想约束一个刚体仅沿某个轴移动和旋转,例如2D游戏开发。)(可以用“逐位”运算符来结合多个约束)
++++注意:约束是应用于刚体的局部坐标空间;
namespace UnityEngine{ public enum RigidbodyConstraints{ None, FreezePositionX = 2, FreezePositionY = 4, FreezePositionZ = 8, FreezeRotationX = 16, FreezeRotationY = 32, FreezeRotationZ = 64, FreezePosition = 14, FreezeRotation = 112, FreezeAll = 126 } //立钻哥哥:public enum RigidbodyConstraints{}
} //立钻哥哥:namespace UnityEngine{} |
##B.6、detectCollisions 碰撞检测是否启用 |
++B.6、detectCollisions 碰撞检测是否启用
++++立钻哥哥:Rigidbody.detectCollisions 检测碰撞;
public bool detectCollisions; |
++Description描述
++++立钻哥哥:碰撞检测是否启用?(默认总是启用的)
++++当一个布娃娃,它被设置为运动学并且向避免刚体上大量的碰撞检测计算时,禁用碰撞检测是很有用的。(detectCollisions是非序列化的,也就是说:它不会显示在检视面板中并且当在场景中实例化或保存它时,它将不被保存)
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void EnableRagdoll(){ rb.isKinematic = false; rb.detectCollisions = true; }
void DisableRagdoll(){ rb.isKinematic = true; rb.detectCollisions = false; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.7、drag 刚体的阻力 |
++B.7、drag 刚体的阻力
++++立钻哥哥:Rigidbody.drag 阻力;
public float drag; |
++Description描述
++++立钻哥哥:刚体的阻力;
++++阻力可用来减缓刚体的速度。(阻力越高刚体减慢越快)
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void OpenParachute(){ rb.drag = 20; //立钻哥哥:打开降落伞,阻力变大 }
void Update(){ if(Input.GetButton(“Space”)){ OpenParachute(); } }
} //public class MyRigidbodyClass:MonoBehaviour{} |
##B.8、freezeRotation 控制物理是否改变物体的旋转 |
++B.8、freezeRotation 控制物理是否改变物体的旋转
++++立钻哥哥:Rigidbody.freezeRotation 冻结旋转;
public bool freezeRotation; |
++Description描述
++++立钻哥哥:控制物理是否改变物体的旋转;
++++如果freezeRotation被启用,旋转不会被被物体模拟修改。(这对于创建第一人称射击游戏是很有用的,因为玩家需要使用鼠标完全控制旋转;)
##B.9、inertiaTensor 相对于重心的质量的惯性张量对角线 |
++B.9、inertiaTensor 相对于重心的质量的惯性张量对角线
++++立钻哥哥:Rigidbody.inertiaTensor 惯性张量;
public Vector3 inertiaTensor; |
++Description描述
++++立钻哥哥:相对于重心的质量的惯性张量对角线;
++++惯性张量通过inertiaTensorRotation旋转。(如果在脚本中没有设置惯性张量,它将从附加到刚体的所有碰撞器自动计算。)
++++转动惯量是表征刚体转动惯性大小的物理量,它与刚体的质量、质量相对于转轴的分布有关;
++++说明:质量并不能完善地描述所有情况下惯性的大小,只有在特定情况下(物体做低速平移),才可以作为惯性的量度;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBeahaviour{ public Vector3 tensor; public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); rb.inertiaTensor = tensor; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.10、inertiaTensorRotation 惯性张量的旋转 |
++B.10、inertiaTensorRotation 惯性张量的旋转
++++立钻哥哥:Rigidbody.inertiaTensorRotation 惯性张量旋转;
public Quaternion inertiaTensorRotation; |
++Description描述
++++立钻哥哥:惯性张量的旋转;
++++如果在脚本中没有设置惯性张量的旋转,它将从附加到刚体的所有碰撞器自动计算;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ void ResetTensor(){ GetComponent<Rigidbody>().inertiaTensorRotation = Quaternion.identity; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.11、interpolation 插值允许以固定的帧率平滑物理运行效果 |
++B.11、interpolation 插值允许以固定的帧率平滑物理运行效果
++++立钻哥哥:Rigidbody.interpolation 插值;
public RigidbodyInterpolation interpolation; |
++Description描述
++++立钻哥哥:插值允许以固定的帧率平滑物理运行效果;
++++插值默认是关闭的;
--通常刚体插值用于玩家角色;
--物理是不连续(discrete)的时间步运行,而显卡以可变的帧率渲染;
--这可能导致物体抖动,因为物理和显卡不完全同步;
--这个效果是细微的但是通常会在玩家角色上看到,尤其是如果相机跟随主角色;
--建议为主角打开插值,但其他的禁用;
namespace UnityEngine{ public enum RigidbodyInterpolation{ None, Interpolate, Extrapolate } //立钻哥哥:public enum RigidbodyInterpolation{}
} //立钻哥哥:namespace UnityEngine{} |
##B.12、isKinematic 控制物理是否能够影响这个刚体 |
++B.12、isKinematic 控制物理是否能够影响这个刚体
++++立钻哥哥:Rigidbody.isKinematic 是否动力学;
public bool isKinematic; |
++Description描述
++++立钻哥哥:控制物理是否能够影响这个刚体;
++++如果isKinematic启用,力、碰撞或关节将不会影响这个刚体;
--刚体将通过动画或脚本完全控制改变transform.position;
--动力学刚体也会通过碰撞或关节影响其他刚体的运动;
--例如,可以使用关节链接动力学刚体到一个普通的刚体,并且这个刚体将受到动力学刚体运动的约束;
--动力学刚体也被用于制作角色,它们通常是由动画驱动,但是在某些事件可以通过设置isKinematic为false,快速转化为一个布娃娃;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void EnableRagdoll(){ rb.isKinematic = false; rb.detectCollisions = true; }
void DisableRagdoll(){ rb.isKinematic = true; rb.detectCollisions = false; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.13、mass 刚体的质量 |
++B.13、mass 刚体的质量
++++立钻哥哥:Rigidbody.mass 质量;
public float mass; |
++Description描述
++++立钻哥哥:刚体的质量;
++++建议保持质量值在0.1~10之间。(不同的刚体与质量差异较大,可以使物理模拟不稳定)
++++当碰撞时较大质量的物体,推开较小质量的物体更多。(想一想:一个大卡车撞一个小汽车)
++++一个常见的错误是:重的物体比轻的物体下落的快。(这是不正确的,速度依赖于重力和阻力)
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public float mass; public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); rb.mass = mass; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.14、maxAngularVelocity 刚体的最大角速度 |
++B.14、maxAngularVelocity 刚体的最大角速度
++++立钻哥哥:Rigidbody.maxAngularVelocity 最大角速度;
public float maxAngularVelocity; |
++Description描述
++++立钻哥哥:刚体的最大角速度,(默认7),范围:{0, 无穷大};
++++刚体的最大角速度限制为maxAngularVelocity,以避免高速旋转刚体的数值不稳定;
--因为这可能会防止故意快速旋转的物体,例如车轮,可以在每个刚体重写这个值;
--该值可以在【Edit -> Project Settings -> Physics】的检视面板中修改;
##B.14、maxDepenetrationVelocity 当非穿透状态时刚体的最大速度 |
++B.14、maxDepenetrationVelocity 当非穿透状态时刚体的最大速度
++++立钻哥哥:Rigidbody.maxDepenetrationVelocity 最大非穿透速度;
public float maxDepenetrationVelocity; |
++Description描述
++++立钻哥哥:当非穿透状态时,刚体的最大速度;
++++当想以比默认更平滑的方式使刚体脱离碰撞状态时使用该属性;
##B.15、position 该刚体的位置 |
++B.15、position 该刚体的位置
++++立钻哥哥:Rigidbody.position 位置;
public Vector3 position; |
++Description描述:
++++立钻哥哥:该刚体的位置;
++++Rigidbody.positon允许使用物理引擎获取或设置刚体的位置;
--如果使用Rigidbody.position更改刚体的位置,该变换将在下次物理模拟时更新;
--这比更新位置使用Transform.position更快,后者将导致所有附加的碰撞器重新计算相对刚体的位置;
++++如果想连续移动刚体使用MovePosition替代,其考虑了内插值;
using Engine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ void Start(){ GetComponent<Rigidbody>().position = Vector3.zero; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.16、rotation 刚体的旋转角度 |
++B.16、rotation 刚体的旋转角度
++++立钻哥哥:Rigidbody.rotation 旋转角度;
public Quaternion rotation; |
++Description描述
++++立钻哥哥:刚体的旋转角度;
++++Rigidbody.rotation允许使用物理引擎获取或设置刚体的位置;
--如果使用Rigidbody.rotation更改刚体的位置,该变换将在下次物理模拟时更新;
--这比更新位置使用Transform.rotation更快,后者将导致所有附加的碰撞器重新计算相对刚体的位置;
++++如果想连续移动刚体使用MoveRotation替代,其考虑了内插值;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ void Start(){ GetComponent<Rigidbody>().rotation = Quaternion.identity; }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaivour{} |
##B.17、sleepThreshold 哪个对象开始进入休眠状态的质量归一化的能量阀值 |
++B.17、sleepThreshold 哪个对象开始进入休眠状态的质量归一化的能量阀值
++++立钻哥哥:Rigidbody.sleepThreshold 休眠阀值;
public float sleepThreshold; |
++Description描述
++++立钻哥哥:哪个对象开始进入休眠状态,质量归一化的能量阀值;
##B.18、solverIterationCount 允许覆盖每个刚体的求解迭代次数 |
++B.18、solverIterationCount 允许覆盖每个刚体的求解迭代次数
++++立钻哥哥:Rigidbody.solverIterationCount 求解迭代次数;
public int solverIterationCount; |
++Description描述
++++立钻哥哥:允许覆盖每个刚体的求解迭代次数;
++++solverIterationCount确定关节和接触点如何精确地计算;
--如果关节刚体有震荡和行为怪异,为solverIterationCount设置一个较高的值将改善他们的稳定性;
##B.19、useConeFriction 用于该刚体的锥型摩擦力 |
++B.19、useConeFriction 用于该刚体的锥型摩擦力
++++立钻哥哥:Rigidbody.useConeFriction 使用锥型摩擦;
public bool useConeFriction; |
++Description描述
++++立钻哥哥:用于该刚体的锥型摩擦力;
++++这确保所有接触包含的行为将使用锥型摩擦力;
--不过,这对于性能有负面影响;
--默认这个是关闭的,使用更快和更好的被称为金字塔摩擦的近似方法;
--在大多数情况下建议保留这个值为关闭;
##B.20、useGravity 控制重力是否影响整个刚体 |
++B.20、useGravity 控制重力是否影响整个刚体
++++立钻哥哥:Rigidbody.useGravity 使用重力;
public bool useGravity; |
++Description描述
++++立钻哥哥:控制重力是否影响整个刚体;
++++如果设置为false,刚体将不受重力影响;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaiour{ public Collider coll;
void Start(){ coll = GetComponent<Collider>(); coll.isTrigger = true; }
void OnTriggerEnter(Collider other){ if(other.attachedRigidbody){ other.attachedRigidbody.useGravity = false; } }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.21、velocity 刚体的速度向量 |
++B.21、velocity 刚体的速度向量
++++立钻哥哥:Rigidbody.velocity 速度;
public Vector3 velocity; |
++Description描述
++++立钻哥哥:刚体的速度向量;
++++在大多数情况下,不应该直接修改速度,因为这会导致不真实的行为;
--不要设置每对象物理步的速度,这将导致不真实的物理模拟;
--一个典型的例子:当在第一人称射击游戏中当跳跃的时候改变速度,因为想立即改变速度;
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void FixedUpdate(){ if(Input.GetButtonDown(“Jump”)){ rb.velocity = new Vector3(0, 10, 0); } }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##B.22、worldCenterOfMess 在世界坐标空间的刚体的质量中心 |
++B.22、worldCenterOfMess 在世界坐标空间的刚体的质量中心
++++立钻哥哥:Rigidbody.worldCenterOfMess 世界质量中心;
public Vector3 worldCenterOfMass; |
++Description描述
++++立钻哥哥:在世界坐标空间的刚体的质量中心(只读);
#C、Public Function共有变量 |
++C、Public Function共有变量
++++C.1、AddExplosionForce() 应用一个力到刚体来模拟爆炸效果
++++C.2、AddForce() 添加到刚体的力
++++C.3、AddForceAtPosition() 在positon位置应用force力
++++C.4、AddRelativeForce() 添加力到刚体
++++C.5、AddRelativeTorque() 相对于它的局部坐标系统添加扭矩到刚体
++++C.6、AddTorque() 添加扭矩到刚体
++++C.7、ClosestPointOnBounds() 指定位置到刚体添加的碰撞器的最近点
++++C.8、GetPointVelocity() 刚体在世界坐标空间worldPoint点的速度
++++C.9、GetRelativePointVelocity() 相对于刚体在relativePoint点的速度
++++C.10、IsSleeping() 刚体是否休眠
++++C.11、MovePosition() 移动刚体到新位置
++++C.12、MoveRotation() 旋转刚体到新角度
++++C.13、ResetCenterOfMass() 重置刚体的质心
++++C.14、ResetInertiaTensor() 重置惯性张量值和旋转
++++C.15、SetDensity() 设置至于附加的碰撞器假设一个固定的密度质量
++++C.16、Sleep() 强制刚体休眠
++++C.17、SweepTest() 如果一个刚体碰到任何东西触发测试
++++C.18、SweepTestAll() 就像Rigidbod.SweepTest返回所有碰撞信息
++++C.19、WakeUp() 强制一个刚体唤醒
##C.1、AddExplosionForce() 应用一个力到刚体来模拟爆炸效果 |
++C.1、AddExplosionForce() 应用一个力到刚体来模拟爆炸效果
++++立钻哥哥:Rigidbody.AddExplosionForce 添加爆炸力;
public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius, float upwardsModifier = 0.0F, ForceMode mode = ForceMode.Force); |
++++[explosionForce]:爆炸力,可以通过距离来修改;
++++[explosionPosition]:球体的中心;
++++[explosionRadius]:球体的半径,在半径内才有爆炸效果;
++++[upwardsModifier]: 调节爆炸出现的位置,使其看起来像掀起对象;
++++[mode]:用于应用到目标力的方式;
++Description描述
++++立钻哥哥:应用一个力到刚体来模拟爆炸效果;
++++爆炸是一个具有中心点和半径的球体,在世界坐标空间;
--一般情况下,在球体外的任何东西都不会受到爆炸的影响并且力从中心到外按比例减小;
--然而,如果半径为0,那么力完全应用到刚体,而不管距离中心有多远;
++++默认,从爆炸中心到刚体的质量中心力的方向是线性;
--如果upwardsModifier参数传递非0值,该方向将通过减去中心点Y轴的值修改;
--例如,如果upwardsModifier的值为2.0,那么该爆炸出现在实际位置中心点2单位下(如,中心盒影响的半径不会被修改);
--使用这个参数,可以很容易地使爆炸似乎把物体扔到空中,这往往比单纯的外力更具戏剧性的效果;
++++力仅应用于激活的刚体;(如果游戏对象未激活,AddExplosionForce也将无效)
using UnityEngine; using System.Collections;
//Applies an explosion force to all nearby rigidbodies public class MyRigidbodyClass : MonoBehaviour{ public float radius = 5.0F; public float power = 10.0F;
void Start(){ Vector3 explosionPos = transform.position; Collider[] colliders = Physics.OverlapSphere(explosionPos, radius);
foreach(Collider hit in colliders){ Rigidbody rb = hit.GetComponent<Rigidbody>();
if(rb != null){ rb.AddExplosionForce(power, explosionPos, radius, 3.0F); } } }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##C.2、AddForce() 添加到刚体的力 |
++C.2、AddForce() 添加到刚体的力
++++立钻哥哥:Rigidbody.AddForce 添加力;
public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force); public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force); |
++++[force]:世界坐标空间里的向量;
++++[x]:在世界坐标空间x轴力的大小;
++++[y]:在世界坐标空间y轴力的大小;
++++[z]:在世界坐标空间z轴力的大小;
namespace UnityEngine{ public enum ForceMode{ Force, Acceleration = 5; Impulse = 1, VelocityChange } //立钻哥哥:public enum ForceMode{}
} //立钻哥哥:namespace UnityEngine{} |
++Description描述
++++立钻哥哥:添加到刚体的力;
++++力仅应用于激活的刚体;(如果游戏对象未激活,添加力无效果)
++++默认刚体是唤醒的;(如果力的大小为0,那么刚体不被唤醒)
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ pubic float thrust; public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void FixedUpdate(){ rb.AddForce(transform.forward * thrust); }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##C.3、AddForceAtPosition() 在positon位置应用force力 |
++C.3、AddForceAtPosition() 在positon位置应用force力
++++立钻哥哥:Rigidbody.AddForceAtPosition 所在位置添加力;
public void AddForceAtPosition(Vector3 force, Vector3 position, ForceMode mode = ForceMode.Force); |
++++[force]:在世界坐标空间,力的向量;
++++[position]:在世界坐标空间的位置;
++Description描述
++++立钻哥哥:在position位置应用force力。(作为结果这个将在这个物体上应用一个扭矩和力)
++++对于真实的效果,应大约在刚体表面的范围内的位置;
--这个最常用于爆炸,当应用于爆炸时,最好应用力到多帧而不是一帧中;
--注意当position远离刚体的中心时,所应用的力矩会不切实际地大;
++++力仅应用于激活的刚体;(如果游戏对象未激活,AddForceAtPosition无效果)
++++默认刚体是唤醒的;(如果里的大小为0,那么刚体不被唤醒)
using UnityEngine; using System.Collections;
public class MyRigidbodyClass : MonoBehaviour{ void ApplyForce(Rigidbody body){ Vector3 direction = body.transform.position - transform.position; body.AddForceAtPosition(direction.normalized, transform.position); }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##C.4、AddRelativeForce() 添加力到刚体 |
++C.4、AddRelativeForce() 添加力到刚体
++++立钻哥哥:Rigidbody.AddRelativeForce 添加相对力;
public void AddRelativeForce(Vector3 force, ForceMode mode = ForceMode.Force); public void AddRelativeForce(float x, float y, float z, ForceMode mode = ForceMode.Force); |
++++[force]:在局部坐标空间,力的向量;
++++[x]:在局部坐标空间x轴力的大小;
++++[y]:在局部坐标空间y轴力的大小;
++++[z]:在局部坐标空间z轴力的大小;
++Description描述
++++立钻哥哥:添加力到物体;(相对于它的系统坐标)
++++力仅应用于激活的刚体;(如果游戏对象未激活,添加相对力无效果)
++++默认刚体是唤醒的;(如果力的大小为0,那么刚体不被唤醒)
using UnityEngine; using System.Collections;
//Add a thrust force to push an object in its current forward direction(to simulate a rocket motor, say) public class MyRigidbodyClass : MonoBehaviour{ public float thrust; public Rigidbody rb;
void Start(){ rb = GetComponent<Rigidbody>(); }
void FixedUpdate(){ rb.AddRelativeForce(Vector3.forward * thrust); }
} //立钻哥哥:public class MyRigidbodyClass:MonoBehaviour{} |
##C.5、AddRelativeTorque() 相对于它的局部坐标系统添加扭矩到刚体 |
++立钻哥哥推荐的拓展学习链接(Link_Url):
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--