【VR】Unityで物をつかむ、投げるサンプルでログ表示するまで【Oculus Quest】
この記事は、Oculus Questのアプリ開発時に、サンプルとして用意されている「AvatarGrab」シーンの不具合を解消するまでのメモ。
記事を書く理由
Oculus Questのアプリ開発にちょっと興味があったので「まずは軽くサンプルで動きを確認しようかな」とサンプルシーンをビルドしたのです。
そうしたら手が表示されない、持てるはずのものも持てないといった状態。
サンプルが正常に動かないって厄介な!
というわけで、せっかく調査したので記録を残しておこうと思いました。
開発環境
- Mac OS X
- Unity 2019.1.7f1
- Oculus Integration ver1.41
- Oculus Quest
サンプル修正手順
サンプルとして用意されているSceneを起動。
Assets/Oculus/SampleFramework/Usage/AvatarGrab
このシーンをそのままビルドしても手が表示されない。
なので以下の記事の「サンプルシーンの確認」から「Handの手動追加」までを行う。https://raspberly.hateblo.jp/entry/OculusQuestHand
デバッグ用のテキストを表示
こちらの手順は以下の記事を参照。
https://raspberly.hateblo.jp/entry/OculusQuestDebugConsole
Unityは ほとんど触っていなかったので、UGUIだけじゃなく Text Mesh Pro なんていう機能まで追加されていて驚いた。
とりあえず、今やってるAvatarGrabシーンでテキスト表示できるか実験。
最初、全然表示されなくて割と悩んだけど、そもそもCampusやTextオブジェクトがデカすぎて変な位置にいたせいだった。
ちゃんと見える位置にサイズ調整して配置したら問題なく動いた。
これで今後わかりやすい形でログ出力ができる。ログは大事。すっごく大事。
おまけ
上記の記事にあるデバッグ用関数の改変版を貼っておく。
ものを持った時と、手放した時だけログ出力するように変更したもの。
using UnityEngine; public class OVRDebugConsoleTest : MonoBehaviour { OVRDebugConsole console; public OVRGrabbable grabbable; bool isGrabbed; void Start() { console = OVRDebugConsole.instance; } void Update() { if (grabbable.isGrabbed != isGrabbed) { string message = "Grab."; isGrabbed = grabbable.isGrabbed; if (!isGrabbed) { message = "Release."; } console.AddMessage(message, Color.white); } } }
OVRDebugConsoleは、デバッグ目的に使うなら AddMessageじゃなくて AlertとかLog関数を作って、使いわけたほうが良いかも。
おまけ2
困ったことは Raspberlyさんのブログを見ればだいたい解決しそう(思考停止)