private void OnTrigger(XRController controller, float value)
        {
            if (!isOnInteractableEvent && !isOnSelectedEvent && value > 0.002f)
            {
                return;
            }

            float maximumValue = animateGrabFrame;
            float normValue    = Mathf.Clamp(value, 0f, maximumValue);

            switch (grabType)
            {
            case GrabbingType.None:
            case GrabbingType.SimpleFingerTip:
                anim.SetBool("TriggerTouch", false);
                anim.SetFloat("TriggerHandGrab", 0f);
                anim.SetFloat("TriggerFingerGrab", 0f);
                break;

            case GrabbingType.FingerGrab:
                anim.SetBool("TriggerTouch", false);
                anim.SetFloat("TriggerHandGrab", 0f);
                anim.SetFloat("TriggerFingerGrab", normValue);
                break;

            case GrabbingType.HandGrab:
                anim.SetBool("TriggerTouch", false);
                anim.SetFloat("TriggerFingerGrab", 0f);
                anim.SetFloat("TriggerHandGrab", normValue);
                break;
            }
        }
Пример #2
0
    void Awake()
    {
        scene = GameObject.Find("Scene");
        rightHandController = GameObject.Find("RightHand Controller");

        if (rightHandController != null) // guard
        {
            rightXRController = rightHandController.GetComponent <XRController>();
            rightRayRenderer  = rightHandController.GetComponent <LineRenderer>();
            if (rightRayRenderer == null)
            {
                rightRayRenderer = rightHandController.AddComponent <LineRenderer>() as LineRenderer;
            }

            rightRayRenderer.startWidth    = 0.01f;
            rightRayRenderer.positionCount = 2; // two points (one line segment)
            rightRayRenderer.enabled       = true;

            cursorDistance = 0.2f;

            // geometry for intersection visualization
            cursorBall        = GameObject.Find("CursorSphere");
            collisionDetector = cursorBall.GetComponent <CollisionDetector>();
            cursorBall.GetComponent <MeshRenderer>().material.color = Color.yellow;
            cursorBall.transform.position = rightHandController.transform.position + rightHandController.transform.forward * cursorDistance;
            cursorBall.SetActive(false);
        }

        //Debug.Log("DefaultRay Start: " + rightHandController);
    }
Пример #3
0
 private void SetPoint(XRController controller, XRRayInteractor interactor)
 {
     if (controller.controllerNode == hand)
     {
         MeasureDistance(interactor);
     }
 }
Пример #4
0
 private void Clear(XRController controller, XRRayInteractor interactor)
 {
     //You could limit the clear to a certain controller by
     //comparing the current node.
     Display(false);
     m_measuring = false;
 }
Пример #5
0
        static void CreateXRUIPointer()
        {
            GameObject selectedGo = Selection.activeGameObject;

            if (selectedGo == null)
            {
                selectedGo = new GameObject("Controller", typeof(XRController), typeof(XRUIPointer));
            }

            XRController controller = selectedGo.GetComponent <XRController>();

            if (controller == null)
            {
                GameObject controllerGo = new GameObject("Controller", typeof(XRController), typeof(XRUIPointer));
                controller = selectedGo.GetComponent <XRController>();
                Undo.SetTransformParent(controllerGo.transform, selectedGo.transform, "Parent Controller to Selected GameObject");
                selectedGo = controllerGo;
            }

            XRUIPointer pointer = selectedGo.GetComponent <XRUIPointer>();

            if (pointer == null)
            {
                selectedGo.AddComponent <XRUIPointer>();
            }

            Selection.activeGameObject = selectedGo;
        }
Пример #6
0
 private void PrintPrimaryButtonUp(XRController controller)
 {
     ButtonUp.Invoke();
     buttonPressed = false;
     pressedTime   = 0f;
     Debug.Log("Primary button up");
 }
