Обратите внимание, что две позиции никогда не могут быть абсолютно одинаковыми, особенно если использовать RigidBody
без PlayerController
, потому что движения могут фактически "прыгать" между кадрами.
==
Оператор, который вы используете в настоящее время, фактически использует приближение, но только с точностью 1e-5
(0.00001
) от значений с плавающей точкой.Это может привести к небольшому недопониманию, но это означает, что, например, (0.99999, 0.99999, 0.99999) == (1,1,1)
.Больше ничего не будет соответствовать аппарте.
Вместо этого вы должны использовать аппроксимацию, например, используя Vector3.Distance для проверки, если объекты меньше X метров аппартамента, где вы можете сделать X большеили также меньше, чем 1e-5.В этом примере он должен совпадать, если объекты находятся ближе 10 см:
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
на более широкий или точный.
В качестве альтернативы вы также можете использовать Столкновения / Rigidbody.OnCollisionEnter
для отслеживания, если определенные объекты находятся "достаточно близко" / касаясь друг друга.Преимущество этого подхода заключается в том, что вы не только знаете, близки ли позиции, но и с какой скоростью встречались оба объекта.