UnityでVRChatのボードゲームワールドを作成した記録 その1
ふと思い立ってVRChatでボードゲームが遊べるWorldを作成したのだが、情報がまとまってなくて苦労したので、少しでもあとから作る人の参考になればと思い自分がたどった過程を記しておく。
ボードゲームが遊べるWorldが作りたい
VRChatを常日頃から利用しているユーザーならばご存知だと思うが、VRChatにはボードゲームが遊べるWorldが豊富にある。VRでアナログゲームを遊ぶというのもなかなかに変な話ではあるが、ボードゲームをオンライン上で遊びたいという需要は常にある。そしてオンライン上で遊ぶにおいてネックになるのは、テーブルの用意だ。遠く離れた相手と対話するのは既存の通話ソフトにより問題なく行えるが、アナログで操作することを前提に作られたボード上のゲームを、オンラインでキーボードやマウスを通じて操作するのはやや操作性に欠けた。その点、VRデバイスならば擬似的な手による操作が可能になるためボードゲームとの相性は非常に良いと言える。VRだからこそ慣れ親しんだアナログの環境に最も近い状態でのゲームプレイができるのだ。
そして、これは作り手視点の話だが、実装がかなり容易にできてしまう。これがデジタルなゲームならば、そこに含まれるデジタル的な処理を再現するのにどうしてもプログラム思考が必要になり、実際に実装するためにはそれなりの知識と技術が必要になるだろう。しかしアナログゲームならばゲームのコンポーネントを作って置いておくだけでいい。特にゲームやプログラムの知識がなくてもできそうだ。じゃあ作ってみよう。となった。
Worldを作るために実際何をしたらよいか
作ろうとなった段階で、じゃあ何をしたらWorldを作れるのか、必要なものは何なのかの洗い出しを行う。
ちなみに作りたいゲームは決まっていた。
これがオリジナルゲームならゲーム内容の制作からしなければならないが、既存のゲームをVR上で再現するだけならばそのプロセスは不要だ。ただ代わりに権利者に許可を取らなければトラブルが発生する可能性がある。必要な作業が見えてきた。
最低限必要な作業
- 権利者に許可を取る。
- 必要なソフトをダウンロードする(Unity)。
- Worldを作成する。
- Worldにテーブルを用意する。
- ゲームに必要なカードを用意する。
- ゲームに必要なサイコロを用意する。
- ゲームに必要なコマやチットを用意する。
- 細かなWolrdの設定をする。
- WorldをVRChatにアップロードする。
よりシンプルに実装するだけならコンポーネントを置いただけでも遊べたが、実際遊ぶときの利便性のためにいくつかの機能の実装が必要だと感じた。今回作るダンゲロスボードゲームはカードとサイコロを使って遊ぶゲームだ。とりわけ、サイコロを振る機会がとても多い。追加で以下の機能がほしい。
やっておくことが望ましい作業
- 自動でサイコロが振れる機能の追加。
- 自動でカードをシャッフルする機能の追加。
- ボード上のタイル表示を切り替える機能の追加。
- ルールサマリーの完備。
ここまでやれば十全にゲームプレイができると考えた。ただより多くの人に遊んでもらうことを考えるならば、これだけではまだ不十分だろう。
やれればやっておきたい作業
- 自動でボード上を片付ける機能の追加。
- Worldのテクスチャを設定する。
- WorldにBGMを流す。
- 完成したWorldを宣伝する。
このように必要な作業を洗い出して優先度別に切り分けた。正直、経験もスキルもない何をしたらいいかもわからない状態からのスタートだったが、一つ一つのタスクを分けて見れば、なんとなくできそうな感じがしてくる。このタスクを一つ一つ実行していく。
権利者に許可を取る
ボードゲームの権利関係ははっきりとしていなく。デッドコピーとは至らないようなものであればカジュアルにコピーやwebツールが作られている。しかし、せっかく作ってからトラブルが起きるのは御免なので事前許可を得るのは大事だろう。実際に遊ぶ視点に立っても、権利関係をきちんとクリアしていることは安心感につながる。実際自分の周りだと、今遊んでいるゲームは違法なものではないか気にする人はそれなりに見かける。安心してプレイしてほしいので許可は取ろう。
今回は製作者がtwitterをしていたのでtwitterのDMで連絡を取った。ついでに画像のデータを頂けないか打診してみたらOKの返事を頂けた。これでゲームコンポーネントを作る際の作業量が大幅に減った。このように作業量の低減にもつながるのでダメ元で製作者に問い合わせはしておこう。
必要なソフトをダウンロードする(Unity)
VRChatのWorldはすべてUnityで制作する必要がある。そしてunityは対応するverのものでないとならない。今何のverに対応しているのか日本語で調べてもなかなかわからない。過去の記事を参考にしているとunityのverが違うという自体に遭遇しやすい。自分もそのせいで途中まで作業を進めてからunity自体を再ダウンロードする羽目になった。なお、この記事執筆時点での対応verは「Unity2017 4.15f1」だ。新しく始める人は気をつけていただきたい。
さらにVRChat関連の制作にはVRCSDKのインポートが必要になる。こちらは公式から最新版をダウンロードすればいい。
ダウンロードできたら新規プロジェクトを開いてVRCSDKをインポートしておこう。
以降の手順も含めて下記の動画が非常に参考になったのではじめてやる人は見ておくといいだろう。
Worldを作成する
実際にWorldを作成する段階では、すでにボードゲームWorldを作っているフレンドにアドバイスを受けつつ進めた。わからないことがあればすぐ聞けるし、なにより一人でやるよりずっと心強い。頼れるものは頼っていこう。自分も分かる範囲でならアドバイスできるのでこの記事を読んでわからないことがあれば気軽に聞いてほしい。
まずWorldに必要なのは床だ。先に貼った動画の通りにクリエイト3Dオブジェクトでplaneを選択し床を作る。サイズ感がつかみづらいが、床が狭いとゲームに集中できないので大きめにしておくといいだろう。
Worldにテーブルを用意する
クリエイト3Dオブジェクトからcubeを選び、長方体のテーブルにする。平面のボード上でプレイするゲームなのでテーブルの上にさらにplaneを設置し、ボードの画像をプロジェクト上にドラッグし、さらにplaneにドラッグする。これでplaneがボードの画像になる。
ゲームプレイ中にボードを切り替えたかったのでボードを切り替えるスイッチも設置。cubeオブジェクトを作ってinspectorにadd componentで「VRC_trigger」を追加。触ったら何かが起こるよって機能。「OnInteract」触ったときに、「AlwaysBufferOne」全体同期で、Actionsが起こるって設定。ActionsにはSetGameObjectActiveで切り替えたいボードを設定。operationをtoggleにするとそのままトグルスイッチになる。
ゲームに必要なカードを用意する
事前の洗い出しでカードを自動でシャッフルする機能があればよいとわかっていたので、どうすれば実装できるかフレンドに聞いた。おすすめされたギミックをboothで購入。500円。
【VRCギミック】カードシャッフルシステム ver1.2 - virtual-boys - BOOTH
自分で1から作ると数時間はかかりそうなので500円は安い。
しかし購入したファイルのプレハブをプロジェクトに設置したはいいもののシャッフルが正常に動作しない。なぜ? 少しして気づいたがStandard Assetsがインポートされていたなかった。Worldギミック系のプレハブは事前に他アセットの導入が必要になるものも多いようなのでこれに限らずギミックをダウンロードして入れる場合は仕様書にはきちんと目を通そう。
設置した時点ではトランプの画像が使われたカードが用意されている。まずカードのサイズを調整する。card内のItemオブジェクトをクリックし、右側のInspector内のscaleの数値をいじる。Itemの上のcardの方の数字をいじっても大きさは変わるのだが、実装する段階に置いて激しくバグったのできちんとItemの方のscaleを調整しよう。
Hierarchy内の「Item>visual>」にある「front」、「back」に直接カード画像をドラック&ドロップする。デフォルトの設定だと「back」の画像が上下反転している。これは「back」のRotationを180度回転させれば直るのだが、unityがよくわからない自分は裏面の全部の画像ファイルを180度反転させることで対処した。絶対にunity上で向きを変えたほうが楽なのだが、対処法を知らなくてもこのように力技で無理やり実装できるケースは多いのでとりあえず試してみるのは大事だ。
こうして1枚カードができあがればそのカードを元にコピーして全部のカードを作っていく。unity上の複製ショートカットは「ctrl+D」「⌘+D」なので覚えておこう。自分はカード画像の反転と合わせてphotoshopとunityを行き来していたのでショートカットの操作にかなり混乱したが最終的に慣れた。
山札が4つあるゲームなので、用意したカードは4つの山に分けた。特に設定をいじらずとも山さえわかれば山ごとにシャッフルしてくれる仕様だったのでここは楽だった。
ゲームに必要なサイコロを用意する
フレンドにサイコロ振れるようにしたいって言ったらプレハブくれたので設置した。持つべきものは友。role diceでdiceがアニメーションして1d6の結果がランダムに出る。
そして1d6から4d6を振り分ける必要あったので切り替えでサイコロの個数が変わるようにした。オブジェクトにさわると次のオブジェクトを出して消える仕組み。↓らへんのプレハブ参考に組み合わせただけ。
とりあえずworld作り始めたけどスイッチ使ったオン・オフとかどうやるのかとか、BGMの再生とかいまいちわかんねーなーって人用にめっちゃテキトーに使い方とprefabを入れたファイル置いておきます。
— ふぁず (@VRC_Fuzz) June 21, 2018
身内向けな上にクソ雑テキストです。このファイル名からお察しください。https://t.co/nA37xxLeMq pic.twitter.com/hBMnVuf0Wo
ゲームに必要なコマやチットを用意する
プレイヤーコマは後でチェスのポーン型にしようと思ったけど正方形を色分けしただけでも特に不都合に思わなかったのでcubeオブジェクト出して直接マテリアル変更しただけのものをコマにした。
ゲームで使うチップは円形にしようとしてcylinderオブジェクトを作ったらテスト時にバグって爆発四散したのでこちらもcubeオブジェクト。四角って最高。爆発しないし。
細かなWolrdの設定をする
いじった設定
・jumpの設定(デフォルトだとjunp不可)
VRChatの自作ワールドでジャンプさせるには「VRCWorld」オブジェクトの「Add Component」を押して「Scripts」→「VRCSDK2」→「VRC_PlayerMods」を追加して、「jumpPower」の値を0以上に設定すれば、アバターがジャンプできるようになります♥。( ^_^ )/ pic.twitter.com/PlYLhrACVg
— わびさび (@WabisabiApp) April 10, 2018
・衝突判定(コライダーの設定)
プレイヤーとぶつかって困るものは基本的にレイヤーの属性を「Walkthough」にした。
Layers - VRChat 技術メモ帳 - VRChat tech notes
・壁の設置
worldの隅に行っても落ちないように透明なオブジェクトにbox colliderを設定して透明な壁に
・オンオフできるミラーの設置(VRCSDKのプレハブ)
・光の設定(影はいらないのでオフに)
ここまでで最低限ゲームが遊べるworldができた。わりと簡単にできたので優先度が低かったタスクにも手を出していく。
ルールサマリーの完備
はじめての人でも遊びやすいように、ゲームに同封されている説明書の内容を少しだけ噛み砕いてサマリーを作る。Illustratorでパパっと作ろうとしたけど文章量が多くなってそれなりに時間がかかった。サマリーの制作だけで全体の作業時間の半分はかかったのでもしゲームコンポーネントの画像も自作することになったらかなりの時間がかかっただろうと思う。
文章ベタ打ちでもよかったのだけどちょっとだけ凝った感じに。そのわりに色もレイアウトも若干読みづらくなってしまったので反省。
worldにplaneオブジェクトで設置。枚数が多く全部設置すると場所を取るのでボタンで切り替えれるようにした。サマリーの横にボタンを設置し、「VRC_trigger」の「SetGameObjectActive」で切り替えできるように。
自動でボード上を片付ける機能の追加
ターン毎にトークンをリセットするのを自動でできるようにしたかったので、した。
VRC_SceneResetPositionを設定することで自動お片付けが可能に。ただ機能面の実装ではこの設定が一番面倒で時間かかったので本当にあればいいなくらいの気持ちで実装を試すのがいいと思う。絶対欲しいと思ってやると完成する前に詰む。
設定は以下の動画を参考に。動画みながら設定丸パクリするだけでなんとかなった。
Worldのテクスチャを設定する
worldの空の設定はskyboxというもので変えれる。unity asset storeから無料で良さげのskyboxをダウンロードして空の部分にドラック&ドロップ。
床やテーブルのテクスチャーも良さげな物を探して全部ドラック&ドロップで設定。簡単。
WorldにBGMを流す
さっきも貼ったけどこれ使った。
とりあえずworld作り始めたけどスイッチ使ったオン・オフとかどうやるのかとか、BGMの再生とかいまいちわかんねーなーって人用にめっちゃテキトーに使い方とprefabを入れたファイル置いておきます。
— ふぁず (@VRC_Fuzz) June 21, 2018
身内向けな上にクソ雑テキストです。このファイル名からお察しください。https://t.co/nA37xxLeMq pic.twitter.com/hBMnVuf0Wo
BGM自体はフリーのBGM素材サイトから。サイトの規約によってはクレジットが必要になるので規約の確認はしっかりとしよう。
WorldをVRChatにアップロードする
以下の動画を参考にしただけ。簡単。
完成したWorldを宣伝する
せっかく作ったので色んな人に遊んでもらいたい、なので宣伝をする。といってもtwitterで告知をするだけだが。
自分の経験則だと、少し大仰に「すごいものができました」ぐらいなノリの告知のほうが、知らない人も「なんかしらないけどすごいんだな」と思ってくれてRTしてくれる可能性があがる。あとはうざがる人もいるけどタグは大事。VRCの人はボドゲ好き多いので、ボドゲ好き界隈に捕捉されれば勝手に拡散される印象。
この先、DANGEROUS! 命の保証なし!!
— ぬんぬん (@numenunu) March 31, 2019
金玉を爆発させる能力vs性転換能力
マッハで走る能力vs眼球を自在に飛ばせる能力
異能に目覚めた魔人学生たちによる異能バトルボードゲームがVRChatを舞台に登場!
「VRC_dangerous!!」アップロードしました!ぜひ遊んでください!#VRChat #VRChat_world紹介 pic.twitter.com/wOBtzBTcH5
ね、簡単でしょ?
実際、思ってたよりすごく簡単で土日にパパっとやって2日間で作れた。ボドゲ好きの人はボドゲWorld自作して遊びましょう。
最後にほしいものリスト貼っとくのでなにかください。