マルチプレイヤータワーディフェンスゲームクライアントアーキテクチャ。 お正月

こんにちは、Habr!



おそらく、6か月前に、6か月間マルチプレイヤーゲームのプロトタイプを作成したことについて書いたことを覚えている人もいるかもしれません。

投票の結果によると、観客はゲームのアーキテクチャに関する続編を書く価値があると判断しました。 カットの下で、今ではふさわしくない生産ドラマのジャンルの第2シリーズ、多くの写真、現在のゲームプレイと新年の猫のビデオ。



前のエピソードの要約



どういうわけか、2014年12月末に、4人のチームがWarCraft 3で最も人気のあるmodの1つであるLegion TDのクローンを作成することにしました。 空き時間に6か月間、最も単純なプロトタイプを収集した後、若いプログラマーは、アーティスト、モデラー、およびデザイナーが必死に必要であることに突然気付きました。 専門のコミュニティやグループでスパムの滑りやすい経路に入った後、Goでゲームサーバーを書き換えながら、彼らはBSSSRの広い範囲から暗黒面に素晴らしい専門家のグループ全体を引き付けることに成功しました。 そして当時、海をはるかに越えて、3年間同様のクローンが単純なアメリカ人のブレント「リスク」バタスによって開発されました。 彼はアートの優れた開発とコードのほとんどゼロを持っていましたが、私たちのヒーローと協力することを拒否しました。 サンフランシスコへの出張中に実証されたa11aud'omのサーバーとクライアントの接続でさえ、アメリカ人を納得させませんでした。 私たち自身のリソースのみに依存して開発を継続することが決定されました。 モデラー、テクスチャデザイナー、およびデザイナーは、新しい2016年の前夜であるMVPを期日までに展開するために精力的に取り組みました。 そして一般的に、私たちは成功しました。



そして、実際に何が行われますか?



これまでのところ、共同の努力により、最初のゲームレースでタワーディフェンスを行い、グラフィックを常に改善しています。



鎧のオーク



スチームドローン



自走砲塔



ゴブリンのメカニック



錬金術師





しかし、約束のトピックに戻ります。 私は、その価値を証明した主要な設計ソリューションを提供しようとします。 彼らはおそらく多くの人に自明のように思われますが、結局のところ、これは完全に真実ではないことがわかりました。 Unityに参加するためのしきい値が低いと、最も幼稚な設計エラーでさえ可能になります。



最初の考え



この場合のように、ゲームの状態が複雑なシリアル化されたデータ構造で記述されている場合、興味のある情報にいつでも簡単にアクセスできるはずです。 私たちのプロジェクトはカジュアルなメインストリームよりもやや複雑であるため、既製のUnityレシピは私たちには向いていません。 独自のテクノロジースタックを使用したため、シリアル化と逆シリアル化は2つで行われません。 このプロジェクトでは、サーバーは8人のプレーヤーにゲームのデルタ状態を1秒あたり10回json形式で送信します。 解決策として、サーバーメッセージを解析し、クライアント上のゲームの状態を更新し、ゲームデータへの便利なインターフェイスを提供するシングルトンを作成しました。

このアプローチでは、ユニットマネージャーやミニマップの座標など、さまざまなクライアントコンポーネントに必要な情報を取得するのは難しくありません。

このようなクラスのすべての機能をハングアップする誘惑がどれほど素晴らしいとしても

StateHub.Instance.GetLastKilledWithBlackMagicDwarfUID()
      
      



、慎重に、神のオブジェクトを覚えています。 どうやら、これは、サンクトペテルブルクでのUnity User Groupの最後の会議で、Sergei SychevがUnityでのOOPのトピックに関するスピーチで念頭に置いていたものです(公開時にレポートにリンクを追加します)、彼はシングルトーンをまったく使用しないように促しました。 しかし、私には、やめる時が来たときに比例感覚と常識があなたに言うように思えます。



再考



この場合、イベントモデルを使用するのが理にかなっています。 「レギオン」にはフェーズの概念があります。 アリーナには、建設段階、戦闘段階、戦闘段階があります。 前述のように、サーバーは状態更新を1秒あたり10回送信します。 新しいメッセージの到着とフェーズ変更のイベントを生成します。 これは、ユニットのインスタンス、死体のアセンブリ、音楽テーマの切り替え、その他の功利主義的な操作を簡単かつ論理的に整理するのに十分です。 ゲームクライアントはゲームロジックを計算せず、本質的には単に「リモコン付きテレビ」であるため、これらの少数のイベントで十分です。



第三の考え



ビューとしてのMonoBehaviourの分離と、ユニットのゲーム情報の直接表示。 些細なことですが、結局のところ、多くのUnityプログラマーはほとんどすべてのコードを1つのスクリプトで記述しています。 小さなプロジェクトでは怖くありませんが、flappiberdよりも深刻なことを考えている場合は、事前に考えておくとよいでしょう。



前後



半年前







もちろん、まだ多くの作業がありますが、進歩は明らかです。



次のシリーズで



Brent "Lisk" Batasは、2月末までにクラウドファンディングに参加し、2016年末までにクローズドベータテストを開始する意向を発表しました。

Spiced Jackalチームは、開発を続け、投資を探し、KrownGuardsと呼ばれるゲームを宣伝し、競争に勝ち抜くことを計画しています。 これらは私たちの努力の結果です。 私たちは、私たちとともに働いてくれたすべての人に感謝し、すべての人に明けましておめでとうございます。 2016年にまた会いましょう!

PS質問があれば、喜んでお答えします。






All Articles