Почему пуля рикошетит с разной скоростью каждый раз, когда касается стены?

#c# #unity3d #game-development #2d-games

#c# #unity3d #разработка игры #2d-игры

Вопрос:

Я делаю игру в Unity 2D, и я хотел, чтобы пуля, которую игрок выпускает из своего пистолета, отскакивала после попадания в стену. Сценарий, который я сделал для пули, таков:

 public float speed = 40f;
public Rigidbody2D rb;

private Vector2 direction;
public void Start()
{
    rb.velocity = transform.right * speed;
}
private void OnCollisionEnter2D(Collision2D collision)
{
    Vector2 inNormal = collision.contacts[0].normal;
    direction = Vector2.Reflect(rb.velocity, inNormal);

    rb.velocity = direction * speed;
}
  

Я поместил на коллайдеры материал по 2D-физике, который имеет трение 1,15 и упругость 0,1, чтобы мяч отскакивал (поскольку раньше он не отскакивал бы без материала), но теперь мяч отскакивает от стены с разной скоростью каждый раз, когда я в него стреляю. Иногда скорость пули настолько высока, что она проходит сквозь стену, и это вообще не предназначено. Вместо этого я хотел, чтобы мяч отскакивал с одинаковой скоростью от стены к стене, но я не знаю, как решить эту проблему. Кто-нибудь может мне помочь?

Ответ №1:

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

Сделайте пулю динамическим телом, если она движется слишком быстро, чтобы обнаружить столкновение, измените «Обнаружение столкновения» в Rigidbody (на стене, но, возможно, и на пуле) с дискретного на непрерывный. И она должна отскакивать. Если угол и скорость всегда одинаковы, результат также всегда будет одинаковым. Я подозреваю, что у вас есть третьи результаты, потому что вы проверяете фактическое столкновение.

Комментарии:

1. Спасибо! я попробовал, как вы сказали, и теперь все работает так, как должно. большое спасибо!