LoginSignup
2

More than 1 year has passed since last update.

posted at

updated at

Unityで作った占いゲームをOculus Quest2アプリとして動かす

Unityで作った占いゲームをOculus Quest2アプリとして動かす

Unity入門の定番、占いゲームをOculus Quest2で動かすまでメモとしてまとめておく。

完成イメージ↓
スクリーンショット 2021-02-26 19.24.16.png

まず、ゲームに使う素材を作る。
今回はIllustratorを使用。
針の部分は適当に三角形を作って塗りつぶせば良い。
スクリーンショット 2021-02-26 20.30.05.png

ルーレットの円盤は同心円グリッドツール等を使えばお手軽にできます。
または、円を描いて、直線描画ツールで区切って、
ウインドウ→パスファインダー
でオブジェクトを選択し、「分割」して色を変えるといい感じです。

スクリーンショット 2021-02-26 20.30.36.png

スクリーンショット 2021-02-26 20.30.54.png

スクリーンショット 2021-02-26 20.37.12.png

作った素材(※Adobe Illustratorを使用して作成)
valueinfo.png
valueinfo.png

point2.png
point.png

(aiファイルを上げておきます。お試しで動かす等、自由に使っていただいて構いません。)
https://1drv.ms/u/s!Apotz-GvRNC9gudRPQ9mxTdrjZqHdQ?e=9lNjMq

次にUnityを開きます。インストールがまだの人はインストールしましょう。
使用したバージョンは以下の通りです。

Unity
スクリーンショット 2021-02-26 20.46.33.png
スクリーンショット 2021-02-27 0.08.39.png

ちなみに、今回はmacOSを使用していますが、バージョン等は以下の通りです。
スクリーンショット 2021-02-27 0.10.28.png

Unityが立ち上がったら、用意した素材をインポートします。
スクリーンショット 2021-02-27 0.14.50.png

また、初期状態だと景色がなく味気ないので、Assets Storeから景色をダウンロードして使用する。
今回はこのAssetsを使う。
スクリーンショット 2021-02-27 0.21.41.png

まず、Assets Storeへアクセスし、ダウンロードする。
スクリーンショット 2021-02-27 0.22.26.png

その後、パッケージマネージャーからダウンロードし、インポートする。
Window→Package Manager→Import
スクリーンショット 2021-02-27 0.22.05.png

次に、Oculus関係のパッケージもダウンロードしておく。1
その前に、まず、以下の手順を終えておかなければImportに非常に長い時間がかかってしまうので、順番に気をつけること。

Build Settingsを開いてプラットフォームをAndroidにスイッチする。
スクリーンショット 2021-02-27 0.27.20.png

ASTC、LZ4に変更してスイッチすること、
スクリーンショット 2021-02-27 0.27.40.png

また、PlayerSettingsを開き、次の設定をしておく。

スクリーンショット 2021-02-27 0.31.44.png

OtherSettings→GraphicsAPIsのVulkanを削除、
ColorSpace→Linearに変えておきましょう。

また、MinimumAPILevelをAndroid6.0 Marshmallow(APIlevel23)に変更しなければなりません。
スクリーンショット 2021-02-27 0.58.16.png

次に、XR Plug-in ManagementでOculusをインポートしておきましょう。
スクリーンショット 2021-02-27 0.58.51.png
チェックを入れると自動的にインポートされますので、チェック間違いに注意しましょう。

最後にOculusIntegrationをインポートします。
Asset StoreにあるOculusIntegrationをプロジェクトにインポートします。

スクリーンショット 2021-02-27 0.22.26.png

スクリーンショット 2021-02-27 1.02.27.png

スクリーンショット 2021-02-27 1.02.46.png

ちなみに、初回では、OculusIntegrationのインポートに長時間かかります。
インポートが完了すると ダイアログメッセージが出るので以下のように進んでください。
スクリーンショット 2021-02-27 1.07.29.png
スクリーンショット 2021-02-27 1.09.35.png
スクリーンショット 2021-02-27 1.09.53.png
スクリーンショット 2021-02-27 1.10.12.png
スクリーンショット 2021-02-27 1.10.26.png

ここで、Unityが自動的に再起動します。

