🎉

[2021年] UnityのXRで使いたいリアルタイム技術・サービスの整理

2021/12/12に公開
1

概要

Iwaken Lab.「好きな技術・コト」のカレンダー | Advent Calendar 2021 - Qiitaの12日目の記事です。

UnityのXRで使いたいオンラインマルチプレイゲーム等の「マルチ」を支える「リアルタイム」技術を整理してみました。

動機としては、リアルタイム技術を勉強したいが、一体何から触ればいいのかが分からないので、リアルタイム、ネットワーク、マルチプレイゲームで調べ挙げて出てきた用語を整理して、個人的にさわってみたいものを探そうというものです。
個人のメモ的な側面が大きいです。

同じような事をされている先人の方々がおられるので、おすすめ記事として最初に紹介させて頂きます。

この記事の目的

  • リアルタイム技術を勉強するための取っ掛かりとする
  • 様々なレイヤーのリアルタイム技術選定の助けとなる
  • リアルタイム技術を触ってみたい、勉強してみたい人向けのインデックス
  • どのサービス、ミドルウェア、ライブラリを触ってみようとしたときの難易度の感覚を掴む

リアルタイム技術・サービスの整理

はじめに、ネットワーク方式について紹介し、BaaS (Backend as a service)、 Unityで利用可能な通信ミドルウェア、リアルタイム通信用ライブラリ、プロトコル、データシリアライズ毎にサービス・技術を並べています。

ネットワーク方式

クライアント同士が繋がるためにはどんな方式があるか

BaaS (Backend as a service)

バックエンドのインフラや様々なアウトゲーム的な機能を提供するサービス。アクセス数に応じたサーバーのスケーリングや、認証機能、適切なマッチメイキングや、プレイヤーデータ分析機能、マルチプラットフォーム機能などを提供する。
BaaS (Backend as a service)と呼ばれるサービスを含む。PhotonやMonobitよりも豊富なバックエンドサービスを提供しているサービスを並べました。

Unityで利用可能な通信ミドルウェア

ネットワークエンジン、通信エンジン、ネットワークライブラリと言われていそうなミドルウェア。Unityクライアントの実装のみで通信の完結が可能なミドルウェアを並べています。
Server方式が適切かどうかは保障できませんが、分類するとしたらこんな感じかなという印象です。

リアルタイム通信用ライブラリ

トランスポート層のTCPやUDPを扱いやすくするライブラリやフレームワークを並べた。

プロトコル

リアルタイム系の通信用ライブラリに関連するプロトコルを並べた。

シリアライズ

送りたいデータを人が読める形(json等)ではなく、バイナリでおくることで、通信効率を高めることができる。

検証・小規模向けにマルチプレイゲームを作ってみたい

難易度低そう

クライアントの実装が必要。リレーサーバーが必要な場合は、それぞれのサービスのコンソールで準備する。

難易度高そう

ListenServer型

DedicatedServer型

サーバーとクライアントの両方の実装が必要になる。

難易度分からないけど気になる

参考にしたリンクのリンク集

今後の予定

  • PubSubモデルについてTopicモデルではなく高頻度通信向けがあることを付け足す
  • この記事に図を追加する
  • 触ってみたい技術・サービスを使ってアレのデモをつくる
GitHubで編集を提案

Discussion