unity_oculus_7days_vr_challenge_top
2013年にUnityで7日間クソゲーを作り続けた素人が、こんどはOculusとUnityでVRクソゲーを7日間で7本作ってみました
VRクソゲーを作ってみて気が付いたことやノウハウなどをまとめてみます。

※Oculusメインで書いてますが、VIVEでも大丈夫な内容ですので各自読み替えてください。

素人のスペック

uiharu_sなまえui_nyan
ゲーム開発歴3年 2Dソシャゲー5本
Unityはだいぶ慣れましたが、3Dゲーム経験はなく、VRは完全に素人です。

なんでこんなことしたの?

みなさんもご存じのとおり、今年はVR元年の到来といわれております。
聞くところによると、「これからはVR」とか「VRは未来」とか「UnityならVR簡単だよ」や「MMDの嫁を召喚できる」とのこと・・・。
テーマパークや展示会でもVRを見かけるようになり、世はVRだらけ。
気になる・・・。
これは取り残されてはいけない・・・
思い切ってOculusを買い、未来に投資することにしました。

というか、職がなくてヒマだったせいでもあります。

0日目 セットアップ&市場調査

まず、Oculus Rift製品版とOculus Touchを公式サイトから買って、セットアップ。
インストール方法が英語の上に、ちょっと複雑なので、日本語ガイドを参考にしました。
Oculus Rift製品版の予約・購入方法 | Mogura VR – 国内外のVR最新情報
OculusRift製品版の初期セットアップ方法 -開封から接続まで | Mogura VR – 国内外のVR最新情報

次にUnityをインストール。エディションは無料版です。
インストールするバージョンは常に最新版で問題ないようです。
Unity – Download

Unityのスクリプトエディタには無料のVS2015を入れました。

Visual Studio 2015 – Visual Studio

 

セットアップ完了したのち、VRクソゲー作りの参考にと色々なゲームをプレイしてみました。

unity_oculus_7days_vr_challenge_games

Oculus First Contact (無料、最高のチュートリアル)
Mikulus (無料、ミクさんに会える)
SUPERHOT VR (有料、ありえない動きができるFPS)
The Lab (無料、弓矢がたのしい)
Job Simulator (有料、VRならではの仕事体験ゲーム)

翌日から実際にクソゲーを作ってみます。

1日目 VRおせち料理

まず、とりあえず何かを握って投げたいと思い、チュートリアルを参考にクソゲーを製作しました。

手で物をつかむには | Unity+Oculus Touch開発メモ

Oculus TouchとUnityで何か作るときは、Oculus公式のSDKが必要なので入手します。
Oculus Utilities for Unity 5
Oculus Avatar SDK

とりあえずステージが必要なので、日本家屋を課金しました。

Japanese Furniture Pack 1 – アセットストア

タタミ部屋のデータ以外にもスシとかラーメンのモデルとかあって非常にはかどります。

あとはチュートリアル通りに、AvatarGrabSampleパッケージをインポートして、サンプルシーンを参考にしてオブジェクトにコンポーネントをつけていきます。
カメラやアバターはサンプルシーンのLocalAvatarをコピーして、自分のシーンにペーストしました。
とっても簡単です。

こうして完成したクソゲーがこちら

unity_oculus_7days_vr_challenge_01

なんとコード1行もかかずに完成しました。すごい簡単。

完成品のクソゲーを配布してみんなに体験してもらいたいところですが、リリース作業は大変な上に、配布しても遊べる環境がある人はそれほどいないと思うので、1分くらいのキャプチャ動画をツイッターで共有することにしました。

2日目 VRちゃぶ台返し

1日目で買った日本家屋アセットにちゃぶ台があるので、せっかくならこれを使ってちゃぶ台返しを再現することにしました。

AvatarGrabSampleよりも汎用的なVRのアセットを探したところ、VRTKというのがよさそうだったので導入しました。
VRTK – Virtual Reality Toolkit – アセットストア
「SteamVR Unity Toolkit」で物を掴む – たこやき部屋

VRTKはVRゲームで必要になる「握る」「押す」「投げる」「使う」「ワープ」「UI表示」などの機能は一通りおさえてあり、OculusでもVIVEでも使え、なおかつ無料というステキなアセットです。
サンプルも豊富にあり、今回は005_Controller_BasicObjectGrabbingのサンプルシーンが役に立ちました。