Пример #7
0
    private void OnGrabHold(XRController controller)
    {
        switch (grab)
        {
        case GrabState.None:
            grab = GrabState.One;
            var hover = controller.GetComponent <OnHoverEventHandler>();
            if (hover.Current != null)
            {
                grabbedObject = hover.Current;
            }
            else
            {
                if (MultiGrab)
                {
                    grabbedObject = LayerManager.Instance.LayerHelper;
                    foreach (Layer layer in LayerManager.Instance.layers)
                    {
                        layer.transform.parent = LayerManager.Instance.LayerHelper.transform;
                    }
                }
                else
                {
                    grabbedObject = LayerManager.Instance.ActiveLayer.gameObject;
                }
                before = new TransformObject(grabbedObject.transform);
            }

            originalParent = grabbedObject.transform.parent;

            movable   = grabbedObject.GetComponent <IMovable>();
            resizable = grabbedObject.GetComponent <IResizable>();

            if (movable != null)
            {
                grabbedObject.transform.parent = controller.transform;
            }
            break;

        case GrabState.One:
            grab = GrabState.Both;

            var pos = grabbedObject.transform.position;
            grabbedObject.transform.parent   = originalParent;
            grabbedObject.transform.position = pos;

            refDist        = Vector3.Distance(leftController.transform.position, rightController.transform.position);
            refPos         = grabbedObject.transform.position;
            refCenter      = center;
            refScale       = grabbedObject.transform.localScale;
            refRot         = grabbedObject.transform.rotation;
            refControllers = (rightController.transform.position - leftController.transform.position).normalized;
            refUp          = (leftController.transform.up + rightController.transform.up).normalized;
            ToolController.Instance.ToggleSelectedTool(false);
            break;

        default:
            break;
        }
    }
Пример #8
0
    public override void HandleState(XRController controller)
    {
        Vector2 value = Vector2.zero;

        if (Input.GetKey(keyUp))
        {
            value.y += mockValue;
        }
        if (Input.GetKey(keyDown))
        {
            value.y -= mockValue;
        }
        if (Input.GetKey(keyLeft))
        {
            value.x -= mockValue;
        }
        if (Input.GetKey(keyRight))
        {
            value.x += mockValue;
        }
        if (previousValue != value)
        {
            mockedAxis2D.InvokeEvent(controller, value);
        }
        previousValue = value;
    }
Пример #9
0
    protected override void Awake()
    {
        base.Awake();

        foreach (XRController controller in GetComponentsInChildren <XRController>())
        {
            if (controller.side == HorizontalSide.left)
            {
                leftController = controller;
            }
            else if (controller.side == HorizontalSide.right)
            {
                rightController = controller;
            }
            controllers.Add(controller.side, controller);
            controller.Set(this);
        }

        if (rightController)
        {
            activeController = rightController;
        }
        else
        {
            activeController = leftController;
        }
    }
