版本: Unity 6 (6000.0)
语言英语
  • C#

Camera.ScreenToWorldPoint

建议修改

成功!

感谢您帮助我们改进 Unity 文档的质量。尽管我们无法接受所有提交的内容,但我们会阅读用户提出的每一项更改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们改进 Unity 文档的质量。

关闭

取消

切换到手册

声明

public Vector3 ScreenToWorldPoint(Vector3 position);

声明

public Vector3 ScreenToWorldPoint(Vector3 position, Camera.MonoOrStereoscopicEye eye);

参数

position 屏幕空间中的二维点,以像素为单位,并带有 z 坐标以表示与相机的世界单位距离。屏幕的左下角像素为 (0, 0)。屏幕的右上角像素为 (屏幕宽度(以像素为单位) - 1, 屏幕高度(以像素为单位) - 1)。
eye 默认情况下为 Camera.MonoOrStereoscopicEye.Mono。可在立体渲染中设置为 Camera.MonoOrStereoscopicEye.LeftCamera.MonoOrStereoscopicEye.Right(例如,用于 VR)。

返回值

Vector3 通过将屏幕空间点转换到从相机平面提供的距离 z 处创建的世界空间点。

描述

将点从屏幕空间转换为世界空间,其中世界空间定义为游戏层次结构顶部的坐标系。

即使提供的是屏幕外的坐标,也可以计算世界空间坐标,例如,在屏幕的特定角落附近实例化屏幕外的对象。

要确保世界空间点位于相机的视锥体内,您提供的 z 坐标必须介于相机的 nearClipPlanefarClipPlane 之间。

// 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(); } }