#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, и, поскольку вы знаете, что попали в этот данный кадр, вы можете легко проверить, в какую часть коллайдера вы попали.