Unity开发微信小游戏完整流程,从Unity版本选择,到服务器开发,最后到小游戏的发布,所有流程都会详细介绍,包括一些注意事项和问题解决。
准备工作:
Unity版本选择问题
如果使用Unity团结引擎,那么可以直接进行开发(团结引擎版本,打包出去后小游戏右下角有水印,如果能接受就无所谓了),如果不使用团结引擎的话,Unity的版本选择2021版,22版本URP项目导出的小游戏会报Shader错误
Unity微信工具下载
地址:https://game.weixin.qq.com/cgi-bin/gamewxagwasmsplitwap/getunityplugininfo?download=1
云服务器和CDN(如果有云服务器和CDN需求,先备案域名!!!)
提前说明,工信部域名备案审核需要20天!!!,所以有需求的话,先把域名备案了。
云服务器网上一搜一大推,看自己选择,我使用的是华为云,以下所有服务器配置之类的都是基于华为云,别的大差不大,也可以借鉴。!
UnityWebSocket(没有后端需求可以忽略)
地址:UnityWebSocket: UnityWebSocket
因为微信小游戏仅支持wss://方式链接后端,所以需要使用UnityWebSocket
微信公众平台注册和微信开发者工具下载
链接:微信公众平台
注册账号相关信息,下载微信开发工具
Unity开发:
先导入准备工作中下载的Unity微信工具,和UnityWebSocket(没有后端需求可以忽略)。
UnityWebSocket导入时,会有一个案例,可以看看,很简单的
注意事项
第一,项目中不要使用多线程相关,不支持,可以使用Unity的协同程序或者异步函数
第二,文件系统System.IO不支持,需要使用微信SDK的文件系统,本地只读文件可以使用Resources.lod加载,Json读取数据,或者可以直接使用ScriptableObject。(这里有一点就是,导入Unity微信工具后,这个插件里面自带LitJson)
第三,System.Net不支持,改为UnityWebSocket(也支持UnityWebRequest)
第四,所有客户端能用到的URL都需要在微信公众平台-开发管理-服务器域名里面进行填写,
包括下载头像(填写一级域名即可),如果域名后有端口号,那就把端口号也一起写上
第五,微信小游戏也是需要备案的,和域名备案的时间差不多,也是20天左右。如果手里有美术设计图之类的,可以提前备案。微信公众平台-左下角-账号设置-小程序备案。
微信文件系统API使用
微信文件系统:FileSystemManager | 微信开放文档
//创建全局唯一文件管理器
public static WXFileSystemManager WXFileManager = new WXFileSystemManager();
//微信提供的一个可以让用户读写的根目录
private string rootPath = WX.env.USER_DATA_PATH;
//这里举一个例子,是我存储音乐和音效声音大小到本地的方法
private string SettingData = "Setting.xxl";
private string fileName = "/Setting";
public void GetMusicSoundVolume_WX(out float music, out float sound)
{
byte[] bytes = new byte[8];
//判断文件夹/或者文件是否存。如果存在,返回"access:ok"
if (WXFileManager.AccessSync(rootPath + fileName) != "access:ok")
{
//mkdirParam 是一个结构体,用于定义创建目录时所需的参数
MkdirParam mkdirParam = new MkdirParam();
//fileName为自定义文件夹名 注意:前面必须加@符号,不然无法创建目录
mkdirParam.dirPath = rootPath + @fileName;
//recursive MkdirParam 只能创建单一层级的目录,如果你需要创建多层级的目录(即递归创建目录),则需要设置recursive = trur
mkdirParam.recursive = true;
//创建目录
WXFileManager.Mkdir(mkdirParam);
music = sound = 1f;
BitConverter.GetBytes(music).CopyTo(bytes, 0);
BitConverter.GetBytes(sound).CopyTo(bytes, 4);
//写入文件
WXFileManager.WriteFileSync(rootPath+ fileName+ "/"+ SettingData, bytes);
}
else
{
//如果文件存在,直接读取就行
bytes = WXFileManager.ReadFileSync(rootPath + fileName + "/" + SettingData);
music = BitConverter.ToSingle(bytes, 0);
sound = BitConverter.ToSingle(bytes, 4);
}
}
获取自己的微信信息(名称、头像)
注:先到微信公众平台-左下角小程序名称-账号设置 找到服务内容说明
把这两个设置了
Unity中创建个界面,就是UI登录界面,加个开始按钮,自己随意设置,按钮点击事件绑定函数StartGame
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using WeChatWASM;
public class LoaderTest : MonoBehaviour
{
/// <summary>
/// 用户信息
/// 获取到用户信息后可根据需要存云端或本地持久存储
/// </summary>
public WXUserInfo userInfo;
/// <summary>
/// 是否获取用户信息
/// </summary>
private bool infoFlag = false;
/// <summary>
/// 头像材质
/// </summary>
public Texture2D avatarTexture;
// Start is called before the first frame update
void Start()
{
// 初始化微信SDK
WX.InitSDK((code) =>
{
Debug.Log("init WXSDK code: " + code);
// 加载用户信息
this.LoaderWXMess();
});
}
/// <summary>
/// 加载微信授权相关信息
/// </summary>
private void LoaderWXMess()
{
// 1. 询问隐私协议授权情况
WX.GetPrivacySetting(new GetPrivacySettingOption()
{
success = (res) =>
{
/**
* needAuthorization - 含义
* 是否需要用户授权隐私协议(如果开发者没有在[mp后台-设置-服务内容声明-用户隐私保护指引]中声明隐私收集类型则会返回false;
* 如果开发者声明了隐私收集,且用户之前同意过隐私协议则会返回false;
* 如果开发者声明了隐私收集,且用户还没同意过则返回true;
* 如果用户之前同意过、但后来小程序又新增了隐私收集类型也会返回true)
*/
// 询问成功
if (res.needAuthorization)
{
// 有隐私协议,且未授权
// 2. 发起隐私协议授权
// 弹出隐私协议询问弹窗
WX.RequirePrivacyAuthorize(new RequirePrivacyAuthorizeOption()
{
success = (res) =>
{
Debug.Log("同意隐私协议:" + JsonUtility