예제 #1
0
    void Start () {
        controller = CurvedUIInputModule.Right;
       

        //subscribe to event that will be fired every time a finger moves across the touchpad.
        controller.TouchpadAxisChanged += MoveDotOnTouchpadAxisChanged;
	} 
예제 #2
0
    /// <summary>
    /// Processes Events from given controller.
    /// </summary>
    /// <param name="myController"></param>
    void ProcessController(GameObject myController)
    {
        //do not process events from this controller if it's off or not visible by base stations.
        if (!myController.gameObject.activeInHierarchy)
        {
            return;
        }

        //get the assistant or add it if its missing.
        CurvedUIViveController myControllerAssitant = myController.AddComponentIfMissing <CurvedUIViveController>();

        // send update events if there is a selected object - this is important for InputField to receive keyboard events
        SendUpdateEventToSelectedObject();

        // see if there is a UI element that is currently being pointed at
        PointerEventData ControllerData;

        if (myControllerAssitant == Right)
        {
            ControllerData = GetControllerPointerData(myControllerAssitant, ref rightControllerData);
        }
        else
        {
            ControllerData = GetControllerPointerData(myControllerAssitant, ref leftControllerData);
        }


        currentPointedAt = ControllerData.pointerCurrentRaycast.gameObject;

        ProcessDownRelease(ControllerData, myControllerAssitant.IsTriggerDown, myControllerAssitant.IsTriggerUp);

        //Process move and drag if trigger is pressed
        if (!myControllerAssitant.IsTriggerUp)
        {
            ProcessMove(ControllerData);
            ProcessDrag(ControllerData);
        }

        if (!Mathf.Approximately(ControllerData.scrollDelta.sqrMagnitude, 0.0f))
        {
            var scrollHandler = ExecuteEvents.GetEventHandler <IScrollHandler>(ControllerData.pointerCurrentRaycast.gameObject);
            ExecuteEvents.ExecuteHierarchy(scrollHandler, ControllerData, ExecuteEvents.scrollHandler);
            // Debug.Log("executing scroll handler");
        }
    }
예제 #3
0
    /// <summary>
    /// Create a pointerEventData that stores all the data associated with Vive controller.
    /// </summary>
    private CurvedUIPointerEventData GetControllerPointerData(CurvedUIViveController controller, ref CurvedUIPointerEventData ControllerData)
    {
        if (ControllerData == null)
        {
            ControllerData = new CurvedUIPointerEventData(eventSystem);
        }

        ControllerData.Reset();
        ControllerData.delta        = Vector2.one;                                           // to trick into moving
        ControllerData.position     = Vector2.zero;                                          // this will be overriden by raycaster
        ControllerData.Controller   = controller.gameObject;                                 // raycaster will use this object to override pointer position on screen. Keep it safe.
        ControllerData.scrollDelta  = controller.TouchPadAxis - ControllerData.TouchPadAxis; // calcualte scroll delta
        ControllerData.TouchPadAxis = controller.TouchPadAxis;                               // assign finger position on touchpad

        eventSystem.RaycastAll(ControllerData, m_RaycastResultCache);                        //Raycast all the things!. Position will be overridden here by CurvedUIRaycaster

        //Get a current raycast to find if we're pointing at GUI object.
        ControllerData.pointerCurrentRaycast = FindFirstRaycast(m_RaycastResultCache);
        m_RaycastResultCache.Clear();

        return(ControllerData);
    }