admin 管理员组文章数量: 1184232
steam注册事件
//当退出大厅
SteamCallBacks.OnLobbyKicked = Callback<LobbyKicked_t>.Create(OnLobbyKicked);//当大厅创建
SteamCallBacks.OnLobbyCreated = Callback<LobbyCreated_t>.Create(OnLobbyCreated);//当加入steam大厅
SteamCallBacks.OnLobbyEnter = Callback<LobbyEnter_t>.Create(OnLobbyEnter);//当大厅数据更新
SteamCallBacks.OnLobbyDataUpdate = Callback<LobbyDataUpdate_t>.Create(OnLobbyDataUpdate);/// SendLobbyChatMsg。这将向大厅内的所有用户发送一条简单的二进制消息。 /// 大厅成员需要听取 ISteamMatchmaking::LobbyChatMsg_t 回调。 /// 收到回调后,您可以使用 ISteamMatchmaking::GetLobbyChatEntry 获取消息内容
SteamCallBacks.OnLobbyChatMsg = Callback<LobbyChatMsg_t>.Create(OnLobbyChatMsg);///当收到邀请通知
SteamCallBacks.OnLobbyInvited = Callback<LobbyInvite_t>.Create(OnLobbyInvited);/// 如果用户已在游戏中,将提交 ISteamFriends::GameLobbyJoinRequested_t 回调,/// 其中包含了用户希望加入的大厅的 Steam ID。 这将由您的游戏决定是否接受。
SteamCallBacks.OnGameLobbyJoinRequested = Callback<GameLobbyJoinRequested_t>.Create(OnGameLobbyJoinRequested);/// 如果目标用户接受了邀请,启动游戏时 pchConnectString 会添加入命令行。/// 如果该用户已在运行游戏,对方便会收到带有连接字符串的
SteamCallBacks.OnGameRichPresenceJoinRequested = Callback<GameRichPresenceJoinRequested_t>.Create(OnGameRichPresenceJoinRequested);标题
if(GUI.Button(newRect(100,190,100,50),"Request")){//刷新你现在不一定在的大厅的元数据//这将发送与说客相关的所有元数据//如果本地用户没有连接到Steam服务器,返回false//结果将由dataupdate_t callback 触发
SteamMatchmaking.RequestLobbyData((CSteamID)NowLobbyId);}//steam API LobbyDataUpdate_t 回调将会被触发publicstructLobbyDataUpdate_t{publicconstint k_iCallback = Constants.k_iSteamMatchmakingCallbacks +5;publiculong m_ulSteamIDLobby;// steamID of the Lobbypubliculong m_ulSteamIDMember;// steamID of the member whose data changed, or the room itselfpublicbyte m_bSuccess;// true if we lobby data was successfully changed;// will only be false if RequestLobbyData() was called on a lobby that no longer exists}更多steam回调接口
steam sdk 消息工具类
usingSteamworks;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicstaticclassST{//给steam发送一些信息,以实现好友之间的状态事件监听。[可自定义]publicstaticvoidSENDMS_Private(CSteamID lobbyId,CSteamID sendWho,byte msId){byte[] msg =newbyte[]{(byte)sendWho, msId };//{消息类型[0==公共],类容}
SteamMatchmaking.SendLobbyChatMsg(lobbyId, msg,12);}publicstaticvoidSENDMS_Private(ulong lobbyId,CSteamID sendWho,byte msId){byte[] msg =newbyte[]{(byte)sendWho, msId };//{消息类型[0==公共],类容}
SteamMatchmaking.SendLobbyChatMsg((CSteamID)lobbyId, msg,12);}publicstaticvoidSENDMS_Public(CSteamID lobbyId,byte msId){byte[] msg =newbyte[]{0, msId };//{消息类型[0==公共],类容}
SteamMatchmaking.SendLobbyChatMsg(lobbyId, msg,12);}publicstaticvoidSENDMS_Public(ulong lobbyId,byte msId){byte[] msg =newbyte[]{0, msId };//{消息类型[0==公共],类容}
SteamMatchmaking.SendLobbyChatMsg((CSteamID)lobbyId, msg,12);}publicstaticvoidSEND_LOOBY_MS(CSteamID lobbyId,string key,stringvalue){
SteamMatchmaking.SetLobbyData(lobbyId, key,value);
SteamMatchmaking.RequestLobbyData(lobbyId);}publicstaticvoidSEND_LOOBY_MS(ulong lobbyId,string key,stringvalue){
SteamMatchmaking.SetLobbyData((CSteamID)lobbyId, key,value);
SteamMatchmaking.RequestLobbyData((CSteamID)lobbyId);}}成就
usingSteamworks;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;namespaceFightClub{publicclassSteamAchievements:MonoBehaviour{publicstaticSteamAchievements Instance {get;set;}//成就publicenumAchievement:int{
Achievement1,//有待添加};privateAchievment_t[] m_Achievements =newAchievment_t[]{newAchievment_t(Achievement.Achievement1,"第一个成就","启动游戏立即获得"),};privateclassAchievment_t{publicAchievement m_eAchievementID;publicstring m_strName;publicstring m_strDescription;publicbool m_bAchieved;publicAchievment_t(Achievement achivementID,string name,string desc){
m_eAchievementID = achivementID;
m_strName = name;
m_strDescription = desc;
m_bAchieved =false;}}//GameIDprivateCGameID m_GameID;//从Steam获取统计数据?[Header("从Steam获取统计数据")]publicbool m_bRequestedStats;privatebool m_bStatsValid;//这一帧存储统计数据?privatebool m_bStoresStats;//游戏数据privateint m_nTotalNumWins;protectedCallback<UserStatsReceived_t> m_UserStatsReceived;protectedCallback<UserStatsStored_t> m_UserStatsStored;protectedCallback<UserAchievementStored_t> m_UserAchievementStored;//把回调创建放在OnEnable方法内以确保Unity加载完成后重复创建回调privatevoidOnEnable(){if(!SteamManager.Initialized)return;
m_GameID =newCGameID(SteamUtils.GetAppID());
m_UserStatsReceived = Callback<UserStatsReceived_t>.Create(OnUserStatsReceived);
m_UserStatsStored = Callback<UserStatsStored_t>.Create(OnUserStatsStored);
m_UserAchievementStored = Callback<UserAchievementStored_t>.Create(OnAchievementStored);
m_bRequestedStats =false;
m_bStatsValid =false;}privatevoidAwake(){
Instance =this;}privatevoidStart(){
m_nTotalNumWins =0;}publicvoidUnLock(Achievement type){if(UnityEngine.PlayerPrefs.GetInt(type.ToString())!=2){
UnityEngine.PlayerPrefs.SetInt(type.ToString(),1);}}privatevoidUpdate(){if(!SteamManager.Initialized)return;if(!m_bRequestedStats){if(!SteamManager.Initialized){
m_bRequestedStats =true;return;}//从 Steam 后端调出用户的统计与成就数据bool bSuccess = SteamUserStats.RequestCurrentStats();
m_bRequestedStats = bSuccess;}//if (!m_bStatsValid) return;foreach(Achievment_t achievement in m_Achievements){if(achievement.m_bAchieved)continue;switch(achievement.m_eAchievementID){case Achievement.Achievement1:if(UnityEngine.PlayerPrefs.GetInt(achievement.m_eAchievementID.ToString())==1){
Debug.Log("解锁::"+ achievement.m_strName);UnlockAchievement(achievement);
UnityEngine.PlayerPrefs.SetInt(achievement.m_eAchievementID.ToString(),2);}break;}}//在游戏中的某个节点上传变更if(m_bStoresStats){
SteamUserStats.SetStat("NumWins", m_nTotalNumWins);bool bSuccess = SteamUserStats.StoreStats();
m_bStoresStats =!bSuccess;}}// 数据准备完成后(RequestCurrentStats),回调privatevoidOnUserStatsReceived(UserStatsReceived_t pCallback){if(!SteamManager.Initialized)return;if((ulong)m_GameID == pCallback.m_nGameID){//加载成就if(EResult.k_EResultOK == pCallback.m_eResult){
Debug.Log("Received stats and achievements from Steam");
m_bStatsValid =true;foreach(Achievment_t ach in m_Achievements){//迭代每项数据并初始化游戏状态bool ret = SteamUserStats.GetAchievement(ach.m_eAchievementID.ToString(),out ach.m_bAchieved);if(ret){//在游戏里显示成就的可读属性(name&des)
ach.m_strName =
SteamUserStats.GetAchievementDisplayAttribute(ach.m_eAchievementID.ToString(),"name");
ach.m_strDescription =
SteamUserStats.GetAchievementDisplayAttribute(ach.m_eAchievementID.ToString(),"desc");}else{
Debug.LogWarning("failed for getting achievement"+ ach.m_eAchievementID);}}
SteamUserStats.GetStat("NumWins",out m_nTotalNumWins);}else
Debug.Log("RequestStats - failed, "+ pCallback.m_eResult);}}//回调上传的变更(StoreStats)privatevoidOnUserStatsStored(UserStatsStored_t pCallback){if((ulong)m_GameID == pCallback.m_nGameID){if(EResult.k_EResultOK == pCallback.m_eResult){
Debug.Log("StroeStats-success");}elseif(EResult.k_EResultInvalidParam == pCallback.m_eResult){
Debug.Log("StoreStats-failed to validate");UserStatsReceived_t callback =newUserStatsReceived_t();
callback.m_eResult = EResult.k_EResultOK;
callback.m_nGameID =(ulong)m_GameID;OnUserStatsReceived(callback);}else{
Debug.Log("failed-StroeStats");}}}//解锁成就privatevoidUnlockAchievement(Achievment_t achievement){
achievement.m_bAchieved =true;
SteamUserStats.SetAchievement(achievement.m_eAchievementID.ToString());
m_bStoresStats =true;}//回调解锁的成就privatevoidOnAchievementStored(UserAchievementStored_t pCallback){if((ulong)m_GameID == pCallback.m_nGameID){if(0== pCallback.m_nMaxProgress){
Debug.Log("Achievement"+ pCallback.m_rgchAchievementName +"unlocked");}else{
Debug.Log("Achievement '"+ pCallback.m_rgchAchievementName +"' progress callback, ("+
pCallback.m_nCurProgress +","+ pCallback.m_nMaxProgress +")");}}}}}调用成就
SteamAchievements.Instance.UnLock(SteamAchievements.Achievement.Achievement1);版权声明:本文标题:Steam与Unity携手前行:一步到位的启动项获取指南 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1772176760a3552977.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论