Kasackee’s blog

不定期に勉強したことや知ったことを書きとめます。

【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さんのブログを見ればだいたい解決しそう(思考停止)

raspberly.hateblo.jp