下载安装Unity开发套件并运行Demo

前言:

笔者近期在学习 Unity 语言开发,把 unity 开发工具的使用做一个整理归档,有兴趣的小伙伴可以参考此文章 入门,这里以 “腾讯云即时通信 IM Unity uikit Demo”为用例,从工具安装到跑通Demo 的整理流程梳理,希望能帮助下新手小伙伴,废话不多说,现在开始~

申请 unity 开发账号并 下载 unity hub 开发套件:点击下载

  1. 先申请账号并登录


  2. 下载 Unity Hub 工具(用于管理各个版本的 Unity Editer编辑器)


3.(可选操作)为了方便 Unity Hub使用,可以设置 Unity Hub 语言为 “中文”



  1. 安装 Unity Editer 版本





  2. 下载 Unity API 和 Uikit Demo 并导入

  1. 打开项目预览


  2. 使用 VS 打开配置文件


  • 填写正确的 sdkappid(记得 ctrl + s 保存)


  1. 修改 Main.cs 为以下内容 并设置 修改后的 userId 和 userSig(记得 ctrl + s 保存)


using UnityEngine;
using UnityEngine.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.Networking;
using Jing.ULiteWebView;
using UnityEngine.SceneManagement;
using com.tencent.imsdk.unity;
using System.Security.Cryptography;
// using UnityEditor.Compilation;

namespace Com.Tencent.IM.Unity.UIKit.Example
{
  public class Main : MonoBehaviour
  {
    public InputField phoneNumber;
    public InputField captcha;
    public Button getCaptchaButton;
    public Button loginButton;
    // public GameObject headerImg;
    private int totalTime = 60;
    private string sessionId;
    private IEnumerator countDownCoroutine;

    private void Start()
    {
      // StartCoroutine(DownTexture(Config.headerImgUrl, headerImg));
      // 设置表情包信息
      Core.SetStickerPackageList(Config.stickers);
      ChangeSystemLanguage();
      string userId = PlayerPrefs.GetString("userId");
      string sdkUserSig = PlayerPrefs.GetString("sdkUserSig");

      if (!string.IsNullOrEmpty(userId) && !string.IsNullOrEmpty(sdkUserSig))
      {
        Core.SetConfig(Config.sdkappid, userId, sdkUserSig);
        Core.Init();
        Core.Login(HandleAfterLogin);
      }

      getCaptchaButton.onClick.AddListener(GetCaptcha);
      loginButton.onClick.AddListener(Login);


      countDownCoroutine = CountDown();
      string storedPhone = PlayerPrefs.GetString("phone");

      if (!string.IsNullOrEmpty(storedPhone))
      {
        phoneNumber.text = storedPhone;
      }
    }

    private void ChangeSystemLanguage(){
      string language = GetSystemLanguageWrapper.GetSystemLanguage();
      Debug.Log("system language: "+language);
      switch (language){
        case "Chinese":
          LanguageDataManager.SetCurrentLanguageValue(Language.Chinese);
          break;
        default:
          LanguageDataManager.SetCurrentLanguageValue(Language.English);
          break;
      }
    }

