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(new Rect(100,190,100,50),"Request")) {//刷新你现在不一定在的大厅的元数据
//这将发送与说客相关的所有元数据
//如果本地用户没有连接到Steam服务器,返回false
//结果将由dataupdate_t callback 触发SteamMatchmaking.RequestLobbyData((CSteamID)NowLobbyId);}//steam  API   LobbyDataUpdate_t 回调将会被触发
public struct LobbyDataUpdate_t {public const int k_iCallback = Constants.k_iSteamMatchmakingCallbacks + 5;public ulong m_ulSteamIDLobby;     // steamID of the Lobbypublic ulong m_ulSteamIDMember;      // steamID of the member whose data changed, or the room itselfpublic byte 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官方文献库

steam sdk 消息工具类

using Steamworks;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public static class ST
{//给steam发送一些信息,以实现好友之间的状态事件监听。[可自定义]public static void SENDMS_Private(CSteamID lobbyId,CSteamID sendWho,byte msId){byte[] msg = new byte[] { (byte)sendWho, msId };//{消息类型[0==公共],类容}SteamMatchmaking.SendLobbyChatMsg(lobbyId, msg, 12);}public static void SENDMS_Private(ulong lobbyId, CSteamID sendWho, byte msId){byte[] msg = new byte[] { (byte)sendWho, msId };//{消息类型[0==公共],类容}SteamMatchmaking.SendLobbyChatMsg((CSteamID)lobbyId, msg, 12);}public static void SENDMS_Public(CSteamID lobbyId,byte msId){byte[] msg = new byte[] {0, msId };//{消息类型[0==公共],类容}SteamMatchmaking.SendLobbyChatMsg(lobbyId, msg, 12);}public static void SENDMS_Public(ulong lobbyId, byte msId){byte[] msg = new byte[] { 0, msId };//{消息类型[0==公共],类容}SteamMatchmaking.SendLobbyChatMsg((CSteamID)lobbyId, msg, 12);}public static void SEND_LOOBY_MS(CSteamID lobbyId,string key,string value){SteamMatchmaking.SetLobbyData(lobbyId, key, value);SteamMatchmaking.RequestLobbyData(lobbyId);}public static void SEND_LOOBY_MS(ulong lobbyId, string key, string value){SteamMatchmaking.SetLobbyData((CSteamID)lobbyId, key, value);SteamMatchmaking.RequestLobbyData((CSteamID)lobbyId);}
}

成就

using Steamworks;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace FightClub
{public class SteamAchievements : MonoBehaviour{public static SteamAchievements Instance { get; set; }//成就public enum Achievement : int{Achievement1,//有待添加};private Achievment_t[] m_Achievements = new Achievment_t[]{new Achievment_t(Achievement.Achievement1, "第一个成就", "启动游戏立即获得"),};private class Achievment_t{public Achievement m_eAchievementID;public string m_strName;public string m_strDescription;public bool m_bAchieved;public Achievment_t(Achievement achivementID, string name, string desc){m_eAchievementID = achivementID;m_strName = name;m_strDescription = desc;m_bAchieved = false;}}//GameIDprivate CGameID m_GameID;//从Steam获取统计数据?[Header("从Steam获取统计数据")]public bool m_bRequestedStats;private bool m_bStatsValid;//这一帧存储统计数据?private bool m_bStoresStats;//游戏数据private int m_nTotalNumWins;protected Callback<UserStatsReceived_t> m_UserStatsReceived;protected Callback<UserStatsStored_t> m_UserStatsStored;protected Callback<UserAchievementStored_t> m_UserAchievementStored;//把回调创建放在OnEnable方法内以确保Unity加载完成后重复创建回调private void OnEnable(){if (!SteamManager.Initialized) return;m_GameID = new CGameID(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;}private void Awake(){Instance = this;}private void Start(){m_nTotalNumWins = 0;}public void UnLock(Achievement type){if (UnityEngine.PlayerPrefs.GetInt(type.ToString()) !=2){UnityEngine.PlayerPrefs.SetInt(type.ToString(),1);}}private void Update(){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),回调private void OnUserStatsReceived(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);}elseDebug.Log("RequestStats - failed, " + pCallback.m_eResult);}}//回调上传的变更(StoreStats)private void OnUserStatsStored(UserStatsStored_t pCallback){if ((ulong)m_GameID == pCallback.m_nGameID){if (EResult.k_EResultOK == pCallback.m_eResult){Debug.Log("StroeStats-success");}else if (EResult.k_EResultInvalidParam == pCallback.m_eResult){Debug.Log("StoreStats-failed to validate");UserStatsReceived_t callback = new UserStatsReceived_t();callback.m_eResult = EResult.k_EResultOK;callback.m_nGameID = (ulong)m_GameID;OnUserStatsReceived(callback);}else{Debug.Log("failed-StroeStats");}}}//解锁成就private void UnlockAchievement(Achievment_t achievement){achievement.m_bAchieved = true;SteamUserStats.SetAchievement(achievement.m_eAchievementID.ToString());m_bStoresStats = true;}//回调解锁的成就private void OnAchievementStored(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);

[二]Unity接入Steam技术[大厅,邀请好友,Steam消息事件,成就]相关推荐

  1. 《UnityAPI.Vector2二维向量》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Vector2+Normalized+Lerp+Dot+立钻哥哥++OK++)

    <UnityAPI.Vector2二维向量> 版本 作者 参与者 完成日期 备注 UnityAPI_Vector2_V01_1.0 严立钻 2020.07.09 #<UnityAPI ...

  2. 【Unity】如何接入广告(技术及设计)

    文章目录 1.游戏盈利的方式 2.Unity接入广告的原理 3.选择哪家平台? 4.技术教程 (1)UnityAds (2)GoogleMob (3)广点通 (4)有米 (5)百度联盟 (6)Vung ...

  3. 魔坊APP项目-15-邀请好友(业务逻辑流程图、服务端提供邀请好友的二维码生成接口、客户端通过第三方识别微信二维码,服务端提供接口允许访问、App配置私有协议,允许第三方应用通过私有协议,唤醒APP)

    邀请好友 1.业务逻辑流程图 客户端提供点击"邀请好友"以后的页面frame,html/invite.html,代码: <!DOCTYPE html> <html ...

  4. (每日更新)《虚拟现实VR资讯》(Yanlz+Unity+SteamVR+云技术+5G+AI=VR云游戏=云渲染+人机交互+立钻哥哥+==)

    虚拟现实(Virtual Reality) 虚拟现实简称VR,是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的.交互式的三维动态视景和实体行为的系统仿真 ...

  5. 《Linux内核剖析》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+Makefile+块设备驱动+字符设备驱动+数学协处理器+文件系统+内存管理+GDB+立钻哥哥+==)

    <Linux内核剖析> <Linux内核剖析> 版本 作者 参与者 完成日期 备注 YanlzLinux_Kernel0.12_V01_1.0 严立钻 2020.02.06 # ...

  6. 《卡耐基三部曲》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+人性的弱点+人性的优点+语言的突破+术业有专攻+世界观+人生观+价值观+志同道合+不卑不亢+立钻哥哥++==)

    版本 作者 参与者 完成日期 备注 YanlzMgr_Carnegie_V01_1.0 严立钻 2021.04.09 ##<卡耐基三部曲>发布说明: ++++"卡耐基三部曲&qu ...

  7. 《孩子,为你自己读书》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+多多图书馆+志存当高远+读万卷书如行万里路+术业有专攻+读书是对思想的一种升华+立钻哥哥++==)

    <孩子,为你自己读书> ##<孩子,为你自己读书>发布说明: ++++"孩子,为你自己读书":是对"修身养性治国平天下"的综合探索:== ...

  8. 《UnityAPI.ScriptableObject脚本化对象》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+CreateInstance+List+立钻哥哥++OK++)

    <UnityAPI.ScriptableObject脚本化对象> 版本 作者 参与者 完成日期 备注 UnityAPI_ScriptableObject_V01_1.0 严立钻 2020. ...

  9. 《资讯:元宇宙》(Yanlz+VR云游戏+Unity+SteamVR+云技术+5G+AI+区块链+NFT+绿洲+头号玩家+平行宇宙+虚拟世界+Pico+Oculus+Soul+立钻哥哥++==)

    版本 作者 参与者 完成日期 备注 YanlzXR_Metaverse_V01_1.0 严立钻 2021.09.08 元宇宙(Metaverse) 元宇宙是现实世界在虚拟世界的"映射&quo ...

  10. 《UnityAPI.GUI界面》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+GUI+DrawTexture+FocusControl+Toggle+立钻哥哥++OK++)

    <UnityAPI.GUI界面> 版本 作者 参与者 完成日期 备注 UnityAPI_GUI_V01_1.0 严立钻 2020.07.23 #<UnityAPI.GUI界面> ...

