[Unity] Oculus Goで3Dキャラクターを眺めよう

買ってしまったOculus Go!なんだか毎日かぶってます。

Oculus Goは、ヴァーチャルリアリティを簡単に体感できる装置。
スマホのアプリが必須ですが、今まではかなり強いパソコンが無いとダメだったので結構な革新です。

iOSのOculusアプリ
 

AndroidのOculusアプリ
Google Play で手に入れよう

このアプリが利用できるスマホを持っているなら、何も考えず買ってしまっても誰でもかなり楽しめる気がします。
Oculusのアカウント作成も必要です。(Facebookのアカウントと連携します。)
外に持ち出して、友人にかぶらせてみたりしやすいのも、楽しみのひとつになるかもです。

購入は、OculusサイトのOculus Goから。海外から発送されるため、購入時の住所などはローマ字で入力する必要があります。
(現時点2018/5/17で他のサイトで売られている場合は、転売ですので注意!)

もし外に持ち出して誰かに試させたいとき、ネットの無いところでも動くアプリで、シンプルに楽しめるのがあったので紹介しておきます。

Ocean Rift (購入時980円ほどだった記憶)
自分が水中内にいる感じの水族館的アプリ。
コントローラーのトラックパッドで水中を移動できる。

Wonderglade (基本無料 追加ステージが有料)
たくさんのミニゲームが遊べるアプリ。

Oculus内の検索から、探してみてください。

本題は次から!

Unityを使うと簡単にOculusGoアプリが作れる!わけではない!

開発環境が整備されていて導入は簡単ですが、結局のところ、Unityでひとつのゲームを制作するのは他の環境(PCやスマホ)と同じなので、同等かそれ以上の期間が必要ですよね。

ただ、VRな世界でモチベが高まった場合は、速いかもしれない。体感すると高まります!

作ってみよう!

作ってみよー。

Oculus Goは中身がandroidなので、Unityでandroid向けビルドができるまでどうにかしましょう。

最初はMacでビルドしてみたのだけど、androidのビルドツールのバージョンが合わないエラーでビルドできず。

むむ。

むむむ。

メッセージ通りにAndroid SDK Build-tools 25にするといけました。

以下に書いたtools/androidの実行は、最近のAndroidSDKでは非推奨となり、画面が表示されなくなっているようです。
AndroidStudio起動時の画面で、SDK Managerを起動すべきと。
ただ、Unity2018と最新のAndroidSDKの組み合わせではビルドに失敗するという話題もありました。

androidSDKは多分標準で隠しフォルダのLibraryにインストールされているので、Tarminalからcd移動か、Finder>Go>Go to Folderか、Shift+Command+ドットで隠しファイルを表示させて移動し、sdk/tools/androidを実行、SDK Managerから消したり入れたり。

ビルド成功時のSDK状況

とりあえずこのandroid環境を最初に作っておくといいですね。
(このあとはWindowsで作業してしまいました。)

キャラクターを眺めるアプリ!

Oculus Goはandroidということで、USBでつなげるだけで、Unityから直接アプリを転送できました。作って転送して動かせるというだけで、結構楽しい。

使ったUnityのバージョン:Unity2018.1.0f2

新しいプロジェクト作成!

普通に作ります。

Oculus用の追加アセット導入!

