Мертвые зоны на траектории пули - unity 2d - PullRequest
0 голосов

Я делаю маленький шутер на двоих, стрелять может каждый. Проблема в том, что когда пуля летит с большой скоростью, то на ее траектории есть определенные зоны, в которых она не касается объекта, и соответственно OnTriggerEnter2d там не работает. Вот сценарий полета пули:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet: MonoBehaviour
{
    Rigidbody2d rb;
    public int Player;
    public float speed = 0.4f;
    public Vector3 mode; // Direction of the bullet (Vector3.left, right)
    // Start is called before the first frame update
    void Start ()
    {
        rb = gameObject.GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void FixedUpdate ()
    {
        rb.velocity = mode * speed;
    }
}
 

1 Ответ

0 голосов
/ 21 июня 2020

Физика высоких скоростей - всегда крепкий орешек. Как упоминает Игги, вы можете / должны использовать непрерывное обнаружение столкновений.

Если у вас все еще есть проблемы, и вы все еще хотите быстрые снаряды, становится сложнее. Вот несколько вариантов.

Вы можете уменьшить временной шаг физики в настройках времени (очень дорого, не рекомендуется, но вы можете проверить).

Вы можете динамически увеличивать коллайдеры пули. (Может быть самым простым решением). Когда вы создаете пули, рассчитывайте на основе их скорости, какой длины должен быть коллайдер коробки, и динамически размещайте его позади пули, как след (убедитесь, что пуля продвинулась вперед достаточно, чтобы полностью расшириться, чтобы вы не попали в предметы позади игрока. ). Размер коллайдера коробки должен быть таким же, как расстояние, на которое он перемещается за каждый кадр. Таким образом, после перемещения тонны в кадре все позиции, в которых находилась пуля в кадре, вызовут столкновение на коллайдере бокса. Для удара пули и sfx они не порождаются там, где находится пуля, а в точке контакта.

Вы можете рассчитать, должно ли произошло столкновение. (После обновления физики проверьте за снарядом как с raycast).

Вы можете сделать свою физику или гибрид. Unity позволяет моделировать физику в любое время вручную вместо обычного обновления физики. Имея больший контроль над этим, вы можете добавить больше вычислений для быстро движущегося объекта.

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