【Unity】Unity6で登場！Multiplayer Centerで捗る、オンラインゲーム開発

# 最初に

本記事では、Unityが提供する主要なマルチプレイヤー関連のサービスとその活用方法について、初心者向けに紹介しています。開発するゲームの規模や特性に応じて最適なツールやパッケージを選び、効率的に開発を進められるよう、各サービスの特徴やメリット・デメリットについても具体的に取り上げています。

本記事の対象者は以下の通りです。

- Unityでマルチプレイゲームを開発したいけれど、どこから手をつければ良いのかわからない方
- Unityの提供するオンラインサービスやパッケージについて全体像を知りたいという方
- マルチプレイゲームプロジェクトのプロトタイプを迅速に用意したい方

### **今回の環境**

- OS : MacOS
- Unity：6000.0.27f1

<br>

# Unityのマルチプレイゲームの開発向けサービス一覧表

| **サービス名** | **概要** |
| --- | --- |
| **Netcode for GameObjects** | Unity公式のネットワーキングライブラリで、カジュアルな協力プレイや対戦ゲームを手軽に構築することができます。 |
| **Netcode for Entities** | こちらもUnity公式のネットワーキングライブラリで、さらに多人数でのマルチプレイゲームを構築することができます。 |
| **Relay** | 専用サーバーを用意せずに、プレイヤー同士を接続し、優れたマルチプレイヤー体験を提供します。  |
| **Lobby** | カスタムのプライベートルームやパブリックルームでプレイヤーをつなげ、マルチプレイヤーゲームを可能にします。 |
| **Friends** | プレイヤー同士のフレンド機能を提供し、コミュニティの形成を支援します。 |
| **Matchmaker** | ルールベースのマッチメイキング機能で、適切なプレイヤー同士をつなげます。 |
| **Multiplay Hosting** | 高性能なマルチプレイヤーゲームホスティングで、プレイヤーの需要に合わせてスケーラブルなサーバー環境を提供します。  |
| **Vivox Voice Chat** | 距離やプラットフォームを超えて、プレイヤー同士の音声チャットを実現します。  |
| **Vivox Safe Voice（ベータ版）** | AI搭載のモデレーションプラットフォームで、ゲームコミュニティをより安全に保ちます。  |

<br>

# [Netcode for GameObjects](https://unity.com/ja/products/netcode)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/8a61d3b7-cc71-4559-04d0-5c82cf675e89.png)](https://unity.com/ja/products/netcode)

マルチプレイヤーゲームの開発を容易にするため、設計されたライブラリです。

特に「小規模~中規模の**リアルタイム性が重要視されない**マルチプレイヤーゲーム」の開発に使用するのが向いています。

ローカルネットワーク上でのマルチプレイゲームであれば、プレイヤーの一人がホスクラとなり、他のプレイヤーがそこに接続することでマルチプレイが実現でき、費用もかかりません。

後述する「Relay」と相性が良く、組み合わせて使えばインターネットを介して、数人規模から20人程度の同時接続のオンラインゲームを開発できるようです。オブジェクト同期やRPCを簡単に扱える構造になっているので、大規模なマルチプレイゲームのプロトタイプ開発としても役に立つかもしれません。

「Multiplay Hosting」といったUnityが提供しているホスティングサービスと組み合わせたり、自前でサーバーを用意すればプレイヤー全員がクライアントとなり、ホスト切断によるゲームの強制終了も無くなり、ゲーム自体も公平に進められるようにもできます。ただ、そこまでする必要があるかどうかは、開発するゲームのジャンルや予算にも寄るので慎重に決めましょう。

## 特徴

- **オブジェクト同期**：
ゲーム内のオブジェクトの状態を、サーバーとクライアント間で自動的に同期します。
- **RPC**：
リモートでメソッドを呼び出す機能を提供します。
- **簡易な設定**：
Unityエディター内でのセットアップが容易で、複雑な設定なしに基本的なマルチプレイヤー機能を実装できます。
- **P2P接続**：
ホストとクライアント間で直接通信を行うP2P接続をサポートしています。「Relay」と組み合わせれば専用サーバーを必要とせずにP2P以上の規模を持つマルチプレイヤーゲーム開発を進めることができます。

## メリット

- **公式サポート**：Unity公式のライブラリであり、長期的なサポートが期待できます。
- **シンプルな実装**：ネットワークコードがシンプルで、初心者でも理解しやすい設計です。
- **Unityエコシステムとの統合**：Unityの他のパッケージや機能とスムーズに連携できます。

## デメリット

