はじめに
先日Oculus Questがアップデートされて以下の記事のようにコントローラーのトラッキング改善やガーディアンの機能強化されました。
- Quest / Go / Gear VR Build 7.0 Release Notes
- Quest / Go / Gear VR Build 8.0 Release Notes
- Quest / Go / Gear VR Build 9.0 Release Notes
- Quest / Go / Gear VR Build 10.0 Release Notes
- Quest / Go / Gear VR Build 11.0 Release Notes
- Quest / Go / Gear VR Build 12.0 Release Notes
- Quest / Go Build 13.0 Release Notes
- Quest / Go Build 14.0 Release Notes
- Quest / Go Build 15.0 Release Notes
- Quest / Go Build 16.0 Release Notes
- Quest / Go Build 17.0 Release Notes
- Quest / Go Build 18.0 Release Notes
- Quest Build 19.0 Release Notes
- Quest Build 20.0 Release Notes
- Quest 2 / Quest Build 23.0 Release Notes
- Quest 2 / Quest Build 25.0 Release Notes
- Quest 2 / Quest Build 26.0 Release Notes
- Quest 2 / Quest Build 27.0 Release Notes
- Quest 2 / Quest Build 28.0 Release Notes
- Quest 2 / Quest Build 29.0 Release Notes
- Quest build v31 release notes
- Oculus QuestとRift Sの次期アプデ内容が公開、トラッキング改善やディスプレイのトラブル解消へ
このアップデートで自作したVRアプリを実行するとコントローラーが片手しかトラッキングされなくなったりボタンのマッピングがおかしくなってしまうので対策します。
また、Build 9.0にアップデートされると開発者モードがオフになってしまいます。スマホのアプリから再度オンにしてください。
※追記1
Oculus Integration v1.39.0のOvrAvatarの挙動も変わっているので対策します。
以下のシーンはOvrAvatarが使われていて未対策だとアプリがクラッシュするので対策必須です。
/Assets/Oculus/SampleFramework/Usage/AvatarGrab.scene
※追記2
Build 16.0からAndroidManifest.xml
の<application>
タグにandroid:label="@string/app_name"
とリソースファイルのapp_name
の定義、もしくはandroid:label="アプリ名"
がないと提供元不明なアプリに表示されなくなりました。Unityが生成するAndroidManifest.xml
は大丈夫なので手動で削除していない限り問題ありません。
また、インストール済みのアプリが見えない場合は再インストールすると見えるようになります。
環境
- Oculus Integration for Unity
- Unreal Engine [UE ver.(Oculus Integration ver.)]
- Oculus Unreal Integration [Oculus Integration ver.(UE ver.)]
- v1.38.0(4.22.2)
- v1.39.0(4.23.0-preview-3)
- v1.40.0(4.23.0-preview-8)
- v1.41.0(4.23.0)
- v1.42.0(4.23.1)
- v1.43.0(4.23.1)
- v12.0(v1.44)(4.24.1)
- v13.0(v1.45)(4.24.2)
- v14.0(v1.46)(4.24.3)
- v15.0(v1.47)(4.24.3)
- v16.0(v1.48)(4.24.3)
- v17.0(v1.49)(4.25.0)
- v18.0(v1.50)(4.25.1)
- v19.0(v1.51)(4.25.3)
- v20.0(v1.52)(4.25.3)
- v20.1(v1.52.1)(4.25.3)
- v23.0(v1.55.0)(4.25.4)
- v25.0(v1.57.0)(4.26.0)
- v27.0(v1.59.0)(4.26.1)
- v28.0(v1.60.0)(4.26.2)
- v29.0(v1.61.0)(4.26.2)
- v31.0(v1.63.0)(4.26.2)
Unity
コントローラーの対策
公式ドキュメントに設定手順が追加されていました。
v1.41.0からOVRManagerコンポーネントのTarget DeivcesはQuest
がデフォルトになったので何も変更しなくてもよくなりました。そのため逆にOculus Goアプリを作る場合は変更が必要となります。
v1.40.0からOVRManagerコンポーネントのTarget Devicesの先頭をQuest
に変更するだけでよくなりました。
v1.39.0とv1.38.0はOVRManagerコンポーネントのTarget Devicesの先頭をQuest
に変更した上でAndroidManifest.xmlにuses-feature
を追加します。
公式ドキュメントに追加される前にFix for sideloaded/homebrew apps and games with the new firmware updateで対策を見付けた方がいてAndroidManifest.xml
に以下のfeatureを追加すれば両手のコントローラーが正しくトラッキングされます。これはQuestアプリをOculus Storeに提出する時に必須の設定のようです。
<uses-feature android:name="android.hardware.vr.headtracking" android:required="true" android:version="1"/>
具体的に以下のいずれかの方法でAndroidManifest.xml
を修正します。
v14.0(v1.46.0)以降
Oculus Integration **v14.0(1.46.0)**からOVRManager
のTarget Devices
がドロップダウンリストからチェックボックスに変わりました。
v1.40.0以降
Oculus Integration v1.40.0から少し手間が減ったので更新をおすすめします。
v1.38.0とv1.39.0のQuest対応が中途半端なのが混乱の元凶だったんだ…
- OVRManagerのTarget Devicesに
Quest
を追加します。Quest向けアプリなら既に設定済みだと思います。更にv1.41.0はデフォルト値がQuest
に変わったので設定不要になりました。逆にOculus Goアプリを作る時に設定変更が必要です。
- Unity2018.4以下でBuild SettingsのビルドシステムがInternalならGradleに変更します。Unity2019.1以上はビルドシステムの項目がなくなりGradleのみになったので特に設定するものはありません。
以上の設定で独自に/Assets/Plugins/Android/AndroidManifest.xml
がなくてもビルド時にQuestに必要なfeatureが自動で追加されます。
v1.39.0以前
Create store-compatible AndroidManifest.xml
Oculus Store提出用のAndroidManifest.xmlを作る方法です。
- v1.40.0以上に更新する方法と同様にOVRManagerのTarget Devicesに
Quest
を追加します。 - 次に
/Assets/Plugins/Android/AndroidManifest.xml
を削除します。メニューのOculus > Tools > Remove AndroidManifest.xmlが簡単です。 - 最後にメニューのOculus > Tools > Create store-compatible AndroidManifest.xmlを実行します。これで上記のfeatureが含まれたAndroidManifest.xmlが生成されます。あらかじめOVRManagerのTarget Devicesに
Quest
を入れておかないと必要なfeatureが含まれないので注意してください。
ビルドして実行エラー対策
- v1.39.0までのバージョンで生成した
AndroidManifest.xml
で「ビルドして実行」を行うと以下のエラーが出ます。これはビルドとインストールまで完了しているのですがUnityから実行する時に必要なandroid.intent.category.LAUNCHER
が定義されていないためです。 - v1.40.0から
android.intent.category.LAUNCHER
が定義されたAndroidManifest.xml
が生成されるようになったのでビルドして実行エラーは出なくなりました。
そこで以下のようにandroid.intent.category.LAUNCHER
を追加するとビルドして実行からアプリの実行までできるようになります。
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.INFO"/>
<category android:name="android.intent.category.LAUNCHER"/> <!-- この行を追加する -->
</intent-filter>
直接記述する
UnityプロジェクトでAndroid向けにビルドすると[Project Folder]/Temp/gradleOut/src/main/AndroidManifext.xml
が生成されるので[Project Folder]/Assets/Plugins/Android/AndroidManifest.xml
にコピーして他のuses-feature
の近くに上記のfeatureを追記します。
コールバックで対策する
UnityはGradleプロジェクト生成後に呼ばれるコールバックがあるので以下のスクリプトでAndroidManifest.xml
に上記のfeatureを追加します。
このコールバックを利用すると次のような事もできます。
#if UNITY_ANDROID
using System;
using System.IO;
using System.Text;
using System.Xml;
using UnityEditor;
using UnityEditor.Android;
public class ModifyUnityAndroidAppManifest : IPostGenerateGradleAndroidProject
{
public void OnPostGenerateGradleAndroidProject(string basePath)
{
var isVr = PlayerSettings.GetVirtualRealitySupported(BuildTargetGroup.Android);
var vrSdks = PlayerSettings.GetVirtualRealitySDKs(BuildTargetGroup.Android);
var hasOculus = Array.Exists(vrSdks, s => s == OVRManager.OCULUS_UNITY_NAME_STR);
if (isVr && hasOculus)
{
if (OVRDeviceSelector.isTargetDeviceQuest)
{
var androidManifest = new AndroidManifest(GetManifestPath(basePath));
androidManifest.EnableQuestApp();
androidManifest.Save();
}
}
}
public int callbackOrder => 10;
private string _manifestFilePath;
private string GetManifestPath(string basePath)
{
if (string.IsNullOrEmpty(_manifestFilePath))
{
var pathBuilder = new StringBuilder(basePath);
pathBuilder.Append(Path.DirectorySeparatorChar).Append("src");
pathBuilder.Append(Path.DirectorySeparatorChar).Append("main");
pathBuilder.Append(Path.DirectorySeparatorChar).Append("AndroidManifest.xml");
_manifestFilePath = pathBuilder.ToString();
}
return _manifestFilePath;
}
}
internal class AndroidXmlDocument : XmlDocument
{
private string m_Path;
protected XmlNamespaceManager nsMgr;
public readonly string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android";
public readonly string ToolsXmlNamespace = "http://schemas.android.com/tools";
public AndroidXmlDocument(string path)
{
m_Path = path;
using (var reader = new XmlTextReader(m_Path))
{
reader.Read();
Load(reader);
}
nsMgr = new XmlNamespaceManager(NameTable);
nsMgr.AddNamespace("android", AndroidXmlNamespace);
}
public string Save()
{
return SaveAs(m_Path);
}
public string SaveAs(string path)
{
using (var writer = new XmlTextWriter(path, new UTF8Encoding(false)))
{
writer.Formatting = Formatting.Indented;
Save(writer);
}
return path;
}
}
internal class AndroidManifest : AndroidXmlDocument
{
private readonly XmlElement ApplicationElement;
public AndroidManifest(string path) : base(path)
{
ApplicationElement = SelectSingleNode("/manifest/application") as XmlElement;
}
private XmlAttribute CreateAndroidAttribute(string key, string value)
{
var attr = CreateAttribute("android", key, AndroidXmlNamespace);
attr.Value = value;
return attr;
}
private XmlAttribute CreateToolsAttribute(string key, string value)
{
var attr = CreateAttribute("tools", key, ToolsXmlNamespace);
attr.Value = value;
return attr;
}
public void EnableQuestApp()
{
const string headTrackingName = "android.hardware.vr.headtracking";
var headTrackingData = SelectNodes($"/manifest/uses-feature[@android:name='{headTrackingName}']", nsMgr);
if (headTrackingData != null && headTrackingData.Count > 0)
{
return;
}
var manifest = SelectSingleNode("/manifest");
if (manifest == null)
{
return;
}
// /manifest に <uses-feature android:name="android.hardware.vr.headtracking" android:required="true" android:version="1" tools:node="merge" /> を追加する
var newUsesFeature = CreateElement("uses-feature");
newUsesFeature.Attributes.Append(CreateAndroidAttribute("name", headTrackingName));
newUsesFeature.Attributes.Append(CreateAndroidAttribute("required", "true"));
newUsesFeature.Attributes.Append(CreateAndroidAttribute("version", "1"));
newUsesFeature.Attributes.Append(CreateToolsAttribute("node", "merge"));
manifest.AppendChild(newUsesFeature);
}
}
#endif
OvrAvatarの対策
- v1.38.0のOvrAvatarはARMv7向けライブラリしかありません。IL2CPP/ARM64でビルドおよび実行できるのですが手が表示されません。ARMv7でビルドしましょう。
- v1.39.0以降のOvrAvatarはOculus > Avatars > Edit Settingsから生成したOvrAvatarSettings.assetにId設定が必須になりました。未設定だとクラッシュしてしまうので自分のIdやTesting Your Integrationに用意されているテスト用Idを設定します。
また、ARM64向けライブラリが追加されたのですがIL2CPP/ARM64でビルドして実行するとスプラッシュ画面の後にOculus Questで「アップデート中」が出た場合の対処法と同じダイアログが出て結局実行できません… - v1.40.0でARM64でビルドしても動くようになりました。
またv1.39.0以降のOvrAvatarでController Shader
が追加されていますが/Assets/Oculus/SampleFramework/Usage/AvatarGrab.scene
では設定されていないのが原因でアバターのオブジェクトを無限生成して落ちてしまいます。
/Assets/Oculus/Avatar/Content/Prefabs/LocalAvatar.prefab
を参考にOvrAvatar/AvatarPBRV2Simple
を設定すればよいでしょう。
v1.41.0
セキュリティ設定
Oculus Integration v1.41.0からOVRManager
にセキュリティ設定が追加されました。
-
Disable Backups
をチェックするとAndroidManifest.xmlにandroid:allowBackup="false"
が設定されてadb
コマンドでもバックアップできなくなります。 -
Enable NSC Configuration
をチェックするとネットワークセキュリティ構成が有効になりHTTPS通信が必須になります。設定ファイルは/Assets/Oculus/VR/Editor/network_sec_config.xml
にあるので必要に応じて設定を追加します。
Low Overhead ModeとOVROverlay
Oculus Integration v1.41.0とUnity2018.4.9f1 / Unity2019.2.0f1からLow Overhead Modeが追加されています。このオプションを有効にするとOpenGL ESのエラーチェックをスキップしてパフォーマンスを向上させるのですがOVROverlayを一緒に使うとクラッシュしてしまいます。他にもクラッシュする原因があるかもしれないので安易に有効にするのは危険です。
v1.42.0
OVRVoiceModが同梱されなくなった
Oculus Integration v1.41.0までOVRVoiceMod(ボイスチェンジャーみたいなもの)が同梱されていたのですがv1.42.0から削除されました。
必要な場合は別途ダウンロードすると引き続き利用できます。
GearVRサポート廃止
Oculus開発ブログよりOculus Integration v1.42.0 (Mobile SDK 1.27.0)からGearVRのサポートが廃止されます。GearVRアプリを開発する場合はそれより前のバージョンを使う必要があります。
v12.0(1.44.0)
ハンドトラッキング設定
permission名はv17.0(1.49.0)からcom.oculus.permission.HAND_TRACKING
変更されています。
Oculus Integration **v12.0(1.44.0)**からOVRManager
にハンドトラッキング設定が追加されました。
デフォルトではControllers Only
なのでハンドトラッキングを使う場合はControllers And Hands
かHands Only
に変更してください。
この設定によりAndroidManifest.xmlに以下が追加されます。
-
Controllers Only
- 変更なし
-
Controllers And Hands
AndroidManifest.xml<uses-permission android:name="oculus.permission.handtracking" /> <uses-feature android:name="oculus.software.handtracking" android:required="false" />
-
Hands Only
AndroidManifest.xml<uses-permission android:name="oculus.permission.handtracking" /> <uses-feature android:name="oculus.software.handtracking" android:required="true" />
v13.0(1.45.0)
Enable Focus Awareness
Oculus Integration **v13.0(1.45.0)**からOVRManager
にEnabling Focus Awarenessが追加されました。
Oculus QuestのアプリはシステムUIが表示される時はアプリが一時停止するのですがこの機能を有効にするとアプリが動いたままシステムUIがオーバーレイで表示されるようです。
Unityエディターでハンドトラッキングサポート
Oculus Integration **v13.0(1.45.0)**からOculus QuestでOculus Linkを有効にしてUnityエディターをPlayするとハンドトラッキングできます。
ただしマウスやキーボードでUnityエディターをPlayすると動いたのですが、Oculus DesktopからPlayするとUnityエディターが落ちてしまいました。
Unityエディタがクラッシュする件について @torano0314 さんから再現パターンをコメントで教えてきただきました。ハンドトラッキングしたい時はコントローラーが認識されなくなるまで待てば良さそうです。
Oculus Questでハンドトラッキング有効にし、Linkを使ってエディターから実行するとクラッシュする問題ですが、Oculus Desktopには関係なく、コントローラを触っているとクラッシュするみたいです。コントローラが認識されなくなるのを待ち(コントローラが画面から消え、コントローラが必要です、のようなポップアップがでるのを待ち)実行するとクラッシュしないで済みます。
https://forums.oculusvr.com/developer/discussion/86322/v13-15-editor-crashes-on-play-after-upgrading-oculus-integration#latestまた他にもAndroidManifestやOVRManagerのハンドトラッキングの項目に関わらず手とコントローラ両方が有効になっているという問題もあります。(ハンドトラッキングがオフの時は問題ないかもしれません。)
この問題はv13のときにOculusに報告したのですがまだ解決されず、v15でも続いているみたいです。何か解決策がないかと探しているのですが見つからず。。。
Unityエディタでハンドトラッキング動いたあああ。さっきと何が違ったんだろう? https://t.co/CEqHbm5Emg pic.twitter.com/6R6HDelR2O
— KOGA Mitsuhiro (@shiena) February 8, 2020
v14.0(1.46.0)
dynamic foveation
Oculus Integration **v14.0(1.46.0)**からOVRManager
にdynamic foveationが追加されました。有効にすると適切なfoveation levelに設定されます。
/// <summary>
/// Let the system decide the best foveation level adaptively (Off .. fixedFoveatedRenderingLevel)
/// This feature is only supported on QCOMM-based Android devices
/// </summary>
public static bool useDynamicFixedFoveatedRendering
{
get
{
if (!OVRPlugin.fixedFoveatedRenderingSupported)
{
Debug.LogWarning("Fixed Foveated Rendering feature is not supported");
}
return OVRPlugin.useDynamicFixedFoveatedRendering;
}
set
{
if (!OVRPlugin.fixedFoveatedRenderingSupported)
{
Debug.LogWarning("Fixed Foveated Rendering feature is not supported");
}
OVRPlugin.useDynamicFixedFoveatedRendering = value;
}
}
Color Gamut
Oculus Integration **v14.0(1.46.0)**からOVRManager
でColor Gamut
を設定できるようになりました。
v15.0(1.47.0)
OVRVignette
Oculus Integration **v15.0(1.47.0)**からOVRVignette
が追加されてCameraと同じGameObjectにアタッチするとVignetteエフェクトを表現できます。
OVRManager/Security/Custom Security XML Path
Oculus Integration **v17.0(1.49.0)**からOVRManagerのSecucityでCustom Security XML Path
を指定できるようになりました。
それまではAssets/Oculus/VR/Editor/network_sec_config.xml
で固定されていました。
リリース版ハンドトラッキングのパーミッション
Oculus Integration **v17.0(1.49.0)**からOculus Questでハンドトラッキングを有効にした時のパーミッション名が変更されました。
自前で用意したAndroidManifest.xml
に記述した場合は変更が必要です。
v18.0(1.50.0)
v18.0からUnity2018.4.3f1以上必須
Oculus Integration **v18.0(1.50.0)**からUnity2018.4.3f1以上が必要になったのでそれ以前のバージョンを判定する#if UNITY_2018_3_OR_NEWER
のようなプリプロセッサディレクティブが削除されました。
v19.0(1.51.0) / v19.1(1.51.1)
Oculus Questで組み込みキーボード
Oculus Integration **v19.0(1.50.1)**からFocus Aware
とRequires System Keyboard
を有効にするとInput Filedにフォーカスを当てた時にシステムキーボードを利用できるようになりました。またプログラムからはTouchScreenKeyboardで開くことができます。
Require System Keyboard
を有効にするとAndroidManifest.xmlに以下のuses-feature
が追加されます。
<uses-feature android:name="oculus.software.overlay_keyboard" android:required="false"/>
キーボードが出ない場合は一旦ユニバーサルメニューを無効にして再度有効にすると出るかもしれません。
v19.0からGearVR/OculusGoが非推奨
Oculus Integration **v19.0(1.50.1)**からGearVR/OculusGo対応コードが削除されました。それに伴ないOVRManagerのTarget Devices
もQuestしか選べなくなっています。
ARM64とOculus XR Plugin 1.4.0以上を推奨
Oculus Integration **v19.0(1.50.1)**からARM64とOculus XR Plugin 1.4.0以上が推奨されています。ARMv7や古いOculus XR PluginやレガシーXRサポートで問題が出たら切り替えると解決するようです。
v20.0(1.52.0)
OVROverlayをエディタでプレビュー
Oculus Integration **v20.0(1.52.0)**からOVROverlayをエディタでプレビューできるようになりました。
SampleFrameworkのGuardianBoundarySystem削除
Oculus Integration **v20.0(1.52.0)**からSampleFrameworkにあった以下のGuardianBoundarySystemシーンとアセットが削除されました。
Assets/Oculus/SampleFramework/Usage/GuardianBoundarySystem.unity
Assets/Oculus/SampleFramework/Usage/GuardianBoundarySystem/
v20.1(1.52.1)
Oculus Quest2をサポート
Oculus Integration **v20.1(1.52.1)**からOculus Quest2がサポートされて以下の通りに変更されました。
-
Quest2をチェックするとビルド時にmeta-data属性が追加されます。これでQuest2をサポートする事を示します。
AndroidManifest.xml
v23.1(1.55.1)
OpenXRを実験的にサポート
Oculus Integration **v23.1(1.55.1)**からOpenXRを実験的にサポートされてメニューから有効、無効を切り替えられるようになりました。
現時点では以下の機能がサポートされていません。
Considering that the availablity of OVRPlugin with OpenXR is under experimental state, there are a few known features that are not supported. The list includes FFR, OVROverlay, Near touch buttons, and Hand tracking.
同期フェーズ
Oculus Integration **v23.1(1.55.1)**から同期フェーズがサポートされました。
XR Plugin ManagementとOculus XR Plugin v1.7.0以上で設定できます。
Quest2で80Hzと90Hzのリフレッシュレートをサポート
Oculus Integration **v23.1(1.55.1)**から80Hzと90Hzの表示リフレッシュレートをサポートするようになりました。
このリフレッシュレートを利用するためには以下のQuest2判定も一緒に設定が必要です。
Quest2判定の値変更
Oculus Integration **v23.1(1.55.1)**からOculus Quest2判定の値がdelmar
からquest2
に変わりました。
自前で用意したAndroidManifest.xmlに記述した場合は変更が必要です。
<meta-data android:name="com.oculus.supportedDevices" android:value="quest|quest2"/>
Android arm64版のOculusSparializerがなくなった
いつの間にか戻っていました。
Oculus Integration **v23.1(1.55.1)**で何故かarm64版のOculusSpatializerが削除されました。
v25.0(1.57.0)
- Unityからストアにデバッグシンボルをアップロードできるようになる
- コントローラーがアニメーションする
- Color Space APIが
nativeColorGamut
とcolorGamut
を使う - OVROverlayが魚眼レイヤーをサポート
-
OVRPlugin.SetKeyboardOverlayUV()
でキーボード位置を変更するAPI追加 -
eyeFovPremultipliedAlphaModeEnabled
でEye Fovレイヤーの事前アルファの有効、無効を可能になる - 以下のOpenXRの機能をサポート
- Different color spaces
- Color Scale/Bias
- Is External Surface
- Equirect Layer
- Cubemap Layer
- Underlays
- Left/Right Textures
- Headlocked Layer
- Cylinder Layer
- Quad Layer
v27.0(1.59.0)~v29.0(1.61.0)
主にバグ修正とOpenXRのサポート範囲拡大です。
v31.0(1.63.0)
- カメラパススルーAPIを追加
- パススルーAPIを使うためには以下の設定が必須です。
- Unity2019.4以前の場合はメニューのOculus -> Tools -> OpenXR -> Switch to OVRPlugin with OpenXR backendを実行してOpenXRを有効にする
- Color SpaceをLinearに設定
- Scripting BackendをIL2CPPに設定
- Target ArchitectureをARM64をチェック
- OVRManagerで
Experiment Features Enabled
とPassthrough Capability Enabled
とEnable Paththrough
をチェック -
adb shell setprop debug.oculus.experimentalEnabled 1
を実行する
- Firebase AnalyticsとCrashlyticsを組込むサンプル追加
- Firebase Unity SDKをインストールしてメニューのOculus -> Samples -> Firebase -> Enable Firebase Sampleを実行するとサンプルシーンの
Assets/Oculus/SampleFramework/Usage/Firebase.unity
で確認できます。
- Firebase Unity SDKをインストールしてメニューのOculus -> Samples -> Firebase -> Enable Firebase Sampleを実行するとサンプルシーンの
XR Managementパッケージ利用時の注意
Package ManagerにあるXR ManagementとXR SettingsのVRサポートはどちらか一方しか利用できません。またXR Managementパッケージを利用する時はOculus XR Pluginも一緒に利用しないとOVRInputなどが動作しなくなるので必ずOculus Loaderを設定してInitialize on Startup
を有効にしてください。
Oculus Integration更新時に注意すること
Oculus Integrationはバージョンアップでファイルのパスが変わることがあるので上書き更新するとおかしな状態になる事があります。そのため/Assets/Oculus/
と/Assets/Oculus.meta
を削除した後に新規でインポートすることをお勧めします。その際にUnityから/Assets/Oculus/
を削除してもUnityがdllをロックしているのでいくつか削除されないファイルがあります。
なので以下の手順が確実です。
- 一旦、Unityを終了する
- エクスプローラから
/Assets/Oculus/
と/Assets/Oculus.meta
を削除する - Unityを開く。この時Oculus Integrationがないのでエラーが出るが一旦無視する
- Asset StoreからOculus Integrationをインポートする
Oculus Link
Oculus HomeおよびOculus Quest v13から「コントロールパネル > サウンド > 再生」にあるOculus Virtual Audio Deviceの名前をHeadphones
にしないとOculus Linkにつながらなくなりました。
UE4
コントローラーの対策
公式ドキュメントに設定手順が追加されていました。
UE4.23以降
- プロジェクト設定 > Oculus VRプラグインの
Launch Oculus Performance Windows
からTarget Platform
をMobile
に変更します。 - プロジェクト設定 > Android > Advanced APK Packagingの
Package for Oculus Mobile devices
にOculus Quest
を追加します。
以上を設定することでEngine\Plugins\Runtime\Oculus\OculusVR\Source\OculusHMD\OculusMobile_APL.xml
によりAndroidManifest.xmlにfeatureが追加されます。
UE4.22以前
[Project Folder]/Build/Android/ManifestRequirementsAdditions.txt
に上述したfeatureを記述するとビルド時にAndroidManifest.xmlに追加されます。このフォルダはプロジェクト設定のビルドフォルダを開く
ボタンから開くことができます。
以下のリンクではManifestRequirementsOverride.txt
が使われていますがUE4独自の設定も上書きするので追加だけのManifestRequirementsAdditions.txt
の方が安全です。
- https://forums.oculusvr.com/community/discussion/comment/698454/#Comment_698454
- https://answers.unrealengine.com/questions/912347/view.html
- https://www.reddit.com/r/OculusQuest/comments/chjpu5/fix_for_sideloadedhomebrew_apps_and_games_with/eved24q/
- [UE4] AndroidManifest.xmlをカスタマイズする
@pafuhana1213 @CrabPunch マニフェスト生成のコード見たら、上記の通りManifestRequirementsAdditions.txtで追記するしかないっぽくて試したらちゃんとQuestで両手動くようになりました!!
— なっつー@BNUT Vスタンプリニューアル! (@yashinut) July 28, 2019
ハンドトラッキングの対策
UE4.24以前
Oculus Unreal Integrationならハンドトラッキングに対応したMobile SDKが入っていますが設定画面やBlueprintなどがありません。
ハンドトラッキングAPIはC++から呼び出し、上記のManifestRequirementsAdditions.txt
にハンドトラッキング用のuses-permission
とuses-feature
を記述すると動作します。
原因
今後Oculus QuestにはOculus Goをエミュレートする機能が追加される予定です。その機能が一部取り込まれて今回のfeatureがあるとQuest向け、ないとGo向けとして動作しているのではないかと思われます。
参考リンク
- Build 7.0とGoエミュレーション
- Quest / Go / Gear VR Build 7.0 Release Notes
- Quest / Go / Gear VR Build 8.0 Release Notes
- Quest / Go / Gear VR Build 9.0 Release Notes
- Quest / Go / Gear VR Build 10.0 Release Notes
- Quest / Go / Gear VR Build 11.0 Release Notes
- Quest / Go / Gear VR Build 12.0 Release Notes
- Quest / Go Build 13.0 Release Notes
- Quest / Go Build 14.0 Release Notes
- Quest / Go Build 15.0 Release Notes
- Quest / Go Build 16.0 Release Notes
- Quest / Go Build 17.0 Release Notes
- Quest / Go Build 18.0 Release Notes
- Quest Build 19.0 Release Notes
- Quest Build 20.0 Release Notes
- Quest 2 / Quest Build 23.0 Release Notes
- Quest 2 / Quest Build 25.0 Release Notes
- Quest 2 / Quest Build 26.0 Release Notes
- Quest 2 / Quest Build 27.0 Release Notes
- Oculus QuestとRift Sの次期アプデ内容が公開、トラッキング改善やディスプレイのトラブル解消へ
- Oculus Quest Is Getting Go Emulation ‘Later This Year’
- Oculus Questに“Oculus Goのアプリが使える”モードが実装予定
- Gear VR Update: Gear VR App Development no Longer Supported From Oculus SDK Suite 1.42 and Future Versions
- 対策方法
- AndroidManifest.xmlの設定とOvrAvatarのテスト用Id
- UE4の対策および設定