VRゲーム開発メモ

UnityでVRゲームを開発する際の私的なメモです。
本記事は以下のメンターから頂いた知見を一部記載しています。

野中健吾さんのプロフィール|【MENTA】No1.メンターサービスでプロに直接相談しよう!
・エンジニア歴20年のゲームエンジニアです。C言語に始まり、C++、C#、最近はPythonが主戦場。 ・2002年ゲーム開発者として、家庭用ゲーム機(PlayStation系)、携帯ゲーム機(PS ....
  1. 開発環境
    1. 私の開発環境
    2. 開発用PCの準備
    3. Unityのセットアップ
    4. VRヘッドセットのセットアップ
      1. VRヘッドセットとPCの接続
      2. VRヘッドセットにapkファイルをインストール
    5. 開発用エディタのセットアップ
    6. バージョン管理ツールのセットアップ
    7. VR酔い対策モジュール(TunnelingVignette)のセットアップ
    8. unityroomにアップできるようにする
    9. ヘッドセットをかぶらずにプレイするXR Device Simulatorのセットアップ
    10. VContainerのセットアップ
    11. UniTaskのセットアップ
    12. R3のセットアップ
    13. mocopiを活用したモーション作成
    14. 設計
      1. VContainer
  2. VRゲーム開発
    1. ゲーム開発入門
    2. オープンソースで利用可能なアセット
      1. 3Dモデルのアセットのインポート
      2. ユニティちゃんのURPプロジェクトへのインポート
    3. VR上で武器を持つ
      1. 武器を持てるようにする
      2. 武器を手元に引き寄せて持ちっぱなしにする
      3. 武器の軌跡を表示する
    4. 敵を作る
    5. イベントシーンを作る
    6. 最適化を行う
      1. カメラの描画範囲を狭くする
      2. オクルージョンカリング
  3. 役に立った記事のメモ
    1. 掴んだオブジェクトをセットする
    2. リズムに合わせて処理をする
    3. 宣伝関連
    4. 発注関連
    5. 敵の近くに表示したヒットポイントバーなどのUIを常にこちらに向ける
    6. パブリッシング関連
    7. 処理を特定のクラスに集中させる場合
    8. Riderでクラス図を書く
    9. テストのためにasmdefファイルを作成する

開発環境

私の開発環境

参考までに私の開発環境を記載しておきます。

  • 開発用PC:Inspiron 16 Plus
  • VRヘッドセット:Meta Quest 2

開発用PCの準備

VRゲーム開発にはGPUを搭載したPCがおすすめです。
また、私は外部の勉強会に参加することが多いので以下のノートPCにしています。ただ、以下のPCは指紋認証のログインが度々動作しなくなるので他のPCが良いかもしれません。

Inspiron 16 Plusノートパソコン:ノートパソコン | Dell 日本
第12世代インテル Core H-seriesプロセッサーとクアッド スピーカーを搭載したDellの新しいInspiron 16 Plusノートパソコンをご購入いただくか、すべてのノートパソコンをDell.comでご覧ください。

その他のPCおすすめは以下をご覧ください。

VR・AR開発用のおすすめPC | ゲーム開発歴8年の現役エンジニアが紹介! - BOZNEWS VR
ゲーム開発者のナカノです。 VR・ARアプリの開発を始めようとされている方におすすめのPCをご紹介します。 私は約8年ゲーム開発をしており、VRゲームの開発も4年前から始めました。 またVRゲームはも

Unityのセットアップ

以下のページを参考にUnityをセットアップしてみてください。

【Unity Hub】Unityをインストールする方法
本記事では、Unity Hubを使ってUnityをインストールする方法を説明します。Unity Hubのダウンロード/インストール方法から説明するので、Unityをまだ使ったことがない方や興味があるという方はぜひ読んでみてください。

インストールの際に、ビルドに使用するので以下のようにAndroid用のモジュールはインストールするようにしてください。

もしインストールの過程で2022 LTSがインストールされなければ、インストール後に以下の右上の「Install Editor」からインストールしてください。

VRヘッドセットのセットアップ

