ひょんな切っ掛けでchatGPTを使った対話型AIをVRでデプロイしなければならなくなりました。
偶然見つけた下記記事から出来るかも?と思い挑戦。
ITパスポートレベルの知識&プログラミング3日坊主で挫折した私ですが、今度ばかりは逃げられない。
実施手順と当たった壁、各種疑問点について備忘&誰かの為になると信じて残します。
環境・前提条件
Unity 2021.3.21f1 LTS
ChatdollKit v0.6
Burst v1.6.6
UniTask v2.3.1
uLipSync v2.6.1
UniVRM v0.89.0
VRMExtension
Newtonsoft Json v3.0.2
Oculus Integration v53.1
XR Plugin Management v4.3.3
実施手順
1. 下記サイトを参考に、ChatdollkitのREADME指定の各種パッケージを導入し、「動作確認」まで実施
2. 下記サイトを参考にビルド・実行手前まで実施 ついでにMeta Quest Developer Hubもインストール
Edit > Project Settings > Oculusに表示される要対応項目はよくわからぬままFixしまくり
3. Build SettingsでTexture CompressionをASTCに変更し、Quest2をつないだ状態でBuild And Run
発生したエラー
reference先が定義されてないということは何かインポートし忘れた?とは理解したものの、具体的に何かわからずchatGPTに相談しながら理解を進めました。
多分デプロイ時にC#からC++にトランスパイルする際、
ChatdollKit内のWebGLMicrophoneにある関数が見つからなかったということと思います。
しかし、Assets/ChatdollKit/Scripts/IO/WebGLMicrophone.cs及びその中に該当する関数は確かに存在しており、エラー原因は掴めず。
対処してみる
原因を確かめるため、以下のように触ってみましたが問題の解決に至りませんでした。
- 下記Qiitaによるとサイズ超過時に出るそう
Build Settings > IL2CPP Code Generationを Faster (smaller) builds に切り替えてみる
⇒変化なし
- WebGLがChatdollKitのコンポーネントに入ってないのが原因と推定(んなわけ
WebGLMicrophone.csをscene内のChatdollKitにコンポーネントとして追加
⇒当然無意味
解決
そもそもエラー出しているIL2CPPとは…を調べていたら、どうやらMonoというコンパイラもあるそうで。
試しにProject Settings > Player > Android > Configuration > Scripting BackendをMonoに変更して、TargetArchitecturesをARMv7にしたところ、Quest2でデプロイ成功!問題はコンパイラだった?
ただし、FPSも低くかなり動きはもっさり。一言二言会話したらアプリが落ちちゃいました。
気になる事と今後の展望
IL2CPPとMonoの違いを調べたところ、
MonoはJITコンパイラでランタイム性能がC/C++に追い付かないそうです。
逆に言うとJITだからBuild時最低限の変換で済みデプロイできたと考えられ、「対処してみる」の初手で実施したアプローチの通りそもそもProjectが重すぎることが原因なのではないか?という説が濃厚に。
表に出ているエラーメッセージにそんな気配はないので、果たして本当にそうか疑問は残りますが。
Quest対応変換したアバターに切り替えたりしたらうまくいくかも?
更に困った事にUnityを再起動してProjectを読み直したらこんなエラーが。
Quest2としてはIL2CPPを使って、ARMv7ではなくARM64にしてほしいとのこと。
困っちゃったわね…
IL2CPP、ARM64で出来ればいいのですが…引き続き格闘です。
何か良いアイデアあれば頂きたいです…