Пример #10
0
    // Start is called before the first frame update
    void Start()
    {
        leftHandController = GameObject.Find("LeftHand Controller");
        scene        = GameObject.Find("Scene");
        selectables  = GameObject.Find("Selectables");
        cameraOffset = GameObject.Find("Camera Offset");
        XRRig        = GameObject.Find("XR Rig");
        bending      = false;
        mainCamera   = GameObject.Find("Main Camera");


        if (leftHandController != null) // guard
        {
            leftXRController = leftHandController.GetComponent <XRController>();

            leftRayRenderer = leftHandController.GetComponent <LineRenderer>();
            if (leftRayRenderer == null)
            {
                leftRayRenderer = leftHandController.AddComponent <LineRenderer>() as LineRenderer;
            }
            //leftRayRenderer.name = "left Ray Renderer";
            leftRayRenderer.startWidth    = 0.01f;
            leftRayRenderer.positionCount = 2; // two points (one line segment)
            leftRayRenderer.enabled       = true;

            // geometry for intersection visualization
            leftRayIntersectionSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            //leftRayIntersectionSphere.transform.parent = this.gameObject.transform;
            leftRayIntersectionSphere.name = "left Ray Intersection Sphere";
            leftRayIntersectionSphere.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f);
            leftRayIntersectionSphere.GetComponent <MeshRenderer>().material.color = Color.yellow;
            leftRayIntersectionSphere.GetComponent <SphereCollider>().enabled      = false; // disable for picking ?!
            leftRayIntersectionSphere.SetActive(false);
        }
    }
    // Update is called once per frame
    void Update()
    {
        foreach (var item in m_ReticleCache)
        {
            XRController controller = item.Key.GetComponent <XRController>();

            if (controller.inputDevice.TryGetFeatureValue(new InputFeatureUsage <Vector2>("Primary2DAxis"), out Vector2 value))
            {
                if (value.magnitude > (controller as XRTeleportationController).TriggerTeleportThreshold)
                {
                    Vector3 camForward = Camera.main.transform.forward;
                    camForward.y = 0;
                    camForward   = Quaternion.LookRotation(new Vector3(value.x, 0, value.y)) * camForward;
                    item.Value.transform.GetChild(0).rotation = Quaternion.LookRotation(camForward);
                }
                else
                {
                    TeleportRequest tr = new TeleportRequest();
                    tr.matchOrientation = MatchOrientation.Camera;
                    tr.requestTime      = Time.time;
                    if (GenerateTeleportRequest(item.Key, new RaycastHit(), ref tr))
                    {
                        m_TeleportationProvider.QueueTeleportRequest(tr);
                    }

                    onSelectEnter.Invoke(item.Key);
                }
            }
        }
    }
Пример #12
0
    // Start is called before the first frame update
    void Start()
    {
        startPosition = transform.position;
        startRotation = transform.rotation;

        mainCamera          = GameObject.Find("Main Camera");
        rightHandController = GameObject.Find("RightHand Controller");

        if (rightHandController != null) // guard
        {
            rightXRController = rightHandController.GetComponent <XRController>();
        }

        techniques.Add(GetComponent <DefaultRay>());
        techniques.Add(GetComponent <DepthRay>());
        techniques.Add(GetComponent <GoGoScript>());
        techniques.Add(GetComponent <Argelaguet>());

        foreach (var t in techniques)
        {
            t.enabled = false;
        }
        activeTechnique         = techniques[currentTechniqueIdx];
        activeTechnique.enabled = true;

        Debug.Log("Active Technique: " + activeTechnique);
    }
Пример #13
0
 private void TryStopGrab(XRController controller, XRRayInteractor interactor)
 {
     if (m_target != null && IsOwner(controller))
     {
         m_target.StopGrab();
     }
 }
Пример #14
0
    // Update is called once per frame
    void FixedUpdate()
    {
        //verifier quel bouton est actif
        boutonPrimaireActifDroit  = CheckIfPrimaryActive(rightHand);
        boutonPrimaireActifGauche = CheckIfPrimaryActive(leftHand);

        //si on a activé la main droite ET qu'on est au sol OU en train de voler
        if (boutonPrimaireActifDroit && (CheckIfGrounded() || variablesGlobales.voler == true))
        {
            //la main droite devient la main qui tire
            draggingHand = rightHand;
            //desactive le script de mouvement continu
            moveScript.enabled = false;
            //active fonction drag
            drag();
        }
        //si la manette de gauche est activée  ET qu'on est au sol OU en train de voler
        else if (boutonPrimaireActifGauche && (CheckIfGrounded() || variablesGlobales.voler == true))
        {
            //la main droite devient la main qui tire
            draggingHand = leftHand;
            //desactive le script de mouvement continu
            moveScript.enabled = false;
            //active fonction drag
            drag();
        }
        //si aucune main n'est activée, on laisse le script de mouvement continu
        else
        {
            moveScript.enabled = true;
        }
    }
Пример #15
0
 private void HideRadialMenu(XRController controller, XRRayInteractor interactor)
 {
     if (controller.controllerNode == hand)
     {
         RadialMenu.Show(false);
     }
 }
