本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。

洪流学堂公众号回复专栏,查看更多专栏文章。


洪流学堂,让你快人几步。你好,我是郑洪智。

小新:“大智,如果像开发一个带网络的游戏,是不是客户端和服务器都得会写啊?”
大智:“没错,对于网络游戏来说,不管是强联网的多人在线游戏,还是弱联网的休闲卡牌游戏,客户端和服务器是密不可分的。”
小新:“那像我这种不会服务端开发的怎么办呢?”
大智:“这个好办,当然是学喽”
小新:“那智哥你的任务可就重喽,我可能出不了师了,嘿嘿”
大智:“咳咳,其实也有别的办法,就是使用云服务。对于一些简单的数据存储,使用云服务就足够了,但是对于特殊复杂的游戏业务和逻辑,还是需要自己来写服务器的。”
小新:“那你可不可以先教一教我怎么使用云服务?”
大智:“好,还真有这么一个云服务,直接支持Unity的,名字是LeanCloud。后面两天和你一起学注册登录和排行榜的功能,其他功能就靠你自己去探索咯。”

LeanCloud

LeanCloud(https://leancloud.cn/)是一个后端云服务,可以提供包括数据存储、文件存储与 CDN、消息推送和实时通信在内的后端云服务,同时提供支撑后端代码的云引擎和云函数等开发工具,能全面涵盖移动开发的需求;同时也提供了易于集成的全平台 SDK,支持 iOS、Android 应用和游戏开发,以及包括微信小程序在内的 web 开发。

可以帮开发者摆脱繁重的后端开发负担,最大限度地降低开发成本、缩短开发周期、加快迭代速度。

在Unity中使用

在Unity中使用LeanCloud,有两种方式:

  • 使用LeanCloud提供的SDK包,简单,唯一的缺陷就是不能用于WebGL平台(原因是SDK包中使用了.Net中的Task,需要多线程支持,而WebGL不支持多线程)。
  • 使用LeanCloud提供的RESTful API,不受平台限制,但是接口需要自己封装。

后面我们会使用RESTful的方式,让你更了解HTTP的请求,如果你想用SDK的方式,请参照LeanCloud的文档自行探索。

LeanCloud中创建应用

  1. 注册LeanCloud账号:https://leancloud.cn/
  2. 创建应用:
  3. 创建完应用后,可以看到APP ID和APP Key,后面代码中需要用到。

注册登录

使用RESTful的方式时,不需要在Unity工程中导入任何的插件,我们只需要两样东西:

  • 阅读LeanCloud的文档(https://leancloud.cn/docs/rest_api.html#hash964666)
  • 熟悉Unity的WebRequest

下面我们就开始喽。

注册

LeanCloud中提供了两种注册方式,一种是使用用户名+密码的方式注册(可绑定邮箱,免费),一种是使用手机号+验证码的方式注册(验证码收费)。

下面我们以用户名+密码的方式注册,手机号注册的方式你可以自行探索哦。

注册界面UI

首先设置一个简单的界面,用来填写用户名和密码。

注册的代码

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;[Serializable]
class RegJson
{public string username;public string password;
}public class LeanCloudReg : MonoBehaviour
{public string AppId;public string AppKey;public InputField Username;public InputField Password;// Update is called once per framepublic void Reg(){StartCoroutine(RegCo());}IEnumerator RegCo(){var jsonObj = new RegJson(){username = Username.text,password = Password.text};// 注意这个url不是通用的,每个用户不一样var url = "https://5jmvfx9e.api.lncld.net/1.1/users";var json = JsonUtility.ToJson(jsonObj);Debug.Log(json);var www = UnityWebRequest.Post(url, json);www.SetRequestHeader("X-LC-Id", AppId);www.SetRequestHeader("X-LC-Key", AppKey);www.SetRequestHeader("Content-Type", "application/json");yield return www.SendWebRequest();if (www.isHttpError || www.isNetworkError){Debug.LogError(www.error);Debug.LogError(www.downloadHandler.text);}else{Debug.Log(www.downloadHandler.text);}}
}

上面代码中有一个url,注意这个url,你的和我的是不一样的,那怎么知道你的url是什么呢?
如果你看了LeanCloud的文档,并且在看文档的时候登陆了,文档中的例子会自动显示你的应用对应的url:

上面就是整个注册流程的代码,记得在按钮上绑定这个Reg方法。

修改BUG

现在可以运行这个代码啦,不过你会发现这里面有个大坑。

{"code":107,"error":"Malformed json object. A json dictionary is expected."}

这是为什么呢?
好,现在按个暂停键,先不要往下看,建议你先自己尝试搜索解决下这个问题。


不知道你是否找到问题的原因了呢?
这个问题可以算是Unity的一个BUG,Unity的WebRequest的POST方法在设计上只能发送表单数据,也就是说无法发送上面设置的json格式内容的数据。

解决这个问题有两种办法,一种是常规办法,一种是取巧的办法。

常规的办法是用UnityWebRequest底层的API来发送请求,代码如下:

var www = new UnityWebRequest(url, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(json);
www.uploadHandler = new UploadHandlerRaw(bodyRaw);
www.downloadHandler = new DownloadHandlerBuffer();www.SetRequestHeader("X-LC-Id", AppId);
www.SetRequestHeader("X-LC-Key", AppKey);
www.SetRequestHeader("Content-Type", "application/json");yield return www.SendWebRequest();

还有一种是取巧的办法,通过PUT方法来构造请求,把请求method改为POST,代码如下:

var www = UnityWebRequest.Put(url, json);
www.method = "POST";
www.SetRequestHeader("X-LC-Id", AppId);
www.SetRequestHeader("X-LC-Key", AppKey);
www.SetRequestHeader("Content-Type", "application/json");

到这里,再请求就可以获取到请求的结果了。

总结

大智:“互联网上有很多云服务,可以助力我们快速地实现一些功能,如果用得好可以节省时间和成本呢。”。

思考题

大智:“试一试LeanCloud的手机注册吧。”
小新:“好嘞!”
大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”

推荐阅读

  • Unity开发《一起来捉妖》教程 | 2.用摄像头图像做背景
  • Unity开发《一起来捉妖》教程 | 1.陀螺仪控制相机
  • Unity 2019.1 中文更新日志速览版
  • Unity中编码Encoding脱坑指南
  • Unity中的Git最佳实践
  • Unity2019更新规划速览,将有官方的可视化编程!
  • Unity运行时更新带来了什么?
  • Unity2018.3新功能 | Prefab嵌套和变体

洪流学堂公众号回复专栏,查看更多专栏文章。

《大话Unity2019》,大智带小新学Unity2019的有趣经历,让你学Unity更简单。

PC端入口:https://edu.hongliu.cc

【专栏精选】实战:使用LeanCloud实现玩家注册相关推荐

  1. 【专栏精选】实战:使用LeanCloud上传玩家分数,实现排行榜

    本文节选自洪流学堂公众号技术专栏<大话Unity2019>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 小新:"有 ...

  2. 【专栏精选】实战:动态配置图片

    本文节选自洪流学堂公众号技术专栏<大话Unity2019>,未经允许不可转载. 洪流学堂公众号回复专栏,查看更多专栏文章. 洪流学堂,让你快人几步.你好,我是郑洪智. 小新:"大 ...

  3. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理、区块链和爬虫技术的智能会议系统》软件系统案例的界面简介、功能介绍分享之二、会中智能

    AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理.区块链和爬虫技术的智能会议系统>软件系统案 ...

  4. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理、区块链和爬虫技术的智能会议系统》软件系统案例的界面简介、功能介绍分享之一、会前智能

    AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理.区块链和爬虫技术的智能会议系统>软件系统案 ...

  5. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理、区块链和爬虫技术的智能会议系统》软件系统案例的界面简介、功能介绍分享之总篇

    AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理.区块链和爬虫技术的智能会议系统>软件系统案 ...

  6. 【kratos入门实战教程】2-实现注册登陆业务

    1.系列目录 [kratos入门实战教程]0-商城项目介绍 [kratos入门实战教程]1-kratos项目搭建和开发环境配置 [kratos入门实战教程]2-实现注册登陆业务 2.概览 通过本篇文章 ...

  7. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之总篇

    AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理和区块链技术的乘客智能报警系统>案例的界面简 ...

  8. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之区块链技术

    AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理和区块链技术的乘客智能报警系统>案例的界面简 ...

  9. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之汽车驾驶乘客自动报警

    AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理和区块链技术的乘客智能报警系统>案例的界面简 ...

最新文章

  1. Arch linux
  2. 三国志、英雄无敌玩腻了?没关系,我教你开发个战旗游戏玩玩
  3. MySQL复制常见问题处理
  4. tems软件语音测试模板,测试软件使用-TEMS.ppt
  5. 使用客户端行为来丰富 ASP.NET 的 DataGrid
  6. oracle-01122,oracle ORA-01200ORA-01110ORA-01122
  7. 求解最长回文串 manachar算法
  8. centos7 aarch64 环境编译安装MP4Box
  9. 信息学奥赛一本通(C++版)在线评测系统 - 题解目录
  10. 读《天才在左,疯子在右》02--棋子
  11. 同比日期的获取(公历与农历)
  12. 【毕业季】在校生怎么看待毕业季?
  13. android activity_main.xml,Android Studio 打开activity_main.xml不能正常显示
  14. jSignature 插件实现手写电子签名
  15. c语言判断真假,C语言中的真假值
  16. 本科课程模糊综合评价系统设计与实现
  17. 年仅22岁的苹果视障工程师正在改变科技世界
  18. System.AccessViolationException:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
  19. MySQL DQL分组查询、条件查询、子查询
  20. 0.1 什么是计算机

热门文章

  1. java package 目录_修改jar包package目录结构操作方法
  2. html文档类型三种,XHTML DTD三种文件类型声明
  3. java response cookie_JavaWeb部分 (Response Cookie)
  4. java entry迭代,如何迭代Entry / BarEntry ArrayList并修改它们的值MPAndroid Chart
  5. linux kernel基本构成的内容有下列哪些项_Linux内核线程kernel thread详解
  6. .net+mysql关闭连接_asp.net连接mysql出现了远程主机强迫关闭了一个现有的连接。!!!...
  7. gcn 图卷积神经网络_GCN图卷积网络入门详解
  8. python1234出栈_Python数据结构与算法3——栈和队列
  9. C++实现复制文本粘贴文本功能
  10. 从Fedora CoreOS(Fedora35)到CentOS-Stream9的重构