Version: 2022.3

Camera.ScreenToWorldPoint

切换到手册
public Vector3 ScreenToWorldPoint (Vector3 position);
public Vector3 ScreenToWorldPoint (Vector3 position, Camera.MonoOrStereoscopicEye eye);

参数

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