Unityのインストールが完了したら、以下のページの「Questを開発者モードにする」含めてそれより前の工程をすべて実行して、Quest 2をPCに接続できるようにしてください。

Unity + Meta Quest開発メモ
UnityでQuest 3 / Quest 2 / Quest Pro対応アプリを開発する方法やTipsをまとめています。

Quest以外のヘッドセットでも動作可能なXR Interaction Toolkitを活用する場合は以下の記事をご参照ください。
私はアセットは自作予定なので3D(URP)でプロジェクトを作成しています。

Unity VR開発メモ(XR Interaction Toolkit)
XR Interaction Toolkitと主にOpenXR Pluginを使用したUnity最新方式でのVRアプリケーション開発方法についてまとめています。

VRヘッドセットとPCの接続

以下の手順を参考に、VRヘッドセットとPCを接続するQuest Linkを実行してください。
接続することで、ゲームをビルド(実行可能なファイルにすること)をしなくてもUnity上でゲームをプレイできて時間の節約になります。

MetaQuest 2やMetaQuest 3とPCをケーブルで接続する「Quest Link」を解説! ケーブル無しの「Air Link」の方法も紹介【2023年3月更新】
VRヘッドセット「Meta Quest」シリーズは、基本的にはPCに接続しなくても、そのまま単独で使用できます。しかし、あえてPCに接続して、より本格的なVRコンテンツを体験できるシステムがあります。それが「Quest

VRヘッドセットにapkファイルをインストール

PCと接続し続けなくてもプレイできる方法として、ビルドしたapkファイルをインストールする方法があります。ただ、Unityと接続してデバッグしながらプレイはできないのでご注意ください

SideQuestを使ってⅯetaQuestにapkファイルをインストールしよう! | VRプロフェッショナルアカデミー/No1.VR/AR専門プロフェッショナルスクール
OculusQuestへ外部のアプリケーションを簡単にインストールできるSideQuest。今回はSideQuestの導入方法を解説します! SideQuestを導入すればコマンドを使わずにアプリをインストールできるので、初心者にオススメで...

開発用エディタのセットアップ

開発用エディタはUnityに付属のVisual Studioが利用いただけます。

本キットではデフォルトの開発用エディタが開発効率の観点からRiderになっています。
Visual Studioで開発する場合は、UnityエディタのEdit>Preferencesから以下の通り開発環境をVisual Studioに切り替えてください。

Riderに興味ある方は以下もご覧ください。
Riderは有料ですが、開発効率の向上につながる様々な機能があるため元が取れると考えています。
無料期間もあるのと、学生は無料なので是非使ってみてください。Riderの機能については以下をご参照ください。

Riderのセットアップ方法については以下をご参照ください。

JetBrains Rider をインストールする | JetBrains Rider ドキュメント
JetBrains Rider は、Windows、macOS、Linux オペレーティングシステムで一貫したエクスペリエンスを提供するクロスプラットフォーム IDE です。前提条件 :Rider システム要件、macOS で Rider ...

バージョン管理ツールのセットアップ

バージョン管理ツールを使うことで、変更の履歴が保存されるので心置きなく変更できます。
私は操作がわかりやすいのでGitHub Desktopを利用しています。GitHub Desktopのセットアップは以下を参照してください。

GitHub Desktopのインストール方法 - GitHub Docs
サポートされている Windows または macOS オペレーティングシステムに GitHub デスクトップをインストールできます。

VR酔い対策モジュール(TunnelingVignette)のセットアップ

XR Interaction ToolkitのSampleの中に含まれている、VR酔い対策で移動中などに視界が狭くなるツールです。

インポート後に以下のようにMain Camera配下に配置してLocomotion Viggette ProvidersにXR Originを追加し、視界を狭くしたい操作を選択する必要があります。

unityroomにアップできるようにする

unityroomにVRゲームをアップするには下記を参考にプロジェクトを作成してください。

