Version: 1.7
语言 : 中文
Memory Profiler 模块增强
小游戏构建配置

FAQ

AutoStreaming 相关:

  1. 游戏刚启动,弹框提示:“No scene found! Please add at least one scene to build settings.”
    • 当 Build Settings 里面的 Scene 列表为空时,Autostreaming 不会自动打包当前打开的场景,请确认项目的 Build Settings -> Scene 列表是否为空。
  2. 游戏启动后,部分或全部纹理不变清晰,并且 log 中有大量404 的下载报错。
    • 开启 AutoStreaming 后,如果游戏用到了某个 Streaming 的资源,但 UOS CDN 服务器上没有,则会出现这种情况。请检查 TextureStreaming 页面是否有点生成 AB,或者 Library 目录下 AutoStreamingCache 文件夹是否有被删除。重新生成 AutoStreaming 的 AB 后,请重新打包游戏。
    • Scene 和 Texture 的 AutoStreaming 文件会在上传前计算 hash 并保存在首包中,打包前请先确认 AutoStreaming 页面的 Texture Streaming -> Generate AssetBundles 和 Scene Streaming -> Generate ABs 操作已执行
    • 小游戏首包内的资源hash文件增量打包时未及时更新,打包时请勾选clean build选项
  3. 游戏内有从 AB 和 Resources 文件夹加载资源的逻辑,做了 streaming 后该如何加载?
    • 对于 AudioClip、Mesh 和 AnimationClip 资源,AutoStreaming 仅抽取了其中的重度数据,Asset 对象依旧存在,因此可以按照原来的逻辑加载 AB 和 Resources 内的 Asset。
    • 但做了 streaming 之后,Asset 内的数据不可立即访问,例如 Mesh.verticesTexture2D.GetPixels()Texture2D.GetWidth()AudioClip.LoadAudioData()等接口的调用可能会返回 null 或者不正确的结果。
  4. 使用 AutoStreaming 后,spine 的 2D 动画出错

    • 如使用了旧版 spine 插件的工程,所有 spine 图集必须勾选 BlurPlaceholder,否则会出现显示错误;因此推荐将 spine 插件升级到 3.7.xx(2019–05–06) 及以后的版本
  5. 上传文件到 UOS 时,错误日志显示有部分文件上传失败了。

    • 当遇到网络波动,或者上传文件过多超时的情况,上传可能失败。 只需要在 Window -> AutoStreaming -> Cfg&Publish 页面,重新点 Upload to UOS CDN 按钮即可,上传操作会从上一次失败的位置继续。
  6. 如果不小心覆盖了 UOS CDN 上的版本怎么办?

    • 如果操作失误,上传文件到 UOS CDN 时覆盖了已有版本 badge,请前往 UOS CDN 网站,根据时间从 Release 中找到,被覆盖的版本,将 Badge 标签设置回来。
  7. 如何查看某个下载链接对应的原始资源

    • 从下载链接中获取到 abas 文件名,然后按照Auto Streaming 用法页面,反向查找原资源小节所述找到abas文件对应的原资源。
  8. 找不到 ConvertLegacySpritePacker 按钮

    • 当项目的 Play Settings -> Editor -> Sprite Packer -> Mode 为 Enable For Build (Legacy Sprite Packer)Always Enable(Legacy Sprite Packer) 时,Instant Game 界面才会显示 ConvertLegacySpritePacker 按钮。

