Как исправить неточность пули Unity 3D raycast

#unity3d

#unity3d

Вопрос:

Я внедряю механику стрельбы в игру. Поскольку физика пули проверяется, игра стреляет с помощью raycasts. Однако, если вы стреляете выше или ниже цели, она все равно регистрирует попадание (текущее обнаружение попадания, похоже, заботится только о точности по горизонтали), каково решение? Вот текущий код RaycastHit hit; if (Physics.Raycast(bulletSpawner.transform.position, bulletSpawner.transform.forward, out hit, range)) { RecieveDamage target = hit.transform.GetComponent<RecieveDamage>(); //Recieve damage is a seperate script if (target != null) { target.TakeDamage(damage); } }

Ответ №1:

Код в порядке. Либо bulletSpawner на самом деле не соответствует вашей цели, либо ReceiveDamage коллайдер больше, чем вы думаете. Посмотрите на них в инспекторе при съемке.

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

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

Ответ №2:

Поскольку ваш код выглядит нормально, для целей отладки я бы предложил вам использовать Gizmos или функции отладки, например:

     /// <summary>
    ///   <para>Draws a line from start to start   dir in world coordinates.</para>
    /// </summary>
    /// <param name="start">Point in world space where the ray should start.</param>
    /// <param name="dir">Direction and length of the ray.</param>
    /// <param name="color">Color of the drawn line.</param>
    /// <param name="duration">How long the line will be visible for (in seconds).</param>
    Debug.DrawRay(rayStart, rayDir, Color.red, float.PositiveInfinity);
 

И при нажатии приостановите игру с помощью Debug.Break()

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