ヘッドセットをかぶらずにプレイするXR Device Simulatorのセットアップ

  • 移動するのはTキーを押してからWASD
  • 向きを変えるのはYキーを押してからAキーかDキー
  • ものを持つのはTキー(左手)かYキー(右手)を押してからマウスを動かしてGキー

VContainerのセットアップ

インストール | VContainer
Unity 2018.4+ 以上のバージョンが必要です。

UniTaskのセットアップ

GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.
Provides an efficient allocation free async/await integration for Unity. - Cysharp/UniTask

使い方の説明は以下を参考にしました

【超初心者向け】UniTaskのインストール方法から基本的な文法・使い方をマスターしよう - 渋谷ほととぎす通信
Unity開発では必須級のアセット「UniTask」について、初心者向けにわかりやすくインストールから基本的な使い方までを丁寧に解説した記事です。まだUniTaskを使ったことがない、UniTaskを復習したいという方におすすめです。ぜひ読...

R3のセットアップ

どちらかというとUniRxからR3への移行記事のようなので、もしR3自体の入門記事があれば教えて下さい。

[Unity] UniRxをR3に移行する

mocopiを活用したモーション作成

私はモーションの作成に以下のmocopiを使用しています。肩より上に腕を持っていく動きが上手く取れないので、剣戟のモーションを作成する場合は要注意です。私は肩より上にあげないでよい動きに絞っています。

モバイルモーションキャプチャー mocopi | ソニー
モバイルモーションキャプチャー mocopi(モコピ)の商品ページです。

Unity用のSDKがあるため、そちらを使用してmocopiを装着した際の動きをUnityに送っています。

Sony Corporation - mocopi | mocopi Receiver Plugin開発 | Unity | mocopi Receiver Plugin for Unityについて
mocopiデベロッパーサイトへようこそ。このサイトでは、mocopiを活用いただくために、mocopi Receiver PluginやMobile SDKの利用方法や開発方法について説明しています。

Unity上でモーションを録画してAnimationファイルにするのは、以下のEasyMotionRecorderを使用しています。

GitHub - neon-izm/EasyMotionRecorder: Unityエディタ上でVRIKなどのモーションキャプチャをしたHumanoidキャラクターのモーションを記録, 再生をするスクリプト
Unityエディタ上でVRIKなどのモーションキャプチャをしたHumanoidキャラクターのモーションを記録, 再生をするスクリプト - GitHub - neon-izm/EasyMotionRecorder: Unityエディタ上でVR...

EasyMotionRecorderの手順を参考に、モーションのAnimation Clipを作成したら以下のようにMocopi Avaterに適用します

作成したAnimation Clipはデフォルトで床に沈んでしまうので、以下の設定を変更して床に沈まないようにします

Animationウィンドウで、余計な動きを削除します。一番上の行をドラッグして選択するとすべての行を選択できるので、その状態でDeleteキーです。

設計

そもそもUnityの設計とは?の話はこちらをどうぞ

Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介 - Download as a PDF or view online for free

VContainer

なぜDIが必要なの?というのはこのスライドがわかりやすかったです

VRゲーム開発

ゲーム開発入門

Unityでのゲーム開発が初めての人は以下の入門書を読んで実際にやってみることをオススメします。
VRゲーム開発の入門要素はありませんが、まずはUnityの基本を学ぶのが大切です。
どちらかだけでもよいのですが、それぞれ別の機能を学べるので是非両方チャレンジしてみてください。

VRゲーム開発については、以下の本で学んだ後にVRの開発環境をセットアップして色々試しながら学ぶのがよいでしょう。良い教材ありましたら、Xで教えてください。

オープンソースで利用可能なアセット

Unityのアセットストアのアセットはオープンソースでの活用が禁止されています。そのため、オープンソースで活用できるアセットを利用するか自作する必要があります。

ここではオープンソースで利用可能、つまり再配布可能なアセットのサイトを列記します。

3Dモデルのアセットサイトです。アセット数も豊富でライセンスによる絞り込みが可能です。私は改変や商用利用に制限の無い「CC BY」、「CC0」の2つで検索することが多いです。

