Объявление
public Vector3 ScreenToWorldPoint(Vector3 position);public Vector3 ScreenToWorldPoint(Vector3 position, Camera.MonoOrStereoscopicEye eye);
Параметры
position | Позиция в пространстве экрана (часто мышь x, y) плюс позиция z для глубины (например, плоскость отсечения камеры). |
eye | По умолчанию Camera.MonoOrStereoscopicEye.Mono. Для использования в стереоскопический рендеринг (например, для виртуальной реальности). |
Возвращает
Vector3 Точка мирового пространства, созданная путем преобразования точки пространства экрана на заданном расстоянии z от плоскости камеры.
Описание
Преобразует точку из экранного пространства в мировое пространство, где мировое пространство определяется как система координат на самом верху иерархии вашей игры.
Координаты в мировом пространстве по-прежнему можно вычислить, даже если они предоставлены как внеэкранные координаты, например, для создания экземпляра внеэкранного объекта рядом с определенным углом экрана.
Пространство экрана определяется в пикселях. Нижний левый угол экрана (0,0); справа вверху — (pixelWidth,pixelHeight). Положение z в мировых единицах от камеры.
// Convert the 2D position of the mouse into a
// 3D position. Display these on the game window.
using UnityEngine;
public class ExampleClass : MonoBehaviour
{
private Camera cam;
void Start()
{
cam = Camera.main;
}
void OnGUI()
{
Vector3 point = new Vector3();
Event currentEvent = Event.current;
Vector2 mousePos = new Vector2();
// Get the mouse position from Event.
// Note that the y position from Event is inverted.
mousePos.x = currentEvent.mousePosition.x;
mousePos.y = cam.pixelHeight - currentEvent.mousePosition.y;
point = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, cam.nearClipPlane));
GUILayout.BeginArea(new Rect(20, 20, 250, 120));
GUILayout.Label("Screen pixels: " + cam.pixelWidth + ":" + cam.pixelHeight);
GUILayout.Label("Mouse position: " + mousePos);
GUILayout.Label("World position: " + point.ToString("F3"));
GUILayout.EndArea();
}
}