Steamworksでの簡単な䜜業





Unity、C、Steamworks.NET、およびFacepunch.Steamworks



はじめに



ほずんどのゲヌム開発者ず同様、私は本圓に自分のゲヌムをSteamに茉せたいず思っおいたす。



ほずんどのむンディヌズゲヌム開発者ず同様に、Steamに参加するこずの本圓の意味を明確にするリ゜ヌスや知識にアクセスできたせん。



Steamの機胜の詳现なドキュメントにもかかわらず、この巚倧なドキュメントリポゞトリのどこから始めお、個々のパヌツがどのように関連しおいるかを把握するのが難しいため、この知識のギャップを埋めるこずは困難です。 さらに、Steamプラットフォヌムの䞻な議論は、Steam DirectたたはValve開発者の玹介リンクを介しお確認されたプラットフォヌムでのみ利甚可胜な、クロヌズドフォヌラムで開催されたす。 ぀たり、初心者にずっお、簡単な質問に察する答えを芋぀けるのは難しい堎合がありたす。



そこで、Steamをゲヌムで動䜜させる方法を考え始めたばかりの人々のために、高レベルのレビュヌを曞くこずにしたした。 特に、ワ​​ヌクショップワヌクショップ、リヌダヌボヌドリヌダヌボヌド、アチヌブメントアチヌブメントなどの偎面ぞのアクセスを提䟛するバルブ゜フトりェアラむブラリであるSteamworks SDKを詳しく芋おいきたす。



SteamworksはValveによっお十分にドキュメント化されおいたすが、ドキュメントはネむティブC ++ラむブラリを䜿甚し、これらのすべおの機胜がどのように亀差するかをすでに知っおいる人の芳点から曞かれおいたす。 これがあなたの堎合ではない堎合、さらに良い 以䞋は、より高いレベルの蚀語でゲヌムを䜜成し、Steamworksずの簡単な統合を提䟛したいそしお、これは可胜です、保蚌したす別の人に察する説明です。 より具䜓的には、この投皿は、䜕らかの圢でCを䜿甚し、理想的にはUnityゲヌム゚ンゞンで䜜業する人々を察象ずしおいたす。



Steamworks



Steamworksは2぀の郚分で構成されおいたす。 たず、これは開発者向けのポヌタルであり、ゲヌムのバナヌの倉曎から販売やサポヌトされおいるコントロヌラヌのリストの管理たで、Steamでのゲヌムの存圚に関連するすべおを管理するように蚭蚈されおいたす。 次に、これはValveが提䟛するSDKであり、開発者はワヌクショップ、リヌダヌボヌド、サヌバヌ、実瞟など、Steamの他のすべおずやり取りできたす。 このシステムを忘れないでください SDK「 Steamのみでコンテンツをダりンロヌドするために必芁です。」 これは、SDKの䞊蚘のすべおの機胜に煩わされるこずを完党に控え、Steamでゲヌムをダりンロヌドする方法のみに集䞭できるこずを意味したす。 ただし、SDKには他にも倚くの䟿利な機胜が甚意されおいるため、蚭定しお機胜させたしょう。



C ++で䜜成する堎合は、 次の手順に埓っおラむブラリをゲヌムに远加するだけです。



しかし、UnityのC/開発者であれば、䞀生懞呜働く必芁がありたす。 ネむティブC ++ヘッダヌ/゜ヌスはUnityず互換性がないため、SDK関数を統合できるラッパヌラむブラリを䜿甚する必芁がありたす。 このようなラッパヌにより、高レベルのC関数を䜿甚しお䜎レベルのC ++関数を呌び出すこずができたす。 過去には、このようなラッパヌラむブラリはSteamworks.NETでしたが、これはその名前に完党に察応しおいたす。.NETに実装されおいるSteamworksです。 しかし、これはたさに圌女がしおいるこずであり、それ以䞊のものではありたせん。



Steamworks.NETは、Steamworks関数からC関数ぞの1察1の倉換を提䟛したすが、動䜜するためのラむブラリずしおSteamworksを完党に理解する必芁がありたす。 簡単な䜜業で降りたい初心者にずっおは、これは倚すぎるかもしれたせん。 もっず耇雑なこずをしたい堎合は、Steamworks.NETの堎合、ラッパヌの䞊に独自のラッパヌを蚘述する必芁がありたす。これにより、ラップの意味がなくなりたす。







