Oculus Rift/Oculus Go でレーザーポインタを当てたオブジェクトの色を変える

Oculus Rift/Oculus Go でレーザーポインタを使用して見ようと思い、色々と勉強してみました。今回は、最終的にレーザーポインタがあたったオブジェクトの色を変更するところまで実行します。

こんな感じで、レーザーポインタがオブジェクトにあたった時に色を変えています。(赤→黄色)

今回つくったもの

f:id:c_taquna:20180705054350j:plain
f:id:c_taquna:20180705054347j:plain

環境

  • Unity 2018.1.3f.1

前提条件

下記のサイトを参考に、レーザーポインタでオブジェクトを選択できるところまで進めている前提です。
developer.oculus.com

私はこちらのサイトをベースに進めました。上記の公式ブログと読み比べながら進めると非常にわかりやすいのでおすすめです。
scrapbox.io

この OVR Raw Raycaster の On Hover Enter と On Hover Exit を使用する処理まで進めて貰えれば問題ありません。
f:id:c_taquna:20180705054958j:plain

追加処理の説明

下記が追加したインスタンス変数と各メソッドの処理内容です。

    protected Material oldHoverMat;
    public Material yellowMat;

    public void OnHoverEnter(Transform t) {
        Debug.Log("OnHoverEnter");
        oldHoverMat = t.gameObject.GetComponent<Renderer>().material;
        t.gameObject.GetComponent<Renderer>().material = yellowMat;
    }

    public void OnHoverExit(Transform t) {
        Debug.Log("OnHoverExit");
        t.gameObject.GetComponent<Renderer>().material = oldHoverMat;
    }

変更前と変更後のMaterial情報を持たせる変数です。変更後のMaterialはInspectorから指定するようにしています。

    protected Material oldHoverMat;
    public Material yellowMat;

oldHoverMat に変更前のMaterial情報を入れ、その下で yellowMat で指定したMaterial に変更しています。

        oldHoverMat = t.gameObject.GetComponent<Renderer>().material;
        t.gameObject.GetComponent<Renderer>().material = yellowMat;

前の情報を保持して、Exitした時に戻さないと、レーザーポインタが触れた全オブジェクトがyellowMat に染まってしまうので注意が必要。

        t.gameObject.GetComponent<Renderer>().material = oldHoverMat;

Sphere の Collider の削除

紹介したサイトをベースに構築している場合、Hierarchy の各項目は以下の様になっているかと思います。今回の場合、Sphereの Collider を外さないとSphereが黄色くなってしまいます。下記画像はすでに外し済み。

f:id:c_taquna:20180705061042j:plain

感想

上記のソースコードは、最初に紹介したOculusのブログでダウンロードできるパッケージのサンプルのソースコードを参考にしました。今回のレーザーポインタでできる表現を増やしたい時は、サンプルのソースコードを読んで勉強するといいかもしれない。