必要なものは、Oculusの開発者サイト(https://developer.oculus.com/)にあります。

Unity向けのダウンロードページ
https://developer.oculus.com/downloads/unity/

ここから、Oculus Utilities for Unityをダウンロード。
ダウンロードされた中にある、OculusUtilities.unitypackageをダブルクリックして、起動中のUnityプロジェクトへ取り込みます。Import!

最新の1.26では、更新されて必要のなくなった(と思われる)ものが、.disableの拡張子付きで含まれてます。いらないので、disableの付いているものは、チェックを外し。


こんなのが表示されるかもしれませんが、YESクリック→Restartクリックで、Unityが再起動されるのを待ちましょう。

Oculus GoのUSB接続

PCにUSBでつないだ時は、最初に一度、このPCを許可しますか?と聞かれるダイアログがOculus Go内で表示されると思うので、許可するを選択しないといけないです。

スマホのOculusアプリで、設定>接続中のOculus Goを選択、「その他の設定」>「開発者モード」をオンに。

「開発者モード」をオンにすることで、PCから内部ストレージにアクセスもできるようになります。

動画やスクショをツイートしたいときは、PCから取り出してリサイズするとかしか、今のところできなそう。

oculusフォルダのScreenshots、VideoShotsにありました。

Androidビルド環境へ

File>Build Settingsから、対象をAndroidにします。

Player Settingsを開いて、
Other Settings->Identificationの
Package Nameをこのアプリ用にユニークに適当に。
Minimum API Levelをlvel19以降の何かに。最新の1.26では19から21に変わってました。

XR Settingsの
Virtual Reality Supportedのチェックを入れて、SDKsにOculusを追加します。

これでビルドできる環境が完成!

※Oculusの開発者登録が必須なのかどうか、うちの環境では以前に登録済みのため、よくわかりません。アプリをOculusストアに公開する場合は、必要ですが。

Oculus Goのカメラとコントローラーモデル

ProjectのAseets一覧
Oculus->VR->PrefabsにあるOVRCameraRigを、Hierarchyにドラッグして配置。

シーンに最初からあるMain Cameraを削除します。

OVRCameraRig->TrackingSpace->CenterEyeAnchorを選択すると、Oculus Go内で見えるカメラのプレビューが表示されます。これがMain Cameraになると。

サンプルシーンのGearVrControllerTestでは、このカメラの直下にCanvasが配置されていたりしました。

TrackedRemoteのPrefabは、手元のコントローラーモデルを表示させるものでした。
このPrefabを追加するだけで、コントローラーが表示され、向きによって動いたりします。

LeftHandAnchorとRightHandAnchor直下に置きます。

Leftは、Leftを選択。

繋がってたらSetActiveしてる感じだったので、使い方は多分合ってます。

ここでBuild SettingsからBuild And Runしてみてもいいですね。Oculus GoがUSBで繋がれていたら、何もない空間とコントローラーが表示されるアプリが実行されるはずです。

キャラクターの追加!

“Query-Chan” model
クエリちゃんフリークな僕なので、アセットストアからクエリちゃんモデルを落とします。表示させたいキャラクターの3Dモデルがあったら、そのモデルをどうにかして入れ込んでください。

ツイッターでクエリちゃんをフォロー →@Query_chan

Import! and Go Ahead !

Unity4時代のものになるので、現Widnows環境ではDirect3D関連でShaderエラーが出てしまいますが、公式さんの対応も期待しよう!!ということで書いておきます。使う上で影響はないです。

カメラを移動させるような仕組みに

キャラクターの周りをカメラが旋回することで、色んな角度から見れるようにする!

これですよ、、、!

PQAssets>Query-Chan>PrefabにあるQuery-ChanをHierarchyに配置して、Positionを0に、RotationのYに180を入れてカメラ方向を向かせておきましょう。


旋回させるカメラの中心とするGameObjectをHierarchyに新しく作成。CameraPivotと命名します。


シーン内で、キャラクターの中心あたりに、移動させます。

このCameraPivot内にカメラを配置すると、CameraPivotを回転させることでカメラがキャラクターの周りを旋回するので色々とシンプルです。


OVRCameraRigをいい感じの場所に移動させてから、CameraPivot内へドラッグして移動させます。
物理的な回転でいい感じに(?)動かすため、CameraPivotにRigidbodyをくっつけて、スクリプトでRigidbody.AddTorqueを利用することにします!

重力はいらないので、Use Gravityチェックを外します。

SceneManagerなC#スクリプトを作成して、CameraPivotにくっつけます。
以下をコピペ。

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

public class SceneManager : MonoBehaviour
{

    // クエリちゃん設定
    public QueryAnimationController queryAnim = null;
    public QueryEmotionalController queryEmo = null;
    public QuerySoundController querySound = null;

    // 回転対象
    public GameObject cameraPivot = null;

    private void Awake()
    {
        // 【Unite Tokyo 2018】Oculusで作るスタンドアローン・モバイルVRコンテンツ
        // https://www.slideshare.net/UnityTechnologiesJapan002/unite-tokyo-2018oculusvr-96453609/UnityTechnologiesJapan002/unite-tokyo-2018oculusvr-96453609
        // 上記スライドを参考にした設定

        // アイバッファ解像度 scale 1.0 == 1024x1024
        UnityEngine.XR.XRSettings.eyeTextureResolutionScale = 1.25f;

        // 外枠側のレンダリング設定。>>HIGH 外側の解像度が減っていく
        OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.LMSLow;

        // 72Hzモード(フレームレートは上がるが綺麗)
        OVRManager.display.displayFrequency = 72.0f;
    }

    void Start()
    {
        // 浮いてるアニメーション再生
        queryAnim.ChangeAnimation(QueryAnimationController.QueryChanAnimationType.FLY_IDLE);

    }

    void kaiten()
    {
        // kaiten !
        // 5,5,5!な斜め方向に。
        cameraPivot.transform.GetComponent<Rigidbody>().AddTorque(new Vector3(5f, 5f, 5f));
    }

    void Update()
    {
        // 接続確認したいとか
        //if (OVRInput.IsControllerConnected(OVRInput.Controller.RTrackedRemote))

        // GetMouseButtonDownで、UnityEditor上で動作確認できます。
        if (OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger) || Input.GetMouseButtonDown(0))
        {
            kaiten();
        }
    }
}


