アーティスト、デザイナー、モデラーなしで6か月でマルチプレイヤー3Dゲームを開発する方法





こんにちは、Habr!

ゲームの開発について多くの話がありましたが、今日は簡単に話をしようと思います。



世界はテキストです-ジャック・デリダ

ゲームには辞書があります-a11aud



アイデア



それはすべて、ほとんどのプロセスの状態をチームが制御するステートマシンで表すことができるというa11audの提案から始まりました。 この有限状態マシンの状態は、辞書の形式で表されます。辞書の作業は、高レベル言語(この場合はPython)で実行されます。 このアプローチは、適切なテクノロジーの選択により多くの利点を約束しました。 アントンは竜巻のテストメッセンジャーを洗い流し、誰もが安全にそれを忘れました。



昨年末までに、経済状況により、私たちはアイデアに戻ることを余儀なくされ、コンセプトが生まれました。 発明されたアーキテクチャにより、ほぼすべての戦略的ゲームをメカニックに拡張することが可能になりましたが、最終的な決定は、ファンタジー設定でのチームタワーディフェンス4x4でした。



それらの4つがありました。



また、開発者は2人しかいませんでした。 そして、誰もが主要な仕事に1日8時間働いていました。 そして、6か月間このペースで耐えました。



民主的中央集権の原則に従って、建築に関するすべての決定は建築家によって行われ、ゲームメカニクスに関する決定は共同の議論の後、ゲーム設計者によって行われます。



プロセスは反復的に編成されました。責任者と一緒に実装するための機能のリストが、毎週概説されました。 反復の結果に関係なく、機能は反復から反復に成長しているはずです。 可能な限り、共同集会、成果のデモンストレーション、ゾウの配布、食べ物を食べること、時にはビールを飲むことさえ、可能な限り開催されました。



ソフトウェアの機能をスムーズに向上させ、プレイ可能なバージョンから始めて、並行してクリーチャーモデルとインターフェイスデザインの作業を開始することが計画されていました。



技術



サーバーについては、竜巻を引き続き使用することが決定されました。 これにより、「最小の」開発にアクセスできるようになり、サーバーソリューションの拡張が容易になりました。 当初から、サーバーは権威主義者として考えられていました。 プレイヤーは厳密に定義されたゲームアクションでのみ彼と対話でき、メカニクスに影響を与えることはできません。 ごめんなさい。 つまり、クライアントは本質的に、ゲームプレイを表示する単なる「リモコン付きテレビ」です。



クライアントアプリケーションにUnityが選ばれました。クロスプラットフォーム、優れたサポート、使いやすさにより、このエンジンは私たちのチームの条件で唯一の合理的なソリューションになりました。



サーバーとクライアント間の相互作用は、粗雑なプロトコルwebsocketを実装することを決定しました。 竜巻での作業のシンプルさに買収されたが、その後、それが出てきた。

しかし、まず最初に。



いくつかの基本



ゲームとは何ですか? これは、特定の計算ステップを含むゲーム世界の計算サイクルであり、勝利/敗北まで続きます。 まったく同じように、ゲームの状態がクライアントに到着し、それが描画され、同時にプレイヤーのアクションがサーバーに送信されます。 多くのゲームデータが存在する可能性があるため、1台のサーバーで約5000のゲームアプリケーションを実行するには、次の方法を実行する必要がありました。

  1. 最初は、ゲームワールドのJSONシリアル化状態を駆動しました。
  2. 10個のインスタンスでは不十分であることが明らかになったとき、差分状態のみを送信できるdiffアルゴリズムが実装されました。 人生は良くなりました。
  3. websocketの仕様は、deflateアルゴリズムでトラフィックを圧縮する機能を示唆しています。 しかし残念ながら、選択した実装では、圧縮はシステムライブラリに依存し、WindowsとMacOSによって異なりました。 私はソースに行き、トスとゴブリンで絞る必要がありました。 これにより、さらに40倍のゲインが得られました。 人生はもっと楽しくなりました。






ゲームの仕組み







戦闘は明白なスキームに従って計算されます。最も近い敵までの距離が攻撃を許す場合、ユニットは互いに接近し、ダメージの計算で戦闘が続きます。 簡単に聞こえますが、実際には二次の複雑さのアルゴリズムであり、Pythonの速度は大量混練の影響を大きく受けます。 包括的なソリューションが適用されました。

  1. ユニットはRツリーに格納され始めました。 これにより、攻撃のターゲットを計算するサイクルの長さが短縮されました。
  2. Cythonの助けを借りて、戦闘コンポーネントはsysshコードにコンパイルされます。 パフォーマンスの向上は約10倍です。




キツネを攻撃







そして、タイトルで提起された質問に戻ります。 もちろん違います。 ゲームが三目並べよりも複雑な場合、何も起こりません。 最初の段階では、キューブでデバッグしてから、Unity Asset Storeの無料モデルに切り替えました。 子犬やキツネの攻撃で負傷しそうになったとき、ヴァランジアンに助けを求めました。 キシナウの素晴らしいデザイナーが私たちの呼びかけに応えました。 あなたがビデオで見るデザインは彼によって作られましたが、生活環境は私たちの協力にいくつかの制限を課しました。 Dimych、これを読んだら、最速の新築祝いであるゴブリンに感謝します、私たちはあなたを待っています。



一般に、あなたが私たちの足跡をたどる場合、アーティストなしで始めないでください。 私たち全員にかかわらず、私たちは将来について楽観的であり、協力の準備ができている人々を探し続けています。



All Articles