// ------------------------------------------- /* * Calculate the raycasting operation to look for InteractionController objects */ private void CheckRaycasting(bool _actionButtonPressed, RaycastHit _objectCollided, bool _force = false) { if (_objectCollided.collider != null) { GameObject goCollided = _objectCollided.collider.gameObject; InteractionController interactedObject = goCollided.GetComponent <InteractionController>(); if (interactedObject != null) { float distanceToCollidedObject = Vector3.Distance(YourVRUIScreenController.Instance.GameCamera.transform.position, goCollided.transform.position); if (distanceToCollidedObject < interactedObject.DetectionDistance) { if (((interactedObject.TriggerMessageOnDetection) && (m_previousCollidedObject != interactedObject)) || ((interactedObject.TriggerMessageOnDetection) && (m_previousCollidedObject == interactedObject) && _actionButtonPressed) || (!interactedObject.TriggerMessageOnDetection && _actionButtonPressed)) { if (YourVRUIScreenController.Instance.EnableRaycastDetection || _force) { if (_actionButtonPressed) { m_previousCollidedObject = interactedObject; if (!interactedObject.ScreenIsDisplayed) { if (YourVRUIScreenController.Instance.DebugMode) { Debug.Log("PlayerRaycasterController::CheckRaycasting::COLLIDED WITH AN OBJECT[" + interactedObject.name + "] IS [" + distanceToCollidedObject + "] AWAY FROM PLAYER"); } interactedObject.DispatchScreen(this.gameObject, IgnoreLayers, true); } } } } } } } }
// ------------------------------------------- /* * Manager of global events */ private void OnBasicEvent(string _nameEvent, params object[] _list) { if (_nameEvent == KeysEventInputController.ACTION_BUTTON_DOWN) { ResetLinkedElementScrollRect(); bool triggeredDispatchScreen = false; if (YourVRUIScreenController.Instance.EnableCollisionDetection) { if (m_previousCollidedObject != null) { InteractionController objectCollided = GetControllerCollided(); if (objectCollided == m_previousCollidedObject) { m_previousCollidedObject.DispatchScreen(this.gameObject, IgnoreLayers, true); triggeredDispatchScreen = true; } } } if (!triggeredDispatchScreen) { if (!YourVRUIScreenController.Instance.IsDayDreamActivated) { CheckRaycastingNormal(true); } else { CheckRaycastingDaydream(true); } } } if (_nameEvent == KeysEventInputController.ACTION_SET_ANCHOR_POSITION) { ResetLinkedElementScrollRect(); RaycastHit objectCollided; if (!YourVRUIScreenController.Instance.IsDayDreamActivated) { objectCollided = Utilities.GetRaycastHitInfoByRay(YourVRUIScreenController.Instance.GameCamera.transform.position, YourVRUIScreenController.Instance.GameCamera.transform.forward); } else { objectCollided = Utilities.GetRaycastHitInfoByRay(YourVRUIScreenController.Instance.LaserPointer.transform.position, YourVRUIScreenController.Instance.LaserPointer.transform.forward); } if (objectCollided.collider != null) { m_referenceElementInScrollRect = objectCollided.collider.gameObject; m_positionCollisionAnchor = objectCollided.point; m_distanceToCollisionScrollRect = -1; m_referenceAngleForDirection = -1; m_detectionMovementScrollRect = false; UIEventController.Instance.DispatchUIEvent(BaseVRScreenView.EVENT_SCREEN_CHECK_ELEMENT_BELONGS_TO_SCROLLRECT, objectCollided.collider.gameObject); } } if (_nameEvent == BaseVRScreenView.EVENT_SCREEN_RESPONSE_ELEMENT_BELONGS_TO_SCROLLRECT) { GameObject gameObjectChecked = (GameObject)_list[0]; if (m_referenceElementInScrollRect == gameObjectChecked) { bool isInsideScrollRect = (bool)_list[1]; m_isVerticalGridToMove = (bool)_list[2]; if (!isInsideScrollRect) { ResetLinkedElementScrollRect(); } else { if (!YourVRUIScreenController.Instance.IsDayDreamActivated) { m_forwardCollisionAnchor = YourVRUIScreenController.Instance.GameCamera.transform.forward; m_distanceToCollisionScrollRect = Vector3.Distance(m_positionCollisionAnchor, YourVRUIScreenController.Instance.GameCamera.transform.position); } else { m_forwardCollisionAnchor = YourVRUIScreenController.Instance.LaserPointer.transform.forward; m_distanceToCollisionScrollRect = Vector3.Distance(m_positionCollisionAnchor, YourVRUIScreenController.Instance.LaserPointer.transform.position); } } } } if (_nameEvent == EVENT_PLAYERRAYSCASTER_REQUEST_RAYCAST) { CheckRaycastingNormal(true, true); } if (_nameEvent == SpinningNumberView.EVENT_SPINNINGNUMBER_REQUEST_RAYCAST) { GameObject originGO = (GameObject)_list[0]; RaycastHit hitSurface; if (!YourVRUIScreenController.Instance.IsDayDreamActivated) { hitSurface = Utilities.GetRaycastHitInfoByRayWithMask(YourVRUIScreenController.Instance.GameCamera.transform.position, YourVRUIScreenController.Instance.GameCamera.transform.forward, IgnoreLayers); } else { hitSurface = Utilities.GetRaycastHitInfoByRayWithMask(YourVRUIScreenController.Instance.LaserPointer.transform.position, YourVRUIScreenController.Instance.LaserPointer.transform.forward, IgnoreLayers); } if (hitSurface.collider != null) { UIEventController.Instance.DispatchUIEvent(SpinningNumberView.EVENT_SPINNINGNUMBER_RESPONSE_RAYCAST, originGO, hitSurface.collider.gameObject); } else { UIEventController.Instance.DispatchUIEvent(SpinningNumberView.EVENT_SPINNINGNUMBER_RESPONSE_RAYCAST, originGO, null); } } if (_nameEvent == InteractionController.EVENT_INTERACTIONCONTROLLER_COLLIDED_WITH_PLAYER) { if (YourVRUIScreenController.Instance.EnableCollisionDetection) { m_previousCollidedObject = (InteractionController)_list[0]; } } if (_nameEvent == EventSystemController.EVENT_EVENTSYSTEMCONTROLLER_RAYCASTING_SYSTEM) { #if !ENABLE_OCULUS && !ENABLE_HTCVIVE && !ENABLE_PICONEO && UNITY_HAS_GOOGLEVR && ENABLE_PARTY_2018 if (this.gameObject.GetComponent <GvrPointerPhysicsRaycaster>() != null) { this.gameObject.GetComponent <GvrPointerPhysicsRaycaster>().enabled = (bool)_list[0]; } #endif } }