Unity微信小游戏使用微信云开发排行榜

上一篇文章,给大家分享了云开发存档的功能。今天分享一下怎么做排行榜

这里的排行榜指的是,地区排行榜,按照玩家选择的省份,上传分数,进行省份之间的排行。好友排行榜的话,网上资料还是不少的,如果大家需要我可以再更新一篇讲好友排行榜做法

可能今天讲的比较简单,看不懂的同学可以结合我上一篇文章看看

一、获得排行榜数据

首先是微信云函数:

// 云函数入口文件
const cloud = require('wx-server-sdk');
cloud.init({env:cloud.DYNAMIC_CURRENT_ENV});

//获取数据库的引用
const db = cloud.database();
const rankdata = db.collection('Ranking');

// 云函数入口函数
//获取排行榜所有数据
exports.main = async (event,context)  => {
   //const wxContext = cloud.getWXContext();

   let data = await rankdata.get();
   
   if(data.data.length==0){
    return{
        code:0
    };
   }
   else{
    return {
        data:data.data
    };
   }
};

云函数部署完毕后,unity端即可直接调用,这里只贴上获得数据的函数,拿到数据后再显示出来就行了:

public void CallGetAreaRank(Action<List<RankData>> callback)
    {
        List<RankData> rankDatas = null;
        //Debug.Log("CallGetRank");
        var p = new C()
        {
            content = "haha"
        };
        //Debug.Log(JsonUtility.ToJson(p));
        WX.cloud.CallFunction(new CallFunctionParam()
        {
            name = "getRank",
            data = JsonUtility.ToJson(p),
            success = (res) =>
            {
                //Debug.Log("success");
                //Debug.Log(res.result);

                var data = JsonMapper.ToObject(res.result);
                if (data.ContainsKey("data"))
                {
                    var gamedata = data["data"];
                    rankDatas = JsonMapper.ToObject<List<RankData>>(new JsonReader(gamedata.ToJson()));
                }
                else
                {

                }
                callback?.Invoke(rankDatas);
            },
            fail = (res) =>
            {
                //Debug.Log("fail");
                //Debug.Log(res.errMsg);
            },
            complete = (res) =>
            {
                //Debug.Log("complete");
                //Debug.Log(res.result);
            }
        });
    }

二、设置排行榜数据

微信云函数:

exports.main = async (event,context)  => {
    const _ = db.command
    //查询用户是否已经保存过数据
   let _isHas = await rankData.where({
    area:event.content,
}).get();

//如果没有,首次保存
    if(_isHas.data.length==0){
    let _isAdd = null;
    let addData = {
        area:event.content,
        score:1,//event.gamedata unity调用直接读event
    }
    _isadd = await rankData.add({
        data:addData
    })
    return{
        code:0,
        res:_isadd,
        data:addData,
    };
    }
    //如果有数据,则更新
    else{
    return await rankData.where({
        area:event.content
    }).update({
        data:{
            area:event.content,
            score:_.inc(1),//数据自增1
        }
    })
    }
};

unity端调用:

public void CallSetAreaRank()
    {
        //Debug.Log("CallSetRank");
        string userProvince = "省份";
        var p = new C()
        {
            content = userProvince
        };

        //Debug.Log(JsonUtility.ToJson(p));
        WX.cloud.CallFunction(new CallFunctionParam()
        {
            name = "setRankData",
            data = JsonUtility.ToJson(p),
            success = (res) =>
            {
                Debug.Log("success");
                Debug.Log(res.result);

            },
            fail = (res) =>
            {
                Debug.Log("fail");
                Debug.Log(res.errMsg);
            },
            complete = (res) =>
            {
                Debug.Log("complete");
                Debug.Log(res.result);
            }
        });
    }

好了,这次的分享就到这里了,主要难点就是云函数对数据库的操作,unity端只需要调用云函数获得数据进行显示就行了。

如果对你有帮助,欢迎点赞关注评论哦,有写的不对的地方欢迎指正,欢迎讨论

猜你喜欢

转载自blog.csdn.net/qq_41980763/article/details/128316963