ValveSoftware/steamvr_unity_plugin

Can SteamVR_Input_Sources.Any refresh other sources in same action?

REshyx opened this issue · 1 comments

I don't know if it is a bug, I called an action whose source is SteamVR_Input_Sources.Any, it returns true when I press down the key. When I call the same action in next frame with source: SteamVR_Input_Sources.RightHand. it also returns true.
My aim is to using the key to realize a two-level menu. but when pressing the key once,it directly enters the secondary menu. I am sure the two two calls of action with SteamVR_Input_Sources.Any and SteamVR_Input_Sources.RightHand are both true. "Any" does not refresh "RightHand".
But when I write a script like this:

using UnityEngine;
using Valve.VR;

public class  Script1 : MonoBehaviour
{
   public static SteamVR_Action_Boolean Function = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("Function");
   // Update is called once per frame
   void Update()
   {
       if (Function.GetStateDown(SteamVR_Input_Sources.Any))
       {
           Debug.LogError("Any stateDown. frame:" + Time.frameCount);
       }
       else {
           Debug.Log("Not any stateDown. frame:" + Time.frameCount);
           if (Function.GetStateDown(SteamVR_Input_Sources.RightHand))
           {
               Debug.LogError("Left stateDown. frame:" + Time.frameCount);
           } 
       }
   }
}

The “Any” seems refresh the "RightHand", the log "Right stateDown. frame: XXX" is never logged;

In this case, two calls in different frame is both true:

using UnityEngine;
using Valve.VR;

public class  Script1 : MonoBehaviour
{
    bool alter=false;
    public static SteamVR_Action_Boolean Function = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("Function");
    // Update is called once per frame
    void Update()
    {
        if (!alter)
        {
            if (Function.GetStateDown(SteamVR_Input_Sources.Any))
            {
                Debug.LogError("Any stateDown. frame:" + Time.frameCount);
                alter = true;
            }
            
        }
        else {
            if (Function.GetStateDown(SteamVR_Input_Sources.RightHand))
            {
                Debug.LogError("Right stateDown. frame:" + Time.frameCount);
            }
            else {
                Debug.Log("None");
            }
        }
    }
}

image

but in this, it is true and false:

using UnityEngine;
using Valve.VR;

public class  Script1 : MonoBehaviour
{
    bool alter=false;
    public static SteamVR_Action_Boolean Function = SteamVR_Input.GetAction<SteamVR_Action_Boolean>("Function");
    // Update is called once per frame
    void Update()
    {
        if (Function.GetStateDown(SteamVR_Input_Sources.Any))
        {
            Debug.LogError("Any stateDown. frame:" + Time.frameCount);
        }
        else
        {           
            if (Function.GetStateDown(SteamVR_Input_Sources.RightHand))
            {
                Debug.LogError("Right stateDown. frame:" + Time.frameCount);
            }
            else { 
                Debug.LogError("Right not stateDown. frame:" + Time.frameCount);
            }
        }
    }
}

image