Пример #16
0
 private void SecondaryHold(XRController controller, XRRayInteractor interactor)
 {
     if (controller.controllerNode == hand)
     {
         m_buttons |= MouseButton.Right;
     }
 }
Пример #17
0
 private void Awake()
 {
     // Set the instance so that any script can call this from script
     current = this;
     // End
     return;
 }
Пример #18
0
    protected override void OnSelectExit(XRBaseInteractor interactor)
    {
        base.OnSelectExit(interactor);

        selectingInteractor = null;
        selectingController = null;
    }
Пример #19
0
 private void PrimaryHold(XRController controller, XRRayInteractor interactor)
 {
     if (controller.controllerNode == hand)
     {
         m_buttons |= MouseButton.Left;
     }
 }
Пример #20
0
    void Awake()
    {
        scene = GameObject.Find("Scene");
        rightHandController = GameObject.Find("RightHand Controller");

        if (rightHandController != null) // guard
        {
            rightXRController = rightHandController.GetComponent <XRController>();

            //rightRayRenderer = gameObject.AddComponent<LineRenderer>();

            rightRayRenderer = rightHandController.GetComponent <LineRenderer>();
            if (rightRayRenderer == null)
            {
                rightRayRenderer = rightHandController.AddComponent <LineRenderer>() as LineRenderer;
            }
            //rightRayRenderer.name = "Right Ray Renderer";
            rightRayRenderer.startWidth    = 0.01f;
            rightRayRenderer.positionCount = 2; // two points (one line segment)
            rightRayRenderer.enabled       = true;

            // geometry for intersection visualization
            rightRayIntersectionSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            //rightRayIntersectionSphere.transform.parent = this.gameObject.transform;
            rightRayIntersectionSphere.name = "Right Ray Intersection Sphere";
            rightRayIntersectionSphere.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f);
            rightRayIntersectionSphere.GetComponent <MeshRenderer>().material.color = Color.yellow;
            rightRayIntersectionSphere.GetComponent <SphereCollider>().enabled      = false; // disable for picking ?!
            rightRayIntersectionSphere.SetActive(false);                                     // hide
        }
    }
Пример #21
0
        public bool GetPointerDown(int button)
        {
            XRController activeController = ActiveController(button);

            if (activeController != null)
            {
                bool value;
                if (activeController.inputDevice.TryGetFeatureValue(GetUsageForPointer(button), out value) && value && !IsPressed(button))
                {
                    return(true);
                }
                return(false);
            }

            for (int i = 0; i < m_controllers.Length; ++i)
            {
                bool value;
                if (m_controllers[i].inputDevice.TryGetFeatureValue(GetUsageForPointer(button), out value) && value && !IsPressed(button))
                {
                    ActiveController(button, m_controllers[i]);
                    return(true);
                }
            }
            return(false);
        }
Пример #22
0
 public MockHMDInput(XRController right, XRController left)
 {
     m_rightController = right;
     m_leftController  = left;
     m_rightHand       = right.GetComponent <XRRayInteractor>();
     m_leftHand        = left.GetComponent <XRRayInteractor>();
 }
Пример #23
0
 private void PrintGripR(XRController controller, float value)
 {
     if (value > Mathf.Epsilon)
     {
         print("GripR: " + value);
     }
 }
Пример #24
0
 private void PrintTriggerL(XRController controller, float value)
 {
     if (value > Mathf.Epsilon)
     {
         print("TriggerL: " + value);
     }
 }
Пример #25
0
 private void TryMoveGrab(XRController controller, XRRayInteractor interactor)
 {
     if (m_target != null && m_target.IsValid && IsOwner(controller) && m_style == GrabStyle.Laser)
     {
         TryMoveTo(interactor);
     }
 }
