Unity2D - Rigidbody не останавливается, когда достигает позиции - PullRequest
0 голосов
/ 08 мая 2020

У меня есть этот код:

public class MoveCard : MonoBehaviour
{
public float speed = 1f;
public Rigidbody2D rb;
public Vector2 pos = new Vector2(6.8f,0);
public bool move = false;
void FixedUpdate(){
    if (move){
           //Stops Rigidbody
           if (rb.position == pos){
               move = false;
            }
            rb.transform.position += -rb.transform.right * speed * Time.fixedDeltaTime;      
    }
}
public void CardMovement(){
    move = true;
}
}

У меня он установлен так, что при нажатии кнопки запускается CardMovement (), а в FixedUpdate у меня есть оператор if, который отключает движение, когда Rigidbody достигает определенное положение. Rb движется, но не останавливается, когда достигает Vector2. Я новичок в Unity, поэтому не знаю, можно ли это сделать так.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Ну, ваш Rb не проходит точно для каждой точки между начальной позицией и Vector2. В prtty вряд ли будет rb.position == pos, потому что одного кадра будет недостаточно, а следующего будет слишком много :)

Попробуйте с MoveTowards. Некоторым нравится это:

rb.position = Vector3.MoveTowards(rb.position, pos, speed * Time.fixedDeltaTime);

Вам не нужен оператор, чтобы остановить его, потому что он сделает это, когда достигнет позиции.

PD: вы можете сделать это с помощью transform вместо жесткого тела, если вы не собираетесь использовать физику, и вам нужно только движение.

0 голосов
/ 08 мая 2020

Не сравнивайте 2 значения vector2D следующим образом:

if(rb.position == pos)

Скорее сравнивайте расстояние между ними с очень маленьким значением, например:

if(Vector2.Distance(rb.position,pos) <= 0.01)

Дополнительно , вы можете установить такое положение rb.postion = pos;, если оно достаточно близко для привязки к нужному месту.

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