最简单的辨别方法就是:
ScreenPointToRay:根据屏幕上的坐标点(范围是0~屏幕尺寸)获得射线
ViewportPointToRay:根据视口的上的一个坐标(范围是0~1)获得射线
以下这两段代码效果是相同的:
void Update()
{
var ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width, Screen.height)*0.5f);
Debug.DrawLine(ray.origin, ray.origin + ray.direction*50,Color.red);
}
void Update()
{
var ray = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f));
Debug.DrawLine(ray.origin, ray.origin + ray.direction*50,Color.red);
}
最后的效果都是从摄像机的近剪裁面的中点向着远剪裁面的中点绘制一条射线:
下面这两段代码效果也相同:
void Update()
{
var ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width,Screen.height));
Debug.DrawLine(ray.origin, ray.origin + ray.direction*50,Color.red);
}
void Update()
{
var ray = Camera.main.ViewportPointToRay(Vector3.one);
Debug.DrawLine(ray.origin, ray.origin + ray.direction*50,Color.red);
}