【专栏精选】使用LeanCloud实现玩家登陆

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

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


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

小新:“今天我们是不是该学习登陆了?”
大智:“没错,不过登陆我不准备给你讲,你自己学,有啥问题再问我。”
小新:“好的吧,正好考验下我自己这么多天学习的成果。”

LeanCloud的登陆

大智:“开始写代码之前,你先思考下这个问题应该如何解决,基本步骤是什么?”
小新:“我觉得按照智哥这么久对我的熏陶来说,步骤大概是这样的”

  1. 阅读文档,登陆的文档在这里https://leancloud.cn/docs/rest_api.html#hash964666
  2. 按照文档写代码,先设计个简单的UI,然后写逻辑代码

大智:“嗯,不错不错,那就开干吧”

小新阅读完文档,打开Unity。

设计UI

小新:“这个UI和昨天的注册UI是差不多一样的呢”

大智:“不错,你这审美比我好不少呢,哈哈哈”

登陆的代码

using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LeanCloudLogin : MonoBehaviour
{
    public string AppId;
    public string AppKey;

    public InputField Username;
    public InputField Password;

    public void Login()
    {
        StartCoroutine(LoginCo());
    }

    IEnumerator LoginCo(){
        
        var jsonObj = new RegJson()
        {
            username = Username.text,
            password = Password.text
        };

        // 从文档获取的url
        var url = "https://5jmvfx9e.api.lncld.net/1.1/login";

        var json = JsonUtility.ToJson(jsonObj);
        Debug.Log(json);

        // 采用昨天大智讲的取巧的办法POST json数据
        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");


        yield return www.SendWebRequest();

        if (www.isHttpError || www.isNetworkError)
        {
            Debug.LogError(www.error);
            Debug.LogError(www.downloadHandler.text);
        }
        else{
            Debug.Log(www.downloadHandler.text);
        }
    }
}

小新:“大智,我这代码里用了你昨天说的取巧的办法来POST数据。”

得到如下结果,就说明登陆成功啦。
{"sessionToken":"cc5rvs6nj5u297m6tiso5b380","updatedAt":"2019-03-24T10:35:07.212Z","objectId":"5c975d5b42cda600722b942e","username":"test","createdAt":"2019-03-24T10:35:07.212Z","emailVerified":false,"mobilePhoneVerified":false}

优化代码

大智:“你有没有发现这里有很多地方的代码,和昨天的注册是重复的?”
小新:“确实是”
大智:“那你尝试下能不能把登录和注册合并到一起,让整个流程更符合正常游戏的流程,代码也能更简洁。”

优化UI

UI改成这样,就能注册和登陆一体了。

优化代码
using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class LeanCloudUser : MonoBehaviour
{
    public string AppId;
    public string AppKey;

    public InputField Username;
    public InputField Password;

    public void Reg()
    {
        StartCoroutine(UserCo("/users"));
    }

    public void Login(){
        StartCoroutine(UserCo("/login"));
    }

    IEnumerator UserCo(string path){
        
        var jsonObj = new RegJson()
        {
            username = Username.text,
            password = Password.text
        };

        var url = "https://5jmvfx9e.api.lncld.net/1.1" + path;

        var json = JsonUtility.ToJson(jsonObj);
        Debug.Log(json);
        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");


        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的路径提取了出来,这样就可以复用绝大多数代码了,你看怎么样?”
大智:“嗯,不错不错,架构的演进是随着需求来的,所以需要不断地重构代码才能保持代码的整洁。现在代码这样就足够了,但是加入需求以后,可能这就不是最优的代码结构了。”

思考题

大智:“你再想想还能如何抽象、封装,让这个代码复用程度更高呢?”
小新:“好嘞!”
大智:“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”

推荐阅读


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

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

https://edu.hongliu.cc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大智_Unity玩家

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值