見出し画像

Now in REALITY Tech #8 3周年記念ワールドを作った話

こんにちは、Unityエンジニアのあさだです。
2021年8月7日にREALITYは3周年を迎えました。
今週のNow in REALITY Techは、8月6日〜8月16日までの間に期間限定で公開された、3周年記念ワールドについて書いていきます。
ヘッダー画像は先日YouTubeで公開された動画より抜粋しました、未来のREALITYの形です。

3周年記念ワールドとは

REALITYでは、配信中に遊べるゲームを提供しており、3周年記念ワールド(以下、ワールド)はこのゲームの一種となります。
ゲームには大きく分けて以下の2種類があります。

・Unityレイヤ上で動くゲーム
・ネイティブレイヤ上で動くゲーム

Unityレイヤ、ネイティブレイヤについての解説はこちらの記事も合わせて参照をお願いします。

ワールドはUnityレイヤ上で動くゲームをベースに実装しており、用意されたステージの中をアバターが自由に動き回ることができ、好きなカメラ位置で配信を行うことができます。
REALITYにおけるゲームは、配信中に遊べるものとして提供されており、配信者であるホストの画面状態は視聴者や、コラボ機能で参加したゲストへの画面へ同期されています。
いくつかのゲームでは、視聴者やゲストからの入力も受け付けるインタラクティブなマルチプレイゲームとなっています。
これらのゲームでは、通常の配信で使っている音声やアバターのモーション情報を扱うWebSocketとは別のコネクションを張って、ゲームに関するメッセージをやりとりしています。
次項では新しく実装した機能を紹介していきます。

アバターの移動とカメラの操作

ワールドを作成するにあたり、大きな機能開発となったのは、アバターの移動と、カメラの操作になります。
ワールド内でアバターが歩き回ったり、様々な視点にカメラを動かす配信者の操作は、視聴者に同期されています。
同期の実装については、WebSocketで座標メッセージを送受信し、各クライアントでメッセージの受信頻度とゲームのフレームレートを算出し、UnityのLerp関数でパラメータを補完させることで、ある程度なめらかな位置同期を行えるようにしています。

メッセージの送信方式の変更

ワールドより以前から公開されている、「カタカナ禁止令」や「人狼ゲーム」では、ゲストの操作はいったん配信者であるホストにメッセージが集められる方式で作られていました。

1. ゲストの操作をホストにメッセージ送信
2. ホストでゲーム内状態を更新
3. ホストからゲスト・視聴者に更新された状態のメッセージを送信
4. メッセージを受信したゲスト・視聴者にて、画面を更新

無題のプレゼンテーション

ワールドでは、ゲストもアバターを自由に動かすことができ、アバターの移動などで頻繁に座標メッセージのやり取りを行うので、今までのシーケンスではホストの通信状態にかなり依存してしまいます。
今回、ゲストはホストを介さずに視聴者にもメッセージを送る方式を採用することで、より安定した位置同期を可能にしました。

1. ゲストの座標をホスト・他ゲスト・視聴者にメッセージ送信
2. メッセージを受信したホスト・ゲスト・視聴者が画面を更新

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

まとめ

他にも今回のワールドのリリースにあたって、クライアント・サーバともに様々な機能強化にあたりました。
リリース後には、ユーザーの皆様より様々な声を聞くことができ、大変励みになっています。
個人的にとても良いなと思ったのが、こういったバーチャルコミュニティを扱うアプリの中で、REALITYはアプリの起動からワールド機能の開始までが早く、気軽に参加できるという声でした。

こういった過去に行われた取り組みが効いており、とても素晴らしいチームに恵まれていると改めて実感しております。

REALITYに興味のあるエンジニアの方がいらっしゃいましたら、以下のリンクから気軽にお話を聞きにきてくれると嬉しいです。

カジュアル面談も受け付けているので、お気軽にお申し込みください!