我是 Unity 和 VR 的新手。我一直在使用 google cardboard SDK 来统一创建 VR 应用程序,但我一直在用 gazetimer。我只想在用户查看任何对象 3 秒但无法这样做时触发操作。请帮忙
问问题
5318 次
2 回答
1
请在此处查看类似的问题和答案使用 Gaze Input 持续时间在 Google Cardboard 中选择 UI 文本
总之,创建一个脚本来计时凝视,通过在Time.deltaTime
凝视对象时在每一帧上累积添加。当凝视时间达到预先指定的持续时间时,触发按钮的OnClick
事件。
在对象上,使用事件触发器Pointer Enter
和. 激活脚本的注视计时功能Pointer Exit
。看截图:
于 2016-11-28T11:08:48.960 回答
-1
VR相机通常包含一个主相机和眼睛相机(左右)。由于主摄像头的中心点始终是用户视点的眼睛中心,因此您可以使用Raycast
from its transform.position
to 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 回答