ゲーム開発初心者がMMOを開発する方法
個人でMMOを開発、運営するための情報を提供します。なお、本サイトの情報を利用した結果には、責任は負いかねますので、ご自身でご確認の上、お願い致します。
実際に、作成したゲームはこちら
World Story (無料 3DのMMOアクションRPG)
3DのMMOアクションRPGを開発しました。Unityをはじめて約1年、オンラインゲームの開発に打ち込むこと約半年、初めて作ったゲームです。このようなゲームを作る方法について紹介していきます。テスト公開中ですが、残念なことに、まだ自分以外プレイした人はいません!ちなみに自分以外のプレイヤーと敵の動きがカクカクで、今後の課題です。
オンラインゲームの構成図
作成したオンラインゲームは下図のような構成にしました。
この仕組みでできること
多人数参加型のゲームを個人がほぼ無料で作成可能になります。そして、全ての仕様を自分で自由に決められるということが利点です。他者のサービスを利用せず、自前で全て用意する分大変ではありますが。
サーバーがどの程度の負荷まで耐えられるかはまだ検証中ですが、今のところ誰の目にも止まらないのでそこは追々ということで。。
オンラインゲーム作成のためにやったこと
- ネットワーク環境の構築(プロバイダー選定、ルーター選定)
ネットワーク環境には意外な落とし穴があります。1つは、ルーターの扱えるNATセッション数です。家庭用のものは扱える数が少ないので多いものが必要です。もう1つは、プロバイダーによって使えるポート数の制約があることです。ポート制限のないものを選ぶ必要があります。詳細はネットワーク環境の構築(プロバイダー選定、ルーター選定)をご覧ください。
- クライアント作成(ゲームそのもの、Unityで作成、言語はC#)
ゲームエンジンはUnityを使いました。ネットの情報が多いためです。言語はC#でこちらも情報が多く、初心者向きです。クライアントにおける注意点としては、チート対策として、メモリ上のデータを暗号化したことくらいでしょうか。その他、自由で構わないと思います。
- ゲームサーバー作成(オンラインゲームを制御、.net coreコンソールアプリケーションを自宅サーバー上で稼働、言語はC#)
ゲームサーバーは自作しました。開発は敷居が高く、できれば既存のサービスを利用したかったのですが、ちょうどいいものが無いと感じたため、最終的に自作に至りました。もし、サーバーが必要な理由が分からない方は、ネットワークの基礎知識を参照して下さい。オンラインゲームに必要なネットワークの知識のポイントを説明しています。
決め手は、通信手段として、「LiteNetLib」という無料のライブラリの情報を見つけ、利用することができたため、これで開発することにしました。サーバー自体は、.net Coreコンソールアプリケーションで作成しています。このようにすることでクライアントもサーバーもC#で開発できます。.net Coreコンソールアプリケーションによる.net CoreコンソールアプリケーションとLiteNetLibによるゲームサーバーの作成は、リンクをご覧下さい。
なお、ゲームサーバーをレンタルせず自宅サーバーにした理由は、性能を要求するとレンタルサーバーも高額になり、自宅サーバーのほうが安いことが1つ、もう1つは、wondowsでサーバーソフトを開発していると修正・変更がその場ででき、メンテナンスが非常に楽だからです。いちいち手元で修正、ローカル環境でデバッグ、ビルドしてリモートでレンタルVSPにアップするみたいな負担を軽減できます。Linexのコマンドに不慣れだからということもあります。無理してLinuxを使うより、古いWindowsPCで済むと考えました。
更に、サーバーはクライアントと位置情報を常にやり取りする必要があるため、ゲームサーバーでどのようにプレイヤー、敵、アイテム等を管理するか、いかに負荷を減らすか、その仕組みをいくつか自分なりに考え実装しました。また、暗号化処理の実装、SSLによる通信の実装、グーグルクラウドトランスレーションによる自動翻訳の実装、そのあたりの考え方については、ゲームサーバーのソフトウェア仕様を参照して下さい。
- データベース作成(様々なデータを保存、MariaDBを自宅サーバー上で稼働)
データベースはMariaDBを使いました。mysqlを使った経験があったためです。C#から操作でき、慣れれば全く難しくありません。情報も多いので初心者でも調べれば問題なく使えます。
- webサーバー作成(SSLで通信を受ける、Apacheを自宅サーバー上で稼働)
Webサーバーは、Apacheをプロキシサーバーとして使って、自作のwebApiにSSLで来たリクエストを転送して処理するようにしました。どうしてもSSLで通信を開始するしかないのでWebサーバーは必須かと思います。ゲームサーバーがWebサーバーを兼ねることができればいいのですが、いい手段が見つけられず。少なくとももう少しシンプルな方法がありそうですが、かなり自由にいろいろできるため、これに落ち着きました。そもそもゲームサーバーをnode.jsで済ませるという方法がありそうですが、node.jsに詳しくないので今後、調査していこうと思います。
また、apacheのプロキシサーバー構成、SSL対応、PHP対応等、つまづきました。WebサーバーApacheの実装方法についてはリンクをご覧ください。
- webAPI作成(ウェブサーバーから転送されて処理を実行、Asp.netを自宅サーバー上で稼働、言語はC#)
Webサーバーから転送されたリクエストを処理するapiを作成して、稼働させています。Asp.NETによるWebAPIの構築詳細については、リンクをご覧ください。
- 決済処理のためStripeの登録
課金を実装するために、Stripeを使うことにしました。手数料が4%くらいと安く、個人でも実装できます。最終的に、クレジットカード、アリペイ、ウィチャットペイによる決済を実装しました。
- 決済用webページ運用のためのレンタルサーバーの登録
ゲームサーバーは自宅サーバーにしましたが、ホームページと決済用Webページを運用するためにレンタルサーバーを使いました。自宅サーバー上に作ってもいいのですが、費用が安いこと、ゲームサーバーと分けたいことなどが理由です。
- 決済用webページ作成(Stripeを利用、レンタルサーバー上に作成、Javascript、PHP)
決済用のページは、StripeのApiを利用できるように作成しますが、公式の説明が難解でなかなか理解できませんでした。Web系の知識が乏しいとなかなか辛いと思います。StripeAPIの実装とPHPによって自動メール送信を行うことなど、いくつかつまづきました。Stripeの実装方法詳細についてはリンクをご覧ください。
PHPによる自動メール送信は、自前のメールサーバーを使って送信するか、自前のメールサーバーでなくGmailのメールサーバーを利用して送信するか、により大きく方法が異なり、最初つまづきました。PHPの自動メール送信機能実装方法についてはリンクをご覧ください。
- 宣伝用webページ作成(レンタルサーバー上に作成、WordPress、HTML、CSS)
ホームページは、WordPressにより作成し、ゲームの詳細ページは、個別にゼロからHTMLで作成してみました。WordPressで全て済ませてもよかったのですが、HTMLで組むと構成を自由に決められるため、やってみました。
- ゲーム配布用オンラインストレージの登録、ファイルのアップロード(FireStrage)
ゲームの配布はFireStrageを使うことにしました。レンタルサーバーは転送量の上限が比較的厳しかったためです。
comment