// 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; } }
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; } }
// 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(); } }
void Update() { if (MyOVRInput.GetDown(this.warpInputKey)) { // ヒットしているオブジェクト名を取得 RaycastHit hitInfo; GameObject hitObj; MyOVRRayHelper.GetRayHit(out hitInfo, out hitObj); if (hitObj != null) { Vector3 newPos = hitInfo.point; newPos += new Vector3(0, this.baseHeight, 0); _moveTarget.position = newPos; } } }
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); } } }
// イベントを左右コントローラー切り替えに対応 // ------------------------------------------------------------------------------------------ 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; } }