Unity微信小游戏接入坑点总结

前言

        现在我又接入微信平台,当然我遇到了不少问题,因此写篇文章总结一下。本文遇到的问题可能仅适用于个人所使用的环境。如果后面我又遇到新的问题就再更新这篇文章。

环境

    Window11
    Unity 2022.3.62f1c1
    Universal RP 14.0.12
    微信开发者工具:2.02.2608070 Stable
    微信小游戏转换插件管理版本:202609161205
    调试基础库:3.17.3

正文

未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译

        在我打包出小游戏是时候,我发现了一个问题。微信开发者工具编译失败了,并报了一个错误:未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。我发现这个问题已经有人遇到过了,所以我参考了网络上的文章。文章上大体意思就是你后台配置的小程序类型错了。你需要将小程序类型修改为游戏 > 休闲游戏。但是我修改后,再重新打包了一次才可以正常运行。

[PLUGIN ERROR] innerInstantiate: WXWebAssembly.instantiate failed

        这是一个插件错误,完整的错误如下:

1
[PLUGIN ERROR]  innerInstantiate: WXWebAssembly.instantiate failed, wasmFilePath= wasmcode/1a0b62a605bcca51.webgl.wasm.code.unityweb.wasm.br error= Error: Error: read plugin file empty

这是问题就是你缺少了插件。本来在这种报错之后有一个点击链接,你只要点击后就会自动补齐缺失的插件。但是我不知道为什么Layout并不会自动补齐。你可以点击开放数据域渲染库的链接进行手动添加后重启开发者工具。

        或者你打开项目根目录下的 game.json 文件,检查 plugins 字段。如果发现有 Layout 相关的插件配置,直接删除该配置,然后清理微信开发者工具缓存并重新编译。

        如果这些都不能帮助你解决问题,那你只能去搜索game.json 文件中plugins 字段下所有插件分别代表什么。移除你不需要插件,或者是像开放数据域渲染库的链接一样手动添加后重启开发者工具。

SDK初始化失败

        一开始我用deepseek生成sdk初始化的代码,我发现它认为一定要返回值为0才算成功。但是实际上sdk返回值必定为200。至少我看源码的时候发现它是这样写的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void InitSDK(Action<int> callback)
{
if (n())
{
OpenProfileStats();
}

cu = true;
cV = callback;
E(Application.unityVersion);
}

private void E(string P_0)
{
cV(200);
}

我本来是想查一下微信文档查询这个值到底代表什么,但是我并没有在微信的开发文档找到对应的说明。

WAGame.js:1 getUserInfo:fail please go to mp to announce your privacy usage

        please go to mp to announce your privacy usage 直译就是“请前往MP(微信公众平台)声明你的隐私用途”。我在网络上有找到对应的文章,说明了这个问题。同时我也找到了微信官方公告说自2023年起,微信要求所有调用涉及用户个人信息的接口前,必须在后台完成隐私协议的声明与配置。所以只要我们在微信小程序后台配置完成就可以解决这个问题。

真机调试失败

        在我使用真机调试的时候,工具提示我上传失败。报错如下:

1
2
3
4
5
6
message:真机调试 Error: 上传失败:网络请求错误, (async upload fail Error: 系统错误,错误码:80051,source size 33310KB exceed max limit 30MB [20260929 14:33:29]) 系统错误,错误码:80051,source size 33310KB exceed max limit 30MB [20260929 14:33:32]
appid: xxxx
openid: xxxx
ideVersion: 2.02.2608070
osType: win32-x64
time: 2026-09-29 14:33:39

这个报错的意思就是我项目太大了,超过上传的限制。解决方案就是在微信开发者工具中,点击详情按钮,然后在本地设置中,找到预览及真机调试...将其勾选上。这个名称是会变化的,在我查看的文章中,这里是4M,但是现在则是8M。

如果勾选后仍然不能进行真机调试,则你的项目太大了。可能要考虑到将项目的资源或者代码进行用热更的方式加载。

微信闪屏问题

        在封面图加载完成后,屏幕上还会触发一个奇怪的画面,看起来像是闪屏了。如下图所示:

        解决方案是将微信sdk中的HideAfterCallMain设置为false。这个选项在更多配置项中的Project Conf下。

关于微信分享消息的问题

        微信的分享是没有成功后的回调,所以我们基本没办法知道是否分享成功了。但是我们有时候策划确实又需要让玩家分享成功后再发放奖励。实际上,以现在的SDK提供的函数,我们是无法做到的。我们只能通过猜测的方法来预测玩家大概率是正常分享了。我找到解决方案如下:

        在玩家触发分享的时候,我们记录下一个开始分享的时间信息。此时微信会调用分享界面,而小游戏会被移到后台。当小游戏重新回到前台时会触发SDK的onShow函数。我们在这个回调中获取到玩家回来的时间。如果在合理的时间之内,则认为是分享成功了。我将其设置为2.5秒左右。当然这仍然无法知道玩家是否点击了分享,但是添加了这个逻辑后,对于不知情的玩家而言或许能欺骗到他们。

        在我自己测试其他厂商的小游戏时,我发现他们似乎是真的可以检测是否分享成功了。我去网上搜索得到的答案是有些第三方的SDK是可以提供的。但是我并没有去寻找这第三方的SDK。

在开发者工具中使用OnShow函数导致报错

        如果你按照我上面的方案进行分享,你在开发者工具中会得到以下报错:

1
WAGame.js:1 [JsonMapper] ToObject<T>(string) Error, object type: WeChatWASM.OnShowListenerResult, json: {"scene":null,"query":{},"shareTicket":"","referrerInfo":{"appId":"","extraData":{}},"chatType":0}

这个报错是由OnShow函数引起的。这是因为在开发者工具下使用分享"scene":null,这里scene是一个空值,而在csharp代码中scene是double类,不能为空。

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

public class OnShowListenerResult
{
//
// 摘要:
// 查询参数
public Dictionary<string, string> query;

//
// 摘要:
// 当场景为由从另一个小程序或公众号或App打开时,返回此字段
public ResultReferrerInfo referrerInfo;

//
// 摘要:
// 场景值
public double scene;

//
// 摘要:
// 从微信群聊/单聊打开小程序时,chatType 表示具体微信群聊/单聊类型 可选值: - 1: 微信联系人单聊; - 2: 企业微信联系人单聊; - 3:
// 普通微信群聊; - 4: 企业微信互通群聊;
public double? chatType;

//
// 摘要:
// shareTicket
public string shareTicket;
}

所以才有这个报错。我在真机调试下测试了一下,这值都是正常的。

参考文章

闲言碎语

        我每次接新平台都有莫名其妙的问题。我希望平台出一个一键式傻瓜操作。不过我也知道这样的方式在工程上也是很困难的。总之,我这事情终于到了一个段落。这也算是“可喜可贺”。