예제 #1
0
        public void Update()
        {
            // stop executing Update if playerController is Frozen
            if (playerController.Frozen)
            {
                setDestinationPS(true);
                return;
            }

            // stop execution here if Quest
            if (UnityEngine.XR.XRDevice.model == "Oculus Quest")
            {
                return;
            }

            // if player is walking, always disable linerender
            // if (lineRendererActive && playerController.IsWalking) {
            //   enabledRayCaster(false);
            // } else if (!lineRendererActive && !playerController.IsWalking) {
            //   enabledRayCaster(true);
            // }


            if (!playerController.IsWalking && controllerRayCaster.CurrentInteractible)
            {
                setDestinationPS(true);
            }
            else
            {
                setDestinationPS(false);
            }

            // only triggered once one player presses the trigger down
            if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger) && controllerRayCaster.CurrentInteractible)
            {
                // get current object targeted by raycast
                InteractiveItem currentInteractible = controllerRayCaster.CurrentInteractible;

                // get it's button component
                Button currentButton = currentInteractible.gameObject.GetComponent <Button>();
                if (currentButton == null)
                {
                    return;
                }

                // press the button
                currentButton.Press();
            }

            // play presses trigger button: grab item
            if (!isGrabbing && OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger) && controllerRayCaster.CurrentInteractible)
            {
                grabItem();
            }

            // player let's go of triger button: ungrab item
            if (isGrabbing && !OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger))
            {
                ungrabItem();
            }

            if (isGrabbing)
            {
                // ungrabItem if it becomes ungrabbable
                if (!currentGrabbable.IsGrabbable)
                {
                    ungrabItem();
                    return;
                }
                // move object with ElectroGrabber
                moveItem();

                // change item distance from player (only if not walking)
                if (playerController.IsWalking)
                {
                    resetTouchPadY();
                }
                else
                {
                    changeItemDistance();
                }
                // show laser beam to object
                extendLaser();
            }
        }