跳到主要内容

Xbox Unity 接入

一、Unity PlayerSettings配置

Build Type

  • 开发可设置为Development player,发布需要设置为Master player

Deploy Method

  • 开发可设置为Push,发布需要设置为Package

Scripting Define Symbols

  • 添加USE_MS_GAMECORE;MICROSOFT_GAME_CORE;

Allow 'unsafe' Code

  • 需要勾选

Active Input Handling

  • 设置为Input System Package(New)

Package Identity Name

  • 合作伙伴中心后台获取

Package Identity Publisher

  • 合作伙伴中心后台获取

Title ID

  • 需要微软签约操作后在合作伙伴中心后台获取

SCID

  • 需要微软签约操作后在合作伙伴中心后台获取

MSA App ID

  • 合作伙伴中心后台获取

Store ID

  • 合作伙伴中心后台获取

Persistent Local Storage

  • 根据游戏存储使用情况设置,range (256Mb-4096Mb)

ContentID Override

  • 可选配置,方便本地测试支付功能,需要后台发布后、从商店下载包,然后使用xbapp list /d 查看包的contentId,和EKBID同时替换后本地出包即可测试支付,无需传包到后台发布从商店下载才能测试

EKBID Override

  • 可选配置,方便本地测试支付功能,需要后台发布后、从商店下载包,然后使用xbapp list /d 查看包的EKBID,和ContentID同时替换后本地出包即可测试支付,无需传包到后台发布从商店下载才能测试

Default Display Name

  • Package Identity Name值“.”分割的后半段

Publisher Display Name

  • Package Identity Name值“.”分割的前半段

二、好友组队流程

Xbox好友组队流程.png

三、接口

平台提供sdk时确保Assets/Plugins/XboxOne/Logic/Configuration.cs里的单点登录配置SANDBOX_SIGNAL_SIGNON_URL替换成游戏的单点登录配置

1、设置平台参数接口

调用类DHSDKHelper
接口setHostPlatformParam
参数json字符串
json value都为string,key定义如下:
DHAppId(产品id)
DHChannelId(渠道id)
DHInviteCode(邀请码)
HostUrl(域名)
HostPlatformAppId(titleId)
HostPlatformAppkey(scid)
mainChannel (主渠道号)
subChannel (次渠道号)
调用说明在初始化接口调用之前设置平台参数

2、获取商品信息接口

调用类DHSDKHelper
接口querySkus
参数1商品id列表
参数2回调,回调的requestCode为DHSDKHelper.DHSDKConst.REQ_SKUS
说明查询结果成功但是返回空列表,需要去商店获取游戏才能查询到商品

返回值说明

字段说明备注
item_id商品id,xbox需要先配置商品生成id后给游戏使用,而不是游戏先定义好id配到后台
name商品名称
currency货币
formatted_value格式化字符串游戏内展示
raw_value价格

返回值resultData样例

{
"target":[{"item_id":"9NGHKPF3J53B","name":"test product","currency":"USD","formatted_value":"$0.00","raw_value":"0","owned":true}]
}

3、好友信息同步回调

回调信息回调的requestCode为DHSDKHelper.DHSDKConst.REQ_FRIENDS_INFO_CHANGE
回调说明当好友信息变化时收到该回调(比如添加好友、拉黑好友、好友xbox在线、好友xbox离线、好友进入游戏、好友离开游戏等等),每次返回的都是全量好友信息,如果userId为"0",说明没有玩过当前游戏
回调对象字段类型说明
nickNamestring玩家Xbox昵称
iconUrlstring玩家头像链接
userIdstring用户id
xboxUidstringxbox账号id(仅供参考,不一定唯一)
inGamebool是否在当前游戏
xboxOnlinebool是否xbox在线
precenseTextstring丰富状态文本

返回的resultData字符串格式如下:(可以使用JsonUtility.FromJson< DHXboxGameFriendListBean>(data)反序列化对象)

{
"target": [{
"nickName": "2 Dev 158707133",
"iconUrl": "https://images-eds-ssl.xboxlive.com/image?url=8Oaj9Ryq1G1_p3lLnXlsaZgGzAie6Mnu24_PawYuDYIoH77pJ.X5Z.MqQPibUVTcS9jr0n8i7LY1tL3U7AiafX4CBXlmeNYIlNDtmq5GybCrf_ehzIV6VDRULqrr283j&format=png",
"userId": "189850304",
"xboxUid": "2814637561506387",
"inGame": true,
"xboxOnline": true,
"precenseText": "Metaverse Keeper"
}, {
"nickName": "2 Dev 763610406",
"iconUrl": "https://images-eds-ssl.xboxlive.com/image?url=z951ykn43p4FqWbbFvR2Ec.8vbDhj8G2Xe7JngaTToBrrCmIEEXHC9UNrdJ6P7KIwuPiuIs6TLDV4WsQAGzSwhtPXK324jSFISZXwjn7Pxep.qUTgu_FaqU1f_RnUzRI&format=png",
"userId": "189748005",
"xboxUid": "2814659124966292",
"inGame": true,
"xboxOnline": true,
"precenseText": "Metaverse Keeper"
}]
}

