Physics.Raycast不使用Google Cardboard / Google VR

时间:2016-05-29 00:49:35

标签: unity3d unity5 google-cardboard raycasting google-vr

我有一台物理雷达连接到相机。指针单击事件触发器正常工作。但是我需要从源代码中完成它。这些是我的尝试:

private void SetOnPushButtonFireManager(){
    cardboard.OnTrigger += () => {
        Debug.Log("Button triggered!");
        RaycastHit hit;
        // if(Physics.Raycast(headGameObject.GetComponent<GvrHead>().Gaze, out hit, Mathf.Infinity)){
        if(Physics.Raycast(cameraGameObject.transform.position, cameraGameObject.transform.forward, out hit, Mathf.Infinity)){
              Debug.Log("Collision detected!");
        }
    };
}

&#34;按钮被触发!&#34;显示在控制台中。很遗憾&#34;碰撞检测到!&#34;不是。但是,指针单击事件触发器正常工作(检查器中附加的组件)。我怎么知道发生了什么?为什么它不起作用?

更新:我在这里回答了这个问题:http://answers.unity3d.com/answers/1200449/view.html

(stackoverflow不允许我删除这个问题)

2 个答案:

答案 0 :(得分:1)

这是我用来从相机发射光线的一些代码。我没有Google Cardboard,这是为相机和鼠标指针设置的。

   // Fire ray from camera
    float rayLength = 2f
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    // If ray hits object within length
    if (Physics.Raycast(ray, out hit, rayLength))
    {
            Debug.Log("Collision detected!:);
    }

答案 1 :(得分:0)

这对我也不起作用,最后,我忘记将“ GvrPointerPhysicsRaycaster”类放到相机中。 Inspector Image

一旦添加,它就可以完美运行。

void Update()
{
    RaycastHit hit;

    if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, Mathf.Infinity))
    {
        if (activeSelected == null)
        {
            if (hit.collider.tag == "Plane")
                activeSelected = Instantiate(mainApp.mainModel.preafabSelect, hit.point, Quaternion.LookRotation(hit.normal));
        } else
        {
            activeSelected.transform.position = hit.point;
            activeSelected.transform.rotation = Quaternion.LookRotation(hit.normal);
        }
    }
}