VRTKのおかげで基本的な挙動が再現できたので、次はぶつかったときの音を付けました。
ゲームは音があるといきなりそれっぽくなります。
Playing audio on collision – Unity Answers

せっかくなので、音もVRっぽくしたかったので、以下の記事を参考に3Dサウンド化しました。
Oculus Audio SDKについて調べてみた – Qiita

こうして完成したクソゲーがこちら

unity_oculus_7days_vr_challenge_02

音を入れることでそれっぽくなりました。
プログラムも5行くらいしか書いていないのに、すでにかなり楽しいです。VRすごい。

3日目 VRガンアクション

他のゲームで2丁拳銃を打つのが楽しかった思い出があり、ガンアクションを作ることにしました。
VRTKにはそのままGUN.csというスクリプトが付属していて、簡単にOculus Touchのトリガーで発射可能な銃を作ることができます。

HTC Vive向けアプリケーション開発支援ライブラリVRTKを使ってVR内のアクションを実装してみた – VOYAGE GROUP VR室ブログ

あと、発射時に音が鳴ったり発射エフェクトが表示されるようにGUN.csを改造しました。

これだけだと物足りないので、岩に銃を置くとゲーム終了になるよう演出を置きました。

こうして完成したクソゲーがこちら

unity_oculus_7days_vr_challenge_03

音をつけるためにアジアの効果音セットを課金したのですが、そのせいで完全に香港映画になりました。 次に買うときはもっと他に使いまわせるサウンドを課金することにします。

あと、Oculus Utilities+Avatar SDK+OSP+VRTKを毎回インポートしていちいちプロジェクト設定を変更するのは面倒なので、全部入りのプロジェクトをつくってそこからコピーするようにしました。

4日目 VRシャドーボクシング

Oculus Touchは手を握ることができるので、シャドーボクシングを作ってみました。
パンチを繰り出すときに「シュッ!シュッ!」と効果音がつくとたのしいので、 手の加速度が一定以上になったら音が鳴るようにしています。
OVRInput.GetLocalControllerAcceleration
Unity – スクリプトリファレンス: Vector3.magnitude

また、蛍光灯のヒモを手の風圧で動くようにしたかったので、風圧を再現しました。
[Unity] Rigidbodyが風を受けるようにする | ftvlog

ラジオからのBGMは、コンポーネントでハイパスフィルタとローパスフィルタを追加し、300Hz以上2200Hz以下の音だけ流れるようにしました。
こうするとラジオの音っぽくなります。

こうして完成したクソゲーがこちら

unity_oculus_7days_vr_challenge_04

題材が題材だったおかげで「やるやるwww」「VRにする意味www」といったコメントが寄せられ、かなり好評でした。
なお、蛍光灯のヒモは5.5ドルで課金したロープを縮小したものですが、これが非常に荒ぶるため大変でした。

5日目 VR自撮り棒

OculusとUnityがあればMMDのキャラをVRで眺めれる」と聞いていたのでMMDで何かつくることにしました。ただ見るだけでは面白くないので、自分でMMDを操作して自撮りするゲームを作ります。

自撮りといえば観光地なので、ステージにはゼンリンの秋葉原アセットをチョイス。
Japanese Otaku City – アセットストア
【Unity】Japanese Otaku City(秋葉原モデル)のピンクテクスチャの修正方法 – ヽ|∵|ゝ(Fantom) の 開発blog?

MMDといえば初音のミクさんですので、つみだんご氏の「つみ式ミク」をお借りしました。

【MMD】ミクさんのおねがいダーリン【モデル配布】 – ニコニコ動画

MMDをUnityで使うためにはMMD4Mecanimが必要です。
MMD4Mecanim (Beta) | Stereoarts Homepage

Oculusの手や顔の位置とミクさんと同期させるのですが、ミクさんの手を動かしても姿勢が破綻しないように、Mecanim Example Scenes 1.2アセットのIK.csを使っています。
IKを試してみよう! 導入編 – Onoty3D
IKを使うと、手の位置を変えたときに関節などを良きように動かしてくれるので助かります。

自撮り棒のギミックですが、棒の先にCameraを追加して、TargetTextureを通じてRenderTexturesに出力してあります。RenderTextureをPlaneオブジェクトに貼るとカメラの映像がPlaneオブジェクトに流れます。カメラなので左右反転するのを忘れずに。
撮影ギミックは、RenderTextureの画像をTexture2D.ReadPixelsでスプライトに変換してUIのImageに転送するだけです。
Unityで画面のスクリーンショットを撮る(Application.CaptureScreenshotじゃない方法) – Qiita