    private IEnumerator DownTexture(string url, GameObject gameObject)
    {
      UnityWebRequest WebRequest = new UnityWebRequest(url);
      DownloadHandlerTexture Download = new DownloadHandlerTexture(true);
      WebRequest.downloadHandler = Download;
      yield return WebRequest.SendWebRequest();
      //等待资源下载完成
      while (!WebRequest.isDone)
      {
        yield return null;
      }
      if (string.IsNullOrEmpty(WebRequest.error))
      {
        //文件下载成功
        //读取的图片
        Texture2D rexture = Download.texture;
        gameObject.SetActive(true);
        gameObject.GetComponent<Image>().sprite = GetSpriteByTexture(rexture);
        // Debug.Log("图片下载成功");
      }
      else
      {
        //文件下载失败
        // Debug.Log("图片下载失败");
      }
    }
    //将texture转成image的Sprite
    private Sprite GetSpriteByTexture(Texture2D tex)
    {
      Sprite _sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f));
      return _sprite;
    }

    private void Reset()
    {
      getCaptchaButton.interactable = true;
      totalTime = 60;
      getCaptchaButton.GetComponentInChildren<Text>().text = "获取验证码";
    }

    private IEnumerator CountDown()
    {
      Debug.Log("incountdown");
      Text buttonText = getCaptchaButton.GetComponentInChildren<Text>();
      getCaptchaButton.interactable = false;
      while (totalTime >= 0)
      {
        buttonText.text = totalTime.ToString();
        yield return new WaitForSeconds(1);
        totalTime--;
      }
      Reset();
    }

    private void GetCaptcha()
    {
      if (string.IsNullOrEmpty(phoneNumber.text))
      {
        return;
      }

      ULiteWebView.Ins.RegistJsInterfaceAction("messageHandler", GetCaptchaRes);
      ULiteWebView.Ins.RegistJsInterfaceAction("capClose", HandleCapClose);
      ULiteWebView.Ins.RegistJsInterfaceAction("getsize", getCaptchasize);
      var marginW = (UnityEngine.Screen.width - 768) / 2;
      var marginH = (UnityEngine.Screen.height - 768) / 2;
      ULiteWebView.Ins.Show(marginH, marginH, marginW, marginW);
      // ULiteWebView.Ins.Show();
      ULiteWebView.Ins.LoadLocal(Config.captchaUrl);
      // 倒计时
      Debug.LogError("marginW"+marginW);
      Debug.LogError("marginH" + marginH);
      IEnumerator countdowntry = CountDown();
      StartCoroutine(countdowntry);
    }
    private void getCaptchasize(string res){
      Debug.LogError("capchasize"+res);
    }
    private IEnumerator SMSRequest(string path, string dataStr, Action<string> cb)
    {
      byte[] postData = System.Text.Encoding.UTF8.GetBytes(dataStr);
      var url = Config.smsLoginHttpBase + path;

      var www = new UnityWebRequest(url, UnityWebRequest.kHttpVerbPOST);
      www.chunkedTransfer = false;
      www.uploadHandler = new UploadHandlerRaw(postData);
      www.downloadHandler = new DownloadHandlerBuffer();
      www.SetRequestHeader("Content-Type", "application/json");
      www.SetRequestHeader("Accept", "application/json");

      yield return www.SendWebRequest();

      if (www.isNetworkError || www.isHttpError)
      {
        Debug.Log(www.error);
      }
      else
      {
        // data.sessionId
        // Debug.Log("Form upload complete! " + path + www.downloadHandler.text);
        cb(www.downloadHandler.text);
      }
    }

    // 验证验证码后台下发短信
    private void VervifyPicture(MessageObj messageObj)
    {
      var data = new VerifyPictureReq
      {
        phone = "+86" + phoneNumber.text,
        ticket = messageObj.ticket,
        randstr = messageObj.randstr,
        appId = Config.sdkappid,
        apaasAppId = ""
      };

      StartCoroutine(SMSRequest("/base/v1/auth_users/user_verify_by_picture", Utils.ToJson(data), (string res) => HandleVerifyByPicture(res)));
    }

    private void HandleVerifyByPicture(string res)
    {
      var resObj = Utils.FromJson<SMSRes<VerifyResData>>(res);

      if (resObj.errorCode != 0)
      {
        Debug.LogError("Res Error: " + resObj.errorMessage);
        return;
      }

      sessionId = resObj.data.sessionId;
    }

    private void HandleLogin(string res)
    {
      //var resObj = Utils.FromJson<SMSRes<LoginResData>>(res);

      //if (resObj.errorCode != 0)
      //{
      //  Debug.LogError("Res Error: " + resObj.errorMessage);
      //  return;
      //}

      //      // Debug.LogError("11111111userID: " + resObj.data.userId);
      //      // Debug.LogError("11111111sdkUserSig: " + resObj.data.sdkUserSig);

      var userId = "";
      var userSig = "";

      PlayerPrefs.SetString("userId", userId);
      PlayerPrefs.SetString("sdkUserSig", userSig);
      
      Core.SetConfig(Config.sdkappid, userId, userSig);
      Core.Init();
      Core.Login(HandleAfterLogin);
    }

    private void HandleAfterLogin(params string[] args)
    {
      if (!Utils.IsCallbackLegit(args[0]))
      {
        PlayerPrefs.DeleteKey("userId");
        PlayerPrefs.DeleteKey("sdkUserSig");
        return;
      }
      StopCoroutine(countDownCoroutine);
      if (!string.IsNullOrEmpty(phoneNumber.text))
      {
        PlayerPrefs.SetString("phone", phoneNumber.text);
      }
      
      // 不用重复进group
      TencentIMSDK.GroupJoin(Config.communityId, "Hello", (int code, string desc, string user_data) =>
      {
        Debug.Log("Joined " + Config.communityId);
      });
      TencentIMSDK.GroupJoin(Config.channelId, "Hello", (int code, string desc, string user_data) =>
      {
        Debug.Log("Joined " + Config.channelId);
      });
      TencentIMSDK.GroupJoin(Config.groupId, "Hello", (int code, string desc, string user_data) =>
      {
        Debug.Log("Joined " + Config.groupId);
      });
      
      Reset();
      SceneManager.LoadScene("Chat");
    }

    private void HandleCapClose(string res)
    {
      ULiteWebView.Ins.Close();
    }

    private void GetCaptchaRes(string res)
    {
      var msgObj = Utils.FromJson<MessageObj>(res);
      VervifyPicture(msgObj);
      ULiteWebView.Ins.Close();
    }

    private void Login()
    {
      //if (string.IsNullOrEmpty(phoneNumber.text) || string.IsNullOrEmpty(captcha.text) || string.IsNullOrEmpty(sessionId))
      //{
      //  return;
      //}

      //loginButton.interactable = false;

      //var data = new SMSLoginReq
      //{
      //  sessionId = sessionId,
      //  phone = "+86" + phoneNumber.text,
      //  code = captcha.text,
      //  apaasAppId = "",
      //  tag = "im"
      //};

      //StartCoroutine(SMSRequest("/base/v1/auth_users/user_login_code", Utils.ToJson(data), (string res) => HandleLogin(res)));
      //loginButton.interactable = true;

      HandleLogin("");
    }
    void OnApplicationQuit()
    {
      Core.Uninit();
    }
  }

  public class MessageObj
  {
    public string randstr;
    public string ticket;
  }

  public class VerifyPictureReq
  {
    public string phone;
    public string appId;
    public string ticket;
    public string randstr;
    public string apaasAppId;
  }

  public class SMSLoginReq
  {
    public string sessionId;
    public string phone;
    public string code;
    public string apaasAppId;
    public string tag;
  }

  public class SMSRes<T>
  {
    public int errorCode;
    public string codeStr;
    public string errorMessage;
    public T data;
  }

  public class LoginResData
  {
    public string userId;
    public int sdkAppId;
    public string sdkUserSig;
    public string token;
    public string expire;
    public string phone;
    public string email;
    public string name;
    public string avatar;
    public string apaasAppId;
    public string apaasUserId;

  }

  public class VerifyResData
  {
    public string sessionId;
  }
}
  1. 最后运行项目


  • 运行成功的效果


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容