// Use this for initialization void Start() { //姿勢取得ライブラリを初期化 if (!util.IsReady()) { util.Init(); } }
// Update is called once per frame void Update() { eou.Init(); var t = eou.GetTransformBySerialNumber(serialNumber); eou.SetGameObjectTransform(ref Tracker, t); var p = Tracker.transform.position; //Tracker.transform.position = p + t.position - old.position; var q = Tracker.transform.rotation; //Tracker.transform.rotation = q * t.rotation * Quaternion.Inverse(old.rotation); p = Tracker2.transform.position; p[0] = p[0] + t.velocity[0] * Time.deltaTime; p[1] = p[1] + t.velocity[1] * Time.deltaTime; p[2] = p[2] + t.velocity[2] * Time.deltaTime; Tracker2.transform.position = p; var r = Tracker2.transform.rotation.eulerAngles; r[0] = r[0] + Mathf.Rad2Deg * (t.angularVelocity[0] * Time.deltaTime); r[1] = r[1] + Mathf.Rad2Deg * (t.angularVelocity[1] * Time.deltaTime); r[2] = r[2] + Mathf.Rad2Deg * (t.angularVelocity[2] * Time.deltaTime); Tracker2.transform.rotation = Quaternion.Euler(r); old = t; }
//OpenVRスクリーンショット撮影 public void takePhoto() { //現在のパスを設定 shotpath = Environment.CurrentDirectory + "\\OpenVRScreenshot"; shotpathvr = Environment.CurrentDirectory + "\\OpenVRScreenshot_vr"; //初期化されていないとき初期化する if (!util.IsReady()) { util.Init(); } //すでにあれば削除 if (File.Exists(shotpath + ".png")) { File.Delete(shotpath + ".png"); } //すでにあれば削除 if (File.Exists(shotpathvr + ".png")) { File.Delete(shotpathvr + ".png"); } //スクショ撮影開始 if (!util.TakeScreenShot(shotpath, shotpathvr)) { Debug.LogError("screenshot failed"); } else { Debug.Log("Shot!"); } photoshot = true; }
void Update() { eou.Init(); eou.AutoExitOnQuit(); var l = eou.GetLeftControllerTransform(); var r = eou.GetRightControllerTransform(); eou.SetGameObjectLocalTransform(ref LeftController, eou.GetLeftControllerTransform()); eou.SetGameObjectLocalTransform(ref RightController, r); }
// Update is called once per frame void Update() { eou.Init(); eou.AutoExitOnQuit(); var t = eou.GetTransformBySerialNumber(serialNumber); if (offset == null) { offset = t; } eou.SetGameObjectLocalTransformWithOffset(ref Tracker, t, offset); Debug.Log(t.ToString()); }
//デバッグ情報を更新 public void renew() { //初期化されていないとき初期化する if (!util.IsReady()) { util.Init(); } text.text = "--- OpenVR ---\n"; text.text += util.PutDeviceInfoListStringFormatted(); text.text += "--- VaNiiMenu ---\n"; text.text += "Position:" + eovro.Position + "\n"; text.text += "Rotation:" + eovro.Rotation + "\n"; text.text += "OverlayFriendlyName:" + eovro.OverlayFriendlyName + "\n"; text.text += "OverlayKeyName:" + eovro.OverlayKeyName + "\n"; text.text += "Width:" + eovro.config.width + "\n"; }
void Update() { if (!util.IsReady()) { util.Init(); return; } var h = util.GetHMDTransform(); if (h != null) { Head.transform.position = h.position; Head.transform.rotation = h.rotation; } //IPD取得してカメラに反映 float IPD = util.GetPropertyFloatWhenConnected(util.GetHMDIndex(), Valve.VR.ETrackedDeviceProperty.Prop_UserIpdMeters_Float); if (!float.IsNaN(IPD)) { LeftEye.transform.localPosition = new Vector3(-IPD / 2f, 0, 0); RightEye.transform.localPosition = new Vector3(IPD / 2f, 0, 0); } var l = util.GetLeftControllerTransform(); if (l != null) { LeftHand.transform.position = l.position; LeftHand.transform.rotation = l.rotation; } var r = util.GetRightControllerTransform(); if (r != null) { RightHand.transform.position = r.position; RightHand.transform.rotation = r.rotation; } }
void Update() { ValueWatcher(); //System.GC.Collect(); //FPSモニタ if (showing && !busy) { fps = fps * 0.99f + (1f / Time.deltaTime) * 0.01f; FPSMonitor.text = String.Format("{0:###}", 1f / Time.deltaTime); //よほどのことがない限り下がらないfpsが一気に下がったらメニューを強制的に閉じる if (fps < 15f) //表示時で15fps以下 { MenuEndFunc(0); } } else { fps = 90; //閉じてるときは90扱いにする } //初期化されていないとき初期化する if (!util.IsReady()) { util.Init(); return; } //チュートリアル中の見失い防止処理 //初期位置から動いてないときは自動で再配置する if (isInTutorial || EOVRO.Position == Vector3.zero) { TutorialTimer += Time.deltaTime; if (TutorialTimer > 10f) { TutorialTimer = 0; setPosition(); } } //移動モード if (isScreenMoving) { ulong button = 0; EasyOpenVRUtil.Transform pos = util.GetHMDTransform(); EasyOpenVRUtil.Transform cpos = null; if (screenMoveWithRight) { if (util.GetControllerButtonPressed(util.GetRightControllerIndex(), out button)) { cpos = util.GetRightControllerTransform(); } } else { if (util.GetControllerButtonPressed(util.GetLeftControllerIndex(), out button)) { cpos = util.GetLeftControllerTransform(); } } if (button == 0) { AudioMan.PlayApplySound(); isScreenMoving = false; } if (pos != null && cpos != null) { var z = 0; Vector3 ang = (cpos.rotation * Quaternion.AngleAxis(45, Vector3.right)).eulerAngles; //常にこっちに向き、ゆっくり追従する Vector3 BillboardPosition = cpos.position; //これが難しい... Vector3 BillboardRotation = new Vector3(-ang.x, -ang.y, ang.z); //こっち向く。これでオッケー EOVRO.Position = BillboardPosition; EOVRO.Rotation = BillboardRotation; } } }
// Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Q)) { Debug.Log("!"); } if (Input.GetKeyDown(KeyCode.A)) { Debug.Log(eou.Init()); } if (Input.GetKeyDown(KeyCode.W)) { Debug.Log(eou.StartOpenVR()); } if (Input.GetKeyDown(KeyCode.S)) { Debug.Log(eou.TakeScreenShot("D:\\tmp\\test", "D:\\tmp\\test2")); } if (Input.GetKeyDown(KeyCode.X)) { Debug.Log(eou.GetDeviceIndexBySerialNumber("LHR-72214A13")); } if (Input.GetKeyDown(KeyCode.Z)) { eou.Update(); Debug.Log(eou.PutDeviceInfoListString()); } if (Input.GetKeyDown(KeyCode.V)) { Debug.Log(eou.PutDeviceInfoListStringFromDeviceIndexList(eou.GetDeviceIndexListByRegisteredDeviceType("tracker"))); Debug.Log(eou.PutDeviceInfoListStringFromDeviceIndexList(eou.GetDeviceIndexListByRenderModelName("tracker"))); } if (Input.GetKeyDown(KeyCode.N)) { Debug.Log(eou.TriggerHapticPulse(eou.GetLeftControllerIndex())); Debug.Log(eou.TriggerHapticPulse(eou.GetRightControllerIndex())); } if (Input.GetKeyDown(KeyCode.B)) { Debug.Log("Controller"); Debug.Log(eou.PutDeviceInfoListStringFromDeviceIndexList(eou.GetViveControllerIndexList())); Debug.Log("Tracker"); Debug.Log(eou.PutDeviceInfoListStringFromDeviceIndexList(eou.GetViveTrackerIndexList())); Debug.Log("BaseStation"); Debug.Log(eou.PutDeviceInfoListStringFromDeviceIndexList(eou.GetBaseStationIndexList())); } if (Input.GetKeyDown(KeyCode.Y)) { } /* * Vector3 pos; * Quaternion rot; * eou.GetHMDPose(out pos, out rot); * obj.transform.position = pos; * obj.transform.rotation = rot; * * eou.GetPoseBySerialNumber("LHR-72214A13", out pos, out rot); * obj2.transform.position = pos; * obj2.transform.rotation = rot; * * Vector3 pos2; * Quaternion rot2; * eou.GetControllerPose(out pos, out rot, out pos2, out rot2); * obj3.transform.position = pos; * obj3.transform.rotation = rot; * * obj4.transform.position = pos2; * obj4.transform.rotation = rot2; */ }
// Update is called once per frame void FixedUpdate() { //初期化されていないとき初期化する if (!util.IsReady()) { util.Init(); return; } //fpsに依存しない更新にする util.SetAutoUpdate(false); util.ClearPredictedTime(); util.Update(); //フレームタイミングを表示 FrameTiming = FrameTiming * 0.99 + util.GetCompositorFrameTime() * 0.01f; FPSMonitor2.text = String.Format("{0:###.#}", FrameTiming + 0.05f); //30fpsを切ったら自動でセーフモードへ if (FrameTiming > 33.3) { ResoMan.LowResolution(false); } //秒に一回Battery残量を反映 if (BatteryUpdateTimer > 1.0f) { //コントローラ batteryWorker.PercentL = util.GetDeviceBatteryPercentage(util.GetLeftControllerIndex()) / 100.0f; batteryWorker.PercentR = util.GetDeviceBatteryPercentage(util.GetRightControllerIndex()) / 100.0f; //トラッカー List <uint> list = util.GetViveTrackerIndexList(); if (list.Count > 0) { batteryWorker.PercentT1 = util.GetDeviceBatteryPercentage(list[0]) / 100.0f; } else { batteryWorker.PercentT1 = float.NaN; } if (list.Count > 1) { batteryWorker.PercentT2 = util.GetDeviceBatteryPercentage(list[1]) / 100.0f; } else { batteryWorker.PercentT2 = float.NaN; } if (list.Count > 2) { batteryWorker.PercentT3 = util.GetDeviceBatteryPercentage(list[2]) / 100.0f; } else { batteryWorker.PercentT3 = float.NaN; } BatteryUpdateTimer = 0f; } else { BatteryUpdateTimer += Time.deltaTime; } //コントローラのボタン入力と取得可能かをチェック ulong Leftbutton = 0, Rightbutton = 0, HMDbutton = 0; bool leftok = util.GetControllerButtonPressed(util.GetLeftControllerIndex(), out Leftbutton); bool rightok = util.GetControllerButtonPressed(util.GetRightControllerIndex(), out Rightbutton); //bool hmdok = util.GetControllerButtonPressed(util.GetHMDIndex(), out HMDbutton); /* * if (hmdok) { * if ((HMDbutton & 0x80000000) != 0) * { * //かぶってる * } * else { * //かぶってない * } * }*/ //左手の加速度を取得(左手が有効な場合) Vector3 leftHandVelocity = Vector3.zero; if (leftok && config.detectLeftHand) { var trans = util.GetLeftControllerTransform(); if (trans != null) { leftHandVelocity = trans.velocity; } } //右手の加速度を取得(右手が有効な場合) Vector3 rightHandVelocity = Vector3.zero; if (rightok && config.detectRightHand) { var trans = util.GetRightControllerTransform(); if (trans != null) { rightHandVelocity = trans.velocity; } } //タップロック反映 if (config.taplockmode) { if ((Leftbutton == config.unlockkey) || (Rightbutton == config.unlockkey)) { //ボタンが押されているとき eovro.tapEnable = true; CursorL.locked = false; CursorR.locked = false; } else { //ボタンが押されていないとき eovro.tapEnable = false; CursorL.locked = true; CursorR.locked = true; } } else { //ロック関係なし eovro.tapEnable = true; CursorL.locked = false; CursorR.locked = false; } //ピーク検出 if (AccelerationPeak < Math.Abs(leftHandVelocity.y)) { AccelerationPeak = Math.Abs(leftHandVelocity.y); PeakText.text = string.Format("Acceleration\nSet: {0:#.#}", AccelerationPeak); } if (AccelerationPeak < Math.Abs(rightHandVelocity.y)) { AccelerationPeak = Math.Abs(rightHandVelocity.y); PeakText.text = string.Format("Acceleration\nSet: {0:#.#}", AccelerationPeak); } //腕振り下ろしを判定 if (leftHandVelocity.y < -config.speeddown) { //ロックモードではない or グリップボタンだけが押されている(&ロックモード) if (!config.lockmode || (Leftbutton == config.unlockkey)) { menu.IsRightHand = false; if (menu.showing == false) { menu.MenuStart = true; MissSwingTime = Time.time; //現在時刻を記録 } else { //空振り //メニューを出してから十分時間経ってるのに振った if (Time.time > MissSwingTime + 1) { AudioMan.PlayCancelSound(); //振りミス音を鳴らす MissSwingTime = Time.time; //現在時刻を記録 } } } } if (rightHandVelocity.y < -config.speeddown) { //ロックモードではない or グリップボタンだけが押されている(&ロックモード) if (!config.lockmode || (Rightbutton == config.unlockkey)) { menu.IsRightHand = true; if (menu.showing == false) { menu.MenuStart = true; MissSwingTime = Time.time; //現在時刻を記録 } else { //空振り //メニューを出してから十分時間経ってるのに振った if (Time.time > MissSwingTime + 1) { AudioMan.PlayCancelSound(); //振りミス音を鳴らす MissSwingTime = Time.time; //現在時刻を記録 } } } } //腕振り上げ判定 if (leftHandVelocity.y > config.speedup || rightHandVelocity.y > config.speedup) { //ロックモードではない or グリップボタンだけが押されている(&ロックモード) if (!config.lockmode || (Rightbutton == config.unlockkey) || (Leftbutton == config.unlockkey)) { menu.MenuEndFunc(0); } } //腕横振り判定 if (Math.Abs(leftHandVelocity.z) > config.speedup && config.slideClose) { //ロックモードではない or グリップボタンだけが押されている(&ロックモード) if (!config.lockmode || Leftbutton == config.unlockkey) { //方向判定 if (leftHandVelocity.z < 0) { menu.MenuEndFunc(1); } else { menu.MenuEndFunc(2); } } } if (Math.Abs(rightHandVelocity.z) > config.speedup && config.slideClose) { //ロックモードではない or グリップボタンだけが押されている(&ロックモード) if (!config.lockmode || Rightbutton == config.unlockkey) { //方向判定 if (rightHandVelocity.z < 0) { menu.MenuEndFunc(1); } else { menu.MenuEndFunc(2); } } } //Debug.Log(util.GetRightControllerTransform().velocity.x); }
private bool PositionInitialize = true; //位置を初期化するフラグ(完了するとfalseになる) void Start() { //姿勢取得ライブラリを初期化 util.Init(); }
// Use this for initialization void Start() { util.Init(); }