Пример #26
0
        /// <summary>
        /// Gets the XR InputDevice and sets the correct model to display.
        /// This is where a controller is detected and initialized.
        /// </summary>
        /// <returns>True if successful</returns>
        private bool InitializeController(bool isRight, InputDeviceCharacteristics characteristics,
                                          out InputDevice inputDevice,
                                          GameObject handPrefab,
                                          XRController modelParent, out Animator handAnimator, out UiInputHints inputHints,
                                          out XrBrush brush)
        {
            var devices = new List <InputDevice>();

            InputDevices.GetDevicesWithCharacteristics(characteristics, devices);

            foreach (var item in devices)
            {
                Debug.Log($"Detected {item.name}: {item.characteristics}");
            }

            handAnimator = null;
            if (devices.Count > 0)
            {
                inputDevice = devices[0];

                var deviceName = inputDevice.name;
                var prefab     = useHands ? handPrefab : controllerPrefabs.Find(p => deviceName.StartsWith(p.name));

                if (!prefab)
                {
                    //TODO: find correct names for Rift CV1 and Quest
                    Debug.LogWarning(
                        $"Could not find controller model with name {deviceName}, using default controllers.");
                    prefab = controllerPrefabs[isRight ? 1 : 0];
                }

                var go = Instantiate(prefab, modelParent.modelTransform);
                if (useHands)
                {
                    handAnimator = go.GetComponent <Animator>();
                }

                inputHints = go.GetComponentInChildren <UiInputHints>();
                inputHints.Initialize();
                if (inputHints)
                {
                    RepaintInputHints(!isRight, isRight);
                }

                brush = go.GetComponentInChildren <XrBrush>();
                if (brush)
                {
                    brush.Initialize(isRight);
                }

                return(true);
            }

            inputDevice = default;
            inputHints  = null;
            brush       = null;
            // Debug.LogWarning("No hand controller found with characteristic: " + c);
            return(false);
        }
Пример #27
0
    protected override void OnSelectExitFeedbackFunction(XRController controller)
    {
        switch (feedbackType)
        {
        case VisualFeedbackType.MeshRenderer:

            if (runOnTouch && xrFeedback.IsTouching)
            {
                meshRenderer.material.color = xrUIColors.touchColor;
            }
            else if (runOnNear && xrFeedback.IsNear)
            {
                meshRenderer.material.color = xrUIColors.nearColor;
            }
            else
            {
                meshRenderer.material.color = xrUIColors.normalColor;
            }

            break;

        case VisualFeedbackType.SpriteRenderer:

            if (runOnTouch && xrFeedback.IsTouching)
            {
                spriteRenderer.color = xrUIColors.touchColor;
            }
            else if (runOnNear && xrFeedback.IsNear)
            {
                spriteRenderer.color = xrUIColors.nearColor;
            }
            else
            {
                spriteRenderer.color = xrUIColors.normalColor;
            }

            break;

        case VisualFeedbackType.Outline:

            if (runOnTouch && xrFeedback.IsTouching)
            {
                outline.OutlineColor = xrUIColors.touchColor;
            }
            else if (runOnNear && xrFeedback.IsNear)
            {
                outline.OutlineColor = xrUIColors.nearColor;
            }
            else
            {
                outline.OutlineColor = xrUIColors.normalColor;
            }

            break;

        default:
            break;
        }
    }
Пример #28
0
 public Vector2 GetValue(XRController controller)
 {
     if (controller.inputDevice.TryGetFeatureValue(inputFeature, out Vector2 value))
     {
         return(value);
     }
     return(Vector2.zero);
 }
Пример #29
0
 public float GetValue(XRController controller)
 {
     if (controller.inputDevice.TryGetFeatureValue(inputFeature, out float value))
     {
         return(value);
     }
     return(0.0f);
 }
Пример #30
0
 // Start is called before the first frame update
 private void Start()
 {
     // Initalize values
     controller = GetComponent <XRController>();
     //HandPosition = gameObject.transform.position;
     //prevPos = gameObject.transform.position;
     velocity = Vector3.zero;
 }