Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从摄影机中心进行光线投射不会';行不通_C#_Unity3d_Augmented Reality_Virtual Reality_Raycasting - Fatal编程技术网

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(网线位置、变换、前进、命中距离))