📝

Unityのゲーム向けクライアント・サーバ・ネットワーク関連覚書

2023/01/31に公開

はじめに

脳内にある言語化されていない技術的なことを書き出したもの+ブックマークにためたリンクを整理したものになります。
情報ををすごく雑多にまとめたものになります。(あんまり綺麗に整理できていない)
自分の気になるキーワードは検索して資料を読んでみて、わからないところ深く掘り下げると良いかもしれません。

概要

クライアント

WebAPIやアセットダウンロードはUnityWebRequestやOS Native機能をPlugin化してで実装する。

リアルタイムの処理はライブラリを使用したりや独自実装を行う。
また、通信環境が携帯網(3.xG、4G、5G)、無線LAN(+光回線、ADSL、携帯?)など回線により影響を受けることを考慮する必要がある。

サーバ

クラウドサービス(まだオンプレもある?)にフルスクラッチや、マネージドサービス、mBaas、その他特化したサービスやライブラリを組み合わせて構築する。
各種サービスと併用して、WebAPI、リアルタイムサーバ、管理ツールなどを、スクリプト言語(PHP、Ruby、Python、Node.js)やコンパイラ言語(C++、Golang)でライブラリやフレームワークを使い実装を行う。

大雑把に、WebAPI、リアルタイムサーバ、管理ツールなどは下記のようなサーバを使用する。

  • ロードバランサーからフロント(Apache、Nginxなど)でWebAPIを受る
  • アプリケーションサーバで処理を行う
  • データはmysqlなどから読み込みや保存をする
  • キャッシュはRadiseなどで行う
  • 想定同時接続から負荷をかけて、New Relicなどを使って負荷時のパフォーマンス計測を行う
  • 監視用のシステムでCPU、メモリなどのリソース監視、サーバーの死活、ネットワークの死活などを管理する。

クライアントとサーバ間の処理

  • WebAPIやリアルタイムの実装は、クライアントとサーバ間で共通インターフェイスになるため協議して実装する必要がある(もしくは同じ人が作る)
  • ログインやアイテムを使うなどのコマンドタイプは、ステートレス設計なWebAPI(httpsアクセス、Restful風?)でやり取りする
  • アセットダウンロードする場合は、クラウドストレージからユーザー認証(ない場合や、推測しにくいパスとか)を行いhttps経由でダウンロードする
  • リアルタイム処理求められる場合は、WebScoket(TCP)や、RUDP(UDP)(の類型)を使い。
    P2P接続をする。NAT越えができない場合はサーバを介してクライアント間の通信を行う。
    • P2Pを使わずに必ずサーバ経由する場合もある

Unity

マネージド

mBaas

ミドルウェア

通信ライブラリ

実装

各種資料

総合

モノビット社

中嶋氏関連

Unity

構成

リアルタイム

チューニング

格闘ゲーム

ロールバック

FPS

負荷テスト

書籍

ネットワーク

総合

IPv6

WebAPI

解説

ドキュメント

TCP

解説

実装

UDP

実装

受信保証

NAT traversal

グローバルなIPアドレスを持たない、クライアント同士がP2Pで接続するための方法です。
この方法を使っても100%接続できるわけではないためリレーサーバを準備する必要があります。

技術解説
対応方法

通信方法

総合

Mobile

無線LAN

セキュリティー

Discussion