Example #1
0
 // Use this for initialization
 void Start()
 {
     //姿勢取得ライブラリを初期化
     if (!util.IsReady())
     {
         util.Init();
     }
 }
Example #2
0
    // 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;
    }
Example #3
0
    //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;
    }
Example #4
0
    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);
    }
Example #5
0
    // 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";
 }
Example #7
0
    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;
        }
    }
Example #8
0
    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;
            }
        }
    }
Example #9
0
    // 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;
         */
    }
Example #10
0
    // 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);
    }
Example #11
0
    private bool PositionInitialize = true;                            //位置を初期化するフラグ(完了するとfalseになる)

    void Start()
    {
        //姿勢取得ライブラリを初期化
        util.Init();
    }
Example #12
0
 // Use this for initialization
 void Start()
 {
     util.Init();
 }