【VRChat×Unity】VRChatでテニス!! テニスコートとボール発射機作ってみた
スポンサーリンク

ハドソン
こんにちは、Unityで遊びたいお年頃のハドソンです!!

 

"Unityで作るシリーズ" は今回で3回目になります。少しずつパーツを増やしていって、最終的には大きいワールドにしたい。

今回はUnityでVRChat用テニスコート&ボール発射マシンを作成していきます。

 

今回の内容
・VRChat用テニスコートを作成
・一人で遊べるボール発射マシンを作成

 

いつものように開発環境は以下の通りです。

環境とか
Unity version: 2018.4.20.f1 (現VRChat指定環境)
SDK : VRCSDK2(VRCSDK3を使うと、VRC_triggerが使用できない為)
PC OS : Windows 10 Pro
※MACでの開発については未検証ですのでご了承ください。

 

テニスコートの作成

Unityでテニスコート作成

リアリティを出すために、面積は実際のテニスコートを参考にしました。

参考:https://activel.jp/tennis/uckgg

 

ハドソン
今回はソフトはUnityですべてを作成します。

 

グラウンドはPlaneオブジェクトで作成し、"StandardAssets"のGrassHillAlbedoを使って
人口芝っぽい感じにしました。

同じくPlaneを加工してテニスコートのラインを作成。

テニスコートのラインより外の部分は"StandardAssets"のMudRockyAlbedoSpecularとしました。

何となくかっこよさげだったからです。

 

ネットの部分に関しては、Cubeを使って作りました。コートの向こう側が見えるように、少し不透明度を下げ、薄い青色に。

 

テニス用具の作成

 

次にテニスボールとテニスラケットです。

 

ボールはただの球でよいのでSphereで作成し、色は本物っぽい&見やすいライトグリーンな感じに。

ラケットについては、いつもの通り無料アセットを拝借。
今回使わせてもらったのは"BeachBat"というアセットです。

物理的な設定については後述します。

 

パラメータの調整

球技ではボールが他のものに衝突した時の挙動が重要になってきます。
いろいろ試した結果、今回は以下のパラメータを使っています。

テニスボール

半径は10cmです。それより小さいと見づらいかなーと思ったので。

RigidBody

PhysicMaterial

また、VRC_pickupコンポーネント、VRC_Object Syncを付けておきます。

テニスラケット

大きさはアセットのものを3倍することで当たり判定を大きくしました。

VRC_pickupコンポーネント、VRC_Object Syncを付けて、ラケットでボールを打った時にボールの位置が他のプレイヤーに同期されるようにしておきます。(こちらの記事を読む限り、ボールとラケットの両方にこの設定があれば、ラケットを持った人がボールを打った時にボールのownershipが得られ、打った情報が他の人にも同期されるはず)

 

 

RigidBodyとMeshCollider

ちなみに、3つ目のMeshColliderがボールを打つ面にあたるので一番重要で、PhysicMaterialは同アセット内の"Rubber"を使っています。

PhysicMaterial

これがRubber

テニスコート

RigidBody

PhysicMaterial

 

スポンサーリンク

ボール発射マシンの作成

複数人でのプレイ? 1人でのプレイ?

 

複数人でテニスのプレイができたらと思って作ったワールドではありますが、
結論から言ってしまえば、かなり難しいと思われます。

 

なぜなら、テニスコートはVRで移動するには広すぎるからです。
(VRゲームに卓球が多いのはこのためですね)

ハドソン
あと、単純にちゃんと打ち返すのが難しいです。

ということで、どうするかというと、
ボールを発射してくれるマシンを作って、それを打ち返す!! という仕様を作って、
1人でも遊べる感じにしよう
と思います。

 

発射する砲台の作成

 

さて、ボールを発射する起点を決めなければいけませんね。
ぶっちゃけ形はどうだっていいんですが、今回はこのような形にしてみました。

マルコ
簡単につくれて、まあまあ砲台っぽい

 

砲台の中心には、このように球を込めます。(↓見やすいように一時的に透明にしています)

 

砲台を動かすスイッチの作成

 

テニスコートの砲台の逆サイドにボールを発射させるためのスイッチをおきます。

黒いキューブの名称をCannonSwitch、埋め込まれている白いキューブの名称をCannonSwitchButtonとしました。

ハドソン
いよいよボール発射の仕組みを作っていきます

 

スイッチに設定する動作の解説

 

まずは、今回設定する動作について少し説明を。

先ほど作ったスイッチに以下の機能を加えます。

動作の仕組み
・白いキューブ(CannonSwitchButton):黒いキューブの動作をON/OFFと切り替える。
・黒いキューブ(CannonSwitch):こちらの動作がメインとなる。ON状態の時に動作を行う。
具体的には、ON状態のとき白いキューブは緑色に点灯。5秒おきに砲台からテニスボールが発射される。

 

VRC_Triggerの設定

 

さて、VRC_Triggerの設定です。

まずは白いキューブ(ボタン)の方を設定します。
下図のように設定しました。

説明も図の中に直接書き込みました。

SetComponentActiveの中身は、EnableをToggleに設定します。

これで、黒いキューブのVRC_Triggerが
アクティブの時は非アクティブに、非アクティブのときはアクティブになります。

 

次は黒いキューブの方に以下の設定を行います。

 

図の下のアクション(ボタンの色変え)から先に動作します。

図の上側のアクションは5秒間隔で繰り返しになります。

 

SendRPCというのは他のオブジェクトに対し、アクションを起こさせるアクションです。
この場合ではテニスボールに対して、リスポーン(元の位置に出現)させることによって、
テニスボールを砲台の中に戻します。

 

言い忘れていましたが、テニスボールにはVRC_Object Syncコンポーネントを付けておきます。 そうしないとSendRPCの対象となりません。

 

テニスボールを初期位置に戻した後は、AddForceによりテニスボールを発射させます。
距離によりますが、今回は以下のように設定しました。

 

Zが前方向ですね。サーブエリア後方のラインくらいでバウンドするようにしました。

 

基本的には、以上で設定は完了です。それでは、実際にVRChatでの動作を確認してみます。

 

完成

 

実際にVRChatでの動作を確認します。

 

スイッチ起動よーし。

ボール繰り返し発射よーし。バウンドの仕方もいい感じです。

空はやっぱ夕焼けがいいすね。

ラケット大きい....ですがこれくらいないと当たらないんですよね

 

打つのはちょっと難しいけど、相手コートに返せたら嬉しさを感じる。

ターゲットとか置いてあれば尚いいかも。

 

最後に

ハドソン
今回はVRChatで使えるテニスコートを作成しました。
ボールやラケットの撥ね方等、調整が難しいですが、何とかテニスが可能になったかと思います。
VRChat×Unityシリーズは今回が3回目、そろそろPublic公開できるちゃんとしたワールド作りたいなぁ...と思ってます。
【VRChat×Unity】シリーズ

マルコ
当サイトでは家庭用VR Oculus Go/Questについて日々研究中です!! VRの選び方、おすすめソフト、快適な使い方などなど、情報満載です!! VRに触れたことない初めての方もイチから教えるので大丈夫ですよ!!こちらからどうぞ!!

ハドソン
よかったらTwitterをFollowしてお友達になりませんか?
Oculus とか VR について知ってる情報も発信します!!

 

スポンサーリンク