以上でOculus関係のライブラリ等のインポートは完了です。

次に、先ほどインポートした「Free HDR Sky」のゲームシーンをCopyしておきます。
スクリーンショット 2021-02-27 1.16.38.png
ここにあるmainSceneを以下の場所におきます。
スクリーンショット 2021-02-27 1.16.04.png

次に、ControllerModelsにあるOVRPlayerController等をそのまま利用したいので、Copyし先ほどCopyしたmainSceneに貼り付けます。

スクリーンショット 2021-02-27 1.18.36.png
スクリーンショット 2021-02-27 1.18.51.png

スクリーンショット 2021-02-27 1.20.20.png

貼り付け↓
スクリーンショット 2021-02-27 1.20.43.png

ちなみに、囲ってあるRoom等のオブジェクトは足場になるTileオブジェクト(Grabbables等)以外は必要ないので取り除いておきます。
また、Tileのテクスチャーはデフォルトだとダサいので、好みに応じて変えると良いと思います。
スクリーンショット 2021-02-27 1.25.09.png
スクリーンショット 2021-02-27 1.24.31.png
Selectで変更できます。
スクリーンショット 2021-02-27 1.24.54.png

次に、序盤でインポートしていた占い盤や針等を画面に配置します。
簡単に座標系を示しておくと、
占い盤の座標系は以下の通りです。
スクリーンショット 2021-02-27 1.29.18.png

グローバル座標系は以下の通りです。
スクリーンショット 2021-02-27 1.29.12.png

配置には、3Dオブジェクトを追加し、画像を表面に貼り付ける。
スクリーンショット 2021-02-27 1.52.44.png

スクリーンショット 2021-02-27 1.53.53.png

配置後の様子
スクリーンショット 2021-02-27 1.28.33.png

最後にスクリプトを書いて、占い盤を制御します。
ちなみに、Oculusのコントローラーの値を取得する場合は次のように記述します。

if (OVRInput.GetDown(OVRInput.RawButton.A)){
            Debug.Log("Aボタンを押す(押された瞬間に一度だけTrueを返す)");
        }

詳細は公式サイトをみてください。
https://developer.oculus.com/documentation/unity/unity-ovrinput/

ひとまず、全体像を示しておきます。

RouletteController.cs

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

public class RouletteController : MonoBehaviour
{
    float xrotSpeed = 0;
    float yrotSpeed = 0;
    float zrotSpeed = 0;

    void Start()
    {   
        this.yrotSpeed = 10;        
    }

    // Update is called once per frame
    void Update()
    {
        if (OVRInput.GetDown(OVRInput.RawButton.A)){
            Debug.Log("Aボタンを押す(押された瞬間に一度だけTrueを返す)");
            this.yrotSpeed = 10;
        }

        if (Input.GetMouseButton(0)){
            this.yrotSpeed = 10;
        }

        transform.Rotate(this.xrotSpeed,this.yrotSpeed,this.zrotSpeed);

        this.yrotSpeed = this.yrotSpeed * 0.99f;
    }
}

ソースコードのアタッチは以下のようにドラッグ&ドロップすれば良い↓
スクリーンショット 2021-02-27 1.55.43.png

ちなみに、プログラムはUnityの教科書を参考にしました。2
詳しくは、この教科書を読んでください。
https://www.sbcr.jp/product/4815606657/

最後に動作している様子を上げておきます↓
https://youtu.be/KfKJXmgHHpQ

また、適当ですが、こんな感じにオブジェクトを配置してみるのもいいかもしれません↓
https://youtu.be/A35ygDLtsZU

お疲れ様でした、Unityを使うとこんなに簡単にVRアプリケーションが作れてしまうことに驚きですが、ここから、面白いものを作るのは非常に難しそうです、Unity初心者ですが、これから色々と勉強したいと思います。

間違い、問題等ございましたらご指摘いただければ幸いです。

参考


  1. 「Unity + Oculus Quest 2 開発メモ」 https://framesynthesis.jp/tech/unity/oculusquest/ 

  2. 「Unityの教科書 Unity 2020完全対応版 2D&3Dスマートフォンゲーム入門講座」 https://www.sbcr.jp/product/4815606657/ 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2