こうして完成したクソゲーはこちら。

unity_oculus_7days_vr_challenge_05

ミクさんをOculusに同期させるのがすごく大変だったのでTwitterでボヤいたところ、Final IKに課金するとカンタンという教えを得られました。

もっと事前調査をしておけばよかった・・・

PCLクレジット
この作品はピアプロ・キャラクター・ライセンスに基づいてクリプトン・フューチャー・メディア株式会社のキャラクター「初音ミク」を描いたものです。

6日目 VRテトリス

Steam公式のVRデモ”The Lab”には「ゲーム内ゲーム」が登場するのですが、それがとても興味深かったので自分でも作ってみます。

まずはゲーム内のゲームを作ります。ゲームはテトリスにしました。
テトリスはスクリプトが単純で、Unityのサンプルコードが多数存在するので圧倒的速度で完成です。

noobtuts – Unity 2D Tetris Tutorial

次にテトリスのステージだけを撮影するカメラを作成して、5日目のようにRenderTextureへ転送します。
あとはRenderTextureを貼ったPlaneオブジェクトを無料アセットのゲーム筐体に貼れば表示はOK。

次に操作です。
筐体のボタンにVRTKのVRTK_BUTTONコンポーネントをつけて、上下左右キーを作りました。
「ボタンが押されたら、キーボードのキー入力を発生させる」ことで、テトリス側をいじらなくても操作系が完了します。
Is it possible to simulate a keypress/input in code? – Unity Answers

余裕があったので、テトリミノに握れる判定をつけて、筐体に台パン機能を仕込みました。

こうして完成したクソゲーがこちら

unity_oculus_7days_vr_challenge_06

見知ったゲームのVR化と後半の演出が話題を呼び、10000RTを超える反響がありました。

7日目 VRバッティングセンター

さて最終日です。
VRゲーム「SUPERHOT VR」のスローモーションを再現したくなり、スローモーションにぴったりの素材を考えていたところ、野球のバッティングをスローモーションにするとよさそうだったのでゲーム化しました。

Unityでスローモーションは意外と簡単に作ることができます。
unityscript – How to get smooth slow motion in Unity3D – Stack Overflow
Unityでスローモーション – テラシュールブログ

プレイヤーに「いまはスローモーション中だよ」だと気づかせるために、スローモーション中はBGMや環境音のピッチが下がるように(音が低くなるように)なっています。

ピッチャーはランダムで3種類の速さの球を投げれるようにしました。
各パラメータはソースに書かずに、まず速さと投げる角度を設定するクラスを配列化し、[System.Serializable] 属性を付けておくと、ソースを開かなくても球の速さをいじれるのでラクです。
UnityのInspectorで変数を表示する方法まとめ – Qiita

今回使ったステージはライティングが凝っていて、そのためにオブジェクトを動かすたびにライトを再計算するので、再計算させるのを止めました。こうすると作業が早く終わります。
Unity5でライトを焼く – テラシュールブログ
【Unity】ライトマップのベイク時間を短時間で終わらせる – テラシュールブログ

最後にバッティングセンターによくあるホームラン演出を付けました。
Animatorを使ってロゴを動かしています。ロゴのフォントはドカベンフォントです。
Unityで3Dアニメーションを作成・再生するための基本、タイムラインの使い方 (1/4)
ドカベンの文字 – ニコニコ動画

そして完成したクソゲーがこちら。

unity_oculus_7days_vr_challenge_07

圧巻のエンディングです。
ゲーム自体は、スローモーションのおかげで簡単に球が打てるので、わりと遊べます。

気がついたこと

VRゲーム作りはわりと簡単に始められる

とてもハードルが高いのでは・・・」と思っていたVRゲームの開発ですが、チュートリアルを参考にして進めるだけで、物をつかんで投げて遊ぶところまで来れました。思ったより簡単!
あとは適当にゴミ箱とかをゴールにしておけば、バスケットボールの完成なので、セットアップまで来れれば、始めるときのハードルは結構低いかと思います。

アセットストアは本当に神

