【Unity】OculusIntegrationがPackageManager対応しやすくなりました!
- 概要
- 環境
- 追記
- Meta公式によるPackage Manager対応 (2022/10/12 追記)
- PackageManager対応方法
- パッケージの取り込み方
- 対応しやすくなった理由
- PackageManager対応するメリット
- 雑感
概要
Oculus Integration SDK がいつの間にかUnity Package Managerに対応させやすくなっていたのでちょっと紹介します。
巷では、Oculus Quest向けのSplash Screen が指定可能になったことで話題でしたが、何気にPackageManager対応しやすくなったのも見過ごせないと思っています!
※Splash Screenについての公式ツイート
Introducing Instant Runtime-driven Splash Screens. Get people into your Quest apps faster than ever. Check out our blog post for how to implement: https://t.co/XLKZy3ukM6 pic.twitter.com/kkcSJrMvik
— Oculus Developers (@Oculus_Dev) 2021年5月13日
環境
- Oculus Integration SDK 28.0 (1.60) 以降
追記
- 2022/10/12
- Meta公式によるPackage Manager対応
Meta公式によるPackage Manager対応 (2022/10/12 追記)
Meta公式からMeta XR Integration (旧Oculus Integration) v44 から Pacakge Managerによるインストール方法がアナウンスされています。
Import Individual SDKs from Unity Package Manager | Oculus Developers
レジストリは https://npm.developer.oculus.com/
とのこと。
packages are hosted on Meta’s scoped registry: https://npm.developer.oculus.com/.
現時点では基本機能 (Oculus/VR
) のみのようですが、順次対応されるようです。
How Unity Package Manager Can Help You Manage Integration SDKs
Meta Quest Proの発表もあったので、対応が進められたのかもしれません。
こちらの記事を公開してから1年4ヶ月は経ってるので、あまり「そのうち」ではありませんでしたね(笑)
PackageManager対応方法
1. Oculus Integration パッケージ化専用のUnityプロジェクトを作成
- パッケージ用のUnityのプロジェクトを作成
2. Oculus Integrationをインストール
- Asset Store or アーカイブページ からOculusIntegrationをダウンロードおよびインストール
- 必要なアセットにチェックを入れて "Import"
※今回は基本機能のみをインストールするため Oculus/VR
のみ指定
3. gitignoreにOculus向け設定ファイルを追加
- commitから除外するために.gitignoreにOculus向け設定ファイルを追加
- パッケージ対応したOculusIntegrationを取り込むと自動的に生成されます
- パッケージ側からは除外しておきましょう
# Oculus Assets /[Aa]ssets/[Oo]culus/OculusProjectConfig.asset /[Aa]ssets/[Oo]culus/OculusProjectConfig.asset.meta /[Aa]ssets/Resources/OVRPlatformToolSettings.asset /[Aa]ssets/Resources/OVRPlatformToolSettings.asset.meta
4. package.json を作成
- Package Managerに対応させるため
Assets/Oculus/package.json
を作成- nameなどはプロジェクトに合わせて適宜修正してください
{ "name": "com.tsgcpp.oculusintegration", "version": "1.61.0", "displayName": "OculusIntegration", "description": "The Oculus Integration SDK (private).", "unity": "2019.4", "keywords": [ "oculus" ], "dependencies": {} }
5. Assets/Oculusをcommit
.gitignore
を commitAssets/Oculus
とAssets/Oculus.meta
をcommit- package.jsonも併せてcommit
6. Private用のGitリポジトリにpush (任意)
※Publicにすると再配布になるため注意が必要
フォルダ構成
パッケージの取り込み方
- 通常のPackageManagerでの取り込みと同様となります
Add package from git URL...
https://<git url>/<org>/<repository>.git?path=Assets/Oculus#<tag or branch>
のように指定- i.e.
https://github.com/tsgcpp/OculusIntegration.git?path=Assets/Oculus#1.61.0
(リポジトリ名: OculusIntegration, タグ名: 1.61.0 の場合)
- i.e.
Add package from disk...
Assets/Oculus/package.json
を指定
取り込み後に設定ファイルが生成される
対応しやすくなった理由
そもそもなぜ対応が難しかったのか
Oculus Integration SDK 27.0 (1.59) 以前の話となります
- 原因は
Assets/Oculus/VR/Editor/OVRProjectConfig.cs
OculusProjectConfig.asset
(Oculus向けの設定アセット) を自動生成するEditorスクリプト
- 自動生成するパスの指定方法に問題があり、PackageManager経由で取り込んだ場合にエラーが発生
- 端的に言うと
OVRProjectConfig.cs
の親の親フォルダが生成先
- 端的に言うと
- PackageManagerで取り込んだ場合は
Assets/
以下ではなく、Packages/
以下が生成対象となってしまっているPackages/com.tsgcpp.oculusintegration/VR/Editor/OVRProjectConfig.cs
に配置されているためAssetDatabase.CreateAsset
でScriptableObject(OVRProjectConfig
)の生成先にPackages/
以下を指定するとエラー (Assets/
以下ではない場合にエラー)
暫定対応
Oculus Integration SDK 27.0 (1.59) 以前の話となります
Assets/Oculus
以下のEditorフォルダすべてをunitypackageにExportAssets/Oculus
以下にあるEditor
フォルダ以下をすべて削除- OculusIntegrationを使用するメインプロジェクトに上記unitypackageでEditor群を取り込み
OculusProjectConfig.asset
を使用するにはEditor以下のスクリプトが必要なため
上記の方法で暫定的に対応することは可能でした。
ただ、Editorスクリプトのみ直接取り込む形となるため、結構残念な感じになってました。
PackageManagerで取り込まれた場合の考慮が28.0以降で追加
- SDK 28.0 (1.60) で以下の考慮が追加されました
OVRPluginUpdaterStub.IsInsidePackageDistribution
はassetPath.StartsWith("Packages/"
の判定を実施Packages/
以下だった場合は、Assets/Oculus/OculusProjectConfig.asset
を生成先に変更
private static string GetOculusProjectConfigAssetPath() { ... if (OVRPluginUpdaterStub.IsInsidePackageDistribution()) {
つまり、PackageManagerで取り込まれた場合でもAssets/Oculus
以下に設定ファイルが生成されるようになりました。
これがOculus IntegrationがPackageManager対応しやすくなった理由です!
PackageManager対応するメリット
「別に直接プロジェクトに取り込んでもよくない???」って思った方もいらっしゃると思いますので、
メリットについても補足しようと思います。
- OculusIntegrationを管理するGitリポジトリを分割可能
- GitHubなどの容量制限にひっかかるのを回避可能
- OculusIntegrationは単体でもかなり容量が大きく、追加するアセットによってはあっさり100MBを超えます
Assets/Oculus/VR
のみでも60MBあります (29.0の場合)
- アセットのバージョン管理と更新が容易
- Package Managerでアセットを取り込むと更新が容易になります(バージョンを更新するのみ)
- Asset Store(unitypackage)で取り込んだ場合、一度アセットをすべて削除する必要がある場合が多い
- hookされるEditorスクリプトがあるため再起動はどちらにしても推奨
- Package Managerでアセットを取り込むと更新が容易になります(バージョンを更新するのみ)
雑感
今回はOculus関連にテーマを絞ってみました。
Oculus Quest2がかなり売れているので、OculusIntegrationの更新もかなり加速している感じがします。
もしかしたら、そのうちUnity Package ManagerでOculus Integrationが提供されるのかもしれませんね。
Unity向けだけじゃなくて、Unreal向けも加速しているような気がします。
Splash Screenも追加できるようになったので、これを機に追加しても良さそうですね。
みなさんのOculus向けアプリケーション開発の助けになれば幸いです。
それでは~。