C# 从摄影机中心进行光线投射不会';行不通
我使用下面的代码从相机中心进行光线投射C# 从摄影机中心进行光线投射不会';行不通,c#,unity3d,augmented-reality,virtual-reality,raycasting,C#,Unity3d,Augmented Reality,Virtual Reality,Raycasting,我使用下面的代码从相机中心进行光线投射 using UnityEngine; using System.Collections; [RequireComponent(typeof(Camera))] public class CameraPointer : MonoBehaviour { private GameObject hitObject = null; private Vector3 reticlePosition = Vector3.zero; public
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Camera))]
public class CameraPointer : MonoBehaviour {
private GameObject hitObject = null;
private Vector3 reticlePosition = Vector3.zero;
public Camera mcamera;
public float Distance = 10f;
void Update () {
reticlePosition = mcamera.transform.position;
Ray ray = mcamera.ScreenPointToRay(reticlePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Distance)) {
if (hitObject != hit.transform.gameObject) {
if (hitObject != null) {
hitObject.SendMessage("OnReticleExit", SendMessageOptions.DontRequireReceiver);
}
hitObject = hit.transform.gameObject;
hitObject.SendMessage("OnReticleEnter", SendMessageOptions.DontRequireReceiver);
} else {
hitObject.SendMessage("OnReticleHover", SendMessageOptions.DontRequireReceiver);
}
} else {
if (hitObject != null) {
hitObject.SendMessage("OnReticleExit", SendMessageOptions.DontRequireReceiver);
}
hitObject = null;
}
}
}
不幸的是,它根本不起作用。它根本没有击中任何物体。我该如何解决这一问题?此注释之所以能按预期工作,是因为在调用以下命令时,您正在将光线从屏幕空间投影到世界空间:
Ray ray = mcamera.ScreenPointToRay(reticlePosition);
见文件
因此,如果mcamera
位于原点,则从屏幕左下角进行光线投射
如果您只想从摄影机视口的中心投射光线,则可以执行以下操作:
Ray ray = new Ray(mcamera.transform.position, mcamera.transform.forward);
这基本上是从相机的当前位置开始沿相机的前向矢量投射光线。光线=mcamera.screenpointoray(网线位置)代码> 这个函数是错误的方法 screenpoint中的vector3参数应为游戏屏幕位置(例如:屏幕上的坐标1920x1080) 因此,您必须使用function
mcamera.ViewportPointToRay(新的Vector3(0.5f,0.5f))代码>
或者你可以使用
if(Physics.Raycast(网线位置、变换、前进、命中距离))