Мой объект соприкасается с землей, когда я использую 2D raycast для столкновения

#unity3d #raycasting

Вопрос:

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

 public class PlayerMove : MonoBehaviour
{
    Transform _tr;
    [SerializeField]
    float speed = 4;
    [SerializeField]
    float gravity = 9.81f;
    [SerializeField]
    LayerMask mask;
    float xAxe;
    void Awake()
    {
        _tr = GetComponent<Transform>();
    }
    void Update()
    {
       xAxe = Input.GetAxis("Horizontal");
       _tr.position  = Vector3.right * xAxe * speed * Time.deltaTime;
    }
    void FixedUpdate()
    {
        RaycastHit2D hit = Physics2D.Raycast(_tr.position   (Vector3.down / 2), Vector3.down, 0,mask);
        if (hit.collider == null)
        {
            //Continue to fall
            _tr.position  = -Vector3.up * gravity * Time.fixedDeltaTime; //Gravity force
        }
        else
        {
            //STOP!
        }
    } 
}
 

Следуя образу проблемы:

Компенсация с полом

Спасибо всем!

Ответ №1:

Ваша проблема в том, что по мере увеличения скорости ваш объект переходит от пропущенного луча на одном физическом шаге к вашему объекту, пересекающемуся на следующем.

Вы могли бы исправить это, попытавшись реализовать собственное непрерывное обнаружение столкновений

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

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

1. Хорошо, большое вам спасибо за ответ. Моей целью было реализовать систему столкновений без Rigidbody2D.

2. Вам не нужно использовать a rigidbody , чтобы использовать a collider , столкновение объектов действительно сложно, и если вы не делаете что-то действительно обалденное, я бы не рекомендовал пытаться свернуть свой собственный