アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

オンラインゲーム制作で重要な3つの要素

こんにちは!ジェイです。毎日必死にオンラインゲーム制作頑張ってます!新しい武器も実装して、昨日配信して、みんなで楽しもうとおもった矢先エラーの嵐でした。

正直な話オフラインのゲームより、バグやエラーの修正が桁違いに難しいです。そこで今日はオフラインゲームにはない、オンラインゲームならではの意識すべき要素について話します。

記事内広告

オンラインゲーム制作が難しい理由

  • バグやエラーの再現性が低い
  • 発生する条件を絞るのが難しい
  • デバッグモードで追いきれない事が多い
  • 所有権を意識しなければならない
  • 遅延実行のタイミングを意識しなければならない
  • ホストだけが実行すべき事を理解しなければならない

バグやエラーの再現性が低い

これはオフラインゲームでも、コルーチンやasync/awaitなど非同期の読み込みなどをすると実行する順番が変わって難易度が多少あがります。オンラインゲームでは、これと同じような事がネットワーク上で起きる上にホストだけ、クライアントだけ起きるなど状況がさらに複雑になります。

発生する条件を絞るのが難しい

上記の理由に加えて通信のラグなどでプログラムを実行する順番が簡単に変わってしまうので、エラーを発生する条件を特定するのが難しいです。

デバッグモードで追いきれない事が多い

デバッグモードは非常に優秀で、怪しい場所を1行ずつプログラムを実行して、リアルタイムに変数の中身を見る事ができます。しかし、1行ずつ実行するため、大体の当りをつけなければ、大変時間がかかってしまいます。そこまで行きつく道のりが長いので、難しいです。

所有権を意識しなければならない

所有権については以前記事に書いたので以下を参照にしてください。この考え方はオフラインゲームにはないけど、意識していないとオンラインゲームを作るのは難しいです。

遅延実行のタイミングを意識しなければならない

これもオフラインゲームにはなく、オンラインゲーム特有の現象です。

具体的には、リモートプロシージャコール(RPC)でMonobitTargets.AllBufferedやMonobitTargets.OthersBufferedに指定すると、起きる遅延実行のタイミングです。

実はこれが非常に大事で、自分自身はその場ですぐに実行されますが、入室してきた人はStart関数より先に実行されてしまいます。このため入室した人のみエラーが起きるという現象が起きてしまいます。

この時の対処方法としては、Start関数にFind系の関数を使わないで、最初からスクリプトにアタッチしておく方法がベストです。

ホストだけが実行すべき事を理解しなければならない

敵を出現させる処理や全体の時間をカウントする処理など、ゲームマネージャーを作ってするような処理はホストだけに処理させなければなりません。

そうでなければ、人が入室する度に敵の生成処理をする数が増えてしまうなどの問題が起きるからです

オンラインゲームで特に意識しなければならない事

上記の点は非常に重要ですが、特に以下の内容はオフラインゲームにはない、重要な点を3つに絞りました。

  • 所有権
  • 遅延実行のタイミング
  • ホストのみ実行すべき事の理解

これらの3つが特に大事な理由は、オフラインゲーム制作ではあまり意識しなくても作れてしまうが、オンラインゲームでは意識しなければ作れないという事です。

結論 要点を意識して作ればオンラインゲームは作れる

オンラインゲームが作るのが難しいのは、理解していただけたと思います。非常に時間もかかりますし、根気もいります。しかし、逆に言えば、これらの要点を意識すれば、オフラインゲームを作った経験がある人ならば、十分にオンラインゲームを作る事ができます。

最後に自分自身の反省点を上げて置くと、ログをもっとよく読んでエラーに対処するべきだったということです。

私はリスナーのみなさんが手伝ってくれる事に甘えて、エラーが起きる時の条件を実際に何度も試してもらっていました。しかし、昨日の配信を振り返ってみると、ログをもっとよく読んでいれば、早く気づけた事も多いと思いました。

これからもリスナーさんの力を借りつつもオンラインゲーム制作を続けていく予定ですが、もっとログを活用するという反省点を踏まえた上で、最後にログを出す設定方法を紹介して終わりにします。

ログを出す設定方法

File→Buld Settingsから以下の部分にチェックをするだけです。

エラーが起きると以下のように表示されるので、実際に起きている行数を調べてみましょう。適当に当たりをつけるより早く解決できます。

0