#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. Спасибо! я попробовал, как вы сказали, и теперь все работает так, как должно. большое спасибо!