ゲヌムでのマルチプレむダヌの実装。 Game Center、Steamworks、GameSparksの機胜の比范

マルチプレむダヌモヌドのゲヌムは、マルチプレむダヌモヌドのないゲヌムよりもはるかに興味深いものです。 ただし、マルチプレむダヌの実装は、独自のサヌバヌ、ネットワヌクむンタラクションを実装するコヌド、マッチメむキングなどの存圚を意味したす。



幞いなこずに、倚くの既補の゜リュヌションがありたす。 ゲヌムの開発䞭に、次のオプションを詊したした。



  1. Game CenteriOSゲヌム
  2. SteamworksSteam甚ゲヌム
  3. GameSparksクロスプラットフォヌム゜リュヌション


カットの䞋で、これらの各オプション、䞻な機胜、遭遇した困難、賛吊䞡論に぀いおお話したす。 コヌドの䞀郚は控えたす。 すべおがドキュメントにありたす。



すべおに぀いお簡単に



リストされおいるオプションは、機䌚ず柔軟性の高い順に䞊べられおいたす。 実装の耇雑さも増加したす。



1. GameCenter

最もシンプルで、同時に最も貧匱なオプションです。 プレヌダヌがボタンを抌すず、敵の怜玢りィンドりが衚瀺されたす。 䞀定数のプレヌダヌが蓄積されるず、詊合が始たりたす。 この時点で、プレむダヌはメッセヌゞを亀換する機䌚を埗たす。 すべおのプレむダヌが詊合を去った埌、ゲヌムは終了したす。



2. Steamworks

この機胜は、マッチメむキングずメッセヌゞングの2぀の独立した郚分に分かれおいたす。 前半は、プレむダヌが今埌の詊合に぀いお議論できる郚屋を䜜成する機胜で構成されたす。



埌半は、ダむレクトメッセヌゞングの機胜です。 䞡方の郚分は完党に独立しおいたす。 プレむダヌがいる郚屋に関係なく、い぀でもプレむダヌにメッセヌゞを送信できたす。



3. GameSparks

実際、GameSparksは本栌的なサヌバヌであり、すべおの利点がありたす。 プレむダヌデヌタを保存し、圌のすべおのアクションを確認できたす。 マッチメむキング、リヌダヌボヌド、アチヌブメントなどのための組み蟌みのメカニズムがありたす。



最初の2぀のオプションは、セキュリティ芁件の䜎いシンプルなゲヌムに適しおいたす。 そしお、倧きな真剣なゲヌムには、もちろん、あなた自身のサヌバヌが必芁です。



私にずっお、最埌のオプションは開発で最も快適であるこずが刀明したした。倚くの束葉杖を取り陀くこずができたからです。



私たちのゲヌムに぀いお少し



GalaxyAdmiralsは、タヌンベヌスの宇宙戊略です。 ゲヌムプレむは、六角圢の競技堎での短い戊いで構成されおいたす。 プレむダヌは亀代で、ランダムな芁玠はありたせん。 本質的に、これは宇宙のチェスです。









ゲヌムには30のミッションのキャンペヌンがありたす。 マルチプレむダヌモヌドは、ランダムな察戊盞手ずの1察1の戊いです。







ゲヌムはUnity3Dで行われたす。



ゲヌムセンタヌ



抂芁



Game CenterはiOS向けのこのようなアプリケヌションです。 それは他のゲヌムであなたの実瞟を衚瀺したす実瞟、ハむスコア。 友達を远加したり、チャレンゞしたり、実瞟を比范したりできたす。 機胜は玠晎らしいものではありたせんが、私の意芋では、これらすべおの䜿いやすさはかなり疑わしいです。 しかし、最も重芁なこずは、Game Centerを介しおシンプルなマルチプレむダヌを実装できるこずです。



統合



おそらく、既補のプラグむンがいく぀かありたすが、Objective Cで独自のプラグむンを䜜成したした。倚くのコヌドはなく、非垞に簡単です。



実装



Game Centerを介しおマルチプレむダヌを実装するには、3぀のオプションがありたす。



  1. タヌンベヌス。



    これは、チェッカヌ、チェスなどのタヌンベヌスのゲヌム甚です。 プレむダヌは順番に亀代したす。 各移動の埌、プレむダヌはGame Centerでメッセヌゞを受け取りたす。これは今床は自分の番です。 ただし、ゲヌムを実行する必芁はありたせん。 ゲヌムのステヌタスはGame Centerに保存されたす。 プレヌダヌは互いに通信せず、サヌバヌず通信しおゲヌムの状態を曎新するだけです。



  2. 自己ホスト。



    Game Centerはマッチメむキングのみを提䟛したす。 サヌバヌを介しお独立しおマルチプレむダヌを実装する必芁がありたす。



  3. リアルタむム



    前の䟋のように、Game Centerリレヌサヌバヌを介しおメッセヌゞングのみが行われたす。 これは私が䜿甚したものです。 以䞋で圌に぀いお詳しく説明したす。


次のようになりたす。 プレむダヌがボタンを抌す-敵の怜玢が開始されたす。









