如何在凝视3秒后添加凝视输入计时器来触发动作?

时间:2016-02-18 07:43:41

标签: unity3d unityscript google-cardboard virtual-reality 360-virtual-reality

我是团结和VR的新手。我一直在使用谷歌纸板SDK来统一创建VR应用程序,我被困在gazetimer。我想仅在用户查看3secs的任何对象但未能执行此操作时才触发操作。请帮忙

2 个答案:

答案 0 :(得分:0)

请在Use Gaze Input duration to select UI text in Google Cardboard

中查看类似的问题和答案

总之,创建一个脚本来定时凝视,通过在注视对象时在每个帧上累积添加Time.deltaTime。当凝视时间达到预定的持续时间时,触发按钮的OnClick事件。

在对象上,使用事件触发器Pointer EnterPointer Exit激活脚本的注视计时功能。见截图:

Timed gaze button Event Triggers

答案 1 :(得分:-1)

VR相机通常包含主相机和眼睛相机(左右)。由于主摄像头的中心点始终是用户眼睛的中心,因此您可以Raycast使用transform.position到其transform.forward并检查它是否击中了你的物体。然后只需添加一个计时器,该计时器将在达到您设置的持续时间后调用该操作。

例如:

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

    [SerializeField]
    float gazeDuration; // How long it should be gazed to trigger the action

    public Action OnGazeAction; // Your object's action after being gazed

    Collider gazeArea; // Your object's collider

    float timer; // Gaze timer

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

    public void Update () {
        RaycastHit hit;

        if (Physics.Raycast (cam.position, cam.forward, out hit, 1000f)) {
            if (hit.collider == gazeArea) {

                timer += Time.deltaTime;

                if (timer >= gazeDuration) {
                    if (OnGazeAction != null)
                        OnGazeAction ();
                }

            } else {
                timer = 0f;
            }
        } else {
            timer = 0f;
        }
    }
}

希望你明白这一点。