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