Unity3D 转换微信小游戏指引系列(第三期)
微信SDK
初始化
首先,进行 SDK 初始化,需要引用命名空间 using WeChatWASM
,调用 WX.InitSDK
,在回调函数中进行游戏主逻辑的初始化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| using System.Collections; using System.Collections.Generic; using UnityEngine; using WeChatWASM;
public class WXDemo : MonoBehaviour { void Start() { WX.InitSDK((int code)=> { Debug.Log("微信 SDK 初始化"); GameInit(); }); }
void GameInit() { Debug.Log("游戏主逻辑初始化"); } }
|
运行之后,会发现控制台打印了黄色警告。

在 Unity 编辑器中调用微信 SDK 接口,有一些是会报错的,需要加上宏定义。
测试的时候需要打包出来,在微信小游戏环境中运行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| using System.Collections; using System.Collections.Generic; using UnityEngine;
#if UNITY_WEBGL using WeChatWASM; #endif
public class WXDemo : MonoBehaviour { void Start() {
#if UNITY_EDITOR GameInit(); #else
#if UNITY_WEBGL WX.InitSDK((int code)=> { Debug.Log("微信 SDK 初始化"); GameInit(); }); #endif
#endif }
void GameInit() { Debug.Log("游戏主逻辑初始化"); } }
|
监听切前台或后台事件
切前台事件使用 OnShow
监听,切后台事件使用 OnHide
监听,只需要绑定一次监听事件。
具体返回的参数 result 可以看接口的注释。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #if UNITY_WEBGL WX.InitSDK((int code)=> { Debug.Log("微信 SDK 初始化"); GameInit(); });
WX.OnShow((OnShowListenerResult result)=> { Debug.Log("微信切前台事件"); });
WX.OnHide((GeneralCallbackResult result)=> { Debug.Log("微信切后台事件"); }); #endif
|
获取系统参数
获取运行时系统的信息,例如获取系统平台(android 或 ios),有成功、失败、完成三个回调。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #if UNITY_WEBGL WX.GetSystemInfo(new GetSystemInfoOption { success = (systemInfo)=> { Debug.Log($"系统平台 {systemInfo.platform}"); }, fail = (generalCallbackResult)=> { Debug.Log($"获取系统信息失败,错误信息 {generalCallbackResult.errMsg}"); }, complete = (generalCallbackResult)=> { Debug.Log($"获取系统信息完成,是否有错误信息 {generalCallbackResult.errMsg}"); } }); #endif
|
询问用户授权
询问用户是否授权用户信息,先通过 WX.GetSetting
获取用户的当前设置,判断是否授权过。
若没有授权,再调用 WX.Authorize
发起授权弹窗询问,填写 scope 的参数(具体填什么参数可以参考 scope 列表)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #if UNITY_WEBGL WX.GetSetting(new GetSettingOption { success = (res)=> { bool hasUserInfo = res.authSetting.ContainsKey("scope.userInfo"); if (hasUserInfo) { Debug.Log("用户已经接受过授权了"); } else { WX.Authorize(new AuthorizeOption { scope = "scope.userInfo", success = (generalCallbackResult)=> { Debug.Log($"获取授权成功,是否有错误信息 {generalCallbackResult.errMsg}"); }, fail = (generalCallbackResult)=> { Debug.Log($"获取授权失败,错误信息 {generalCallbackResult.errMsg}"); }, complete = (generalCallbackResult)=> { Debug.Log($"获取授权完成,是否有错误信息 {generalCallbackResult.errMsg}"); } }); } }, fail = (generalCallbackResult)=> { Debug.Log($"获取用户的当前设置失败,错误信息 {generalCallbackResult.errMsg}"); }, complete = (generalCallbackResult)=> { Debug.Log($"获取用户的当前设置完成,是否有错误信息 {generalCallbackResult.errMsg}"); } }); #endif
|
注:这里需要注意,如果代码里有调用授权接口,就需要到小程序官网,找到设置->基本设置->服务内容声明,填写用户隐私保护指引。
如果在指定期限内没有填写,小游戏的部分功能会被限制使用。
提示框
WX.ShowModal
可以弹出一个模态对话框,附带一个确定和一个取消按钮。
WX.ShowToast
可以弹出一个消息提示框,没有按钮。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #if UNITY_WEBGL WX.ShowModal(new ShowModalOption { title = "标题", content = "模态对话框", success = (res)=> { if (res.confirm) { Debug.Log("点击了确定按钮"); WX.ShowToast(new ShowToastOption { title = "消息提示框" }); } else if (res.cancel) { Debug.Log("点击了取消按钮"); } } }); #endif
|
模态对话框

消息提示框