前回のクソゲー7日間と同様に、今回もアセットストアをかなり活用しています。
ステージ、音、エフェクト、小物、かわいいキャラやVRのミドルウェアまでもが無料で入手可能です。
しかも、どれも「コレ本当に無料でいいの!?」というクオリティです。
さらに、お金を出すと、ステキな建物や便利ツール、格闘ゲームの完成品が買えます。すごい。

音やエフェクトはかなり重要

2日目でVRちゃぶ台返しで音が出るようにしましたが、これがかなり重要だと気が付きました。
「物がぶつかると音がでる」「物を投げると飛んでいく」など、現実世界と同じ道理がVRでも通じるようにしておくと、物が実際にそこにあるかのように感じられ、VRゲームとしてのそれっぽさがかなり高くなります。

モチベーションの維持はやっぱり大変

前回同様、7日間完走するモチベーションを維持するためにいろいろと工夫を凝らしました。
まず、毎日1ゲームずつ、1機能ずつ試すつもりでゲームを作るようにしました。1日目は「ものを握る」、2日目は「音を入れる」、3日目は「銃を撃つ」といった具合に毎日テーマが違うので、「明日は何を作ろうかな」とワクワク感を維持することができます。

また、Unityを開いたらすぐゲームを作れるようにしました。プロジェクトは新規作成せず、Oculus Utilities+Avatar SDK+OSP+VRTKの全部インポート済み+プロジェクト設定完了済みのデータを用意し、それをコピーして名前変更すると、インポート祭りでやる気が削がれるのを防ぐことができます。

あと、ゲーム作成開始時はとりあえずステージを入れると、すぐステージを見回して遊べるので、さらなるモチベーションアップが狙えます。

プレイ動画には説得力がある

完成したゲームを人に見てもらうには、もちろん実際に体験してもらうのが一番なのですが、現状VRゲームを配布するのは大変ですし、VR環境がないと遊べません。
そこで今回はプレイ動画を1分にまとめてTwitterで共有してみました。
スクリーンショットよりも手間は増えますが、爆発的にRTが伸びることがあるので、やる価値はあります。

自分で世界を作り、そこに入ることができる

UnityでVRゲームを作ると、自分で作った世界をVRで実体験することができます。
神になった気分で、重力をいじったり、物をちらかしたり、時間を操ったりしましょう!

まとめ

VRかなりすごいし、みんなもぜひトライ!

おまけ

Oculusに必要なPCとビデオカードは?

・PC
2017年の最新FPSがそれなりの設定で動くくらいのゲーミングPCが必要です。
うちではサイコムの静音PCZOTACの静音GeForce GTX1060を入れて使っています。
ノートPCはOculus ReadyとかVR Readyとか書いてあるものを目安に選びましょう。

・ビデオカード
GeForce GTX 1060が最低ラインです。
あそぶゲームによっては処理落ちするので、GTX 1070はほしいところ。
Assetto CorsaでVR首都高とかするならGTX 1080にしましょう。

専用コントローラーは必要?

VIVEは付属するので悩まないのですが、Oculusは追加出費なので悩みどころかと思います。
個人的にOculus TouchはOculus Rift本体と並ぶ革命だと思っているので、買うべきかと。
「VR世界に手を持っていける」のは想像以上にインパクトあります。

VRのキャプチャのとりかた

GeForceのビデオカードを使っている場合なら公式ツールで撮影できます。
まず、GeForce ExperienceのインスタントリプレイをAlt+Zを押して有効にします。
音の出力設定をOculusをWindows側にして、Windowsの音声出力をスピーカーにしましょう。
あとは好きなタイミングでAlt+F10を押せば、mp4形式で過去5分間ほどが保存されます。

【ゲーム】NVIDIA Geforce Experience 3.0時代へ 2 – 人生®

スピーカーなどWindows標準の音声出力で音を出すには

AMDのカードの場合は、AMD gaming evolvedで似たことができるようです。

参考書籍など

とりあえずUnityの本が欲しいという人は「Unity5入門 最新開発環境による簡単3D&2Dゲーム制作」がおすすめです。
あとVR開発しているとVRのレンズが汚れるので、メガネ拭きがあると便利。

おすすめ情報ソース

フレームシンセシス VR開発メモ

テラシュールブログ

凹みTips

Mogura VR

QiitaのOculusタグ

【CEDEC2016】Oculusが語る「手でやろうとしたことが全てできるVR」が面白くなるコツ
Oculus Touchでゲーム作りをするときに注意すべき点がまとまっています

ねこ