Unity微信小游戏使用微信云开发记录

最近项目上架微信小游戏,首先使用了微信官方sdk转成微信小游戏,官方地址如下:

https://github.com/wechat-miniprogram/minigame-unity-webgl-transform

官方给了各种指导,虽然都有但是都不太精哈哈

因为要做排行榜,云存档,而我司没服务器,那只能用微信云开发了。具体开通啥的初始步骤我就不写了,网上很容易查到。先主要记录一下怎么使用微信云数据库、云函数,实现云存档。

首先,新建云函数微信工程,然后云数据库UserData用来保存用户存档数据。新建云函数setUserData,用来上传数据。

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

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

// 云函数入口函数
//上传用户存档数据
exports.main = async (event,context)  => {
   const wxContext = cloud.getWXContext();

   //查询用户是否已经保存过数据
   let _isHas = await gamedata.where({
       openid:wxContext.OPENID
   }).get();

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

接下来,可以直接在unity端调用微信api,调用云函数(ps:我也是后来才发现,本来还想着还得在微信端写js)

private void CallSetUserData(GameUserData gameUserData)
    {
        Debug.Log("CallSetUserData");
        WX.cloud.CallFunction(new CallFunctionParam()
        {
            name = "setUserData",
            //用户数据类转为json,测试时我试过传空串会导致云函数报错,原因不明,懂得大佬可以评论区教教我哈哈
            data = JsonUtility.ToJson(gameUserData),
            success = (res) =>
            {
                Debug.Log("CallSetUserData success");
                //Debug.Log(res.result);
            },
            fail = (res) =>
            {
                Debug.Log("fail");
                //Debug.Log(res.errMsg);
            },
            complete = (res) =>
            {
                Debug.Log("complete");
                //Debug.Log(res.result);
            }
        });
    }

同理,从云数据库获取用户数据,微信端:

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

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

// 云函数入口函数
//获取用户存档数据
exports.main = async (event,context)  => {
   const wxContext = cloud.getWXContext();

   //查询用户是否已经保存过数据
   let data = await gamedata.where({
       openid:wxContext.OPENID
   }).get();
   
   if(data.data.length==0){
    return{
        code:0
    };
   }
   else{
    return {
        data:data.data[0].gamedata
    };
   }
};

unity 端:

private void CallGetUserData()
    {
        //Debug.Log("CallGetUserData");
        var p = new C()
        {
            content = "haha"
        };
        WX.cloud.CallFunction(new CallFunctionParam()
        {
            name = "getUserData",
            //不填data,或填空串时,调用云函数失败,原因不明,大佬评论区教我哈哈
            data = JsonUtility.ToJson(p),
            success = (res) =>
            {
                //Debug.Log("CallGetUserData success");
                //Debug.Log(res);
                //云数据保存到本地
                var data = JsonMapper.ToObject(res.result);
                if (data.ContainsKey("data"))
                {
                    var gamedata = data["data"];
                }
                else
                {
                    //数据库无数据
                }
                //Debug.Log("转换json数据:" + userData);
            },
            fail = (res) =>
            {
                //Debug.Log("fail");
                //Debug.Log(res.errMsg);
                //没有云存档,或获取云存档失败
            },
            complete = (res) =>
            {
                //Debug.Log("complete");
                //Debug.Log(res.result);
            }
        });
    }

ok,以上就是我的踩坑记录,希望能够帮到你,欢迎点赞评论关注~

js代码严重参考微信官方B站视频,很有用:5-4 储存游戏数据_哔哩哔哩_bilibili

后续开发完排行榜,如果记得我也会继续更新一篇文章,感兴趣的小伙伴可以关注一波~

猜你喜欢

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