position | 屏幕空间位置(通常为 mouse x, y),加上表示深度的 z 位置(例如,摄像机裁剪面)。 |
eye | 默认为 Camera.MonoOrStereoscopicEye.Mono。可设置为 Camera.MonoOrStereoscopicEye.Left 或 Camera.MonoOrStereoscopicEye.Right,以用于立体渲染(例如,用于 VR)。 |
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(); } }