見出し画像

REALITYで動くマルチゲームを作ってみた REALITY Advent Calendar #6

はじめに

本記事はREALITY Advent Calendar 2021の2021/12/06分になります。

ども!Androidエンジニアのナオヤです。

今回の開発合宿のテーマは自由研究ということで、業務で使用しているAndroidとは関係なしに、REALITYで動くマルチゲームをUnityで作ってみました。

なぜゲームを作ったかというと、私はグリーからREALITYへ出向してREALITYを開発しているのですが、REALITYチームに加入するまでは、某探検カードゲームなどのゲーム開発が長く、久しぶりにゲーム開発がしたい!と思ったからです。

今回作ったゲームはスロットゲーム

早速ですが、今回はスロットゲームを作ろうと思い、以下の流れを想定していました。

ホストが配信開始
1. スロットゲーム開始
2. レバーを叩いてリール始動(メダルが減る)
3. ストップボタンでリールを止める(結果によってメダル増)
4. 視聴者が拍手ボタンを押すことができる(全員に拍手の音が流れる)
5. スロットゲーム終了

今回はせっかくのマルチゲームなので、視聴者がゲーム上で拍手を送れるということにしました(笑)

REALITYのマルチゲームの構成

REALITYマルチゲームの仕組みを説明する前に、先にREALITYのマルチゲームの構成を簡単に説明しておきたいと思います。(ゲームによっては、この限りではありませんが、おおよそ、こんな感じと思って頂ければ...)

今回の登場人物

無題のプレゼンテーション (14)

サーバ側
httpサーバ
・ゲームに必要な情報や必要があればゲームロジックなどを持っている
WebSocketサーバ
・基本的にゲームロジックを持たず、クライアント間の情報を横流しする
クライアント側
ホスト
・REALITYでの配信枠のホスト
・サーバを経由して、ゲーム状況の同期はこの人が行う
視聴者
・REALITYでの配信を観ている視聴者
・ゲームには参加しないけど、同じゲーム状況を見ることが出来る
・ゲームに対して何らかのアクションを起こすことも可能

ホストがコラボ配信をしている際には、ゲームによっては複数人でゲームが可能だったりしますが、今回は単純にホストと視聴者の登場ということにしたいと思います。

REALITYのマルチゲームの仕組み

今回はスロットゲームを例に説明します。

詳しい実装方法はこの記事では省きますが、おおよその仕組みが伝わればと思います。

1. ゲーム開始

ゲーム開始時は、ホストはサーバにゲーム開始に必要な情報や、今回のスロットゲームであれば、自身のメダルの枚数の問い合わせなどを行います。

無題のプレゼンテーション (15)

その情報を元に今度は、サーバを経由して視聴者にスロットゲームを開始したこと、自身のメダルの枚数などのゲーム画面の表示に必要な情報を送ります。

無題のプレゼンテーション (16)

それにより、視聴者もホストと同様にゲームの画面の表示が可能になります。

2. レバーを叩いてリール始動

次に、ホストがスロットのレバーを叩くと、スロットのリールが始動します。

サーバにリールを始動したことを伝え、リールを回したことにより減った後のメダルの枚数を返して貰います。

無題のプレゼンテーション (15)

減った後のメダルの枚数と、レバーが叩かれてスロットのリールが始動したことをサーバ経由で視聴者に通知します。

無題のプレゼンテーション (16)

今度はこの情報を元に、視聴者もホストのメダルの枚数を減らし、リールが動き出したことを表示します。

4. ストップボタンでリールを止める

ストップボタンにて、ホストがリールを止めていきます。リールを止める度に、止まった位置をホストはサーバ経由で視聴者に通知を行います。

無題のプレゼンテーション (16)

視聴者はリールが止められる度に、その表示を行います。

ホストが3つのリールを止め終わると、今度は止めた位置をサーバに送り、サーバはリールの止まった位置を判断して、ホストにメダルの枚数を返します。

無題のプレゼンテーション (15)

今度はその枚数を元に、ホストは再び視聴者に通知を行います。

無題のプレゼンテーション (16)

これがホストがスロットゲームでレバーを叩き、リールが回り、ストップボタンでリールを止め、メダルが増減するという流れの中で行われている処理になります。

5. 視聴者が拍手する

今度は視聴者が何かしらの動作を行った場合、今回のスロットゲームでいうと拍手ボタンを押下した場合ですが、視聴者からサーバを経由してホストや、他の視聴者に拍手をしたことが通知されます。

無題のプレゼンテーション (17)

その通知により、ホスト、拍手をしていない他の視聴者が拍手の音を鳴らす事が可能です。

ゲーム終了

ゲーム終了時はホストがサーバにゲーム終了したことを通知します。

無題のプレゼンテーション (15)

そして、それが再び、視聴者に通知されて終了となります。

無題のプレゼンテーション (9)

以上がゲームの処理のおおよその流れになります。

このREALITYにおけるゲーム内の通知は、IF仕様が定義されていて、実際の実装はそのIFに則って、実装することになります。

今回作ったスロットアプリ

さぁ、それでは実際に今回の合宿で作ったスロットゲームの動画を見てみましょう!

画像12

はい、すいません、時間が足りずメダルの枚数表示や視聴者との同期まで実装できませんでした。。

まとめ

今回は2日間という短い時間の中で、最終的なゴールまでの実装にはたどり着くことが出来ませんでした。

ですが、REALITYで動くマルチゲームの仕組みと、作り方を改めて知ることが出来たので、個人的には有意義な開発合宿になりました。この先も時間を見つけてスロットゲームを開発して、完成させたいと思っています。


明日のアドベントカレンダーは!

明日は阿部さん助けて!で有名な、阿部さんの「REALITY chat for web」です。お楽しみに!