Unity3D 转换微信小游戏指引 03 微信SDK

Unity3D 转换微信小游戏指引系列(第三期)

微信SDK

初始化

首先,进行 SDK 初始化,需要引用命名空间 using WeChatWASM,调用 WX.InitSDK,在回调函数中进行游戏主逻辑的初始化。

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 接口,有一些是会报错的,需要加上宏定义。

测试的时候需要打包出来,在微信小游戏环境中运行。

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

// WebGL 环境
#if UNITY_WEBGL
        WX.InitSDK((int code)=>
        {
            Debug.Log("微信 SDK 初始化");
            GameInit();
        });
#endif

#endif
    }

    void GameInit()
    {
        Debug.Log("游戏主逻辑初始化");
    }
}

监听切前台或后台事件

切前台事件使用 OnShow 监听,切后台事件使用 OnHide 监听,只需要绑定一次监听事件。

具体返回的参数 result 可以看接口的注释。

// WebGL 环境
#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),有成功、失败、完成三个回调。

// WebGL 环境
#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 列表)。

// WebGL 环境
#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 可以弹出一个消息提示框,没有按钮。

// WebGL 环境
#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

模态对话框

模态对话框

消息提示框

消息提示框

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/797761.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

0708,LINUX目录相关操作 + LINUX全导图

主要是冷气太足感冒了,加上少吃药抗药性差,全天昏迷,学傻了学傻了 01:简介 02: VIM编辑器 04:目录 05:文件 03:常用命令 06:进程 07:进程间的通信 cat t_c…

Keil出现警告:warning: #223-D: function “XXX“ declared implicitly

1、警告 \SYSTEMwarning: #223-D: function “FLASH_SetLatency” declared implicitly 2、原因 文件涉及调用stm32f10x_flash.h里的函数,但文件没有包含stm32f10x_flash.h 3、解决 1、点击魔法棒-》c/c》include paths-》包含头文件所在路径 2、直接在报错的文…

LeetCode 441, 57, 79

目录 441. 排列硬币题目链接标签思路代码 57. 插入区间题目链接标签思路两个区间的情况对每个区间的处理最终的处理 代码 79. 单词搜索题目链接标签原理思路代码 优化思路代码 441. 排列硬币 题目链接 441. 排列硬币 标签 数学 二分查找 思路 由于本题所返回的 答案在区间…

Qt中https的使用,报错TLS initialization failed和不能打开ssl.lib问题解决

前言 在现代应用程序中,安全地传输数据变得越来越重要。Qt提供了一套完整的网络API来支持HTTP和HTTPS通信。然而,在实际开发过程中,开发者可能会遇到SSL相关的错误,例如“TLS initialization failed”,cantt open ssl…

春招冲刺百题计划|双指针

Java基础复习 Java数组的声明与初始化Java ArrayListJava HashMapJava String 类Java LinkedListJava Deque继承LinkedListJava SetJava 队列优先队列:第二题用到了Java数组划分Java数组转ArrayListString 转数字String 这一部分,代码随想录写得超级好&#xff01…

LabVIEW阀门运动PCT测试

开发了一套基于LabVIEW的阀门运动PCT(Pressure-Composition-Temperature)测试方法。该系统通过控制阀门运动,实现对氢气吸附和解吸过程的精确测量和控制。所用硬件包括NI cDAQ-9174数据采集模块、Omega PX309压力传感器、SMC ITV2030电动调节…

【java算法专场】滑动窗口(下)

目录 水果成篮 算法分析 算法步骤 示例 算法代码 找到字符串中所有字母异位词 算法分析 算法步骤 示例 算法代码 优化 算法代码 串联所有单词的子串 算法分析 算法步骤 示例 算法代码 最小覆盖子串 算法分析 算法步骤 示例 算法代码 算法分析 这道题其实…

Python数据分析案例52——基于SSA-LSTM的风速预测(麻雀优化)

案例背景 又要开始更新时间序列水论文的系列的方法了,前面基于各种不同神经网络层,还有注意力机制做了一些缝合模型。 其实论文里面用的多的可能是优化算法和模态分解,这两个我还没出专门的例子,这几天正好出一个优化算法的例子来…

go-高效处理应用程序数据

一、背景 大型的应用程序为了后期的排障、运营等,会将一些请求、日志、性能指标等数据保存到存储系统中。为了满足这些需求,我们需要进行数据采集,将数据高效的传输到存储系统 二、问题 采集服务仅仅针对某个需求开发,需要修改…

树莓派pico入坑笔记,esp01/01s使用

目录 关于树莓派pico和circuitpython的更多玩法,请看树莓派pico专栏 说明 关于at指令 WiFi的at指令 UDP的at指令 样例程序 调试助手端输入指令 sta端程序 效果 进阶使用 库函数说明 样例代码 关于树莓派pico和circuitpython的更多玩法,请看树…

TensorFlow系列:第四讲:MobileNetV2实战

一. 加载数据集 编写工具类,实现数据集的加载 import keras""" 加载数据集工具类 """class DatasetLoader:def __init__(self, path_url, image_size(224, 224), batch_size32, class_modecategorical):self.path_url path_urlself…

H5的Canvas如何画N叉树数据结构

大家好。我是猿码叔叔,一位有着 5 年Java工作经验的北漂,业余时间喜欢瞎捣鼓,学习一些新东西来丰富自己。看过上一篇 Java 方法调用关系的老铁们,也许遗留了不少疑问,这Java方法调用关系可视化页面就这?这方…

护网HW面试——redis利用方式即复现

参考:https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法,讲到ssrf那么就会讲到配合打内网的redis,本篇就介绍redis的打法。 未授权 原理: Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关…

基于SpringBoot的校园志愿者管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:SpringBoot框架 工具:MyEclipse、Tomcat 系统展示 首页 个人中心 志愿者管理 活动信息…

黑马头条微服务学习day01-环境搭建、SpringCloud微服务(注册发现、网关)

文章目录 项目介绍环境搭建项目背景业务功能技术栈说明 nacos服务器环境准备nacos安装 初始工程搭建环境准备主体结构 app登录需求分析表结构分析手动加密微服务搭建接口定义功能实现登录功能实现 Swagger使用app端网关nginx配置 项目介绍 环境搭建 项目背景 业务功能 技术栈说…

数据结构(Java):树二叉树

目录 1、树型结构 1.1 树的概念 1.2 如何判断树与非树 1.3 树的相关概念 1.4 树的表示形式 1.4.1 孩子兄弟表示法 2、二叉树 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储 2.5 二叉树的遍历 1、树型结构 1.1 树的概念 树型结构是一种非线…

MySQL复合查询(重点)

前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。 基本查询回顾 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J mysql> select * from emp where (sal>500 or jobMANAGER) and ename l…

数据湖仓一体(一) 编译hudi

目录 一、大数据组件版本信息 二、数据湖仓架构 三、数据湖仓组件部署规划 四、编译hudi 一、大数据组件版本信息 hudi-0.14.1zookeeper-3.5.7seatunnel-2.3.4kafka_2.12-3.5.2hadoop-3.3.5mysql-5.7.28apache-hive-3.1.3spark-3.3.1flink-1.17.2apache-dolphinscheduler-3.1.9…

[Vulnhub] Sedna BuilderEngine-CMS+Kernel权限提升

信息收集 IP AddressOpening Ports192.168.8.104TCP:22, 53, 80, 110, 111, 139, 143, 445, 993, 995, 8080, 55679 $ nmap -p- 192.168.8.104 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 …