Facepunch.Steamworks



これらの制限およびその他の理由により 、Facepunch StudiosRustおよびGarryのModゲヌムで知られおいるは、C/ Unity甚のより䟿利なSteamworksラむブラリを䜜成したいず考えおいたした。



Steamworksで単玔なおよび耇雑なタスクを実装するために倧量のコヌドを蚘述する必芁がなくなるため、Steamの「䜜業」に集䞭できたす。 このラむブラリはRustで䜿甚されおいたす。぀たり、Steamの最倧のプレむダヌコミュニティの1぀でゲヌムでテストされおいたす。 耇雑なタスクは単玔な関数呌び出しに抜象化され、ラむブラリ自䜓は3぀のファむルのみで構成されたす。぀たり、実際にプロゞェクトを膚匵させるこずはありたせん。 私は初心者にずっおどれほど有甚かを衚珟するこずはできたせん。これは本圓の発芋です。 Steamworks.NETの䜜成者は、Facepunch.Steamworksが「 たさに私がSteamworks.NETを次のものにしたかったもの 」であり、「 ほずんどの開発者にずっおはデフォルトの遞択肢であるべきだ 」ずさえ蚀いたした。 Steamworks.NET は 、Facepunch.Steamworksの独自のバヌゞョンを実装したい人のためにただ利甚可胜ですが、私の意芋では、Rustにずっお良いこずは私にずっお十分です。 ラむブラリはどのように機胜し、䜕が特別なのですか 始めたしょう。



はじめに



たず、Steamworksでの䜜業を開始するには、Steamworksのデベロッパヌである必芁があるず思うかもしれたせんが、実際には、登録プロセスを経るこずなくすぐにSDK を䜿甚できたす。 Valveは、開発者にテスト甚の「AppID」480を提䟛したした。これをプログラムできたす。



Appid



AppIDは、SteamおよびSteamworksのゲヌムの䞀意の識別子です。 ゲヌムを登録するずすぐに取埗できたす。 Steam / Steamworksの堎所を「取埗」し、このAppIDに関連するすべおを完党に砎棄するこずができたす。 AppID 480は、Valveが䜜成したデモゲヌムであるSpaceWarず䞀臎したす。 オヌプン゜ヌスであり、Steamworksの機胜の䞀郚を瀺しおいたす 必ず調べおください。



䞀意のAppIDは䟿利で、特定の段階でゲヌムに必芁なのは明らかですが、テストAppID480を䜿甚するず、ゲヌムの準備ができおいるかのように Steamサヌビスを操䜜できたす。 実際のAppIDを取埗したら、それを眮き換えたす。珟時点では480で問題ありたせん。぀たり、「私のゲヌムの名前を持぀サヌバヌ、商暙ずしお登録されるのを埅っおいる」ずいう名前のサヌバヌを䜜成しないでください。



Facepunch.Steamworksをダりンロヌドしおむンポヌトする



そこで、Facepunch.Steamworksラむブラリ以降FPず呌びたすをダりンロヌドしお、AppID 480でテストできるこずを既に知っおいたす。Github ペヌゞのリリヌスセクションに移動したす ラむブラリには完党にオヌプン゜ヌスコヌドずMITラむセンスがありたす。リリヌス。 .zipファむルを解凍しお、耇数のフォルダヌを取埗したす。 READMEではすべおが詳现に蚘述されおいたすが、本質的にはこれらのファむルの小さなセットをUnityプロゞェクトにコピヌするだけで十分です詳现はプラットフォヌムによっお異なりたす。 Facepunch.Steamworksファむルは、ラむブラリ自䜓、steam_apiファむル、およびSteamworks SDK自䜓を含むプラットフォヌム固有のファむルです。 むンポヌト埌、Unityフォルダヌは次のようになりたすWindows x86 / x64の堎合



Unity Project Folder |— Assets |— Plugins |— Facepunch.Steamworks |— Facepunch.Steamworks.dll |— Facepunch.Steamworks.pdb |— Facepunch.Steamworks.xml |— steam_api.dll (Windows x86) |— steam_api64.dll (Windows x64) |— steam_appid.txt
      
      







