1. Mass(质量)
一般来说,大部分物体的Mass属性值接近0.1才符合日常生活的感官感受。
2. Drag(平移阻力)
3. Angular Drag(旋转阻力)
4. Use Gravity(使用重力)
5. Is Kinematic(遵循运动学)
如果该属性被置为true,本物体的运动状态将不受外力、碰撞和关节的影响,而只受到动画以及附加在物体上的脚本影响。虽然当该属性被置为true时物体
将不受物理定律的约束,但是该物体还是会影响其他的物体,改变其他物体的运动状态。
6. Interpolate(插值)
在插值模式下物理引擎会在物体的运动帧之间进行插值,使得运动更加自然。但是插值会导致物理模拟和渲染的不同步,进而产生物体轻微抖动现象。建议在开发中,对主要角色使用插值,而其他的则禁用此功能,以达到折中效果。
7. Freeze Rotation(冻结旋转)
8. Collision Detection(碰撞检测模式)
在没有碰撞检测的情况下,碰撞物体会穿过对方,产生所谓的“穿透”现象。
Discrete:离散碰撞检测,适合低速运动的物体,高速运动的物体会出现穿透现象。适合对碰撞精度没要求的场景。
Continuous:扫描碰撞检测,适合高速运动的物体。适合对碰撞精度要求一般的场景。
Continuous Speculative:推测碰撞检测,精度比Discrete高,比Continuous低,适合对碰撞精度要求低的场景。
Continuous Dynamic:连续动力学碰撞检测,适用于高速运动的物体。适合对碰撞精度要求很高的场景。
所以大部分的物体采用Discrete作为碰撞检测模式。
示例: 爆炸力
using UnityEngine;
/// <summary>
/// 爆炸测试
/// </summary>
public class ExplosionForce : MonoBehaviour
{
void Start()
{
//3秒后引爆
Invoke("DoExplosion", 3);
}
//引爆
private void DoExplosion()
{
//爆炸范围
float radius = 5;
//找到爆炸范围内的所有带Collider的物体
Collider[] colliders = Physics.OverlapSphere(transform.position, radius);
foreach(Collider collider in colliders)
{
//排除地面,不希望把地面也炸飞
if (collider.name.Equals("Terrain"))
continue;
Rigidbody rigidbody = collider.GetComponent<Rigidbody>();
//添加爆炸力
rigidbody.AddExplosionForce(500f, transform.position, radius);
}
}
}