Если позиция это позиция - PullRequest
       0

Если позиция это позиция

0 голосов
/ 08 октября 2018

это мой код в Unity, я пытался увидеть, равна ли позиция rb позиции cameraPos, но она не работает (ничего не происходит)

public Rigidbody2D rb;
Vector2 cameraPos;

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

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

1 Ответ

0 голосов
/ 09 октября 2018

Обратите внимание, что две позиции никогда не могут быть абсолютно одинаковыми, особенно если использовать 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 для отслеживания, если определенные объекты находятся "достаточно близко" / касаясь друг друга.Преимущество этого подхода заключается в том, что вы не только знаете, близки ли позиции, но и с какой скоростью встречались оба объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...