RaycastHit
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 36 из 71.
Physics.Raycast также может сообщить, во что попал луч. Добавь out RaycastHit hit после направления: когда метод возвращает true, он записывает подробности в hit. С помощью out метод C# возвращает дополнительное значение через переданную ему переменную. Этот дальномер выводит в журнал объект, на который он направлен, и расстояние до него, когда ты нажимаешь пробел:
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (Physics.Raycast(transform.position, transform.forward, out RaycastHit hit, 50f))
{
Debug.Log(hit.collider.name + " is " + hit.distance + " units away");
}
}
}Если направить луч на стену, передняя сторона которой находится в 12 единицах, он выведет в журнал Wall is 12 units away. Другие поля: hit.point — точка в мире, где луч коснулся поверхности; hit.normal — направление, в котором обращена поверхность в этой точке ((0, 1, 0) на ровной земле); hit.transform — Transform объекта, в который попал луч. Через hit.collider.gameObject можно получить доступ ко всему остальному, что связано с объектом, например к его тегу.
Читай hit только внутри if. Если луч ни во что не попадает, Raycast возвращает false, а hit не содержит ничего полезного: его collider равен null.
Задание
СреднеДобавь к оружию лазерный прицел: красную точку там, куда попадает лазер.
- В
Update()выполни проверку с помощьюPhysics.Raycast(transform.position, transform.forward, out RaycastHit hit, range). - При попадании вызови
dot.gameObject.SetActive(true);и установиdot.position = hit.point;. - При промахе вызови
dot.gameObject.SetActive(false);.
Нажми «Играть» и поверни оружие: точка будет скользить по стене и ящикам. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class LaserSight : MonoBehaviour
{
public Transform dot;
public float range = 15f;
void Update()
{
// Разместите dot в точке, где лазер пересекает поверхность; скройте его, если лазер ни во что не попадает.
}
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity