2

我是 Unity 和 VR 的新手。我一直在使用 google cardboard SDK 来统一创建 VR 应用程序,但我一直在用 gazetimer。我只想在用户查看任何对象 3 秒但无法这样做时触发操作。请帮忙

4

2 回答 2

1

请在此处查看类似的问题和答案使用 Gaze Input 持续时间在 Google Cardboard 中选择 UI 文本

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

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

定时注视按钮事件触发器

于 2016-11-28T11:08:48.960 回答
-1

VR相机通常包含一个主相机和眼睛相机(左右)。由于主摄像头的中心点始终是用户视点的眼睛中心,因此您可以使用Raycastfrom its transform.positionto itstransform.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;
        }
    }
}

希望你能明白。

于 2016-08-24T01:30:35.523 回答