首页 文章

使用World Space画布在Raycast上输入.mousePosition.x或y等效

提问于
浏览
1

我正在尝试将鼠标事件转换为VR Raycast事件 .

Input.mousePosition.xInput.mousePosition.y 作为鼠标点击事件的坐标 . 我想在VR Raycast点击中应用相同的事件 .

我有以下代码

Ray ray = new Ray(CameraRay.transform.position, CameraRay.transform.forward);
RaycastHit hit;

if (GetComponent<Collider>().Raycast(ray, out hit, 100)) {
     Debug.Log ("True");
    Vector3 point = camera.WorldToScreenPoint(hit.point);
} else {
    Debug.Log ("False");
}

从Raycast命中点,我如何获得Ray击中对撞机的等效x-y坐标?

Update:

以下脚本附加到我的用于Google Cardboard的Unity设置中的颜色选择器对象 . 在悬停在颜色选择器上时,我想获得Raycast击中对撞机的位置的坐标(以便我可以获得该坐标中的颜色) .

enter image description here

Question 1: 在FixedUpdate上,我有一个if语句 if (GetComponent<Collider>().Raycast(ray, out hit, 100)) ,它返回false . 我在这里想念的是什么?

Question 2: 我是否正确假设如果设置了hit.point,我可以得到射线击中对撞机的点的x,y,z坐标为点[0],点1和点[2]?

1 回答

  • 1

    我不是Unity中的VR专家,但你通常会将_680363用于这些目的 . 要在主摄像头上使用它,请使用以下行:

    Ray ray = new Ray(CameraRay.transform.position, CameraRay.transform.forward);
    RaycastHit hit;
    
    if (GetComponent<Collider>().Raycast(ray, out hit, 100)) {
        Vector3 point = camera.WorldToScreenPoint(hit.point);
    }
    

    如果您对此感兴趣,z值会为您提供相机的距离 . Unity文档:https://docs.unity3d.com/ScriptReference/Camera.WorldToScreenPoint.html

    EDIT:

    问题1:

    RaycastHit hit;
    
    if (Physics.Raycast(CameraRay.transform.position, Vector3.forward, out hit)) {
         Debug.Log ("True");
        Vector3 point = camera.WorldToScreenPoint(hit.point);
    } else {
        Debug.Log ("False");
    }
    

    尝试使用这个代码,从我读过的,Physics.Raycast()几乎总是比Collider.Raycast()更好用 .

    问题2:

    Vector3[] point = new Vector3[3] {hit.point.x, hit.point.y, hit.point.z};
    

    这将创建一个名为point的数组,该数组具有指定的三个变量,但可以丢弃z坐标以用于2D色轮 .

相关问题