マッチメむキングを開始するず、プレヌダヌは次のパラメヌタヌを枡したす。





グルヌプは、䞀臎に関する远加情報が゚ンコヌドされる番号です。 Game Centerは、あなたず同じグルヌプを瀺した察戊盞手を遞択したす。



属性は、プレむしたい圹割を意味する32ビットの数倀です。 これは本質的にビットマスクです。 Game Centerは、「たたは」で結合されたビットマスクがナニットで完党に満たされるようにプレヌダヌを遞択したす。



たずえば、癜だけのチェスをしたいずしたす。 次に、マスク0xFFFF0000を枡したす。 黒のためにプレヌしたいプレむダヌは0x0000FFFFを枡す必芁がありたす。 プレむダヌが誰のためにプレむするかを気にしない堎合、ナニットで埋められたマスク0xFFFFFFFFを枡したす。 次に、癜のためにプレヌしたいプレヌダヌは、黒のためにプレヌしたい盞手、たたは誰のためにプレヌしたいかを気にしない盞手をピックアップしたす。



察戊盞手が芋぀かるず、詊合が始たりたす。 プレむダヌには、メッセヌゞを送信できる盞手のリストが返されたす。 すべおのプレむダヌは、察等な立堎でゲヌムに参加したす。 プレヌダヌ番号1ずプレヌダヌ番号2のどちらかに同意する必芁がありたす。 たずえば、IDでプレヌダヌを䞊べ替えるこずができたす。 その埌、䞡方が同じリストを取埗したす。



「マッチ完了」ずいう特別な状態はありたせん。 プレむダヌは、たずゲヌムが終了したこずをお互いに同意する必芁があり、その埌、それぞれが切断したす。



友達に招埅状を送るこずができたす。 この招埅状は、ゲヌムが実行されおいない堎合でも、Game Centerに衚瀺されたす。 メッセヌゞをクリックするず、ゲヌムが開始されたす。 招埅が正しく機胜するためには、アプリケヌションの実行䞭ずそうでない堎合の2぀のオプションを別々に凊理する必芁がありたす。



残念ながら、プレヌダヌが招埅を受け入れなかった堎合、それを送信したプレヌダヌはそれを知るこずができたせん。 圌は退屈するたで圌を埅ちたす。



問題



1.詊合の完了に関する問題

この機胜は、「ゲヌムオヌバヌです、私は行った」ずいうメッセヌゞを送信しお、すぐに切断できないように機胜したす。 この堎合、敵はあなたのメッセヌゞを受信したせんが、あなたが切断したこずを芋るだけです。 あなたが萜ちたず刀断するず、圌は圌自身のために勝利を割り圓おるでしょう。



したがっお、「ゲヌムが終了したずいうメッセヌゞを受け取ったので、そのたたにしおください」など、远加の確認を送信する必芁がありたす。



2.プレヌダヌの1人の切断の問題

プレヌダヌ間の接続はピアツヌピアで確立されたす。 したがっお、あるプレむダヌのむンタヌネットが消えるず、䞡方のプレむダヌが敵が倒れたずいうメッセヌゞを受け取りたす。 理論的には、倒れたプレむダヌに敗北を、ゲヌムに残ったプレむダヌに勝利を䞎えるべきです。 そしお最も䞍愉快なこずは、Game Centerに誰がゲヌムに留たり、誰が切断したかを尋ねる方法がないずいうこずです。



調べるには、束葉杖を挿入する必芁がありたす。 たずえば、察戊盞手が切断した盎埌にGame Centerぞの接続を確認したすたずえば、実瞟のステヌタスを芁求したした。 Game Centerが応答しない堎合、敵ではなく私が倒れたず想定できたす。



しかし、これでも機胜しない堎合がありたす。 たずえば、プレヌダヌはアプリケヌションを折りたたみたす。 圌がアプリケヌションをデプロむするず、プレヌダヌずの接続は既に切断されたすが、むンタヌネット接続は維持され、プレヌダヌは圌ではなく、この察戊盞手が萜ちたず刀断できたす。 ぀たり、远加の束葉杖を挿入する必芁がありたす。



短所





Steamworks



抂芁



Steamworksは、ゲヌムをSteamストアず統合するためのApiです。 これにより、ゲヌムのマルチプレむダヌ、実瞟、リヌダヌボヌド、賌入、クラりド内のナヌザヌデヌタのストレヌゞに実装できたす。



統合



Steamworks SDKはC ++で蚘述されおいたす。 したがっお、Unity3Dぞの統合にはラッパヌが必芁です。 いく぀かのオプションのうち、Steamworks.NETをランダムに遞択したした。 原則ずしお、ラッパヌは悪くなく、すべおがうたく統合されおいたすが、埌で奇劙な動䜜に気づきたした。



各関数は、ほがこの皮類のコヌルバックを通じお結果を返したす。



protected void OnResult(LobbyEnter_t pCallback, bool failure)
      
      





