есть ли режим только взгляда (в отличие от ввода щелчком / кнопкой) в unity3d google vr sdk?
Я использую Google VR SDK (для картона) в unity3d, но на картоне, который у меня есть, нет кнопок. Есть ли способ включить режим только взгляда, который рассматривает расширенный взгляд (несколько секунд) как нажатие кнопки? (я парень в обучающем видео сказал, что "вы можете включить режим только взгляда", но потом ничего не объяснил) это встроенная функция или мне нужно кодировать взаимодействие взгляда с нуля, чтобы добиться этого?
Я повсюду искал код, чтобы включить это не только общедоступные реквизиты, которые появляются в редакторе на различных префабах, доступных из демонстрационных сцен.
1 ответ
Я не знаю, как и есть ли для этого встроенный метод. Но вы можете легко построить расширение кнопки:
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.UI;
#endif
public class DwellTimeButton : Button
{
public float dwellTime = 0.5f;
public override void OnPointerEnter(PointerEventData pointerEventData)
{
base.OnPointerEnter(pointerEventData);
StartCoroutine (DwellTimeRoutine());
}
public override void OnPointerExit (PointerEventData pointerEventData)
{
base.OnPointerExit(pointerEventData);
StopAllCoroutines ();
}
private IEnumerator DwellTimeRoutine ()
{
yield return new WaitForSeconds (dwellTime);
onClick.Invoke();
}
#if UNITY_EDITOR
[CustomEditor (typeof (DwellTimeButton)]
private class DwellTimeButtonEditor : ButtonEditor
{
SerializedProperty dwellTime;
protected override void OnEnable()
{
base.OnEnable();
dwellTime = serializedObject.FindProperty("dwellTime");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
serializedObject.Update();
EditorGUILayout.PropertyField(dwellTime);
serializedObject.ApplyModifiedProperties();
}
}
#endif
}
Замените обычную кнопку Unity этим компонентом и установите желаемое значение dwellTime. Затем он автоматически вызовет событие onClick после того, как останется сфокусированным в течение dwellTime.
В качестве альтернативы без необходимости заменять кнопку везде, вы можете просто прикрепить этот компонент дополнительно к каждой кнопке:
using System.Collections;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Button))]
public class DwellTimeButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
[SerializeField] private Button button;
public float dwellTime = 0.5f;
private void Awake()
{
if (!button) button = GetComponent<Button>();
}
public void OnPointerEnter(PointerEventData pointerEventData)
{
button.OnPointerEnter(pointerEventData);
StartCoroutine(DwellTimeRoutine());
}
public void OnPointerExit(PointerEventData pointerEventData)
{
button.OnPointerExit(pointerEventData);
StopAllCoroutines();
}
private IEnumerator DwellTimeRoutine()
{
yield return new WaitForSeconds(dwellTime);
button.onClick.Invoke();
}
}
Это в основном то же самое, но вызывает onClick
и другие мероприятия Button
компонент вместо этого.
примечание: набрано на смартфоне, но я надеюсь, что идея прояснится