Step2:オンラインゲームを動かす仕組みを決める

AIOnlineRPG
スポンサーリンク

はじめに

第3回目になります。

Step 1では、このプロジェクトで最初に目指す目標を「4人程度で実際に遊べる小さなOnline RPG」としました。

そもそもオンラインゲームはどうやって複数のプレイヤーを同じ世界に集めているのでしょうか。
普段オンラインゲームを遊ぶだけなら、サーバーや通信の仕組みを意識することはほとんどありません。

しかし、作る側になると、

「誰がプレイヤーの位置を管理するのか」
「敵を倒したという結果を誰が正しいと判断するのか」
「複数人が同時に同じアイテムを拾おうとしたらどうなるのか」

といった問題を考える必要があります。

そこで今回は、オンラインゲームの土台となる「サーバー」と「通信」の仕組みを簡単に整理し、このプロジェクトで使う技術を決めていきます。

オンラインゲームにはなぜサーバーが必要なのか

プレイヤーAとBが同じ世界で遊ぶには、位置や敵の状態などを共有する必要があります。その共有部分を担うのが「サーバー」という物です。サーバーは状態などを共有するための処理を行ったり、データの橋渡しを行うのがサーバーです。

サーバー方式について

サーバーには、プレイヤーのPCを利用する方法や、ゲームとは別にサーバーを用意する方法などがあります。

今回は、将来の拡張も考えて、ゲームとは別にサーバーを用意する方式を基本とします。ただし、設置場所については自宅PCや安価なレンタルサーバーなど、予算に合わせて検討していく予定です。

ただし予算はほぼない

クラウドサービスを使う方式が一番柔軟度が高くいろいろな事ができますがコストがとにかく高いです。もちろん工夫しだいではできることもないですがゲームの内容にかなり制限ができてしまう状況になる可能性があるので見送る形です。

予算的には誰か1人のPCをサーバーとして使う方式は低コストですが、PCの性能や通信環境に影響されやすく、ゲームを終了するとサーバーも停止してしまうという問題があります。また、プレイヤー側で重要なデータを管理すると、不正な改ざんへの対策も難しくなります。これはゲームとして致命的です。

ただ一部「誰か1人のPCがサーバー役になる方式」に処理を逃がすなどの工夫は行うかもしれません。

まずは4人程度で動かすことを目標にするので「誰か1人のPCがサーバー役になる方式」から始めて拡張していくパターンもありえるので作成を進める段階で適宜決めていきたいと思います。

Unityだけではオンライン機能は完成しない

Unityは筆者が一番使い慣れているゲーム開発環境です。Unityには公式のネットワーク機能がありますが、それとは別に外部で開発されたフレームワークも存在します。

今回は、無料で利用でき、機能が豊富で将来的な拡張性も期待できる「FishNet」を採用しました。

FishNetを選んだ理由

「FishNet」はUnity向けのネットワークライブラリで無料で利用することができます。ゲームとは別に専用サーバーを立てる方式として作成しやすく、小規模から始め、拡張しやすいらしいです(要検証)

今回の「低予算・AI主体・段階的に作る」という条件と非常に相性が良いです。

最初に実装し確認すること

  • サーバーを起動できる
  • クライアントから接続できる
  • 切断できる
  • 接続状態を画面に表示できる
  • まずはLAN内で確認する

から始め、確認を行った後次のStepに進みたいと思います。

これは「オンラインゲームの土台」となり、複数人が同じサーバーに接続できる状態を確認できます。

実装

まずは「FishNet」のパッケージを入れ、初期化を行います。
その後Client接続用DebugUIの表示、接続処理の作成を行いました。

サーバーへの接続を確認

UnityのDedicated Server用ビルドを起動し、同じPC上からクライアントを接続してみました。

接続先は、

127.0.0.1:7770

です。

127.0.0.1は「自分自身のPC」を表すアドレスなので、まずはインターネットを使わず、1台のPCの中でサーバーとゲームを接続しています。

実際に、

接続 → 切断 → 再接続

を試したところ、すべて正常に動作しました。

これでまだキャラクターが動いたり、他のプレイヤーが見えたりするわけではありませんが、オンラインゲームに必要な「サーバーとクライアントが通信するための土台」が動くことを確認できました。

# UnityDebugLog
[Client] Connecting to 127.0.0.1
Local client is starting for Tugboat.
Server IP is 127.0.0.1, port is 7770.
Local client is started for Tugboat.

[Client] Disconnect requested
Local client is stopping for Tugboat.
Local client is stopped for Tugboat.

次回予定

  • プレイヤーを実際に出現させる
  • 移動を同期する
  • 「他のプレイヤーが見える」状態へ進む

コメント

タイトルとURLをコピーしました