【VR,OculusGo,Unity】素人がコントローラーでオブジェクトを動かす のコード
【VR,OculusGo,Unity】素人がコントローラーでオブジェクトを動かす
のコード
元記事
以下お二人のコードを参考にしています。
ありがとうございます。
コード
LaserPointer
using System.Collections; using System.Collections.Generic; using UnityEngine; public class LaserPointer : MonoBehaviour { public bool IsActive = true; //稼働フラグ public float defaultLength = 0.5f; //ヒットなしのときのレーザーの長さ public bool shotRay = true; //Ray を撃つ(false のときは target に指す位置を入れる) public float rayLength = 500f; //Ray の長さ public LayerMask rayExclusionLayers; //Ray 判定を除外するレイヤー public Transform target; //指す位置(shotRay=true のときはヒットしたオブジェクトの transform が入る) [SerializeField] Transform rightHandAnchor; [SerializeField] Transform leftHandAnchor; [SerializeField] Transform centerEyeAnchor; public LineRenderer lineRenderer; //レーザーを描画するラインレンダラ PointerManager manager; private Transform anchor { get { // 現在アクティブなコントローラーを取得 var controller = OVRInput.GetActiveController(); if (controller == OVRInput.Controller.RTrackedRemote) { return rightHandAnchor; } else if (controller == OVRInput.Controller.LTrackedRemote) { return leftHandAnchor; } return centerEyeAnchor; } } // Use this for initialization void Awake() { if (lineRenderer == null) { lineRenderer = GetComponent<LineRenderer>(); } // ヒット時のPointer取得 manager = transform.Find ("Pointer").GetComponent<PointerManager> (); } // Update is called once per frame void Update() { if (!IsActive) { lineRenderer.enabled = false; return; } if (shotRay) { Ray ray = new Ray(anchor.position, anchor.forward); RaycastHit hit; if (Physics.Raycast(ray, out hit, rayLength, ~rayExclusionLayers)) { target = hit.transform; DrawTo(hit.point); //ヒットした位置にしたいため // ヒットオブジェクト取得 GetHitObject(hit); // ヒット地点にPointer表示 manager.SetPointer(hit.point); return; } target = null; } if (target != null) DrawTo(target.position); else DrawTo(anchor.position + anchor.forward * defaultLength); //コントローラの正面方向へ一定の長さ // ヒットしてない時は隠す manager.HidePointer(); } //レーザーを描く void DrawTo(Vector3 pos) { lineRenderer.enabled = true; lineRenderer.SetPosition(0, anchor.position); lineRenderer.SetPosition(1, pos); } void GetHitObject (RaycastHit hit) { // ヒットしたオブジェクトを取得 GameObject obj = hit.collider.gameObject; if (OVRInput.Get (OVRInput.Button.PrimaryIndexTrigger)) { obj.transform.position += new Vector3 (0, 0.1f, 0); } if (OVRInput.Get (OVRInput.Button.PrimaryTouchpad)) { obj.transform.position += new Vector3 (0, -0.1f, 0); } } }