在更新循环之外的Unity3D中使用transform.Translate时,如何执行冲突检测?

时间:2015-04-22 01:44:26

标签: c# unity3d rigid-bodies

所以我正在写一个小型多人游戏。为此,我正在为玩家使用基本的立方体对撞机。目前,设置为isKinematic。

每个玩家都从主循环移动,使用偏移计时器来计算滞后/延迟。这很好用。但是,使用这种方法,碰撞是一个问题。 如果我可以避免使用Force,我不想使用Force - 以前的尝试证明这是一个大问题。 transform.Translate()看起来效果最好,但它没有考虑任何击中网格的东西。 isKinematic禁用OnCollisionEnter。我很想使用rigidbody.velocity,但它需要考虑轮换,而不是四向运动。

这是我目前的刻度代码:

public void FixedStep(double T)
{
    if (Last == 0.0) Last = T;

    double Offset = System.Math.Min(T - Last, 5000);

    for (double X = 0.0; X < Offset; X++)
    {
        transform.Translate(Vector3.up * Speed * -mInput.y * Time.deltaTime);
        //mRigidBody.velocity = (Vector3.forward * Speed * mInput.y);
        transform.Rotate(Vector3.forward * TurnSpeed * mInput.x * Time.deltaTime);

    }

    Last = T;
}

我记得曾经有过一些教程,它们结合了rigidbody.velocity的向前移动和旋转,但对于我的生活,我找不到它们。有没有人对这种方法的碰撞提出建议?

1 个答案:

答案 0 :(得分:0)

好的,我觉得很蠢。它已经足够长了,因为我已经完成了某种传统游戏,我完全忘记了使用rigidbody.velocity的正确方法。

mRigidBody.velocity = transform.forward * Speed * -mInput.y;