如果位置是位置

时间:2018-10-08 19:00:16

标签: c# unity3d

这是我在Unity中的代码,我一直在尝试查看rb的位置是否等于cameraPos位置,但是它不起作用(什么都没发生)

public Rigidbody2D rb;
Vector2 cameraPos;

void Start ()
{
    cameraPos = new Vector2(0f, -3f);
}

if (rb.position == cameraPos)
    {            
        print("Continue");
    }

1 个答案:

答案 0 :(得分:2)

请注意,两个位置可能永远不会完全相等,尤其是在不使用RigidBody的情况下使用PlayerController的情况下,因为移动实际上可能会在帧之间“跳转”。

您当前使用的==运算符实际上使用了近似值,但浮点值的精度仅为1e-50.00001)。这可能会引起一些误会,但这仅表示例如(0.99999, 0.99999, 0.99999) == (1,1,1)。所有其他appart都不匹配。

您应该宁愿使用近似值,例如使用Vector3.Distance检查对象是否小于X米,可以在其中使X现在大于或小于1e-5。在此示例中,如果物体的距离小于10cm,则应该匹配:

public Rigidbody2D rb;
Vector2 cameraPos;

// Set the threshold in meters
public float Threshold = 0.1f;

void Start ()
{
    cameraPos = new Vector2(0f, -3f);
}

if (Vector3.Distance(rb.position, cameraPos) <= Threshold)
{            
    print("Continue");
}

根据您的需要,您可以调整Threshold使其更宽或更精确。


或者,您也可以使用Collisions / Rigidbody.OnCollisionEnter来跟踪某些对象是否“足够靠近” /彼此接触。这种方法的优势在于,您不仅可以知道位置是否靠近,而且还可以知道两个对象的相遇速度。