【Meta Quest】なぜかキャラが消える!PC上のUnityでは表示されるが、実機では表示されない理由が分かった!【Unity】
Meta QuestでUnityをやりはじめて、ずっと気になっていることがあります。
それは「パソコン上のUnityではキャラクターが表示されるが、実機では表示されない場合がある」ということ。この現象は、3Dモデルのキャラだけで発生するようで、Cubeや他のアセットが消えた事はありません。
しかも、購入当初から一週間程度は頻発してましたが、それ以降はまったく発生していません。
起きる時は起きる、起きない時はまったく起きない、という微妙な再現度。
ビルドしてインストールするたびに「今回はちゃんと表示されるか?」と心配するのもイヤですので、これまでに起きた事を含めて調べて見ました。
確信はありませんが、なんとなく理由が分かりましたよ!
キャラだけが消える!
まずは、起きた現象を確認します。
残念?ながら、最近は起きていませんので、再現するために他の方の環境で試してもらいました。
その環境では運よく発生したので、キャプチャーを取って頂いたのがこれです。
キャラクターが消えてますね。
少し分かりにくいですが「IK操作用の半透明の球」のある位置に、別記事でも使った「アリシア・ソリッド」を配置しています。
この状態でいろいろ試したところ、手元から出ているレーザーポインターには反応しているようで、空中でレーザーが遮断されていました。キャラクターそのものが消えているワケではなく、描画だけがされていない?ような感じです。
シェーダーが表示されてない?
ちなみに先ほどの画像では、「Runtime Inspector & Hierarchy」というアセットを使ってます。
画像右側にある灰色のパネルですね。
実機(Meta Quest)内のUnityのパラメータがリアルタイムで確認できるらしい。今回の調査にはちょうど良いですね。
このツールで確認したところ、シェーダーを管理していると思われる「skinnedMeshRenderer」にはチェックが入っていました。表示されていないので、入ってないと思ったんですが。。。
念のため、チェック状態をオン・オフにしても表示されません。残念。
どんな時に発生する?
記事の最初で「最近は起きてない」と書いてますが、購入当初は本当に頻繁に起きてました。
購入した日にも発生した記憶があります。
しかも、
(1) Unityをビルドして、Meta Questにインストールする →消えた!
(2) 何も設定を変更せず、再ビルドして再インストールする →表示された!
ということもあり、わけが分かりません。
設定か何かがおかしいのであれば、常に消えるか・常に表示されるかのどちらかのはず。
当時、キャラクターを多く配置した時に良く発生していたので「Meta Questでは、ポリゴン数が一定数を超えると、処理落ちではなくキャラクターが消える仕様」と思い込んでいた時もありました。けど、起きなくなった今の環境では、かなり重いモデルを配置しても、処理落ちはしますが、消えることなく表示できています。普通はそうですよね。
そもそも、「アリシア・ソリッド」は公式サイトから配布されていて、VRモデルのお手本となるような作りのはず。
このキャラでも消えるということは、私の環境の何かが問題なのは間違いなさそうです。
似ているがちょっと違う
更にネットで調べてみると、少し現象は違いますが、キャラクターの一部が消えた方がおられました。
念のため、キャラクターのメッシュの位置を確認してみますが、問題なさそう。
Update When Offscreenもなぜか最初からONになってました。
これでも無さそうです。
新規プロジェクトで再現した!
いま使ってるプロジェクトは、Unityをやり始めた時に作ったもの。
あれから、アセットやMMDモデル・ツールなどをたくさんインポートしてるので、もしかしたら環境がおかしいのかも知れません。
ということで、Unity Hubから新規プロジェクトを作成し、最低限必要なツールだけの状態にしてみます。「MMD4Mecanim_Beta_20180523」とかですね。
この状態でMMDモデル(アリシア・ソリッド)をインポートし、比較対象として床とCubeだけでビルド。
実機にインストールしてみると、キャラクターが消えました!
やっと消えてくれました。再現すれば調査できますので。
本格的に調査しようとする前に、なんとなく何も設定変更しないでビルド→インストールしてみました。
すると、
今度は表示された!! OH…
これ以降は、何回ビルドしても消えることはありませんでした。
プロジェクトを新規作成するところからやり直してみても、やはり初回だけ同じ現象が発生します。
理由は分かりませんが、私の環境では「初回ビルドだけキャラが消える」ようです。
とはいえ、初回だけなら特に問題はなさそうです。
理由が分かった!?
諦めかけていたところ、自分の実機で試してくれた知り合いがほぼ答えが書いてあるサイトを教えてくれました。
現象が完全に同じ!
そういえば、Meta QuestもAndroidでしたね。
そんな目で、MMD4Mecanimの「Readme_jp.txt」を読むとこんなことが書いてありました。
■ Android サポートについての補足公開バージョンでは、Unity から apk をビルドした際に接続していた端末でのみ動作するようにロックをしています。この制限は、著作者・権利者に無断で Google Play にビルドをアップしたり、または Dropbox などでの共有を防ぐための措置です。また、この制限を意図的に解除したり、そのノウハウを共有しないでください。※もし、著作者及び権利者ご本人で、何らかの事情でこの制限を解除したい場合は、ご相談ください。
最初に読んでいたつもりでしたが、ロックという現象が良く理解できていなかったようです。
どうやら、キャラクターが消える現象が「ロック」らしい。
誤作動したのかも
となると、なぜ自分の端末(Meta Quest)でも発生したか?が疑問として残ります。
あまり関係無いかも知れませんが、一つ考えられるのがネットワークです。
Unityをやりはじめた当初、PCとMeta QuestのWi-Fiが安定しておらず、接続が勝手に切れたりすることが頻繁に起きていました。Meta QuestへのapkファイルはWi-Fi経由でインストールしていたので、もしかしたら、ネットワークが不安定な状態でビルドやインストールなどを行ったので、ロック機能が誤作動したのかも知れません。
先日、Wi-Fiルータ買い替え+ネットワークドライバ更新を行ったんですが、それ以降、接続が安定してからは発生してませんので、無関係ではないかも知れませんね。
まとめ
パソコン上のUnityではキャラクターが表示されるが、実機上では表示されない現象が気になっていました。
明確な理由は不明ですが、MMD4Mecanimのロック機能が作動していたようです。
いまは発生していないので困ってなかったんですが、なんとなくでも理由が分かったのでスッキリしました。
これで安心して、ビルド→インストールできますよ!
コメント
トラックバックは利用できません。
コメント (6)
自分も同じ悩みを抱えていたので、情報ありがとうございます!
hiroさん、コメントありがとうございます。
同じだったようですね。
この現象が起きた時、最初はまったく原因が分からなくて困りました。。。
不具合かと思いましたよ。
ちゃんと理由があって良かったです。
こんにちは、【Meta Quest】VRの世界で動くキャラを眺めて触りたい!設定方法まとめ【Unity】の記事を拝見し、自身も挑戦しようとMMDをインポート後oclus questにビルドしたところ見えませんでした。その後いろいろ調べてこちらの記事を拝見し、該当のテラテイルを確認したのですが、何分触り始めのためシェダーが理解できずどこを変更すれば見えるようになるかわかりませんでした。非常に稚拙な質問で申し訳ないのですがどこを変更すれば見えるようになるのか教えていただけないでしょうか。importしたモデルは拝見した記事と同様にAlicia_solidです。
ビルドの際のwarrning↓
Shader warning in ‘MMD4Mecanim/MMDLit’: “___Eliminate” contains consecutive underscores (“__”), such names are reserved and might result in undefined behaviour (on vulkan)
コメントありがとうございます。
私の場合ですが、キャラクターが消えたのは「MMDファイルをMeta Quest(Android端末)で表示した場合の誤作動」かと思ってます。
MMD以外のオブジェクトは消えた事がありませんでしたので。。
こんにちは だーしゅ様の【Meta Quest】VRの世界で動くキャラを眺めて触りたい!設定方法まとめ【Unity】を拝見し、自身も挑戦しようとMMDをインポートしoculus questでビルドしたところ、他オブジェクトは見えるのにMMDだけ見えず原因を探ったところこの記事も拝見させていただきました。ですが初心者のためシェダーの意味が分からずなかなか問題解決に至りませんでした。非常に稚拙な質問で申し訳ないのですが どの点を変更すればよいのか教えていただけないのでしょうか。
コメントありがとうございます。
私の場合ですが、過去にビルドした際にはShaderエラーは発生していなかった記憶があります。
現象改善の切り分けとしては、
・別のMMDで試してみる
・MMD以外のキャラクターで試してみる
くらいでしょうか。