void Start () { controller = CurvedUIInputModule.Right; //subscribe to event that will be fired every time a finger moves across the touchpad. controller.TouchpadAxisChanged += MoveDotOnTouchpadAxisChanged; }
/// <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"); } }
/// <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); }