Physics.Raycast
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 35 из 71.
Raycast испускает невидимую линию из точки в заданном направлении и сообщает, столкнулась ли она с коллайдером. Physics.Raycast(origin, direction, maxDistance) возвращает true, если на линии в пределах maxDistance единиц находится коллайдер, и false в противном случае. Этот автомобиль тормозит, если впереди, ближе чем в 2 единицах от его передней части, есть какой-либо объект:
public float brakeDistance = 2f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, brakeDistance))
{
Debug.Log("Brake!");
}
}transform.forward поворачивается вместе с автомобилем, поэтому луч всегда направлен от его передней части; Vector3.forward всегда указывал бы вдоль оси z мира. Луч начинается в центре автомобиля, внутри его собственного коллайдера, а луч никогда не сообщает о коллайдере, внутри которого начинается, поэтому автомобиль не видит сам себя. Если не указать maxDistance, луч будет продолжаться бесконечно: автомобиль тормозил бы из-за стены на другом конце карты.
Лучи обнаруживают коллайдеры, а не то, что нарисовано: объект с Renderer, но без коллайдера для них невидим, а триггерный коллайдер считается столкновением. Во время проверки команда Debug.DrawRay(transform.position, transform.forward * brakeDistance, Color.red) рисует луч в окне Scene в Unity.
Задание
СреднеСделай так, чтобы дверь магазина открывалась, когда кто-то стоит под датчиком.
- В
Update()проверьPhysics.Raycast(transform.position, Vector3.down, reach): луч, направленный строго вниз, длинойreachединиц, который останавливается над землёй. - Если условие истинно, вызови
door.SetActive(false);, а в блокеelse—door.SetActive(true);.
Нажми «Играть» и проведи Посетителя под датчиком: дверь откроется, а затем закроется за ним. Потом нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class DoorSensor : MonoBehaviour
{
public GameObject door;
public float reach = 3f;
void Update()
{
// Открывайте дверь, пока луч, направленный вниз от Sensor, попадает во что-либо.
}
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity