2016-09-20 2 views
1

Я использую пакет GoogleVR, и у меня есть эта сетка, которая работает (в том смысле, что она делает объект, на который я смотрю больше). Поведение, которое я бы хотел, - это щелкнуть, просмотрев объект примерно на три секунды. Объект в настоящее время имеет триггер событий, но как я могу подождать три секунды, а затем нажать?Unity VR autoclick через несколько секунд

ответ

0

Когда вы смотрите на объект, триггер активируется правильно? Затем, когда вы обнаружите срабатывание триггера, просто создайте функцию, которая ждет 3 секунды, а затем сделайте то, что вы хотите.

Не забудьте остановить ожидание, если пользователь начнет искать где-то еще.

0

Я написал этот сценарий некоторое время назад, он отлично работает с кнопками:

[RequireComponent(typeof(Button))] 
public class InteractiveItem : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler 
{ 
    public Image progressImage; // add an image as child of button and set its image type to Filled. And assign it here. 
    public bool isEntered = false; 

    float GazeActivationTime = 3f; 
    float timeElapsed; 
    Button _button; 

    void Start() 
    { 
     _button = GetComponent<Button>(); 
    } 

    void fillProgress(float value) 
    { 
     if (progressImage != null) 
     { 
      progressImage.fillAmount = value; 
     } 
    } 

    void Update() 
    { 
     if(isEntered) 
     { 
      timeElapsed += Time.deltaTime; 
      fillProgress(Mathf.Clamp(timeElapsed/GazeActivationTime,0,1)); 
      if(timeElapsed >= GazeActivationTime) 
      { 
       timeElapsed = 0; 
       _button.onClick.Invoke(); 
       fillProgress(0); 
       isEntered = false; 
      } 
     } 
     else 
     { 
      timeElapsed = 0; 
     } 
    } 

    void OnDisable() 
    { 
     if (this.enabled) 
     { 
      isEntered = false; 
      fillProgress(0);  
     } 
    } 

#region IPointerEnterHandler implementation 

    public void OnPointerEnter (PointerEventData eventData) 
    { 
     if (_button.IsInteractable()) 
     { 
      isEntered = true; 
     } 
    } 

#endregion 

#region IPointerExitHandler implementation 

    public void OnPointerExit (PointerEventData eventData) 
    { 
     if (!_button.IsInteractable()) 
      return; 
     try 
     { 
      isEntered = false; 
      fillProgress(0); 
     } 
     catch (System.Exception ex) 
     { 
      Debug.LogError(ex.Message); 
     } 
    } 
#endregion 

#region IPointerClickHandler implementation 

    public void OnPointerClick (PointerEventData eventData) 
    { 
     isEntered = false; 
     timeElapsed = 0; 
     fillProgress(0); 

    } 
#endregion 

} 
Смежные вопросы