
最近Unityで遊びたい欲が出てきました。
最終的には色んなギミックを組み合わせて一つのワールドとしたいと思っていますが、
とりあえず第一弾として、今回はVRChatワールド内で周回する船を作ってみます!!
Unity version: 2018.4.20.f1 (現VRChat指定環境)
SDK : VRCSDK2(VRCSDK3を使うと、VRC_triggerが使用できない為)
このページの内容
ワールド全体の設計
ワールド全体の設計としては以下のようになります。
まず、ワールド中央に大きな山を置き、その山を中心として遊覧するように反時計回りに船を移動させます。
船には、運転ボタン/停止ボタンを置き、もちろんプレイヤーも船に乗れるようにします。
あ、言い忘れましたが、この船は空を飛んでます(遅
オブジェクトの作成
作者はこつこつとした作業が苦手なため、無料のアセットを利用して手短に済ませます。
マップの作成
作成したマップがこちらになります。
いちからTerrain(地形)を作るのは面倒だったので、「TerrainToolkit」を利用して大まかな地形を作ったのち、
マップの真ん中を通常のTerrainブラシで高く盛り上げていきました。
山だけでは見栄えが悪いので、川と滝と海も作成。
川と海は無料アセット「StandardAssets」のWaterProDaytimeを利用しました。
参考にしたサイトが以下になります。
船の作成
肝心の船ですが、こちらも無料のアセット「Brig Sloop Sailing Ship」からprefabを頂戴しました。
こんなかんじのカッコイイ船です。
scaleは0.7倍くらいが良さそう
帆の部分はいったん邪魔なので画面から消してます。後で付けたくなったら付けたらよろしい。
ギミックの設定
参考にした動画
まずはじめに、空を飛ぶ箒や船の作成は、Butadieneさんという方が素晴らしい動画を上げてくださっています。
上記の動画ではプレイヤーの手元に操作盤をおいて、「指定の方向に動く」といった操作になっていますが、
今回私が作ろうと試みているのは、ずっと同じ速さで山の周りを遊覧する船ですので、その点を解説していきます。
椅子と操作盤の準備
なんのせ、椅子と操作盤は必ず必要になります。
プレイヤーが椅子に座らないと、船から落ちてしまうので、必ず椅子に座ってから操作盤を操作する必要があります。
とりあえず動くようにしたいので、"見栄えはともかく"椅子と操作盤を準備。
椅子はVRChair、操作盤はMove用とStop用のCubeが必要ですが、Stop用はMove用をコピーして作ることもできますので、
最初は1コだけでもOK。
どちらも船(Ship)の下の階層に置きます。名前は何でもよいですが、Switch_move、Switch_stopとしました。
これにより、Shipを動かしたときに椅子と操作盤が一緒になって移動します。
飛行船の設定
船に関しては、以下のように設定します。
(動いている途中に重量で落ちていくことを避けるため)
・Positionを今回はX=700、Y=200、Z=0とする。
(原点(山頂)に対して、半径700mの円を描く。高さは200mとする。)
VRC_Triggerの設定
船を動かすために、操作盤にVRC_triggerを設定します。
そもそものVRC_Triggerの使い方についてはButadieneさんの動画や、VRC_Triggerの種類についてまとめているサイトなどがあるので、以下ご参照ください。
それでは、今回行った設定を説明します。
Move用操作盤
Move用の操作盤にVRC_Triggerを追加し、
トリガーは「OnInteract」(コントローラーやマウスで使用ボタンを押したときに発動)とします。
アクションとして以下の2つを追加します。
・SetAngularVelocity(船に角速度を与える)
次に、SetVelocity内の設定項目がこちら。
設定値に関しては「丁度、円を描くように設定」しています。値の詳細は後程解説します。
UseWorldSpaceは、「速度を与えるときに、どの座標を基準とするか」ということを表しており、チェックを入れるとワールドの座標軸が適用されます。チェックを外すと船の座標(これをローカル座標と呼びます)に対して速度が与えられます。
今回の場合、船の角度が変わっていくので、チェックを外しておきましょう。そうすることで、常に「船にとっての」角度で前進することができます。
つづいて、SetAngularVelocityの設定項目がこちら。ワールドと船のy軸の向きは変わらないはずなので、UseWorldSpaceはチェックを入れても外してもいいはず。
Stop用操作盤
Move用の操作盤をコピーして、速度と角速度をゼロにすれば完了。
名前やInteraction Textも分かりやすいように適宜変更。
設定値の詳細について
設定値の計算
ざくっと図を書きました。手書きですがお許しください。(伝われ)
このわかりづらい図が理解できない場合は、とりあえずrに円の半径を代入して頂ければよいかと思います。
※ちなみに角速度なんですが、単位は「度/秒」ではなく、「rad/秒」(ラジアン毎秒)のようです。
角度とradの変換はこちらからしました。
試運転
余談
Add系アクション
SetVelocityやSetAngularVelocityのかわりにAddVelocityやAddAngularVelocityを使えば、
速さを段階的にコントロールすることが可能ですが、
この場合、StopのときにマイナスのAddアクションを作らなければならず、
逆向きの移動が可能となってしまうことに注意してください。
椅子にじっとしていたくない
余談ですが、椅子に座らずに動いている飛行船の上を歩き回りたい...
何とか工夫してできないものかと考えています...。
最後に
これから少しずつ、Unityで遊ぶ関係の記事をかいていけたらーと。


Oculus とか VR について知ってる情報も発信します!!