サーバー・クライアント型のマルチプレイゲームの作り方

オンラインマルチプレイゲームを作るには、様々な準備と知識が必要になります。ここではサーバー・クライアント型でゲームを作るにはどういった手順・作業が必要かをご紹介したいと思います。

サーバー・クライアント型のオンラインマルチプレイゲーム

どんなゲームに向いている?

オンラインマルチプレイゲームは様々な実装方法があります。対戦を行うだけであれば、Relayを使ったサーバーを必要としない実装方法もあります。しかし、複数人が出入りしたり、サバイバル系の大人数でのゲームや、公正な環境でのゲームが必要な場合、サーバーでゲームを動かしながら、クライアントと通信を行うゲームが望ましいことがあります。

  • オンラインゲームをサーバー・クライアント型で動かしているゲームの参考例
    • Palworld
    • Apex Legends
    • Among us
    • VALORANT

必要な機能・環境など

では、サーバー・クライアント型のゲームを作る場合、どのようなものが必要になるでしょうか。主に3つの要素が必要になります

  • アプリ
  • ホスティングサービス
  • マッチング

これらをクリアしてオンラインのマルチプレイゲームをサーバー・クライアント型で実現することが可能になります!

アプリ(サーバー・クライアント)

まずは遊ぶためのアプリケーション。これ自体は今までUnityでゲームを作ってきた皆さんには何の問題もないもの。ただ異なる部分としては、サーバー・クライアントそれぞれ立場の違うものが共存するという点についてです。

サーバー側で起こっていることを、各クライアントが同期しなくてはなりません。こういった点から、通常のゲームとは少し気を使う部分が変わってきたり、デバッグが行いづらかったりします。色んな意味で、初心者には少しとっつきづらい部分となります。

サーバーを置く場所(Game Server Hosting)

アプリは作れたが、サーバー用のアプリはネットワークでアクセス出来る先にないと意味がないぞ!ということでホスティングサービスと呼ばれるような、サーバーのアプリケーションを配置する必要があります。

今回はUnityのホスティングサービスであるGame Server Hostingというものを利用します。

ちなみにこのサービスは有料なので、ここから先はクレジットカードを準備してね☆

マッチングするための機能(Matchmaker)

アプリを作ってホスティングサービスを準備できました!と言ってもこれだけでゲームはできません。対戦ゲームなどでマッチングを行う機能が必要になります。これはクライアント同士を結びつける機能の他に、待機中のサーバーを起動したりする機能も含まれます。

ゲームでは単純にユーザー同士を引き合わせるだけではなく、スキルやランクポイントに応じてマッチングを行う必要もあります。Unityのサービスの中のMatchmakerというものを使うことで、それらの機能を利用することが可能です。

マッチメーカーを利用したサーバー・クライアントの基礎を作る

ではゲームをつくる流れを説明したいと思います。といっても、ゲーム内容はかなり簡易的で、各サービスを連携するための最低限の実装になります。ゲームとして面白く仕上げるのはまた別途紹介します。

ローカルだけでサーバー・クライアント型のアプリを作る

サーバー・クライアント型のゲームを作る場合、ローカル環境で動いているものを準備するのが第一歩です。ここではUnityのNetcode for GameObjectを使ったサーバー・クライアント型のゲームを作ってみましょう。

フェアリー

こちらのリンクでは途中までリレー機能を使った実装を利用します。覚えることが多いですが頑張ってください!

ホスティングサービスを使う(Game Server Hosting)

サーバー・クライアント型でアプリを作成したら、ローカルからオンライン上のサーバーで接続出来るようにホスティングサービスにアップロードをしましょう。ここからはオンラインのサービスを利用するため、クレジットカードの登録が必要になります。利用してしばらくの間は無料で使える期間とクレジットがありますので、初めてであれば料金が発生することはありません。

ここではIPとPort番号を目視して接続する、結構邪道な実装ではあります。自動的にIP/Port番号を取得するのはマッチメーカーを利用する時に合わせて行います。

マッチング処理・Matchmakerの利用

ホスティングサービスでサーバーを起動出来る準備ができたら、マッチングを行ってゲームを開始するための機能を実装します。ゲームでよくある

  • 同じスキル同士でマッチングし易い
  • 地域が同じ人とマッチングする
  • ゲームルールを指定してマッチングする

などさまざまなルールを実装することもできます。まずはシンプルに1vs1でマッチングする機能を実装してみましょう。Matchmakerという機能を使うことで実装可能です。