Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

В разделе Обзор усеченной пирамиды объяснялось, что любая точка в камереКомпонент, который создает изображение определенной точки обзора в вашей сцене. Вывод либо рисуется на экране, либо фиксируется в виде текстуры. Подробнее
See in Словарь
соответствует строке в мировое пространство. Иногда полезно иметь математическое представление этой линии, и Unity может предоставить его в виде объекта Ray. Ray всегда соответствует точке в представлении, поэтому класс Camera предоставляет ScreenPointToRay и ViewportPointToRay. Разница между ними заключается в том, что ScreenPointToRay ожидает, что точка будет предоставлена ​​в виде пикселянаименьшей единицы компьютерного изображения. Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
See in Словарь
, а ViewportPointToRay принимает нормализованные координаты в диапазон 0..1 (где 0 представляет нижний или левый край, а 1 представляет верхний или правый угол обзора). Каждая из этих функций возвращает луч, состоящий из исходной точки и вектора, показывающего направление линии от этой исходной точки. Луч исходит из ближней плоскости отсеченияплоскости, которая ограничивает, насколько далеко или близко камера может видеть из своего текущего положения. Диапазон обзора камеры находится между дальней и ближней плоскостями отсечения. См. дальнюю плоскость отсечения и ближнюю плоскость отсечения. Подробнее
См. в Словарь
, а не в точке transform.position камеры.

Рейкастинг

Самое распространенное использование луча от камеры — это выполнение raycast в sceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
. Raycast посылает воображаемый «лазерный луч» вдоль луча от его источника до тех пор, пока он не столкнется с коллайдеромневидимой формой, которая используется для обрабатывать физические столкновения для объекта. Коллайдер не обязательно должен быть точно такой же формы, как сетка объекта — грубое приближение часто бывает более эффективным и неразличимым в игровом процессе. Подробнее
См. в Словарь
в сцене. Затем возвращается информация об объекте и точке, в которую попал объект RaycastHit. Это очень удобный способ найти объект на основе его изображения на экране. Например, объект в позиции мыши можно определить с помощью следующего кода:

using UnityEngine; using System.Collections; public class ExampleScript : MonoBehaviour { public Camera camera; void Start(){ RaycastHit hit; Ray ray = camera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { Transform objectHit = hit.transform; // Do something with the object that was hit by the raycast. } } }

Перемещение камеры по лучу

Иногда бывает полезно получить луч, соответствующий положению экрана, а затем перемещать камеру вдоль этого луча. Например, вы можете разрешить пользователю выбирать объект с помощью мыши, а затем увеличивать его, оставляя его «закрепленным» в той же позиции на экране под мышью (это может быть полезно, когда камера смотрит на тактический объект). карту, например). Код для этого довольно прост:

using UnityEngine; using System.Collections; public class ExampleScript : MonoBehaviour { public bool zooming; public float zoomSpeed; public Camera camera; void Update() { if (zooming) { Ray ray = camera.ScreenPointToRay(Input.mousePosition); float zoomDistance = zoomSpeed * Input.GetAxis("Vertical") * Time.deltaTime; camera.transform.Translate(ray.direction * zoomDistance, Space.World); } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3