Beispiel #1
0
        // Update is called once per frame
        void Update()
        {
            // ヒットしているオブジェクト名を取得
            RaycastHit hitInfo;
            GameObject hitObj;

            MyOVRRayHelper.GetRayHit(out hitInfo, out hitObj);
            _hitObjName = (hitObj != null ? hitObj.name : "");

            if (_enabled == true)
            {
                // コントローラーから前に伸ばしたRayを作成
                var controller = MyOVRRayHelper.GetController();
                var pointerRay = new Ray(controller.position, controller.transform.forward);
                _leaserPointerRenderer.positionCount = 2;
                _leaserPointerRenderer.SetPosition(0, pointerRay.origin);
                if (hitObj != null)
                {
                    // hitした位置までレーザーを伸ばす
                    _leaserPointerRenderer.SetPosition(1, hitInfo.point);
                }
                else
                {
                    // hitしない場合、Rayの方向に最大長さの位置をもとめてそこまでレーザーを伸ばす
                    _leaserPointerRenderer.SetPosition(1, pointerRay.origin + (pointerRay.direction * 100));
                }
            }
            else
            {
                // レーザーをクリア
                _leaserPointerRenderer.positionCount = 0;
            }
        }
Beispiel #2
0
    public static void GetRayHit(out RaycastHit outHitInfo, out GameObject outHitObj)
    {
        // 同じ時間であればキャッシュを使う
        if (Time.frameCount == _currentFrameCount)
        {
            outHitInfo = _currentHitInfo;
            outHitObj  = _currentHitInfo.collider.gameObject;
        }

        // コントローラーから前に伸ばしたRayを作成
        var controller = MyOVRRayHelper.GetController();
        var pointerRay = new Ray(controller.position, controller.transform.forward);

        // Rayがヒットした位置を取得
        if (Physics.Raycast(pointerRay, out _currentHitInfo, 100f))
        {
            outHitInfo = _currentHitInfo;
            outHitObj  = _currentHitInfo.collider.gameObject;
        }
        else
        {
            outHitInfo = _currentHitInfo;
            outHitObj  = null;
        }
    }
Beispiel #3
0
        // update
        void Update()
        {
            // ヒットしているオブジェクトを取得
            RaycastHit hitInfo;
            GameObject hitObj;

            MyOVRRayHelper.GetRayHit(out hitInfo, out hitObj);

            // 掴むのを開始
            if (MyOVRInput.GetDown(this.grabInputKey) && IsGrabable(hitObj))
            {
                _grabObject   = hitObj;
                _grabDistance = hitInfo.distance;
                _grabOffset   = _grabObject.transform.position - hitInfo.point;       // ヒットした場所からオブジェクト中心までの距離
                _gravOldPos   = _grabObject.transform.position;
            }

            // 掴んだオブジェクトを移動
            if (_grabObject != null)
            {
                // 距離変更
                if (this.isToFarAction())
                {
                    _grabDistance += this.distanceChangeSpeed;
                }
                if (this.isToNearAction())
                {
                    _grabDistance -= this.distanceChangeSpeed;
                }
                if (_grabDistance < 0.1)
                {
                    _grabDistance = 0.1f;
                }

                // 移動
                _gravOldPos = _grabObject.transform.position;

                Transform controller     = MyOVRRayHelper.GetController();
                Vector3   rayDistancePos = controller.position;
                rayDistancePos += controller.rotation * (Vector3.forward * _grabDistance);         // コントローラから_grabDistanceほど進んだ位置
                _grabObject.transform.position = rayDistancePos + _grabOffset;

                // 重力を無効にするために速度をゼロに戻しておく
                Rigidbody rigidbody = _grabObject.GetComponent <Rigidbody>();
                if (rigidbody != null)
                {
                    rigidbody.velocity = Vector3.zero;
                }
            }

            // 掴んだオブジェクトを離す
            if (MyOVRInput.GetUp(this.grabInputKey))
            {
                this.RelaseGrab();
            }
        }
Beispiel #4
0
        void Update()
        {
            if (MyOVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
            {
                Transform controller = MyOVRRayHelper.GetController();
                _basePos = controller.rotation * Vector3.forward;
            }
            if (MyOVRInput.Get(OVRInput.Button.PrimaryIndexTrigger))
            {
                Transform controller = MyOVRRayHelper.GetController();
                Vector3   currPos    = controller.rotation * Vector3.forward;
                Vector3   diffVec    = currPos - _basePos;

                float normalizedMagnitute = Mathf.InverseLerp(0f, SQRT2, diffVec.magnitude);

                if (normalizedMagnitute > 0.05f)
                {
                    _moveTarget.position += NormalizedLandscape(diffVec) * (normalizedMagnitute * _maxSpeed * Time.deltaTime);
                }
            }
        }
Beispiel #5
0
    // イベントを左右コントローラー切り替えに対応
    // ------------------------------------------------------------------------------------------
    void Update()
    {
        if (Time.frameCount % 300 != 0)
        {
            return;
        }

        var rayTransform = MyOVRRayHelper.GetController();

        var eventSystem = GameObject.Find("EventSystem");

        if (eventSystem != null)
        {
            eventSystem.GetComponent <UnityEngine.EventSystems.OVRInputModule>().rayTransform = rayTransform;
        }

        var pointer = GameObject.Find("OVRGazePointer");

        if (pointer != null)
        {
            pointer.GetComponent <OVRGazePointer>().rayTransform = rayTransform;
        }
    }