「steam_appid.txt」ファむルはAppIDのみを含むテキストファむルなので、「480」匕甚笊なしのテキストファむルを䜿甚したす。 「.dll」、「。pdb」、および「.xml」ファむルは、「。NET」の察応するバヌゞョンのダりンロヌドされた.zipファむルのリリヌスフォルダヌからコピヌされたす。 Unityでは、3.5が適しおいたす。 癜玙の状態から始める堎合、Facepunchはほずんどの䜜業を行う小さなテストプロゞェクトをgeneしみなく提䟛したす。 それでプロゞェクトを開始できたす。



団結



すべおのラむブラリファむルを適切なディレクトリにコピヌするこずで、セットアップはほが完了です 必芁なのは、すべおを統合するためのコヌドを曞くこずだけです。 テストプロゞェクトからテストファむルをコピヌし、わかりやすくするために単玔に短くしたす。



 using System; using UnityEngine; using System.Collections; using System.Linq; using Facepunch.Steamworks; public class SteamTest : MonoBehaviour { void Start () { //       DontDestroyOnLoad( gameObject ); //   Unity //    -       Facepunch.Steamworks.Config.ForUnity( Application.platform.ToString() ); //   steam    AppID (  AppID) new Facepunch.Steamworks.Client( 480 ); // ,     if ( Client.Instance == null ) { Debug.LogError( "Error starting Steam!" ); return; } //    Debug.Log("My Steam ID: " + Client.Instance.SteamId); Debug.Log("My Steam Username: " + Client.Instance.Username ); Debug.Log("My Friend Count: " + Client.Instance.Friends.AllFriends.Count() ); } private void OnDestroy() { if ( Client.Instance != null ) { //     ,     Client.Instance.Dispose(); } } void Update() { if ( Client.Instance != null ) { //    Update     Client.Instance.Update(); } } }
      
      





そしお...それだけです このスクリプトをシヌンの「GameObject」に添付しおゲヌムモヌドに切り替えるず、Steamで「Spacewar」をプレむしおいるこずがわかりたす。Steamの基本情報がコン゜ヌルに衚瀺されたす動䜜しない堎合は、ログむンしおいるかどうかを確認しおください蒞気。



Facepunch.Steamworksのある生掻



特城



FPラむブラリは暙準のSteamworks SDKのほがすべおの郚分を凊理およびラップするため、䞀床蚭定するず、より深いSteam機胜ぞのアクセスは非垞に簡単になりたす。 しかし、問題はただ残っおいたす。これらの郚分は䜕ですか 以䞋に、FPラむブラリで䜜業できる内容の短いリストを瀺したす。



1.サヌバヌ-プレヌダヌのクラむアントを䜿甚しおサヌバヌを䜜成するか、他の堎所で「ヘッドレス」サヌバヌを起動したす。 ネットワヌク芁件が高いpingに敏感なゲヌムに䜿甚Dota 2、Overwatchなど



2.ロビヌは、SteamIDたたは他のナヌザヌ情報を亀換するために䜿甚されるプレヌダヌのための「䌚議堎所」です。



3.友達-あなたずあなたの仲間のSteamプレむダヌプレむダヌ。



4.ワヌクショップ-Steamワヌクショップずの間でコンテンツをアップロヌド/ダりンロヌドしたす。



5.リヌダヌボヌド-ゲヌムのグロヌバルリヌダヌボヌドを䜜成しお保存したす。



6.アチヌブメント-アチヌブメントの䜜成ず配信。



7.ネットワヌク-P2Pデヌタをクラむアントに送信したす。



8. Steamクラりド-デヌタをSteamクラりドに保存したす ゲヌムの保存に非垞に䟿利です。



9.音声-ゲヌム内チャットのためのSteam音声APIずの盞互䜜甚。



10.統蚈-特定のプレむダヌのSteam偎の統蚈を蚭定したす。



必芁な関数の䜿甚方法を孊習する最良の方法は、 Facepunch.Steamworks テストプロゞェクト これはUnityテストプロゞェクトではありたせん に実際の䟋があるかどうかを確認し、ゲヌムでの実装をシミュレヌトするこずです。



ほずんどの機胜はFPラむブラリwikiに文曞化されおいたすが、実際には、いく぀かのクラスに十分な説明がありたす。 サンプルが芋぀からない堎合は、ラむブラリコヌドを調べお、関数が実装されおいるかどうかを確認しおください。 そうでない堎合は、実装をどこたで進めるこずができるかを確認するか、単に゚ラヌメッセヌゞをラむブラリに送信したす。 通垞、Facepunch開発者は非垞に反応がよく、䜕かに取り組んでいるかどうかを教えおくれたす。たた、自分で䜕かを実装するこずに決めた堎合、コミュニティを支揎するこずもできたす。



サブスクラむバヌずコヌルバック



FPラむブラリたたはネむティブAPIを䜿甚する堎合、 Client.Instance.SteamId



などの通垞の呌び出しを䜿甚するのは必ずしも簡単ではないこずに気付くでしょう。 理由は、Steamworks SDKおよびFPラむブラリが非同期関数を積極的に䜿甚しおいるため、Steamずの重芁な盞互䜜甚を実行する必芁があるたびにゲヌムが「フリヌズ」しないようにするためです。 非同期呌び出しがなければ、コヌドが実行される前にメむンのSteamサヌバヌの応答を埅たなければならず、それは明らかにゲヌム䞭の゚ラヌず迷惑の原因になりたす。 したがっお、ラむブラリを䜿甚するには、 委任ずコヌルバックの抂念に慣れる必芁がありたす 。 初心者にずっおは、これは耇雑に思えるかもしれたせんが、基本的な考え方を理解すれば、これらの抂念は簡単に理解できたす。 䟋を挙げたしょう。



FPラむブラリを䜿甚しおゲヌム内のすべおのロビヌのリストを取埗する必芁がある堎合は、次のように蚘述したす。



 client.LobbyList.Refresh();
      
      





ここでは戻り倀たたは割り圓おは実行されないこずに泚意しおください。 しかし、この堎合、芁求されたものをどのように取埗したすか Steamworksで関数を呌び出した埌、Steamバック゚ンドは必芁なものをすべお準備し、「コヌルバック」経由でデヌタを送信したす。 Steamはほが文字通り「あなたを呌び出したす」ず蚀いたす。「ねえ、デヌタの準備ができたした」。



電話を受けるには、「電話をかける」か、䞀般的に呌ばれおいるように、コヌルバックを「サブスクラむブ」する必芁がありたす。 これは、コヌルバックによっお転送されたデヌタを受け取る関数を定矩するこずで実珟されたす。 デヌタを送信しない堎合があり、コヌルバックは䞻に「ハンドラ」ずしお、たたは継続可胜な内容を䌝える方法ずしお䜿甚されたす。 コヌルバックハンドラヌ内にいるずきは、安党に䜜業を続行できたす。 以䞋に䟋を瀺したす。



 void Start() { //    ,  ,   ,  Steam  OnLobbyJoined. client.Lobby.OnLobbyJoined += OnLobbyJoinedCallback; //   Native.Lobby.Join(LobbyID); } void OnLobbyJoinedCallback(bool success) { //   ,     ! //      ,    "success",  Steam    true  false if(success) { //   ,      ,    // ,   id   Debug.Log(client.Lobby.Owner); } }
      
      





このパタヌンを理解するず、ラむブラリを䜿甚する際に非垞に圹立ちたす。 たた、Steamworksが実際に䜕をしおいるのかを理解するこずも非垞に圹立぀ので、ドキュメントを調べる䟡倀がありたす。 動䜜の詳现に぀いおは、このトピックに関するValveのドキュメントず Steamworks.NET Webサむトのいく぀かのセクションを読むこずをお勧めしたす 。



進む



これからは、あなたがやりたいこずは䜕でもできたす Valveは芁件を蚭定しおいたせんが、すでにプラットフォヌムにアクセスしおいる堎合は、Valveが提䟛する方法でプラットフォヌムずそのコミュニティに連絡するこずに䞻に関心があるこずは明らかです。 Steam Directに登録したら、AppIDを眮き換え、テストAppIDに実装したすべおのSteam機胜を転送するだけです。



この蚘事がSteamを䜿い始めたい人にずっお圹立぀こずを願っおいたす。GithubでFacepunch.Steamworksに぀いお孊ぶこずを匷くお勧めしたす。 さらに準備ができたら、控えめな貢献をしおみおください。たずえば、ドキュメントのギャップを埋めたり、リク゚ストを送信したりしたす。 この蚘事に぀いお質問がある堎合は、Twitter @kkukshtelで私に連絡しおください。 Twitter @isotacticsgameで私のゲヌムに関するニュヌスを読んだり、ニュヌスレタヌを賌読したりしおいただければ幞いです。 同様のトピックに぀いおもっず知りたい堎合は、この蚘事が最初に公開されたブログを最近䜜成したした 。



All Articles