【Unity】MirageSolo see through モードに切り替え方法
2019-05-05 2019-05-18
OverView
MirageSoloで最近開放されたsee throughモード(World Sense)で使用しているカメラにアクセスする方法のメモ書き ここに書いてあるSeeThroughモードは2019-05-04現在,Betaの機能なので途中で仕様変更がされる場合があるかもしれないので悪しからず…Environment
- Windows10
- Unity 2018.2.14f1
- Lenovo Mirage Solo – Android 8.0.0
- GVR SDK for Unity v1.200.0
Method
MirageSoloのアップデート
MirageSoloをWifiに接続し,Androidのバージョンを最新版にします.MirageSoloのベータ機能設定変更
現在MirageSoloのSeeThroughモードはBeta版の機能のため,開発者用設定項目からSeeThroughモードを開放する必要があります.UnityのプロジェクトにGVR SDKをインポート
https://www.kemomimi.dev/80/ の記事と同様にGVR SDKのunitypackageをhttps://github.com/googlevr/gvr-unity-sdk/releases からDLし,Unityにインポートします.今回執筆時点で利用したSDKのバージョンは1.200.0です. バージョンが1.200.0よりも前だとsee throughモードは使えません(重要) また本エントリーは通常のVRモードで実機起動するレベルまではできていることを前提に進めます.
Appボタンでsee throughモードが切り替えられるようにする
以下のスクリプトを作成します.ChangeSeeThroughMode.csです.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
using GoogleVR.Beta; using UnityEngine; public class ChangeSeeThroughMode : MonoBehaviour { private static readonly GvrControllerHand[] AllHands = { GvrControllerHand.Right, GvrControllerHand.Left, }; [Space(15f)] public GameObject[] hideDuringSeeThrough; //SeeThrough時に非表示にしたいオブジェクトは登録しておく void Update() { foreach (var hand in AllHands) { GvrControllerInputDevice device = GvrControllerInput.GetDevice(hand); //Appボタンが押されたら if (device.GetButtonDown(GvrControllerButton.App)) { CycleSeeThroughModes(); } } } /// <summary> /// SeeThroughの表示モードを変更する /// </summary> private void CycleSeeThroughModes() { if (!GvrBetaSettings.IsFeatureEnabled(GvrBetaFeature.SeeThrough)) { return; } GvrBetaSeeThroughCameraMode camMode = GvrBetaHeadset.CameraMode; GvrBetaSeeThroughSceneType sceneType = GvrBetaSeeThroughSceneType.Augmented; //モードは3種類ありループする //VRモード → Rawモード(白黒) → ToneMapモード(セピア調的な) switch (camMode) { case GvrBetaSeeThroughCameraMode.Disabled: camMode = GvrBetaSeeThroughCameraMode.RawImage; break; case GvrBetaSeeThroughCameraMode.RawImage: camMode = GvrBetaSeeThroughCameraMode.ToneMap; break; case GvrBetaSeeThroughCameraMode.ToneMap: sceneType = GvrBetaSeeThroughSceneType.Virtual; camMode = GvrBetaSeeThroughCameraMode.Disabled; break; } GvrBetaHeadset.SetSeeThroughConfig(camMode, sceneType); //SeeThroughのモード変更 bool seethruEnabled = camMode != GvrBetaSeeThroughCameraMode.Disabled; foreach (var go in hideDuringSeeThrough) { go.SetActive(!seethruEnabled); //SeeThroughモードになったと同時に設定しておいたオブジェクトの非表示化 } } } |
動作確認
こんな感じに動けば完了です.