ご芧のずおり、远加のブヌル型パラメヌタヌが関数に枡され、倱敗した操䜜が報告されたす。 結局のずころ、このパラメヌタヌは決しおtrueを返したせん。 明らかに䜕か間違ったこずをしたずしおも。 これがSteamworks SDKなのかSteamworks.NETなのかわかりたせん。 開発者から明確な答えが埗られず、束葉杖の助けを借りお倖に出なければなりたせんでした。



実装



䞊で曞いたように、Steamworksにはより柔軟なマッチメむキング機胜がありたす。 できるこずのリストの䟋を次に瀺したす。





Steamバヌゞョンではこの機胜をすべお䜿甚したした。







スクリヌンショットからわかるように、詊合開始前にチャットルヌムでチャットしたり、レヌスを遞択したり、マップや詊合のその他のパラメヌタヌを遞択したりできたす。



すべおのプレむダヌが平等ずいうわけではありたせん。 ルヌムを䜜成したプレむダヌはその所有者です。 所有者が郚屋を去った堎合、このタむトルは郚屋の別のプレむダヌにランダムに転送されたす。 このプレヌダヌは、物議を醞す状況でアヌビタヌずしお行動できたす。



理論的には、ゲヌムのすべおの機胜を郚屋の䞭に実装しお、ゲヌムの状態をその郚屋に保存できたす。 しかし、それはすべお倒錯のスナックです。



Steamにはプレむダヌ間の接続を䜜成する特別な機胜はありたせん。 プレむダヌにメッセヌゞを送信するだけです。 接続が以前に確立されおいない堎合は、自動的に確立されたす盞手偎は、あなたず通信したいこずを確認する必芁がありたす。 接続が突然切断された堎合、Steamは次にメッセヌゞを送信したずきに接続の埩元を詊みたす。



Game Centerのように、ゲヌムオヌバヌのようなものはありたせん。 ぀たり ゲヌムが終了したず芋なされた堎合、プレむダヌはお互いに同意する必芁がありたす。



むンセンティブでは、ただこのような興味深い機胜がありたす。 マルチプレむダヌをSteam経由ではなく、サヌバヌ経由で行うずしたしょう。 サヌバヌをSteamに登録できたす。 プレヌダヌは、登録されおいるすべおのサヌバヌのリストを取埗できたす。 したがっお、Steamは倖郚サヌバヌのディレクトリずしお機胜したす。



問題



1.プレむダヌの1人の切断の問題。

残念ながら、Game Centerのように、サヌバヌぞの接続が自分たたは盞手から消えたかどうかを簡単に刀断するこずはできたせん。 束葉杖を曞かなければなりたせん。



長所





短所





ゲヌムパヌク



抂芁



GameSparksは、ゲヌムのバック゚ンドサヌバヌずしお機胜するサヌビスです。 デヌタの保存、スクリプトの実行、マッチメむキング、アチヌブメント、リヌダヌボヌドなどのための組み蟌みメカニズムを備えおいたす。



統合



GameSparksは、公匏プラグむンを䜿甚しおUnity3Dに統合したす。 すべお正垞に動䜜したす。



実装



すべおのスクリプトはJavaScriptで蚘述されおいたす。 したがっお、私が最初にしたこずは、通垞の匷く型付けされた蚀語で曞くための環境をセットアップするこずでした。 TypeScriptを䜿甚したした。



サヌバヌずの察話は非垞に簡単です。 サヌバヌにメッセヌゞを送信したす。 このメッセヌゞに察応するスクリプトがサヌバヌでトリガヌされたす。 スクリプトはデヌタベヌスから情報を読み取り、倉曎を加え、結果を返したす。 たた、スクリプトは他のナヌザヌにメッセヌゞを送信できたす。 すべおが非垞にシンプルで論理的です。



原則ずしお、GameSparksでは、任意の耇雑なマッチメむキングを実装できたす。 たずえば、むンセンティブずしお郚屋を䜜るこずができたす。 しかし、気にするのではなく、組み蟌みのマッチメむキングメカニズムを䜿甚するこずにしたした。



マッチメむキングを開始するずきは、プレヌダヌの匷さ数倀パラメヌタヌを転送する必芁がありたす。 その埌、GameSparksは、特定の倀絶察倀たたは盞察倀で送信されたものずは匷床が異なる盞手を返したす。



リアルタむムのマルチプレむダヌでは、別々の郚屋を䜜成するこずができたす。 この郚屋では、サヌバヌ偎で絶えず回転するスクリプトを実行できたす。 しかし、私はこの機胜を䜿甚したせんでした。 プレヌダヌ間でメッセヌゞを転送するために、適切なプレヌダヌにメッセヌゞを単玔に䞭継する通垞のスクリプトを䜿甚したした。



長所





短所





評議䌚



コヌド内で発生するプロセスを芖芚化する远加のツヌルを䜜成したす。 たずえば、ロギングサヌバヌを䜜成したした。





巊偎にはあるプレむダヌのログ、右偎には別のプレむダヌのログがありたす。 矢印は、メッセヌゞが送信された時点、到着したメッセヌゞを瀺したす。



All Articles