[一]Unity接入Steam技术[获取头像和好友列表信息]

9 篇文章 0 订阅
using Steamworks;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Ys.UI;

namespace Ys.SteamSdk
{
  [System.Serializable]
  public class SteamBaseInfo
  {
    public CSteamID steamId;
    public Texture2D downloadedAvatar;
    public string NickName;
    public EPersonaState personaState;
  }
  public class SteamBase : MonoBehaviour
  {
    public AppId_t AppId = (AppId_t)1109040;
    public static SteamBase Instance { get; set; }
    [Header("查询好友的条件")]
    public EFriendFlags eFriendFlags = EFriendFlags.k_EFriendFlagAll;
    public SteamBaseInfo Ower//自己的信息
    {
      get
      {
        return AllMySteamUsersInfosList[0];
      }
    }
    [Header("所有[满足条件]好友[包含自己]")]
    public List<SteamBaseInfo> AllMySteamUsersInfosList = new List<SteamBaseInfo>();

    public List<SteamBaseInfo> GetOnlySteamFridendUsersList//除了你以外你的所有[满足条件]朋友
    {
      get
      {
        List<SteamBaseInfo> tempList = new List<SteamBaseInfo>();
        foreach (var item in AllMySteamUsersInfosList)
        {
          tempList.Add(item);
        }
        tempList.RemoveAt(0);
        if (tempList.Count == 0)
        {
          return AllMySteamUsersInfosList;
        }
        else
        {
          return tempList;
        }
      }
    }

    private Coroutine DownLoadSteamAvtorCoroutine;
    [HideInInspector]
    public Texture2D DownLoadSteamAvtorTex_Temp;
    public SteamBaseInfo GetSteamBaseInfoBySteamId(CSteamID cSteamID)
    {
      foreach (var item in AllMySteamUsersInfosList)
      {
        if (item.steamId == cSteamID)
        {
          return item;
        }
      }
      return default(SteamBaseInfo);
    }
    void Awake()
    {
      Instance = this;

    }
    void Start()
    {
      SteamFridends.Instance.UpdateFridendListEvent += UpdateSteamFridendInfo;
      //本地自己
      CSteamID csid = SteamApps.GetAppOwner();
      SteamBaseInfo ower = new SteamBaseInfo
      {
        steamId = csid,
        downloadedAvatar = null,
        NickName = SteamFriends.GetFriendPersonaName(csid),
        personaState = SteamFriends.GetFriendPersonaState(csid)
      };
      AllMySteamUsersInfosList.Add(ower);
      //其他朋友
      for (int i = 0; i < SteamFriends.GetFriendCount(eFriendFlags); i++)
      {
        CSteamID steamid = SteamFriends.GetFriendByIndex(i, eFriendFlags);
        if (SteamApps.BIsSubscribedApp(AppId))//必须拥有本产品的好友
        {
          AllMySteamUsersInfosList.Add(new SteamBaseInfo
          {
            steamId = steamid,
            downloadedAvatar = null,
            NickName = SteamFriends.GetFriendPersonaName(steamid),
            personaState = SteamFriends.GetFriendPersonaState(steamid)
          });
        }
        print("[" + SteamFriends.GetFriendPersonaName(steamid) + "]是否拥有此产品?=" + SteamApps.BIsSubscribedApp(AppId));
      }
      //异步加载头像
      DownLoadSteamAvtorCoroutine = StartCoroutine(_FetchAcatar());
      Debug.Log("为什么????");
      StartCoroutine(SendScoialUIFridendInfo());
    }