HierarchyのQuery-ChanをドラッグしてAnim,Emo,Soundのところへ(ソース内ではAnimしか使ってませんが)。回転対象は自分自身だけど、cameraPivotに自身を。

これでUnity上で実行すると、画面のクリックでカメラがキャラの周りを回ります。いい感じに回っていたら、Build And RunしてOculus Goで見てみましょう。きっとすごく、楽しい。

ここで題名なところは、終了です。

AssetストアにあるVR Samples

Unity公式のアセットVR Samplesは、Oculus Goでも動きました。
VR Samples
カーソル移動は、ヘッドトラッキングになってます。
かなり参考になりますが、参考とする場合にインプットを扱っているところはOcules Goコントローラーに合わせたほうがよいのかも。

OVRInputのページにVirtual Mapping名が載ってます。
https://developer.oculus.com/documentation/unity/latest/concepts/unity-ovrinput/#unity-ovrinput

参考にしてみたもの。

この方向で何か作りたいなーとしてるところです!

Oculusサンプル

上に書いたVR Samplesよりも、画面やカーソル移動などのUI操作はこちらを参照がよさそうです。
Oculus Sample Framework for Unity 5 Project

このunitypakkageをインポートし、メニューから
OVR>Sample Build Config>Configure Gear VR Buildを選択すると、必要なシーンが自動設定されました。

3D眼鏡と実機が別れていたGear VRの一体型がOculus Goという感じなので、ロジックはほぼほぼ同等か近めのようです。


このままBuild And Runで、実機内でシーンを選択して試せます。


色々、色々と参考になります。

サンプルに含まれるシーンの説明などは、こちらにありました。
Unity Sample Framework

Oculus開発者blogに、GearVRコントローラーでのRay選択周りが詳しく書かれてあります。
Easy Controller Selection Oculus開発者Blog(英語)
Oculusユーティリティのソースを利用した実装方法ですね。Goでも同じはずです。

2つのサンプルを試してみて

Unityサンプルは、Oculusが用意しているAPI群(OVR○○な関数)を利用していないので、Unityサンプルを参考のベースにすべきかと思いました。

Oculusサンプルでは、UI周りをCanvasと連携させ、サンプル独自の作りこみが結構あったので理解するのに時間かかります。

これは、Oculusサンプルを活用してみたもの。Canvasが使えるので、部品配置はしやすいですが、結構難しいのと、Oculusの著作権があるので、リリースできるプラットフォームが限定されるのかもしれません。(他のプラットフォームを考える場合は利用規約を読まないと。)

単純にコントローラーからRayを飛ばして、対象にくっつけた関数を呼び出すのが、簡単ですね。Unityサンプルの構造とVRStandardAssetsフォルダに含まれるソースを(Oculus用に改変したりして)利用すると、使い勝手がよかったです。

そして、VR空間ではUnityのTextMeshが強い
そのままUIに利用できますね。

VR開発、楽しい。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォロミー

コメントをどうぞ

メールアドレスが公開されることはありません。