Sketchfab - The best 3D viewer on the web
With a community of over one million creators, we are the world’s largest platform to publish, share, and discover 3D co...

再配布可能な効果音やBGMのサイトです。特に効果音が豊富です。

BGM・ジングル・効果音のフリー素材|OtoLogic
5000点を超える高品質なBGM・ジングル・効果音のフリー素材が無料でダウンロード可能です。

日本語フォントを利用する場合は、以下のフォントが再配布可能です。

Noto Sans Japanese - Google Fonts
Noto is a global font collection for writing in all modern and ancient languages. Noto Sans JP is an unmodulated (“sans ...

上記フォントの使い方は以下が参考になります。

TextMesh Pro で日本語フォントを使う方法【Unity】
TextMesh Pro はデフォルトのフォントだと英語のみ使用可能なため、日本語を打ち込んでも四角(□)の形が表示されてしまいます。 本記事では TextMesh Pro で日本語フォントを使うための導入方法を紹介しま ...

3Dモデルのアセットのインポート

SketchFabのアセットのインポートをプラグインで行います。

Release Sketchfab for Unity 1.2.1 · sketchfab/unity-plugin
Installation Download the attached unitypackage and double click to import it into your Unity project. The plugin is ava...

上記プラグインはライセンスが明記されていないため、オープンソースのプロジェクトに含められません。そのため、私はインポート用の別プロジェクトを作成して上記ページの.unitypackageを実行してインポートしてから、ゲーム開発用のプロジェクトに移す方法を取ります。

バージョンは違いますが、インポート方法は以下です。

【Unityアセット】Sketchfab for Unityを使ってSketchfabから安定して3DCGをダウンロードする方法 | STYLY
本記事では、豊富な無料3DCGをダウンロードできるSketchfabから、モデルの形式や設定を問わず、安定的にアセットをダウンロードする方法をご紹介いたします! Sketchfabは、3Dモデルの投稿・共有ができるプラットフォームです。

インポートした際にピンクになる場合は以下の対応を行います。

[Unity]3Dオブジェクトがピンク色になった時の解決方法 - Qiita
概要3DオブジェクトのAssetがピンク色になってしまう事、よくあると思います。ここで説明するのは、URP環境のアプリを作ろうとしている方を対象にしています。2022年10月2日 操作説明をわ…

ユニティちゃんのURPプロジェクトへのインポート

インポート時にピンクになってしまったのですが、以下の記事を参照して解決しました。

Unityでユニティちゃんがピンクになるのを解決する

VR上で武器を持つ

武器を持てるようにする

武器を持つには、以下のコンポーネントを武器にアタッチします。これで、武器にコントローラーから出る線を当ててグリップボタンを押すと武器を持てます。

例えば剣の柄を持ちたい場合など武器を持つ位置や角度を変えるには、武器に空のオブジェクト(以下ではAttachPoint)をアタッチして、以下のAttach Transformに設定します。AttachPointオブジェクトの位置や角度を変更すると、武器を持つ角度が変わります。

角度を変更する際は、実際にVRヘッドセットでプレイして持ちながら角度を変えて、値をコピーしておいてプレイ終了後にエディタに貼ると調整しやすいです。

自分で仮のオブジェクトを作成する場合は、変形しやすいのでProBuilderがやりやすいです。
オブジェクトの面を、他の面を変形させずに移動する(凹ませたりする)のはShiftキーを押しながら動かします。

【Unity】複雑な形の3DのGameObject(ゲームオブジェクト)を作る方法(Probuilderを使う) | とんプログラミング
Unityでは、デフォルトで、CubeやSphereなどの3DのObjectが用意されていて、大きさや傾きを変えることはできる。しかし、もっと複雑な形を作りたいときもあると思うの...

武器を手元に引き寄せて持ちっぱなしにする

まず武器を手元に引き寄せるには、以下のコンポーネントのForce Grabにチェックをつけます。
武器を持ちっぱなしにするにはSelect Action TriggerをStickeyに変更します。

武器を最初から持っているようにしたい場合は、以下の部分に武器を設定します。XR Grab Interactableが設定されていないと表示されないので注意してください。

武器の軌跡を表示する

TrailRendererを使用する方法が簡単です。

Unityのエフェクトでの剣の軌跡の作り方を究める。
エフェクトのTrailを使って剣を振った際の軌跡を作るやり方を紹介していく。

敵を作る

巡回する敵を作る方法は以下です

Unityで敵に巡回させるならこの3ステップ(ランダム巡回もできる) | チャムコード

Unity 2022以降は敵を移動させるNavMeshの使い方が変わったので、注意です。また、敵に壁を迂回させるためにNavMesh Obstacleを使う場合は「Curve」のオプションを有効にして、壁が埋まっている範囲を移動対象外にしないと、敵が壁に向かって進んでしまうので気をつけてください。

AI Navigation (Unity 2022.2 以降) - i-school
Unity 2022.2 以降より、標準で搭載されていた AI Navigation(NavMesh) の機能が廃止され、Package Manager 経由でインストールして利用する形式になりました。 今まで Github にて公開されて...

また、Navmesh SufaceのBakeをする際に該当オブジェクトのみにNavmeshを貼りたい場合は以下のオプションに変更してください。私はデフォルトのままでBakeして、親オブジェクトまでNavmeshが張られてしまいました。

イベントシーンを作る

イベントシーンを作るには、アニメーションや音楽・スクリプトを一括で制御できるTimelineを使うのがよいでしょう

はじめてのUnityのTimeline|ゲーミングねこ
この記事はTimeline初心者の備忘録です。イエイ! いい加減、Timeline食わず嫌いを直したい 同じチームにTimelineのプロの子がいるので、自分はいいや~~~って思ってたけど、個人開発で使えそうな知識なのよね。ちゃんと勉強しま...

また、私の場合はVRならではの演出として「①イベントシーン中にキャラがプレイヤー置いてどんどん動いてしまうので、プレイヤーはキャラを追いかけないと話が聞けない」及び「②プレイヤーはイベントシーン中に動けて、キャラを攻撃したりすると対応したアクションを行い、またイベントのセリフに戻っていく」を実現してインタラクティブにしたいと考えています。

共通してPlayable Trackという技術を使って特定の時点での制御を自前のスクリプトで行います。Playable Trackを使う際は、Playable AssetとPlayable Behaviour という2つのクラスをそれぞれ継承した2つのクラス作成し、各タイミングでやらせたい動作などをスクリプトで記述します。

【Unity】タイムラインにおけるプレイアブルトラック作成手順 – XR-Hub
以前の記事で、タイムラインを用いてアニメーションを動かすことについてご紹介しました。よろしければ先に以下の記事を読んでいただけると幸いです。 【Unity】タイムラインを用いたアニメーション...
Unity TimelineのPlayable Trackとその実装方法について - Qiita
記事の目的Playable Trackとその実装方法について簡単にご説明することレポジトリ…

以下の通りTimeline再生時にキャラの座標がずれることがあるのでご注意ください。

最適化を行う

VRはヘッドセット側のスペックの問題で、FPSを高くしておくことが望ましいです。
そうしないと、描画のちらつきなどの問題が発生します。
アクション系のVRを快適にプレイできるのは理想を言えば90-120FPS、少なくとも75FPSくらいは欲しいです。FPSは低いほど負荷が高い状態です。

FPSの測定をするためのProfilerの使い方は以下を参照してください。

パフォーマンス最適化 入門~2021年版~ | Unity Learning Materials
Unityで作ったゲームが何か重い、こういうときにはパフォーマンス計測することが大事です。 今回は3つのケースを取り上げ、パフォーマンス計測ならびに処理の改善を図るデモをいたします。...

最適化の方法としては以下があります。

カメラの描画範囲を狭くする

以下の記事の「Clipping Planes」の「Far」、つまりカメラの描画範囲を狭くするという方法です。

【Unity】Cameraの使い方ー基礎編 - Uniblo-ゆにブロ-

項目の場所は以下です。

私の場合は、狭くすることで後ろの方にデフォルトのSkyboxが表示されてしまったので以下をMain CameraにアタッチしてデフォルトからSkyBoxを変更しています。

オクルージョンカリング

カメラに描画されていない範囲を描画しないようにする方法です。以下の記事が詳しいです。

オクルージョンカリングを設定して、ワールドの軽量化をする - Cluster Creators Guide|バーチャル空間での創作を学ぶなら
ワールド軽量化の1つの手段である「オクルージョンカリング」の設定の仕方を紹介します! 家や室内のワールドで動かないオブジェクトが多くあるワールドを制作するときに役立つ場面が多いです。 設定は簡単なので、覚えておくと非常に役立ちます。

私は、描画を遮る壁(Occluder Static)も隠れてる場合は描画しないようにしたいので、描画消える側(Occludee Static)にも設定しています。

役に立った記事のメモ

掴んだオブジェクトをセットする

UnityでVRゲーム製作!XR Interaction Toolkit ソケットにはめる編|天野 スズラン
どうも皆様 Hello world! Unityでゲームを作っております、天野スズランと申します。 Unityの「XR Interaction Toolkit」でVR開発をする方法を書いていきたいなぁと思ってますので、皆様どうかお付き合いく...

リズムに合わせて処理をする

BPMの計測は以下でも行えます

BPM ・テンポ 測定 - 無料で音楽のテンポが計測できるサイト - MyEdit
BPM(1分あたりの拍数)や音楽のテンポを自動で測定できる無料オンラインサイトです。曲のリミックスなどが必要なDJや音楽演奏時のテンポ把握にご活用ください。

宣伝関連

ゲームトレーラーに関する記事

ゲームのトレーラーでやってはいけない14の誤り|福嶋 美絵子(はらぺこ翻訳者)
(訳者注: これはカナダのビデオゲームPRエージェンシーEvolve PRのサイトに2017年8月16日に掲載された記事を、筆者Ryan Seville氏の許可を得て翻訳転載したものです。日本の事情を鑑み、一部翻訳を割愛した部分がある点はご...

発注関連

3Dモデルなどの発注の際に利用できそうな契約書の型です

コンテンツ制作委託契約書|知的財産・IT・人工知能・ベンチャービジネスの法律相談なら【STORIA法律事務所】

敵の近くに表示したヒットポイントバーなどのUIを常にこちらに向ける

ビルボードという手法を使います

パブリッシング関連

契約書のチェックに役立ちそうです

インディーゲームスタジオとパブリッシャーの適切な契約内容とは? 数々の契約を見てきた海外弁護士がデータとともに明かす【GDC Summer】 | ゲーム・エンタメ最新情報のファミ通.com
オンライン開催された海外の開発者向けカンファレンスから、“インディーゲームのパブリッシャー契約”というニッチなテーマを扱った講演を紹介。

処理を特定のクラスに集中させる場合

以下の方法が有効です

[Unity]delegate,Action,Func,Event,UnityAction,UnityEcentのまとめと違い|takataok
delegateはCでいう関数ポインタなんだなぁぐらいの認識でいたら、Actionなんてものが出てきました。調べてみるとUnityActionがでてきたり・・・。まとめてみました。 そもそも関数ポインタとは 関数を保存できるものです。正確に...

Riderでクラス図を書く

RiderでPlantUMLを使ってUnityのためのクラス図を書く | 白黒羊
Riderでもクラス図を書きたい! クラス図を書くにはVisual Studioを使わないといけないのかなと思
PlantUML クラス図 早見表 - Qiita
PlantUMLでクラス図を描く際よく使う記法をまとめています。#目次フィールド、メソッドの表現可視性の定義Static、Abstract空のフィールド、メソッドの省略クラス間の関係継…

自分の使用したバージョンのRiderではGraphBizの設定は以下の画面で行いました
Riderの設定画面はCtrl+Alt+Sで開きます

テストのためにasmdefファイルを作成する

この際、以下のAuto Referencedにチェックが付いているとビルド後にスクリプトが動作しないことがありました。ご注意ください。

コメント

タイトルとURLをコピーしました