static void AssignActions(InputObjectUI io)
        {
            switch (io._type)
            {
            case InputType.Hold:
                io.WhenDown  = SetTrue;
                io.WhenUp    = SetFalse;
                io.WhenEnter = x => io._inputState = Input.GetKey(KeyCode.Mouse0);
                io.WhenExit  = SetFalse;
                break;

            case InputType.Down:
                io.WhenDown  = SetTrueOneFrame_Down;
                io.WhenUp    = delegate { };
                io.WhenEnter = delegate { };
                io.WhenExit  = delegate { };
                break;

            case InputType.Up:
                bool isPressed = false;
                io.WhenDown = x => isPressed = true;
                io.WhenUp   = x => { if (isPressed)
                                     {
                                         SetTrueOneFrame_Up(x);
                                     }
                };
                io.WhenEnter = delegate { };
                io.WhenExit  = x => isPressed = false;
                break;
            }
        }
        static IEnumerator CR_SetTrueForOneFrame(InputObjectUI io)
        {
            io._inputState = true;
            yield return(new WaitForEndOfFrame());

            io._inputState = false;
        }
 static void SetFalse(InputObjectUI io)
 {
     io._inputState = false;
 }
 static void SetTrueOneFrame_Up(InputObjectUI io)
 {
     io.StartCoroutine(CR_SetTrueForOneFrame(io));
 }
 //Actions
 static void SetTrue(InputObjectUI io)
 {
     io._inputState = true;
 }