小游戏运行相关:

  1. 游戏首次进入下载并存储的文件在第二次打开时不见了

    • 微信小游戏不支持 WebGL 默认的 indexDB 文件存储,因此通过 C# API 存储的文件只会临时存在于内存当中,而不会持久化到手机存储中,退出游戏后即清理。需要持久保存文件,请使用微信 SDK 提供的文件接口。
  2. 小游戏需要本地存档,该如何保存

    • 小游戏存档建议保存在服务器,避免丢失。本地存档请文件使用微信 SDK 提供的文件接口保存,也可以通过 PlayerPrefs 保存。
  3. 小游戏在手机上运行时,无法进入游戏,报资源下载失败,404的错误

    • 微信小游戏访问网络需要设置白名单,请点开手机右上角三个小点,找到并打开 “开发调试 -> 打开调试”;

    • 或者扫码登录微信小程序网页后,前往 “开发管理 -> 开发设置 -> 服务器域名”,在 request 合法域名 和 downloadFile 合法域名 中填写用到的域名。(可参考快速上手第20步)

  4. 点击游戏的输入框,不弹出虚拟键盘,无法输入 *团结1.3.4版本已修复该问题。 更早的版本中可通过WeixinMiniGameInput.mobileKeyboardSupport 用于控制点击输入框时是否弹出输入法,建议使用时打开,使用结束后关闭,避免性能问题,默认开启。

  5. 小游戏启动时,遇到报错 Browser.mainLoop.scheduler is not a function
    • callmain运行中出了异常,导致setMainLoop没有调用,Browser.mainLoop.scheduler是空的,在下一帧报错了,而callmain里的异常没有打印出来,造成报的错和实际出问题的地方没有关联,又缺少信息,开发者容易被迷惑。
    • 例如首场景Awake函数中,会调用到用户js代码,js代码中出了异常。 callmain里的这个异常没有打印出来,原因是Emscripten的一个瑕疵,Emscripten catch了这个异常,却没有log异常。Emscripten设计在这里catch一个无害异常,导致有害异常无法正常log。 解决方法是修改framework.js里callmain函数,把捕获到的异常打印出来。unwind异常是正常的,而其它异常是有问题的。
  6. 小游戏启动后,出现花屏或黑屏问题

    • 如果是只在iOS设备出现,并且游戏卡住,请检查设备的系统版本,SIMD(iOS 16.4),webGL 2.0(15.4)需要较高版本的系统才能支持。开启微信小游戏的高性能模式后可以在iOS 15.0及以上的版本中使用webGL 2.0
    • 如果在微信开发者工具中显示正常,但在移动设备上显示花屏。请检查是否有纹理压缩格式为DXT格式,并且在团结引擎的引擎代码剔除中将DecompressDXT设置为了ForceStrip
    • 如果微信开发者工具和真机设备均出现部分区域花屏,并且项目使用了URP管线和后处理,请升级最新版本的团结引擎。

小游戏打包相关:

  1. 导出微信小游戏时,报错 “Error building Player: Incompatible color space with the graphics API”
    • linear color space 需要 webgl 2.0 才支持。 项目使用了 webgl 2.0, 因此需要在微信小游戏转换页面也勾选上 webgl 2.0 选项。
  2. 小游戏打包后 Shader 报错 shader compiler 9/5 is not available in shader blob

  3. 微信小游戏打包页面和工程 Player setting 里面都有 webgl 1.0/ 2.0 的设置,打包前,playersetings 内的设置会被微信 SDK 修改。但如果 Shader 是在此之前打包进 AB 的,则项目实际使用的图形 API 和 AB 中 Shader 的图形 API 不一致。 先确认两处 webgl1.0/2.0 设置正确,然后重新打包所有 AB,并重新打包小游戏

  4. 团结引擎打包的 webgl.data 无法用 AssetStudio 打开查看首包详情

    • 我们在小游戏 QQ 交流群里面提供了一个 ExtractUnityWebdata 工具,配合引擎 Editor 中自带的 WebExtract 和 Binary2Text 可以将资源 webgl.data 文件解开。
    • 另外 Github 上已经有开发者修改了 AssetStudio 代码,支持了团结引擎 https://github.com/SiMaLaoShi/AssetStudio_Tuanjie
  5. 打包 AB 关闭了 TypeTree 后,在 Editor 中加载 AB 运行时,Editor 经常崩溃或者报错

    • Editor PlayMode 中加载 AB 运行时,如果打包 AB 时禁用了 typetree,并且 AB 中包含以下形式的 monobehaviour,将导致 editor 发生崩溃,无法从引擎层避免:
    //问题示例monobehaviour脚本
    using UnityEngine;
    public class CrashDemo : MonoBehaviour
    {
        public int speed;
    #if UNITY_EDITOR
        //该序列化属性在AB中不存在,因此会导致Editor crash
        public bool time; 
    #endif
        
        // Start is called before the first frame update
        void Start()
        ...
    }
    
  6. 使用 AssetBundleBuild 方式打包 AB 时,报错 Moving file failed

    • 当资源上设置了 AB 标签,同时又用 AssetBundleBuild 的方式从代码里面打包 AB,如果两边有同名字的 AB,就会出现 AB 名字变为空字符串的问题,导致移动移动一个文件到文件夹地址失败。 可以通过运行以下代码来清理 AB 标签,排除打包错误:
        [MenuItem("InstantGame/Clear All AssetsBundle Names")]
        public static void ClearAssetBundleNames()
        {
            var abNames = AssetDatabase.GetAllAssetBundleNames();
            foreach (var abName in abNames)
            {
                AssetDatabase.RemoveAssetBundleName(abName, true);
            }
            AssetDatabase.SaveAssets();
            AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);
        }
    

如需了解更多或解决疑问,欢迎访问 团结引擎技术问答专栏

更多微信小游戏相关的问题可前往微信官网查看技术常见问题 QA

Memory Profiler 模块增强
小游戏构建配置