Unity中ProjectSettings下的Physics笔记
- Gravity(重力)
- 如何让重力被抵消掉?
- Default Material(对象默认物理材质)
- 什么是Physics Material(物理材质)?
- Bounce Threshold(弹性阈值)
- 简单测试
- Sleep Threshold(休眠阈值)
- Default Contact Offset(默认接触偏移量)
- 简单测试
- 后续待补充
- 结语
先给官方文档中的解释 点我.
这里我是用的Unity2018.3.1f1新建项目来测试。
下面PhysicsManager中各项的默认值
Gravity(重力)
- 使用x、y和z轴设置,应用于所有刚体(Rigidbody)组件的重力加速度。
默认向下掉,所以默认是y轴上的负值,为-9.81。
如何让重力被抵消掉?
最简单的当然是直接把Rigidbody中的UseGravity属性改成false。
那我们这里能不能用Rigidbody中的AddForce给物体一个y轴正方向的大小9.81的力呢?
当然可以。但是要注意使用AddForce()方法的使用。
新建脚本使用如下代码。
void FixedUpdate()
{
//1.直接关闭重力使用
this.GetComponent<Rigidbody>().useGravity = false;
//2.在调用对应对象上的Rigidbody的AddForce方法 ForceMode选择Acceleration,无视质量直接添加一个加速度到对象上
this.GetComponent<Rigidbody>().AddForce(new Vector3(0f, 9.81f, 0f), ForceMode.Acceleration);
//3.在调用对应对象上的Rigidbody的AddForce方法 ForceMode选择Force(默认),在对应力上再乘上质量值
this.GetComponent<Rigidbody>().AddForce(new Vector3(0f, 9.81f * this.GetComponent<Rigidbody>().mass, 0f));
}
Default Material(对象默认物理材质)
- 如果对象上的Collider没有设置物理材质,则默认设置该物理材质。
什么是Physics Material(物理材质)?
官方文档 > 点我
Physics Material用于调整碰撞物体的摩擦和弹跳效应。
以下是Physics Material中的5个属性
属性名 | 说明 |
Dynamic Friction (动态摩擦) | 通常是一个从0到1的值,当已经移动时使用的摩擦力。一个0的值感觉就像冰,一个1的值会使它很快停止,除非有很大的力或重力推动这个物体。 |
Static Friction (静态摩擦) | 通常是一个从0到1的值, 当物体静止在地面上时所使用的摩擦力。一个0的值就像冰,一个1的值会使物体很难移动。 |
Bounciness (弹性值) | 通常是一个从0到1的值,表示表面有多大弹性,0的值不会反弹。1的值会反弹而不会失去任何能量 |
Friction Combine (摩擦结合模式) | 两个碰撞物体的摩擦力是如何结合起来的。1、 Average(平均) 使用两个值的平均值 2、Minimum(最小值) 使用这两个值中最小的值。3、Maximum(最大值) 使用这两个值中最大的值。4、Multiply(相乘) 摩擦力值彼此相乘。 |
Bounce Combine (弹性结合模式) | 两个碰撞物体的弹力是如何结合起来的。它具有与摩擦结合模式相同的参数。 |
注意:当两个物体接触时,根据所选择的模式,对它们施加相同的弹力和摩擦效应。有一个特殊的情况下,两个对撞机在接触有不同的组合模式集。在这种情况下,使用具有最高优先级的函数。优先权顺序如下:平均 < 最小值 < 倍增 < 极大值。例如,如果一种材料平均但另一个极大值,那么要使用的组合函数是极大值,因为它有更高的优先级。
Bounce Threshold(弹性阈值)
- 使用这个设置速度值。如果两个碰撞物体的相对速度低于这个值,它们就不会相互反弹。此值还减少了抖动,因此不建议将其设置为非常低的值。
简单测试
设置红球在x轴正方向速度为2,白球速度方向相反。去除阻力。
当设置Bounce Threshold值为4时,如下图
当设置Bounce Threshold值为4.1时,如下图
Sleep Threshold(休眠阈值)
- 用它来设定一个全局能量阈值,低于这个阈值,一个非运动刚体(即一个不受物理系统控制的刚体)可能会进入休眠状态。当一个刚体在睡觉时,它并不是每一个帧都被更新,从而减少了资源的消耗。如果一个刚体的动能除以其质量低于这个阈值,它就是休眠的候选。
还不太会看Profiler所以测试暂时不写。
Default Contact Offset(默认接触偏移量)
- 使用此设置碰撞检测系统用于生成碰撞接触的距离。该值必须为正,如果设置得太接近于零,则会引起抖动。默认情况下,此值设置为0.01。对撞机只有在距离小于其接触偏移值之和的情况下才会产生碰撞接触。
简单测试
代码
void OnCollisionEnter(Collision col)
{
//当碰到Tag为“Ball”的对象,隐藏本对象
if (col.gameObject.tag == "Ball")
{
this.gameObject.SetActive(false);
}
}
然后把Default Contact Offset调成默认值0.01,如下图
把Default Contact Offset调成1,如下图,途中球的直径是1
后续待补充
结语
萌新第一次写笔记,都是边查边写的,很多机翻的词。有错误的话请大佬及时提出,本萌新必定感激不已。