Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
unity3d google vr sdk中是否存在仅凝视(相对于点击/按钮输入)模式?_Unity3d_Google Cardboard_Google Vr_Google Vr Sdk_Gaze Buttons - Fatal编程技术网

unity3d google vr sdk中是否存在仅凝视(相对于点击/按钮输入)模式?

unity3d google vr sdk中是否存在仅凝视(相对于点击/按钮输入)模式?,unity3d,google-cardboard,google-vr,google-vr-sdk,gaze-buttons,Unity3d,Google Cardboard,Google Vr,Google Vr Sdk,Gaze Buttons,我正在使用unity3d中的谷歌VR SDK(用于硬纸板),但我的硬纸板没有按钮。是否有一种方法可以启用仅凝视模式,将扩展凝视(几秒钟)视为按钮点击?(我在一个教程视频中提到“您可以启用仅凝视模式”,但随后没有解释任何内容)这是内置的功能,还是我必须从头开始编写凝视交互代码才能实现这一点 我到处都在搜索代码来实现这一点,不仅仅是编辑器上显示的公共道具,还有演示场景中可用的不同预制件。我不知道如何实现这一点,也不知道是否有内置方法。但您可以轻松构建扩展按钮: 使用UnityEngine.UI; #

我正在使用unity3d中的谷歌VR SDK(用于硬纸板),但我的硬纸板没有按钮。是否有一种方法可以启用仅凝视模式,将扩展凝视(几秒钟)视为按钮点击?(我在一个教程视频中提到“您可以启用仅凝视模式”,但随后没有解释任何内容)这是内置的功能,还是我必须从头开始编写凝视交互代码才能实现这一点


我到处都在搜索代码来实现这一点,不仅仅是编辑器上显示的公共道具,还有演示场景中可用的不同预制件。

我不知道如何实现这一点,也不知道是否有内置方法。但您可以轻松构建扩展按钮:

使用UnityEngine.UI;
#如果统一编辑器
使用UnityEditor;
使用UnityEditor.UI;
#恩迪夫
公共类时间按钮:按钮
{
公共浮动时间=0.5f;
PointerEventData PointerEventData上的公共重写无效
{
base.OnPointerEnter(pointerEventData);
start例程(relatetimeroutine());
}
公共重写void OnPointerExit(PointerEventData PointerEventData)
{
base.OnPointerExit(pointerEventData);
stopallcorroutines();
}
私有IEnumerator时间例程()
{
收益率返回新的WaitForSeconds(停留时间);
onClick.Invoke();
}
#如果统一编辑器
[自定义编辑器(类型)(时间按钮)]
私有类驻留时间按钮编辑器:按钮编辑器
{
时间属性;
受保护的重写void OnEnable()
{
base.OnEnable();
住宅时间=serializedObject.FindProperty(“住宅时间”);
}
公共覆盖无效OnInspectorGUI()
{
base.OnInspectorGUI();
serializedObject.Update();
EditorGUILayout.PropertyField(驻留时间);
serializedObject.ApplyModifiedProperties();
}
}
#恩迪夫
}
用该组件替换一个普通的Unity按钮,并设置所需的驻留时间。在驻留时间保持聚焦后,它将自动调用onClick事件


作为替代方案,无需在任何地方更换按钮,您只需在每个按钮上附加此组件即可:

使用系统集合;
使用UnityEngine;
使用UnityEngine.EventSystems;
使用UnityEngine.UI;
[要求组件(按钮类型))]
公共类驻留时间按钮:MonoBehavior、IPInterenterHandler、IPInterexithHandler
{
[序列化字段]专用按钮;
公共浮动时间=0.5f;
私人空间
{
如果(!button)button=GetComponent();
}
PointerEventData PointerEventData上的公共无效
{
按钮.OnPointerEnter(pointerEventData);
start例程(relatetimeroutine());
}
公共void OnPointerExit(PointerEventData PointerEventData)
{
按钮OnPointerExit(pointerEventData);
StopAllCoroutines();
}
私有IEnumerator时间例程()
{
收益率返回新的WaitForSeconds(停留时间);
button.onClick.Invoke();
}
}
这基本上是相同的,但会调用
onClick
按钮的其他事件



注意:在智能手机上键入,但我希望想法变得清晰

谢谢你的帮助,我最终做了类似的事情。但对于你的解决方案,我的意思是这可能适用于按钮,但我是否必须扩展每个需要此行为的对象?我可能会使用协同程序(我目前正在使用更新方法)@Vahakn当然,您也可以只实现放置在按钮旁边的组件,只调用
GetComponent.onClick.invoke();
。将其作为更新添加