    public void UpdateSteamFridendInfo()
    {
      for (int i = 0; i < AllMySteamUsersInfosList.Count; i++)
      {
        AllMySteamUsersInfosList[i].personaState = SteamFriends.GetFriendPersonaState(AllMySteamUsersInfosList[i].steamId);
      }
    }
    public void GetDownLoadAvator(CSteamID cSteamID, Action funccallBack) 
    {
      StartCoroutine(DownLoadAvatorBySteamId(cSteamID, funccallBack));
    }
    IEnumerator DownLoadAvatorBySteamId(CSteamID cSteamID, Action funccallBack)
    {
      Coroutine DownLoadSteamAvtorCoroutine_Temp = StartCoroutine(IE_DownLoadAvatorBySteamId(cSteamID));
      yield return DownLoadSteamAvtorCoroutine_Temp;
      funccallBack();
    }
    /// <summary>
    /// 下载指定头像
    /// </summary>
    /// <returns></returns>
    IEnumerator IE_DownLoadAvatorBySteamId(CSteamID cSteamID)
    {
      uint width = 100;
      uint height = 100;
      //获取中等图片,如果获取的是大图片的话,可能获取不到
      int AvatarInt = SteamFriends.GetMediumFriendAvatar(cSteamID);
      // Debug.Log("AvatarInt" + AvatarInt);
      while (AvatarInt == -1)
      {
        yield return null;
      }
      if (AvatarInt > 0)
      {
        SteamUtils.GetImageSize(AvatarInt, out width, out height);

        if (width > 0 && height > 0)
        {
          byte[] avatarStream = new byte[4 * (int)width * (int)height];
          SteamUtils.GetImageRGBA(AvatarInt, avatarStream, 4 * (int)width * (int)height);
          DownLoadSteamAvtorTex_Temp = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false);
          DownLoadSteamAvtorTex_Temp.LoadRawTextureData(avatarStream);
          DownLoadSteamAvtorTex_Temp.Apply();

          DownLoadSteamAvtorTex_Temp = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false);
          DownLoadSteamAvtorTex_Temp.LoadRawTextureData(avatarStream);
          DownLoadSteamAvtorTex_Temp.Apply();
        }
      }
    }

    /// <summary>
    /// 下载头像完毕
    /// </summary>
    /// <returns></returns>
    IEnumerator SendScoialUIFridendInfo()
    {
      yield return DownLoadSteamAvtorCoroutine;
      print("下载完毕!");
      SteamFridends.Instance.UpdateFridendListEvent.Invoke();
    }
    /// <summary>
    /// 下载头像
    /// </summary>
    /// <returns></returns>
    IEnumerator _FetchAcatar()
    {
      uint width = 100;
      uint height = 100;
      for (int i = 0; i < AllMySteamUsersInfosList.Count; i++)
      {
        //获取中等图片,如果获取的是大图片的话,可能获取不到
        int AvatarInt = SteamFriends.GetMediumFriendAvatar(AllMySteamUsersInfosList[i].steamId);
        // Debug.Log("AvatarInt" + AvatarInt);
        while (AvatarInt == -1)
        {
          yield return null;
        }
        if (AvatarInt > 0)
        {
          SteamUtils.GetImageSize(AvatarInt, out width, out height);

          if (width > 0 && height > 0)
          {
            byte[] avatarStream = new byte[4 * (int)width * (int)height];
            SteamUtils.GetImageRGBA(AvatarInt, avatarStream, 4 * (int)width * (int)height);

            AllMySteamUsersInfosList[i].downloadedAvatar = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false);
            AllMySteamUsersInfosList[i].downloadedAvatar.LoadRawTextureData(avatarStream);
            AllMySteamUsersInfosList[i].downloadedAvatar.Apply();

            AllMySteamUsersInfosList[i].downloadedAvatar = new Texture2D((int)width, (int)height, TextureFormat.RGBA32, false);
            AllMySteamUsersInfosList[i].downloadedAvatar.LoadRawTextureData(avatarStream);
            AllMySteamUsersInfosList[i].downloadedAvatar.Apply();
          }
        }
      }
      print("正在下载中....");
    }
  }
}

在这里插入图片描述

SteamFridends

 public class SteamFridends : MonoBehaviour
  {
    public static SteamFridends Instance { get; set; }
    public Action UpdateFridendListEvent;
  
    void Awake()
    {
      Instance = this;
      UpdateFridendListEvent += OnUpdateFridendListEvent;
      SteamCallBacks.OnGameConnectedFriendChatMsg = Callback<GameConnectedFriendChatMsg_t>.Create(OnGameConnectedFriendChatMsg);
    }
    /// <summary>
    /// 更新好友列表
    /// </summary>
    private void OnUpdateFridendListEvent()
    {
      
    }
    /// <summary>
    /// 收到好友的消息
    /// </summary>
    /// <param name="param"></param>
    private void OnGameConnectedFriendChatMsg(GameConnectedFriendChatMsg_t param)
    {
      string pvDatas = "";
      EChatEntryType eChatEntryType;

      SteamFriends.GetFriendMessage(param.m_steamIDUser,param.m_iMessageID,out pvDatas,8,out eChatEntryType);
      Debug.Log("收到来自[" + SteamFriends.GetFriendPersonaName(param.m_steamIDUser)+"]的消息!!==="+ pvDatas);
      switch (pvDatas)
      {
        case "ChangedCustomMode":
          YsCanvas.Instance.LobbyUI_ROOT.NowGameMatchMode = GameMatchMode.Custom;
          break; 
      }
    }
  }

下一篇[二]Unity接入Steam技术[大厅,邀请好友,Steam消息]

有问题可以私信我哦~[注明来意] 感谢你的关注!

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
接入海康威视SDK获取实时人流量,需要进行以下步骤: 1. 在Unity中导入海康威视SDK,具体可以参考海康威视SDK的官方文档。 2. 创建一个摄像头对象,并设置好需要监控的区域。 3. 在代码中使用SDK提供的方法获取人流量数据,并将其实时更新到UI上。 以下是一份示例代码,仅供参考: ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using HSUnityTools; public class PeopleCounter : MonoBehaviour { public string deviceIP = "192.168.0.1"; public int devicePort = 8000; public string deviceUsername = "admin"; public string devicePassword = "123456"; public int channelNo = 1; public Text peopleCountText; private HSDevice device; private HSRealtimeData realTimeData; private int currentPeopleCount; void Start() { device = new HSDevice(deviceIP, devicePort, deviceUsername, devicePassword); device.Login((result) => { if (result) { Debug.Log("Login Succeed"); realTimeData = new HSRealtimeData(device, channelNo, HSRealtimeDataType.PeopleCount); realTimeData.Start((data) => { currentPeopleCount = data.peopleCount; }); } else { Debug.Log("Login Failed"); } }); } void Update() { peopleCountText.text = "People Count: " + currentPeopleCount.ToString(); } } ``` 在这个示例代码中,我们创建了一个名为“PeopleCounter”的组件,其中包含了设备的IP地址、端口号、用户名、密码、通道号等信息。在Start()方法中,我们先登录设备,登录成功后,创建了一个HSRealtimeData对象,通过该对象获取实时人流量数据,并将其保存到currentPeopleCount变量中。在Update()方法中,我们将currentPeopleCount变量的值更新到UI上。 需要注意的是,这仅仅是一份示例代码,具体实现方式可能会因为SDK版本和设备型号的不同而有所区别。如果遇到问题,建议参考海康威视SDK的官方文档或者向SDK厂商寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_阿松先生

感谢您的支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值