【发布时间】:2017-12-17 03:29:07
【问题描述】:
【问题讨论】:
标签: c# unity3d unity5 rigid-bodies
【问题讨论】:
标签: c# unity3d unity5 rigid-bodies
对我来说,那颗宝石看起来还不错。如果碰撞速度非常快,碰撞也可以穿过物体。
插值和连续网格检测都提高了物理性能。
我建议您编写 3 行代码,以在对象快速运行时提高物理性能,并在对象运行缓慢时将其切换为正常。您可以每帧进行一次接近测试以检查快速物体(物理速度变量)以了解它们接近的物体,并使快速物体和接近物体的物理特性最大化。
我会使用和你写的一样的,使用刚体速度是完美的,除了:
private void Update ()
{
var vel = rgd.velocity;
speed = vel.sqrMagnitude;//uses 5-20 times less processor power
if (speed >= 4) // it's the same
Magnitude 使用平方根数学,这是处理器上最昂贵的运算之一。作为每帧平方根和除法实例的鹰派是所有高级程序员为简化代码所做的事情。
如果您必须找到不使用物理的物体的速度,那么您必须从每帧的最后一帧位置删除它们的当前位置,以找到它们的速度矢量,这将与刚体相同。使用 posA posB 变量调用最后一帧的速度……即对于没有刚体的对象。
【讨论】:
这是我编写的代码,我在我的对象上使用了它。
bool fast;
Rigidbody rgd;
float speed;
private void Start ()
{
rgd = gameObject.GetComponent<Rigidbody>();
}
private void Update ()
{
var vel = rgd.velocity;
speed = vel.magnitude;
if (speed >= 2)
{
rgd.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
}
else
{
rgd.collisionDetectionMode = CollisionDetectionMode.Discrete;
}
}
【讨论】: