Meta Quest の 公式のチュートリアルをやってみる

2023 年 3 月 8 日 by yoshimuram

【この記事について】

Meta Quest 2 による開発を行うにあたり、まずはチュートリアルを実行してみました。この記事では、その中でも躓きやすそうなコードについて記載します。
ただ、Unityの使い方しか書かれていなかったため、これからこのチュートリアルを行う方は、 Unity 自体が初めての方のみで良いと思います。

実行したチュートリアルは以下のチュートリアルで、日本語バージョンです。
初めてのVRアプリを構築する

ところがこのチュートリアル、特にコード面に関して不備が多いです。そのままコピペしようとすると必ずエラーになります。そのため、実行する場合は以下の英語版も同時に見ることをお勧めします。
Build Your First VR App

【コードを記述するにあたってエラーの出る場所】

前述しましたが、日本語版チュートリアルのコードはそのまま使用するとエラーになります。そして、そのエラーが出るのはコードエディター側ではなく Unity 側に出ます。

エラーは Console に表示されます。ところが、その Console は初期配置で Project タブの下に隠れてしまいます。

Consoleの位置

【チュートリアルで記述されているコード】

チュートリアルでは、ボールの動きや物体同士がぶつかった時の処理をプログラミングして対応しています。

物体にコンポーネントを追加したScriptの基本構成は以下の2つになります。
・ Start メソッド
・ Update メソッド

Start メソッドはその名の通り、最初に実行されるメソッドとなります。
Update メソッドはフレームが更新されるたびに実行されるメソッドとなります。
他にも最初から用意されているメソッドは多くあり、必要に応じて使い分けることとなります。

ここから先は、ボールを動かすコードを例に上げて説明します。
以下のコードが、ボールを動かすために私が作成したものです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed;

    private Rigidbody rb;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float x = Input.GetAxisRaw("Horizontal") * this.speed;
        float z = Input.GetAxisRaw("Vertical") * this.speed;
        this.rb.AddForce(new Vector3(x, 0.0f, z));
    }
}
public float speed;

パブリック変数を使用することによって、Unity側で任意の値を設定できる項目を作成することができます。

private Rigidbody rb;

Rigidbody は重力を考慮した動きができるクラスとなります。これを使用することにより、重力判定などの面倒な処理をしなくても良くなります。
使用時の注意点としては、物体を移動させる場合、Transformの値を変更してはならないことがあります。変な動きになるそうです。
そのため、コードでは以下のように記述しました。

this.rb.AddForce(new Vector3(x, 0.0f, z));

物体の位置の移動量を追加しています。
物体を移動させるのはよくある処理なので、既に用意されているのですね。
この処理は FixedUpdate メソッドで実行しています。FixedUpdate メソッドはフレーム数に関わらず、一定間隔で実行されるメソッドです。

Input.GetAxisRaw()

矢印キーで入力された値は Input.GetAxisRaw() で取得しています。そこへパブリッククラスである Speed を乗算することによって求めています。

このコードの場合、 Speed へ500なんて大きな値を入れると、当たり判定される前に移動してしまうためボールは彼方へ吹っ飛んでいきます。ほどほどにしてください。
ほどほどにすると、当たり判定により先に進めなくなるため、どれだけ移動させようとしても移動しなくなります。
コリジョンが設定していない物体へ当たりに行くと当然吹っ飛びますが。

【当たった壁の色が変わるコードについて】

当たった壁の色が変わるコードについても、使用するメソッドを変えるだけで、行うことはおおむね一緒です。
ぜひ、英語版のチュートリアルを見て試してください。

タグ: ,

TrackBack