Unity3d 谷歌纸板-如何检测物体的焦点?

Unity3d 谷歌纸板-如何检测物体的焦点?,unity3d,focus,google-cardboard,virtual-reality,Unity3d,Focus,Google Cardboard,Virtual Reality,我尝试使用谷歌纸板sdk在unity中创建一个VR场景。我向场景中添加了一个立方体和CardboardMain.prefable。有一个示例场景可以检测立方体上的焦点。其层次结构视图为: 我不知道如何添加图形对象或像图像一样的预置 如何检测对象上的焦点?实际上,您可以自己制作脚本,而且非常简单 您可以通过使用主摄像机中的光线投射来检测用户是否正在观看您的对象。如果光线投射击中您的对象,则它将被聚焦 例如: using UnityEngine; using System; [RequireCo

我尝试使用谷歌纸板sdk在unity中创建一个VR场景。我向场景中添加了一个立方体和CardboardMain.prefable。有一个示例场景可以检测立方体上的焦点。其层次结构视图为:

我不知道如何添加图形对象或像图像一样的预置


如何检测对象上的焦点?

实际上,您可以自己制作脚本,而且非常简单

您可以通过使用主摄像机中的
光线投射
来检测用户是否正在观看您的对象。如果
光线投射
击中您的对象,则它将被聚焦

例如:

using UnityEngine;
using System;

[RequireComponent(typeof(Collider))]
public class LookableObject : MonoBehaviour {

    [SerializeField]
    Transform cam; // This is the main camera.
    // You can alternately use Camera.main if you've tagged it as MainCamera

    bool focus; // True if focused

    Collider gazeArea; // Your object's collider

    public void Start () {
        gazeArea = GetComponent<Collider> ();
    }

    public void Update () {
        RaycastHit hit;

        if (Physics.Raycast (cam.position, cam.forward, out hit, 1000f)) {
            focus = (hit.collider == gazeArea);    
        } else {
            focus = false;
        }
    }
}
使用UnityEngine;
使用制度;
[要求组件(对撞机类型))]
公共类LookableObject:MonoBehavior{
[序列化字段]
Transform cam;//这是主摄像机。
//如果已将Camera.main标记为MainCamera,则可以交替使用它
bool focus;//如果已聚焦,则为True
Collider gazeArea;//对象的碰撞器
公共无效开始(){
gazeArea=GetComponent();
}
公共无效更新(){
雷卡斯特击中;
if(物理光线投射(凸轮位置、凸轮向前、外击、1000f)){
焦点=(hit.collider==凝视区域);
}否则{
焦点=错误;
}
}
}

编辑:这只是一个例子。您可能希望只制作一个脚本来执行光线投射一次,而不是在每个对象上反复进行光线投射以使项目运行更快。

实际上,您可以自己制作脚本,而且非常简单

您可以通过使用主摄像机中的
光线投射
来检测用户是否正在观看您的对象。如果
光线投射
击中您的对象,则它将被聚焦

例如:

using UnityEngine;
using System;

[RequireComponent(typeof(Collider))]
public class LookableObject : MonoBehaviour {

    [SerializeField]
    Transform cam; // This is the main camera.
    // You can alternately use Camera.main if you've tagged it as MainCamera

    bool focus; // True if focused

    Collider gazeArea; // Your object's collider

    public void Start () {
        gazeArea = GetComponent<Collider> ();
    }

    public void Update () {
        RaycastHit hit;

        if (Physics.Raycast (cam.position, cam.forward, out hit, 1000f)) {
            focus = (hit.collider == gazeArea);    
        } else {
            focus = false;
        }
    }
}
使用UnityEngine;
使用制度;
[要求组件(对撞机类型))]
公共类LookableObject:MonoBehavior{
[序列化字段]
Transform cam;//这是主摄像机。
//如果已将Camera.main标记为MainCamera,则可以交替使用它
bool focus;//如果已聚焦,则为True
Collider gazeArea;//对象的碰撞器
公共无效开始(){
gazeArea=GetComponent();
}
公共无效更新(){
雷卡斯特击中;
if(物理光线投射(凸轮位置、凸轮向前、外击、1000f)){
焦点=(hit.collider==凝视区域);
}否则{
焦点=错误;
}
}
}

编辑:这只是一个例子。您可能希望制作一个脚本,只执行一次光线投射,而不是在每个对象上反复执行光线投射,以使项目运行更快。

可能重复但不重复。我试过这个解决方案,但它对我不起作用。我试过这个办法,但对我不起作用。