- **カスタマイズの制約**：
「Netcode for GameObjects」はデフォルトで`Unity Transport`を使用しますが、独自のトランスポートプロトコルを導入する際には、追加の実装や調整が必要となり、開発の複雑さが増す可能性があります。
- **最適化**：
また、対戦型FPSのようなリアルタイム同期が求められるゲームを作るにはデフォルト機能だけだと、遅延や同期ズレが発生する可能性があり、追加の最適化やカスタマイズが必要となります。
- **スケーラビリティの課題**：
「Netcode for GameObjects」はホストとクライアントのP2P構造が中心であり、大規模な専用サーバー構成には対応しにくいです。

## 参考記事

- [Netcode for GameObjectsの通信量過剰時の挙動と対策](https://qiita.com/tsune2ne/items/00049e66ca3ee7fa96a5)
- [Unity Netcode for GameObjectsを使ったオンラインマルチプレイゲーム開発Tips【Advent Calendar 12/23】](https://media.colorfulpalette.co.jp/n/n08799dd4ae7e)

<br>

# [Netcode for Entities](https://unity.com/ja/products/netcode)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/8a61d3b7-cc71-4559-04d0-5c82cf675e89.png)](https://unity.com/ja/products/netcode)

`ECS`を基盤として開発された、高パフォーマンスなライブラリです。

特に「**大規模でリアルタイム性が求められる**マルチプレイヤーゲーム」や、「シミュレーションの精度が重要なプロジェクト」に最適です。

このライブラリは、膨大な数のエンティティを効率的に管理・同期するために最適化されており、大量のデータ処理が必要なゲームでも高いパフォーマンスを実現します。Unityの`DOTS`フレームワークと密接に連携しており、メモリの効率性とマルチスレッド処理を活用することができます。

「Relay」と組み合わせて中規模なマルチプレイゲーム開発もできますし、「Multiplay Hosting」と組み合わせることでスケーラビリティとインフラ管理を向上させ、大規模なオンラインゲーム環境を構築することも可能です（参考：[**Learn large-scale multiplayer with Megacity Metro**](https://unity.com/resources/megacity-metro)）。

クライアント予測とサーバーオーソリティ（ゲームの状態やロジックを一元的に管理するサーバー）を組み合わせることで、リアルタイムの相互作用における遅延やズレを最小限に抑えたゲームの開発が可能です。ただし、`ECS`を前提とした設計であるため、エンティティ指向のプログラミングに慣れていないと学習コストが高くなります。

## **特徴**

- **高パフォーマンス同期**：
`ECS`を基盤とした構造で、大量のエンティティを効率的に同期します。リアルタイム処理に強く、大規模なデータ処理も可能です。
- **クライアント予測と補間**：
サーバーオーソリティを維持しつつ、クライアント側での予測を行い、遅延を最小化するメカニズムを提供します。
- **`DOTS`との統合**：
`DOTS`とスムーズに統合され、高効率なデータ指向プログラミングが可能です。

## **メリット**

- **中～大規模なゲームへの対応**：
高いスケーラビリティを持ち、大規模なオンラインゲームやリアルタイムシミュレーションを効率的に実装できます。
- **パフォーマンスの最適化**：
マルチスレッド処理とメモリ効率を活用して、CPU負荷を大幅に軽減します。

## **デメリット**

- **`ECS`への依存**：
オブジェクト指向プログラミングに慣れている開発者にとっては、`ECS`の習得が必要となり、学習コストが高くなります。
- **複雑なセットアップ**：
高度なパフォーマンスを発揮するためには、エンティティベースの設計が前提となり、既存のプロジェクトに導入する際は大幅な改修が必要な場合があります。

## 参考記事

- [Unity DOTS と ECS の探求: それはゲームチェンジャーですか?](https://hackernoon.com/lang/ja/Unity-dots-%E3%81%A8-ecs-%E3%82%92%E6%A4%9C%E8%A8%8E%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81%E3%81%93%E3%82%8C%E3%81%AF%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%81%E3%82%A7%E3%83%B3%E3%82%B8%E3%83%A3%E3%83%BC%E3%81%A7%E3%81%99%E3%81%8B)
- [Unity Entitiesが正式リリースされたのでマルチプレイチュートリアルを弄ってみる](https://synamon.hatenablog.com/entry/2023/08/11/200946)

<br>


# [Relay](https://unity.com/ja/products/relay)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/ba6635df-3700-e941-c6af-8e8c43b9f526.png)](https://unity.com/ja/products/relay)


Unityが提供するクラウドベースのサービスで、**`P2P`通信をサポートする**ために設計されています。

ゲームプレイヤー同士が直接、`UDP`通信できるようにすることで、専用サーバーを設置しなくてもマルチプレイヤーゲームを開発できます。特に「**小規模から中規模のリアルタイムマルチプレイヤーゲーム**」に適しており、費用を抑えつつもスムーズなオンライン体験を提供できます。

## **特徴**

- **NAT越えのサポート**：
プレイヤー間の接続がファイアウォールや`NAT`によってブロックされることを防ぎ、安定した接続を確立します。これにより、ゲームのプレイヤー同士がシームレスに接続できます。
- **クラウドベース**：
Relayは完全にクラウド上で動作するため、サーバーインフラの運用管理が不要です。開発者は手間をかけずにオンラインゲームを提供できます。
- **組み込みのスケーリング**：
プレイヤー数の増加に応じて、自動的にスケーリングする機能を備えているため、大規模なユーザー基盤にも対応可能です。

## **メリット**

- **低コスト運用**：
Relayを利用することで、専用サーバーを設置・維持するコストを削減できます。データ転送量に基づく課金モデルが採用されており、小規模なゲームであれば非常に低コストで実現できます。
- **簡単なセットアップ**：
Unityエコシステムに組み込まれており、短時間でマルチプレイヤー機能を構築できます。特に「Netcode for GameObjects」や「Netcode for Entities」と連携させることで、簡単にオンライン通信が可能になります。
- **開発者フレンドリー**：
Unityエディターから直接Relayの設定ができるため、初心者でも扱いやすい設計になっています。

## **デメリット**

- **`P2P`構造の限界**：
Relayは`P2P`通信を中継する役割を果たしますが、大規模な同時接続を必要とするゲームや、高いリアルタイム性が要求されるゲームでは、専用サーバーほどのパフォーマンスは期待できません。
- **依存する通信環境**：
`P2P`の特性上、各プレイヤーのネットワーク環境に依存する部分があり、通信が不安定になる可能性があります。その場合は、タイムアウトしたプレイヤーを切断する流れになります。

## 参考記事

- [Unity の Relay と Lobby について調べたメモ](https://korechipostit.hatenablog.com/entry/2023/11/26/153132)
- [リレーRelay機能を使って、マルチプレイ環境を作る！[Unity+Netcode for GameObjects]](https://anogame.net/netcode-relay-tutorial/)
- [Unity Gaming ServersのLobby/Relayの使い方](https://qiita.com/tsune2ne/items/29f1534a623a67821c30)

<br>

# [Lobby](https://unity.com/ja/products/lobby)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/8adcd9eb-c995-e4e1-9f13-2d51b0b5846f.png)](https://unity.com/ja/products/lobby)


Unityが提供するサービスの一つで、マルチプレイヤーゲームでプレイヤーが集まるロビーを管理するために設計されています。ロビーは、ゲームのマッチメイキングを行う前にプレイヤーが集まり、設定を行ったり、他のプレイヤーを待ったりするためのものです。

「Lobby」を活用することで**プレイヤー管理とマッチメイキングを開発**することができます。

プレイヤーがタイムアウトしても再度セッションへ参加できるようにしたり、ホストが切断されても他のプレイヤーにホスト権限を自動的に委譲するシステムを構築することが可能です。

単体でも使えますが、「Relay」や「Multiplay Hosting」と組み合わせることで、プレイヤーがゲームから切断された際に、サービス間で通知が行われ、切断されたプレイヤーを自動的にロビーから削除できます。

また、「Relay」は、プレイヤー数の増減に応じて自動的にスケーリングする機能を持っているため、Lobbyと組み合わせることで、増加するプレイヤーに対応しやすくなり、安定したマルチプレイヤー環境を提供できます。



## **特徴**

- **プレイヤー管理**：
Lobbyを使うことで、各プレイヤーがロビーに参加でき、ゲームが開始するまでの間に設定を確認したり、他のプレイヤーとチャットするような機能を提供できます。その際に、プレイヤーの情報（名前、スコア、準備状況など）をロビー内で確認・管理することができます。
- **カスタムルーム**：
プライベートな部屋を作成してフレンドを招待する機能や、オープンな部屋を作って世界中のプレイヤーとマッチングする機能を作ることができます。ゲームの設定やプレイスタイルに応じて、部屋の作り方を自由にカスタマイズできるよう、設定することも可能です。
- **簡単な統合**：
Unityエディター内で簡単にセットアップでき、他のUnityのマルチプレイヤーサービス（「Relay」、「Netcode」 「for GameObjects」など）と組み合わせて使用することで、統一されたオンラインエクスペリエンスを提供します。


## **メリット**

- **スムーズなマッチメイキング**：
Lobbyを使えば、プレイヤー同士のマッチングがスムーズに行われます。プレイヤーが希望するゲーム設定に基づいて、適切な相手を素早く見つけることが可能です。
- **柔軟なカスタマイズ**：
開発者は、ロビーの構成や機能を柔軟に設定できます。例えば、特定のゲームモードに合わせた設定や、パスワード保護されたプライベートロビーの作成なども可能です。


## **デメリット**

- **追加のサービスコスト**：
Lobbyは基本機能が無料で提供されますが、大規模なゲームや多くの同時接続を処理する場合には、使用量に応じた課金が発生することがあります。
- **スケーリングの課題**：
大人数のプレイヤーが集まるゲームの場合、複数のロビーをスケーリングする際にパフォーマンスの最適化が必要となることがあります。

## 参考記事

- [Unity の Relay と Lobby について調べたメモ](https://korechipostit.hatenablog.com/entry/2023/11/26/153132)
- [Unity Gaming ServersのLobby/Relayの使い方](https://qiita.com/tsune2ne/items/29f1534a623a67821c30)

<br>

# [Friends](https://unity.com/ja/products/friends)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/8380fb7c-d760-90e7-665d-abfd555ff195.png)](https://unity.com/ja/products/friends)


Unityが提供するサービスの一つで、**マルチプレイヤーゲームにおける「フレンド管理」を簡単に行うために設計**されています。

Friendsは、プレイヤーが他のプレイヤーとフレンド関係を結び、ゲーム内外でつながりを保てるようにする仕組みです。これを活用することで、フレンドシステムを構築でき、プレイヤー同士の交流を促進することが可能です。

単体でも使えますが、「Lobby」や「Relay」と組み合わせることで、フレンド同士がより簡単に一緒にプレイできる環境を提供できます。例えば、フレンドがオンラインになった際、通知を送ったり、フレンドをロビーに簡単に招待するシステムを構築することができます。


## **特徴**

- **フレンドリスト管理**：
Friendsを使うことで、プレイヤーが自分のフレンドリストを管理し、追加や削除、フレンドのオンラインステータスの確認ができる機能を提供できます。
- **フレンドリクエスト**：
他のプレイヤーにフレンドリクエストを送信し、承認または拒否する機能も作りやすくなります。これにより、新しい友人とつながったり、ゲームを一緒にプレイすることが可能です。

## **メリット**

- **コミュニティ向けの機能開発のしやすさ**：
Friendsを使うことで、プレイヤー同士のつながりが強化され、ゲーム内コミュニティの形成が促進されます。フレンドと一緒にプレイすることで、ゲームのエンゲージメントが向上します。
- **簡単な統合**：
Unityエディター内で簡単に設定でき、他のUnityのサービス（「Vivox」など）と組み合わせることで、より統合的なマルチプレイヤー体験を提供します。

## **デメリット**

- **追加のサービスコスト**：
Friendsは機能が基本無料で提供されますが、プレイヤー数が多いゲームや大量のメッセージ通知を処理する場合には、使用量に応じた課金が発生することがあります。
- **スケーリングの課題**：
フレンドリストの管理が大規模になる場合、システムのパフォーマンスを最適化する必要があります。

## 参考記事

- [**Unity Gaming Servicesの最新アップデート。要望の多かったFriendsとLeaderboardsのオープンベータが開始**](https://indiegamesjp.dev/?p=7715)
- [**Friends (ベータ) へようこそ**](https://docs.unity.com/ugs/ja-jp/manual/friends/manual/welcome)

<br>

# [**Matchmaker**](https://unity.com/ja/products/matchmaker)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/cd911716-062f-5271-68da-a7e2e1c456b9.png)](https://unity.com/ja/products/matchmaker)


Unityが提供するサービスの一つで、**プレイヤー同士をマッチングするために設計**されています。

Matchmakerは、ゲームのマッチメイキングシステムを構築するための機能を提供し、それによってプレイヤーのスキルやプレイスタイル、ゲームモードの設定に基づいて、適切な対戦相手を素早く見つけることができます。

単体でも使用可能ですが、「Lobby」や「Multiplay Hosting」と組み合わせることで、マッチメイキング後のプレイヤー管理や、ゲームセッションへスムーズな接続が実現します。例えば、Matchmakerを使って対戦相手を見つけた後、Lobbyでプレイヤーを集めて設定を行い、Multiplay Hostingの専用サーバーに接続する流れを構築できます。


## **特徴**

- **カスタマイズ可能なマッチング条件**：
Matchmakerはプレイヤーのスキルレベルや地域、ゲームモードなどの条件を設定してマッチングを行えます。複雑な条件を指定することで、より最適な対戦相手を見つけられます。
- **柔軟なロジック**：
プレイヤーデータを使って独自のマッチングアルゴリズムを構築可能です。シンプルなレーティング制から、複数のパラメーターに基づいた高度なマッチングまで対応しています。また、新規で用意したマッチングロジックをA/Bテストで試すこともできます。
- **リアルタイムマッチング**：
Matchmakerを使えば、プレイヤーがマッチングキューに参加 -> リアルタイムで対戦相手を検索 -> 最適な相手が見つかり次第すぐにマッチング を容易に提供できます。


## **メリット**

- **公平な対戦**：
Matchmakerはプレイヤーのスキルレベルに基づいてマッチングを行うため、初心者と熟練プレイヤーの間での不公平な対戦を防ぎ、よりバランスの取れたゲーム体験を提供します。
- **簡単なセットアップ**：
Unity Dashboardでマッチメイキングの条件を簡単に設定でき、開発者が複雑なマッチメイキングロジックを１から作る必要がありません。
- **他のサービスとの統合**：
LobbyやMultiplay Hostingと組み合わせることで、マッチメイキングからゲーム開始までの流れがシームレスになります。これにより、プレイヤーはマッチング後にすぐにゲームに移行でき、待ち時間が短縮されます。

## **デメリット**

- **コスト**：
Matchmakerは使用量に基づいた課金モデルがあり、多くのプレイヤーを処理する場合には、コストが増加する可能性があります。
- **複雑な要件への対応**：
特殊なマッチング要件がある場合、Matchmakerの標準機能では対応できず、独自のロジックを追加する必要が出てくる場合があります。

## 参考記事

- [**Matchmakerで1vs1のマッチングを行う[Unity]**](https://anogame.net/matchmaker-1vs1-tutorial/)
- [**Unity2017でMatchmakerを使ってマッチング機能を実装した**](https://qiita.com/chorome/items/3aae42581ac53650192e)
- [**Matchmaker チケットのフロー**](https://docs.unity.com/ugs/ja-jp/manual/matchmaker/manual/matchmaker-ticket-flow)


<br>

# [**Vivox Voice Chat**](https://unity.com/ja/products/vivox-voice-chat)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/a8532bc7-6943-d1ee-0a6e-b102a491d625.png)](https://unity.com/ja/products/vivox-voice-chat)


Unityが提供するサービスの一つで、**マルチプレイヤーゲームにおける「音声チャット機能」を簡単に実装できるよう、設計**されています。

Vivox Voice Chatは、クリアで遅延の少ない音声通信を提供し、プレイヤー同士がリアルタイムでコミュニケーションを取れるようにします。これにより、ゲーム内でのチームプレイが円滑になり、より没入感のあるゲーム体験を提供できます。

Unityに限らず、UEでも使えますし、2D/3Dチャンネル、ミュート機能、音量調整など、豊富な機能を備えています。


## **特徴**

- **高品質な音声通信**：
Vivoxは遅延の少ないクリアな音声通信を提供し、プレイヤーがリアルタイムでスムーズに会話できる環境を提供します。エコーキャンセリングやノイズ抑制など、音質を向上させる技術も搭載されています。
- **3Dオーディオ**：
音声チャットが3Dオーディオとして機能するため、プレイヤーの位置に基づいて音の方向が変わります。これにより、音声がよりリアルで臨場感のあるものになります。
- **高度な制御**：
プレイヤーのミュート、ボリューム調整、音声チャネルの作成・管理などの機能を備えており、ゲームの仕様に合わせて音声通信を細かく制御できます。
- **トランスクリプション**：
音声をテキストに変換するトランスクリプション機能も提供されており、音声チャットをサポートできない環境でも文字でコミュニケーションが可能になります。

## **メリット**

- **チームプレイの向上**：
Vivox Voice Chatを使用することで、プレイヤー同士がリアルタイムにコミュニケーションを取れるため、戦略的なプレイが求められるチームベースのゲーム開発が可能になります。特に協力プレイや対戦ゲームで効果を発揮します。
- **簡単な統合**：
Unityエディターから簡単にVivoxを統合でき、複雑な音声通信システムをゼロから構築する必要がありません。SDKを使用して、数ステップで音声チャットを追加できます。
- **信頼性のある技術**：
世界中のゲームで採用されているVivoxは、大規模な同時接続ユーザーにも耐えうる高い信頼性を持っています。


## **デメリット**

- **コスト**：
音声チャットサービスは使用量に基づく課金モデルを採用しているため、プレイヤー数が多いゲームや、長時間の音声通信が必要なゲームではコストが高くなる場合があります。
- **インターネット接続依**：
高品質な音声通信を実現するためには、安定したインターネット接続が必要です。ネットワーク環境が悪い場合、音声の遅延や途切れが発生する可能性があります。

## 参考記事

- [**【Unity】Vivox でボイスチャットを始めよう！**](https://qiita.com/neusstudio/items/9942c079d4c06b5fd36e)
- [**Unity Vivox (UGS版) でボイスチャット・テキストチャットを行う【Unity Gaming Services】**](https://xrdnk.hateblo.jp/entry/2021/11/21/232605)

<br>

# [**Vivox Safe Voice**](https://unity.com/ja/products/safe-voice)
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/2b5ce907-1d98-b205-0fef-e6725bd8c53a.png)](https://unity.com/ja/products/safe-voice)

Unityが提供するサービスの一つで、マルチプレイヤーゲームにおける音声チャットを安全かつ健全に保つために設計されたAIモデレーションツールです。

Vivox Safe Voiceは、音声チャットの内容をリアルタイムで分析し、有害な言動を検出することで、プレイヤーコミュニティの安全性を向上させます。これにより、プレイヤーはより快適で安心して楽しめるゲーム環境が提供されます。

Vivox Safe Voiceは、侮辱や脅迫、差別的発言などの不適切な行為をAIによって監視・分類し、問題が発生した場合に、迅速な対応が可能になりす。音声チャットの健全性を維持するために、詳細なレポート機能やしきい値の設定など、幅広い管理ツールを備えています。


## **特徴**

- **AIによる有害行為の検出**：
高度な機械学習技術を用いて、音声チャット内の侮辱や脅迫、わいせつ発言などをリアルタイムで検出します。これにより、問題が起きた瞬間に対応することが可能です。
- **トーンと文脈の分析**：
単語だけでなく、発言のトーンや感情、文脈を考慮して分析することで、誤検知を減らしています。
- **柔軟なルール設定**：
ゲームに応じてカスタムキーワードリストを作成し、検出のしきい値スコアを調整することができます。これにより、ゲームの文化やプレイヤーベースに適した安全管理が可能です。
- **詳細なレポート機能**：
音声セッションの分析結果を詳細にレポートし、モデレーターが問題を特定しやすくする機能を提供します。


## **メリット**

- **迅速な対応**：
AIが自動で有害行為や、音声の乱れを検出するため、問題が発生した際にすぐに対応でき、手動でのモデレーション作業が軽減されます。これにより、プレイヤー体験の質が向上します。
- **プレイヤーの安全性向上**：Vivox Safe Voiceを導入することで、プレイヤーが安心して参加できる環境を構築でき、健全なコミュニティを育むことができます。


## **デメリット**

- **導入コスト**：
AIモデレーション機能を使用するためには、コストが発生する場合があります。
- **言語対応の制限**：
サポートされている言語が限られている場合があり、特定の言語や方言では精度が低下する可能性があります。

### 参考記事

- [有害ボイスチャット自動検出機能「Safe Voice」発表。Unityが手がける、AIによる“有害な言動”自動検出・分類システム](https://automaton-media.com/articles/newsjp/20230714-255761/)
- [**Introduction to Vivox Safe Voice**](https://docs.unity.com/ugs/manual/safe-voice/manual/home)

<br>

# **他サービスとの比較**

- **Photon**

マルチプレイゲームを開発しようと決めたプロジェクトであれば、調査段階で何度か見かけたことがある名前だと思います。Photonは、高パフォーマンスなクラウドベースで操作や確認ができるネットワークサービスで、大規模なリアルタイムマルチプレイヤーゲーム開発に適しています。グローバルなサーバー展開が簡単にでき、スケーラビリティが優れていますが、商用利用では使用量に応じた料金が発生します。

- **Mirror**

Photonの次に候補に挙がると思われる、オープンソースのネットワークライブラリで、UNETの後継として開発されました。サーバーとクライアントの両方をUnityで実装できるのですが、自前でサーバーを構築・運用する必要があります。つまり、サーバーのカスタマイズ性が高い反面、運用コストや管理の手間がかかるため、開発がやや複雑になります。

NGOのように小規模なマルチプレイゲームも作れますし、適切なサーバー構成にすれば大規模なマルチプレイゲームも作ることが可能です。

### **比較表**

| 特徴/項目 | Unity Online Services | Photon | Mirror |
| --- | --- | --- | --- |
| **サポート** | Unity公式サポート | 商用サポート | コミュニティサポート |
| **コスト** | サービス利用量に応じた課金モデル | データ転送量に応じた課金モデル | 無料（サーバー運用コストは別途必要） |
| **柔軟性** | Unity特化 | クロスプラットフォーム対応 | カスタマイズ自由 |
| **学習コスト** | 中程度 | 低い（Photon PUN）～中程度（Photon Fusion） | 低い |
| **スケーラビリティ** | 高い（RelayやHosting使用時） | 非常に高い（Photon Cloud使用時） | 中程度（P2P運用ではやや制限あり） |
| **適した規模** | 小～中規模 | 小～大規模 | 小～中規模 |
| **主な用途** | Unityプロジェクトでの効率的な開発 | 高パフォーマンスなクロスプラットフォーム | コストを抑えたカジュアルゲーム開発 |

各サービスの比較もしつつ、以下のUnity公式から発表されている記事も見て、技術選定を行いましょう。

- [**Unity Multiplayer Services でゲームのプレイヤーを増やす**](https://unity.com/ja/blog/engine-platform/more-players-unity-multiplayer-services)

# Multiplayer Centerの使い方

ここまでで、一通りUnityが展開しているオンラインゲーム関連機能を見てきました。しかし、実際に作りたいゲームに合わせてどれを選択していけば良いのか、悩んでしまうと思います。

ここで、Unity6で新しく登場した「**Multiplayer Center**」を使えば、オンラインマルチプレイヤーゲームの基盤を構築する際の複雑さを軽減し、開発者がより迅速に、そして的確にネットワークソリューションを選択できるようになります。

<br>

## Multiplayer Centerへのアクセス

「Multiplayer Center」は、Unityエディター内からアクセス可能です。メニューの`Window > Multiplayer > Multiplayer Center`をクリックするだけで起動できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/1ba9c764-e8a0-dae1-9256-581f997191bb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/d067a453-cc08-13c5-648f-a73997b90dd8.png)

### ゲーム仕様の設定

Multiplayer Centerでは、**ジャンル**や**1セッションあたりのプレイヤー数**といった仕様を設定することで、開発するゲームに最適なネットワークソリューションを提案してくれます。

`Genre of your Game`オプションで、どんなゲームを作りたいのかジャンルを設定しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/af6fd4a1-9fc4-69d3-befd-66b7d8791d23.png)

ジャンルのリストには以下のようなカテゴリが含まれています。

| **ジャンル** | **説明** |
| --- | --- |
| **Adventure** | 物語重視のゲームで、プレイヤーは探索しながらパズルを解いたり、ストーリーを進めるジャンル。 |
| **Arcade, Platformer, Sandbox** | シンプルでテンポの速いアーケードゲーム、ジャンプや移動が特徴のプラットフォーマー、自由度が高いサンドボックスゲームなど。 |
| **Async, Idle, Hyper Casual, Puzzle** | 非同期プレイが可能なゲーム、放置ゲーム、簡単で短いゲームプレイが特徴のハイパーカジュアルゲーム、知恵を使って問題を解くパズルゲーム。 |
| **Card Battle, Turn-based, Tabletop** | トレーディングカードゲーム、順番に行動するターン制ゲーム、ボードゲームなどのテーブルゲーム。 |
| **Fighting** | プレイヤー同士がリアルタイムで戦う格闘ゲーム。 |
| **Racing** | 車やバイクなどの乗り物を使って競走するレースゲーム。 |
| **Role-Playing, MMO** | RPGや、多人数でオンラインプレイするMMOゲーム。 |
| **Shooter, Battle Royale, Battle Arena** | 銃などで戦うシューティングゲーム、最後の1人になるまで戦うバトルロイヤル、バトルアリーナゲーム。 |
| **Simulation** | 現実の活動や環境を模倣するゲーム（例: 農場経営やフライトシミュレーター）。 |
| **Sports** | サッカーやバスケットボールなど、スポーツ競技を再現したゲーム。 |
| **Strategy** | リソース管理や戦略を駆使して敵を倒すゲーム。リアルタイムやターン制のストラテジーゲームが含まれる。 |

### プレイヤー数の設定

1セッションあたりのプレイヤー数も指定してみましょう。

例えば：

- 少人数（2〜16人）: カジュアルな対戦ゲームに適した設定。
- 中規模（64〜256人）: MMOやBattle Royaleのようなゲームに必要なスケール。
- 大規模（512人以上）: 大規模なシミュレーションやMMO向け。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/2e812bb1-4e53-653a-6857-b9539d981e09.png)

こうした、開発したいゲームやアプリの仕様の指定を行い、Unityが提供する最適なネットワークライブラリやサービス（「Netcode for GameObjects」、「Relay」、「Multiplay Hosting」など）を簡単に見つけられるようになっています。

### その他設定

ジャンルと人数を設定した後に、さらにもう少し踏み込んだ仕様を設定できるオプション群が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/bd5b5ac4-28ff-404d-d6a8-f60cb46f1f05.png)

各項目についてもざっくりみていきましょう。

| **項目** | **選択肢** | **説明** | **例** |
| --- | --- | --- | --- |
| **Gameplay Pace** | **Slow** | ゲームプレイが比較的ゆっくりしている場合に選択。ある程度の遅延は許容する。 | ターン制ゲーム、ボードゲーム、RPG |
|  | **Fast** | ペースが早いゲームの場合に選択。リアルタイム性が重要となる。 | 対戦格闘ゲーム、シューティングゲーム |
| **Cheating / Modding Prevention** | **Not so important** | チートや改造の防止が重要でない場合に選択。協力系のゲームや、ローカル通信系のもの。 | カジュアルゲーム、プライベートゲーム |
|  | **Very important** | チートや改造を防止することが重要な場合に選択。 | ランクマッチ、eスポーツ向けゲーム |
| **Cost Sensitivity** | **Favor best player experience** | プレイヤー体験を最優先。高いパフォーマンス重視。専用サーバーの利用が必要そうなもの。 | 競技向けゲーム |
|  | **Favor best operating costs** | 体験と運用コストのバランスを重視。 クライアント/サーバーモデルやクラウドホスティングの利用が必要そうなもの。 | カジュアルなマルチプレイゲーム |
|  | **As little cost as possible** | コストを最小化することを優先。P2P接続や低コストのネットワークオプションで良さそうなもの。 | インディーゲーム、小規模プロジェクト |
| **Netcode Architecture** | **Client / Server** | クライアントがサーバーに接続し、サーバーがゲームロジックを管理する場合に選択。 | 大規模マルチプレイヤーゲーム |
|  | **Deterministic Lockstep** | ロックステップシミュレーションで全プレイヤーの動きを同期する場合に選択。 | RTS、格闘ゲーム |
|  | **Multi-Server Sessions** | 複数サーバーで負荷分散し、大規模セッションをサポートする場合に選択。 | MMORPG、512人以上のセッション |
|  | **No netcode** | ネットワークを使わないオフラインゲーム | シングルプレイヤーゲーム |

試しにいくつかプロジェクトを想定して確認してみましょう。

2人用の小規模なアドベンチャーゲームの場合、以下の設定をお勧めされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/9f718a35-d9b9-13d4-8f7a-16f2f7e1ad88.png)


- Netcode Solution：
ゲームの複雑なロジックが不要で、シンプルな同期機能で十分且つ、小規模プレイヤー数（2人）を対象とするため、軽量なネットワークソリューションとしての**Netcode for GameObjects**が推奨されています。

- Hosting Model：
**Distributed Authority**が推奨されます。Distributed Authority（分散型管理）は、マルチプレイヤーゲームにおけるホスティングモデルの一つで、ゲームの状態やロジックの管理をプレイヤー間で分散して行う方法です。専用サーバーを使わず、各プレイヤーが管理責任を一部負う構成となります。
つまり、P2Pやホスト＆クライアント型（ホスクラ） の通信モデルを推奨しています。

**オススメの他のマルチプレイヤー開発向けパッケージ：**

- **Vivox Voice/Text Chat**：
音声とテキストでのリアルタイムコミュニケーションを提供。探索中の協力やストーリー進行中の会話が可能になります。
- **Multiplayer Widgets**：
マルチプレイヤー機能を迅速にプロトタイプするためのウィジェットセットを提供するパッケージです。ウィジェットは、セッションの作成、参加、離脱、プレイヤーリストの表示、テキストチャットなど、マルチプレイヤーセッションの特定のステージをテストするために設計されています。
- **Multiplayer Play Mode**：
Unityエディター内でマルチプレイヤー機能をテストするためのツールです。これにより、同一の開発デバイス上で最大4つのプレイヤー（メインエディタープレイヤーと3つの仮想プレイヤー）を同時にシミュレートできます。

<br>

他にも2vs2のスポーツゲームや…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/8c501e39-f19f-9564-63fb-7ddf4593b6ee.png)


例えば512人以上のMMOなんかでもこのように、どんな構築が適しているか、お薦めしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36899/8bced755-ad6f-2b8a-9079-24d2791f1116.png)

<br>

# まとめ

Unity6で登場した「**Multiplayer Center**」は、オンラインゲーム開発の複雑さを軽減し、最適なネットワークソリューションを簡単に見つけられる便利なツールです。本記事では、Unityが提供する多様なマルチプレイヤー関連サービスとともに、「Multiplayer Center」を活用してどのようにゲーム開発を効率化できるかを紹介しました。

Unityの各サービスとMultiplayer Centerを活用することで、オンラインゲームの基盤構築がよりシンプルになり、ゲームのクオリティ向上に集中できるようになります。本記事が、オンラインゲーム開発プロジェクトにおける、技術選定の一助となれば幸いです。