4、创建房间接口

调用类DHSDKHelper
接口createLobby
调用说明前提是需要在Xbox后台->Xbox服务->游戏设置->多人游戏->多人会话->创建名为LobbySession的会话
回调说明回调的requestCode为DHSDKHelper.DHSDKConst.REQ_CREATE_LOBBY
其他说明如果使用好友组队功能,需要在Assets/StreamingAssets目录下放置文件名为session_image.jpg的邀请图片,尺寸为457x257

LobbySession的模板如下,maxMembersCount需要修改成项目实际的房间总人数

{
"constants": {
"system": {
"version": 1,
"maxMembersCount": 2,
"visibility": "open",
"inviteProtocol": "game",
"capabilities": {
"connectivity": true,
"connectionRequiredForActiveMembers": true,
"gameplay" : true,
"crossPlay": true,
},
},
"custom": { }
}
}
回调对象字段类型说明
sessionIdstring房间会话ID

创建成功后的返回信息如下:(可以使用JsonUtility.FromJson< DHXboxTeamSessionInfo>(data)反序列化对象)

{"sessionId":"aaa9a701-b2f5-4983-b448-6f3560880ea1"}

5、邀请好友接口

调用类DHSDKHelper
接口inviteFriend
调用说明调用前提是玩家已在房间中,调用接口后会自动拉起系统界面,选择指定玩家后发送邀请。

6、接受好友邀请回调

回调信息回调的requestCode为DHSDKHelper.DHSDKConst.REQ_RECEIVE_FRIEND_INVITE
回调说明收到该回调说明用户已经接受好友邀请并且已经成功登录游戏,Xbox要求收到回调后停止一切行为强制进入好友房间,游戏清理完场景后需要调用joinFriendLobbyByInvited接口进入好友房间,收到进入房间成功回调才算真正进入好友房间。游戏需要控制好UI界面来衔接整个强制进入房间过程

7、加入好友邀请的房间

调用类DHSDKHelper
接口joinFriendLobbyByInvited

8、主动加入好友的房间

调用类DHSDKHelper
接口joinFrinedLobby
参数账号id
调用说明该接口适合游戏内展示好友列表的UI里调用,如果好友已经在房间里并且没有满员,可以主动调用该接口加入房间

9、离开房间

调用类DHSDKHelper
接口leaveLobby

10、房间的相关回调

回调信息码回调说明
DHSDKHelper.DHSDKConst.REQ_LOBBY_JOINED本人加入房间回调(非房主会收到),resultData返回全量人员信息
DHSDKHelper.DHSDKConst.REQ_LOBBY_LEAVE本人离开房间回调
DHSDKHelper.DHSDKConst.REQ_MEMBER_JOINED_LOBBY成员加入房间回调,resultData返回全量人员信息
DHSDKHelper.DHSDKConst.REQ_MEMBER_LEAVE_LOBBY成员离开房间回调,resultData返回全量人员信息
DHSDKHelper.DHSDKConst.REQ_LOBBY_HOST_CHANGE房主变化回调,resultData返回全量人员信息

DHXboxTeamInfo房间类说明

变量名称类型说明
sessionIdstring房间会话ID
userInfoList< DHXboxTeamUserInfo>成员信息列表

DHXboxTeamUserInfo成员信息类说明

变量名称类型说明
accountidstring房间会话ID
isHostbool成员信息列表

resultData返回示例:

{
"sessionId": "27792822-7a65-43ee-a068-de45769b068f",
"userInfo": [{
"accountid": "189918468",
"isHost": true
}, {
"accountid": "189748005",
"isHost": false
}]
}

11、其他接口参照基本接口调用接入即可

四、 Q&A

1、登录报错 8015DC12,修改主机Sandbox Id为发布的沙箱ID(比如ZZNHSP.0) 登录报错87DD0019,失去连接需要退出游戏重进 登录报错87DD0021 ,确认unity 工程内单点登录的url是否是Xbox后台配置的依赖url 2、导入GDK-MS-PC报错,unsafe,请修改平台支持unsafe mode; 3、Input System,在Package Manager安装插件 4、平台宏定义USE_MS_GAMECORE;MICROSOFT_GAME_CORE 5、store商店无法搜索任何app,需要解锁国行,切换区域为美国https://www.doyo.cn/article/443600 6、切换开发模式,如果dev mode activition总提示更新后才能激活,请使用隐藏模式, To access the hidden menu go to Settings > System > Console Info > Press LB RB LT RT > Developer Settings > Developer Mode 7、测试支付功能,首次现在商店上传包体发布后,需要在商店下载后从商店启动。 然后使用xbapp list /d 查看包的contentId和ekbId。然后需要在测试Loose目录下MicrosoftGame.config 中添加以下部分:

  <StoreId>9NTL0QDWZ4FS</StoreId>
<DevelopmentOnly>
<ContentIdOverride>2797FA46-A93B-494C-AD80-B67C9FCA939F</ContentIdOverride>
<EKBIDOverride>00000000-0000-0000-0000-000000000001</EKBIDOverride>
</DevelopmentOnly>

8、后台生成证书不要选择沙盒