我是团结和VR的新手。我一直在使用谷歌纸板SDK来统一创建VR应用程序,我被困在gazetimer。我想仅在用户查看3secs的任何对象但未能执行此操作时才触发操作。请帮忙
答案 0 :(得分:0)
请在Use Gaze Input duration to select UI text in Google Cardboard
中查看类似的问题和答案总之,创建一个脚本来定时凝视,通过在注视对象时在每个帧上累积添加Time.deltaTime
。当凝视时间达到预定的持续时间时,触发按钮的OnClick
事件。
在对象上,使用事件触发器Pointer Enter
和Pointer Exit
激活脚本的注视计时功能。见截图:
答案 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;
}
}
}
希望你明白这一点。