zoukankan      html  css  js  c++  java
  • 【转】独立游戏如何对接STEAM SDK

    独立开发者在对接STEAM SDK之前 首先得先登上青睐之光,也就是我们俗称的“绿光”

    一般要先对接G胖家的SDK,然后提交版本,最后等待审核。。。

    我本身是unity 开发,对C++也是糊里糊涂..所以这里主要围绕unity说下我对接SDK的一些经历 

    sdk地址:http://steamworks.github.io/installation/

    c#接口介绍地址:http://steamworks.github.io/gettingstarted/

    steamwork使用教程视频:https://www.youtube.com/playlist?list=PLckFgM6dUP2jBeskIPG-7BVJR-I0vcSGJ

    -----------------------------------------------------------------------------------------------------

    第一步:

    安装 Steamwork.NET(这里要感谢外国小哥)

    1.下载 .unitypackage Stable (7.0.0) 或者从 Github 克隆

    2.导入下载的所有文件到项目 Assets/ 目录下.

    3.打开unity项目,会自动生成steam_appid.txt到项目的主目录下.

    4.打开 steam_appid.txt 并将 480 修改为自己的 AppId.

    5.更改脚本 SteamManager.cs 找到  SteamAPI.RestartAppIfNecessary(AppId_t.Invalid)将AppId_t.Invalid替换成(AppId_t)480" 或者 "new AppId_t(480),480改成自己的APP ID如图:

    1. if (SteamAPI.RestartAppIfNecessary(new AppId_t(55220))) {  
    2.     Application.Quit();  
    3.     return;  
    4. }  

    6.Steam根据提示修改重启unity,保证 steam_appid.txt 已生效.

    7.重启unity,保证 steam_appid.txt 已生效.

    8.安装sdk完成.

     
     

    如何使用

    1.下载SteamManagers.cs

    2.将SteamManager.cs脚本挂在GameObject上,steam会自动生成单例

    3.完整C#接口请点击查看

     
    注:需要在https://partner.steamgames.com/home下载sdk,里面有提交游戏的工具,在sdk oolsContentBuilderuilder
            在https://partner.steamgames.com/home/steamworks可以查看文档
            在http://steamworks.github.io/gettingstarted/可以查看C#接口的使用方式
     
    完整SteamManager:
    1. // The SteamManager is designed to work with Steamworks.NET  
    2. // This file is released into the public domain.  
    3. // Where that dedication is not recognized you are granted a perpetual,  
    4. // irrevokable license to copy and modify this files as you see fit.  
    5. //  
    6. // Version: 1.0.5  
    7.   
    8. using UnityEngine;  
    9. using System.Collections;  
    10. using Steamworks;  
    11.   
    12. //  
    13. // The SteamManager provides a base implementation of Steamworks.NET on which you can build upon.  
    14. // It handles the basics of starting up and shutting down the SteamAPI for use.  
    15. //  
    16. [DisallowMultipleComponent]  
    17. public class SteamManager : MonoBehaviour {  
    18.     private static SteamManager s_instance;  
    19.     private static SteamManager Instance {  
    20.         get {  
    21.             if (s_instance == null) {  
    22.                 return new GameObject("SteamManager").AddComponent<SteamManager>();  
    23.             }  
    24.             else {  
    25.                 return s_instance;  
    26.             }  
    27.         }  
    28.     }  
    29.   
    30.     private static bool s_EverInialized;  
    31.   
    32.     private bool m_bInitialized;  
    33.     public static bool Initialized {  
    34.         get {  
    35.             return Instance.m_bInitialized;  
    36.         }  
    37.     }  
    38.   
    39.     private SteamAPIWarningMessageHook_t m_SteamAPIWarningMessageHook;  
    40.     private static void SteamAPIDebugTextHook(int nSeverity, System.Text.StringBuilder pchDebugText) {  
    41.         Debug.LogWarning(pchDebugText);  
    42.     }  
    43.   
    44.     private void Awake() {  
    45.         // Only one instance of SteamManager at a time!  
    46.         if (s_instance != null) {  
    47.             Destroy(gameObject);  
    48.             return;  
    49.         }  
    50.         s_instance = this;  
    51.   
    52.         if(s_EverInialized) {  
    53.             // This is almost always an error.  
    54.             // The most common case where this happens is when SteamManager gets destroyed because of Application.Quit(),  
    55.             // and then some Steamworks code in some other OnDestroy gets called afterwards, creating a new SteamManager.  
    56.             // You should never call Steamworks functions in OnDestroy, always prefer OnDisable if possible.  
    57.             throw new System.Exception("Tried to Initialize the SteamAPI twice in one session!");  
    58.         }  
    59.   
    60.         // We want our SteamManager Instance to persist across scenes.  
    61.         DontDestroyOnLoad(gameObject);  
    62.   
    63.         if (!Packsize.Test()) {  
    64.             Debug.LogError("[Steamworks.NET] Packsize Test returned false, the wrong version of Steamworks.NET is being run in this platform.", this);  
    65.         }  
    66.   
    67.         if (!DllCheck.Test()) {  
    68.             Debug.LogError("[Steamworks.NET] DllCheck Test returned false, One or more of the Steamworks binaries seems to be the wrong version.", this);  
    69.         }  
    70.   
    71.         try {  
    72.             // If Steam is not running or the game wasn't started through Steam, SteamAPI_RestartAppIfNecessary starts the  
    73.             // Steam client and also launches this game again if the User owns it. This can act as a rudimentary form of DRM.  
    74.   
    75.             // Once you get a Steam AppID assigned by Valve, you need to replace AppId_t.Invalid with it and  
    76.             // remove steam_appid.txt from the game depot. eg: "(AppId_t)480" or "new AppId_t(480)".  
    77.             // See the Valve documentation for more information: https://partner.steamgames.com/documentation/drm#FAQ  
    78.             if (SteamAPI.RestartAppIfNecessary(AppId_t.Invalid)) {  
    79.                 Application.Quit();  
    80.                 return;  
    81.             }  
    82.         }  
    83.         catch (System.DllNotFoundException e) { // We catch this exception here, as it will be the first occurence of it.  
    84.             Debug.LogError("[Steamworks.NET] Could not load [lib]steam_api.dll/so/dylib. It's likely not in the correct location. Refer to the README for more details. " + e, this);  
    85.   
    86.             Application.Quit();  
    87.             return;  
    88.         }  
    89.   
    90.         // Initialize the SteamAPI, if Init() returns false this can happen for many reasons.  
    91.         // Some examples include:  
    92.         // Steam Client is not running.  
    93.         // Launching from outside of steam without a steam_appid.txt file in place.  
    94.         // Running under a different OS User or Access level (for example running "as administrator")  
    95.         // Ensure that you own a license for the AppId on your active Steam account  
    96.         // If your AppId is not completely set up. Either in Release State: Unavailable, or if it's missing default packages.  
    97.         // Valve's documentation for this is located here:  
    98.         // https://partner.steamgames.com/documentation/getting_started  
    99.         // https://partner.steamgames.com/documentation/example // Under: Common Build Problems  
    100.         // https://partner.steamgames.com/documentation/bootstrap_stats // At the very bottom  
    101.   
    102.         // If you're running into Init issues try running DbgView prior to launching to get the internal output from Steam.  
    103.         // http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx  
    104.         m_bInitialized = SteamAPI.Init();  
    105.         if (!m_bInitialized) {  
    106.             Debug.LogError("[Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information.", this);  
    107.   
    108.             return;  
    109.         }  
    110.   
    111.         s_EverInialized = true;  
    112.     }  
    113.   
    114.     // This should only ever get called on first load and after an Assembly reload, You should never Disable the Steamworks Manager yourself.  
    115.     private void OnEnable() {  
    116.         if (s_instance == null) {  
    117.             s_instance = this;  
    118.         }  
    119.   
    120.         if (!m_bInitialized) {  
    121.             return;  
    122.         }  
    123.   
    124.         if (m_SteamAPIWarningMessageHook == null) {  
    125.             // Set up our callback to recieve warning messages from Steam.  
    126.             // You must launch with "-debug_steamapi" in the launch args to recieve warnings.  
    127.             m_SteamAPIWarningMessageHook = new SteamAPIWarningMessageHook_t(SteamAPIDebugTextHook);  
    128.             SteamClient.SetWarningMessageHook(m_SteamAPIWarningMessageHook);  
    129.         }  
    130.     }  
    131.   
    132.   
    133.     // OnApplicationQuit gets called too early to shutdown the SteamAPI.  
    134.     // Because the SteamManager should be persistent and never disabled or destroyed we can shutdown the SteamAPI here.  
    135.     // Thus it is not recommended to perform any Steamworks work in other OnDestroy functions as the order of execution can not be garenteed upon Shutdown. Prefer OnDisable().  
    136.     private void OnDestroy() {  
    137.         if (s_instance != this) {  
    138.             return;  
    139.         }  
    140.   
    141.         s_instance = null;  
    142.   
    143.         if (!m_bInitialized) {  
    144.             return;  
    145.         }  
    146.   
    147.         SteamAPI.Shutdown();  
    148.     }  
    149.   
    150.     private void Update() {  
    151.         if (!m_bInitialized) {  
    152.             return;  
    153.         }  
    154.   
    155.         // Run Steam client callbacks  
    156.         SteamAPI.RunCallbacks();  
    157.     }  
    158. }  


    -----------------------------------------------------------------------------------------------------
     
     

    第二步:

    如何提交游戏版本

    在提交游戏之前先对内容上传软件进行配置:

    1、找到sdk oolsContentBuilderscripts目录,该目录下有两个配置文件名需要更改

       app_build_自己的APPID.vdf,  depot_build_自己的APPID.vdf

    2、假如我的APP ID 为 "55220"  ,修改app_build_55220,"appid","depots"内容如下:

    1. "appbuild"  
    2. {  
    3.     "appid" "<span style="color:#ff0000;background-color: rgb(255, 204, 153);">55220</span>"  
    4.     "desc" "Your build description here" // description for this build  
    5.     "buildoutput" "..output" // build output folder for .log, .csm & .csd files, relative to location of this file  
    6.     "contentroot" "..content" // root content folder, relative to location of this file  
    7.     "setlive"   "" // branch to set live after successful build, non if empty  
    8.     "preview" "0" // to enable preview builds  
    9.     "local" ""  // set to flie path of local content server   
    10.       
    11.     "depots"  
    12.     {  
    13.         "<span style="color:#ff0000;background-color: rgb(255, 204, 153);">55221</span>" "depot_build_<span style="color:#ff0000;background-color: rgb(255, 204, 153);">55221</span>.vdf"  
    14.     }  
    15. }  

    修改depot_build_55221,修改 "DepotID" ,"ContentRoot","LocalPath" 内容如下:

    1. "DepotBuildConfig"  
    2. {  
    3.     // Set your assigned depot ID here  
    4.     "DepotID" "<span style="font-size: 14.4px; font-family: Lato, proxima-nova, "Helvetica Neue", Arial, sans-serif; background-color: rgb(255, 204, 153);"><span style="color:#ff0000;">55221</span></span>"  
    5.   
    6.     // Set a root for all content.  
    7.     // All relative paths specified below (LocalPath in FileMapping entries, and FileExclusion paths)  
    8.     // will be resolved relative to this root.  
    9.     // If you don't define ContentRoot, then it will be assumed to be  
    10.     // the location of this script file, which probably isn't what you want  
    11.     "ContentRoot"   "<span style="color:#ff0000;background-color: rgb(255, 204, 153);">D:SDK硬盘位置steamworks_sdk_138asdk oolsContentBuildercontent</span>"   
    12.   
    13.     // include all files recursivley  
    14.   "FileMapping"  
    15.   {  
    16.     // This can be a full path, or a path relative to ContentRoot     
    17.     "LocalPath" "<span style="color:#ff0000;background-color: rgb(255, 204, 153);">.windows_content*</span>"  
    18.       
    19.     // This is a path relative to the install folder of your game  
    20.     "DepotPath" "."  
    21.       
    22.     // If LocalPath contains wildcards, setting this means that all  
    23.     // matching files within subdirectories of LocalPath will also  
    24.     // be included.  
    25.     "recursive" "1"  
    26.   }  
    27.   
    28.     // but exclude all symbol files    
    29.     // This can be a full path, or a path relative to ContentRoot  
    30.   "FileExclusion" "*.pdb"  
    31. }  

    3、找到sdk oolsContentBuildercontent目录在目录下新增文件夹 windows_content

    4、复制需要提交的游戏文件至 windows_content 目录下

    5、找到sdk oolsContentBuilder目录下的runbuild.bat右击编辑 更改内容如下:

     
    1. buildersteamcmd.exe +loginsteam用户名 密码 +run_app_build_http ..scriptsapp_build_自己的APPID.vdf   
     
    游戏测试无误的时候就双击runbuild.bat 等待上传成功了 
     
    暂时先写这么多,后面还会更新 steamwork商店的一些配置 
     
     
    注:博文转自http://blog.csdn.net/tonye129/article/details/54311481
  • 相关阅读:
    Eclipse远程调试,服务器为linux的配置
    关于javascript代码执行时间的计算
    Java编程中容易疏忽的知识点
    为什么要开发自己的框架、平台或插件
    算法在计算中的作用
    程序员的自豪感
    iOS,Objective-C Runtime
    iOS,本地化(国际化)字符
    iOS,应用崩溃日志分析
    iOS,信息加解密
  • 原文地址:https://www.cnblogs.com/mrgavin/p/6369547.html
Copyright © 2011-2022 走看看