最新文章

  1. code vs 集成tfs_关于编译器和集成开发环境,一文给你讲明白!
  2. Oracle Scheduler - NLS_ENV
  3. 实现textarea限制输入字数
  4. Ubuntu 下 VirtualBox 调整vmdk虚拟硬盘分区
  5. 【Flink】FLink SQL TableException: Table sink doesn‘t support consuming update changes which is
  6. ssrs 级联参数_在SSRS中使用多值参数
  7. 学以致用------韩顺平老师说(如果不能学以致用,那就是白费。等于没学。贪多嚼不烂。)---无内容...
  8. SpringBoot --- 整合Elasticsearch
  9. 马化腾的马氏建议:“小步快跑 快速迭代”
  10. Robomaster哨兵视觉算法以及线程和通信设计【2021】
  11. 我的世界服务器物品代码,我的世界指令代码大全 2021通用指令代码汇总[多图]...
  12. 互联网巨头们的地摊争夺战
  13. Mysql事务隔离与Spring
  14. HDU1255 覆盖的面积 (线段树 + 扫描线)
  15. MATLAB中输入微分方程dy表示,怎么用MATLAB求解如Dy = y+1/y 的微分方程
  16. O2O有哪些平台 O2O平台的共同点是什么?
  17. 安居客广州二手房定价分析
  18. ROS工程师等级证书(初级)报名要求
  19. 使用了代理服务器之后突然浏览器不能打开网页的解决方法
  20. 电脑抓取手机包与笔记本wifi热点设置

热门文章

  1. 纪念概率学界最后一位集大成者——钟开莱
  2. jdk和jre有什么区别?
  3. 计算机基础考试大一计算题,计算机基础复习(大一)计算机基础上机题库
  4. 广义预测控制 matlab,基于MATLAB的广义预测控制设计方法.pdf
  5. Windows10本地数据库搭建(MySQL、PostgreSQL)
  6. 本地如何使用oracle数据库,使用sqlplus连接oracle本地数据库的方式
  7. Comware V7系统设备,密码+秘钥双因子认证方式,登陆设备典型配置案例
  8. Springboot毕设项目公共机房的值班管理系统wyz7b(java+VUE+Mybatis+Maven+Mysql)
  9. Dreammail 下载与安装
  10. 360手机助手pc版 v2.4.0.1265 官方版