Steamworks SDK的C#封装 Steamworks.NET对接unity
unity项目上线steam平台,若是接入steamworks SDK可以提供更好的体验。steam官方提供的SDK都是C++代码,也可以选择sdk接入时找到别人用C#封装的原生steamworks SDK,官方链接:https://steamworks.github.io/。上述链接包含文档及sdk下载地址。
此SDK涵盖了原生steamworks提供的大部分功能,如:状态存储及成就,排行榜,用户授权,比赛安排,steam云等等功能,文档中都有详细的概述。使用过程中也发现他们很细心的使用了和C++相同的方法名来封装了C#的方法,这样在使用过程中对照这官方的文档可以轻易在sdk中找到自己需要调用的api。由于我的需求目前只限于成就、排行榜及用户状态量存储,以下都会围绕这三个模块展开。
一、 安装SDK
1. 下载 Steamworks.NET的.unitypackage https://github.com/rlabrecque/Steamworks.NET/releases, windows下可直接下载zip包 https://github.com/rlabrecque/Steamworks.NET/archive/master.zip
2. 将包导入unity的 Assets/ 目录。
导入后,可以看到新添了三个文件夹:Editer;Plugins;Scripts;
3. 打开unity项目,会自动生成steam_appid.txt到项目的主目录下。打开 steam_appid.txt
并将 480
修改为自己的 AppId.
4. 测试Steam API 调用
后主要脚本SteamManager,提供了Steamworks.NET的一些基础API供大家使用。
首先第一步,作为测试,可以新脚本SteamScript.cs并加入如下代码:
public class SteamScript : MonoBehaviour {
void Start() {
if(SteamManager.Initialized) {
string name = SteamFriends.GetPersonaName();
Debug.LogError(name);
}
}
}
注意我们在调用任何Steamworks方法前需要先确认steam是否初始化完成,即SteamManager.Initialized。
5. 将游戏上传到steamworks
steamwork.NET对官方C++的SDK API接口进行了C#封装, 但你的游戏仍需要使用官方的SDK工具才能进行上传操作。
<1.先在steamworks主页下载Steamwork SDK
<2. 解压后的文件夹下寻找两个脚本,路径:tools\ContentBuilder\scripts
将第一个app文件重命名,1000 改成自己的游戏编号,第二个depot文件也重命名,1001 改成自己的depot编号。
(steamworks有游戏的app编号,一般最后一位数字都是0,而depot是游戏的版本编号,差不多这么理解吧,depot除最后一位数字外其余数字都与app编号相同,所以depot有多个,用最后一位数字(123456789)区分。比如要上传游戏的第一个版本,app编号就是1000,depot编号就是1001,第二个depot编号就是1002。)
<3. 用笔记本的打开方式修改两个脚本的内容,
app的脚本:
第一行的 1000 改成自己的游戏app游戏编号
最后一行两个 1001 改成自己的depot编号,就是把app游戏编号最后的 0 改成 1 。
depot的脚本:
把第二行的 1001 改成自己的depot编号。
找到上面的语句,把后面引号内的路径改成自己游戏所在的路径。不过我一般是把游戏复制放在SDK的content里:tools\ContentBuilder\content
<4. 解压的文件里找到下面这个东西,路径:tools\ContentBuilder
右键它选择编辑,打开是
把其中的 account 改成自己的steam账户,password 改成自己的账户密码,
还是那个 1000 改成自己的游戏app编号。保存后关闭。
<5. 运行上面步骤的那个 run_build.bat ,然后就开始上传了。中间可能会停顿下,要求输入steam的令牌密码。
接入问题:
*使用默认的appid 480可以获取到接口,替换为自己的appid报错steam api初始化失败?
应该是steam帐号里面没有该appid的游戏权限。
*Failed to load 'Assets/Plugins/x86_64/CSteamworks.dll' with error '找不到指定的模块。
还没找到解决办法
*下载报错 Steam安装失败(程序配置文件不可用)或 Failed to start game (invalid app config)
如果测试帐号可以下载安装,而黄色或者红色key不可安装,则是因为应用商店页面清单未完成并提交Valve审核,审核通过才可。具体可以参见steam开发者讨论区 https://steamcommunity.com/groups/steamworks/discussions/0/523897023725510452/
*如何只允许在Steam的某些地区销售?
需要联系Steam客服,说明限制地区和理由 https://partner.steamgames.com/home/contact
*如何测试应用?
在后台申请红色**码,使用steam通过**码进行下载测试。
红色**码(只能内部使用)、黄色**码(外部使用)、透明**码(发布后使用)
*.ico和icns文件如何制作?
使用ico制作软件如IcoFX制作多个尺寸的ico文件,在线做只能输出一个尺寸。需要尺寸16 32 48 64 128 256越多越好。
*Mac发布后,steam安装显示0bytes。
相关程序包与 DLC商店程序包、促销或特殊用途程序包中添加所有depot即可。
*发布mac后打开闪退
发布steam应用mac版本时,确保playersetting下的Mac AppStore Validation取消掉,不然steam版本打开会闪退
1.调用 SteamAPI_Init() 返回初始化失败
测试时使用的自己的Steam账号一直提示失败,换成Steam开发者账号初始化成功;(猜测是产品未上线不能使用普通Steam账号)
2.调用SteamUser类的GetAuthSessionTicket获得的票据传给服务器向Steam后台验证一直验证失败
原因是服务器验证时未按照文档要求将票据转成十六进制, 当然了客户端也可以将票据转成十六进制,再传给服务器,如何转换请点击此处