Unity WebGL版本打包注意事项

  • 升级Unity版本到Unity2021或者更加新的版本
    • 低级版本,如Unity5.6/2017/2018打出的WebGL版本可以浏览器中运行,但不能在手机浏览器中运行
    • 更加低级的版本如,Unity4.x/3.x 只能在安装了Unity Web Player插件的32位浏览器中运行,在H5大行其道的当下,该方式已经慢慢淡出主流
  • 艰辛的升级过程, 升级项目有的部分可以自动完成,而另外一些部分需要手动
    • Unity2018版本的项目升级起来是比较顺畅的
    • Unity5.6/2017版本的项目会有以下几个问题
      • 老版本粒子系统丢失
      • 替换掉 GUIText, GUITexture, 删掉Camera上挂载的 GUILayout
      • WWW 修改为 UnityWebRequest
    • Unity 4.x到Unity 5,这二者之间的物理模块,如cloth,车体物理如WheelCollider 有个大的更新,这对于赛车类游戏来说,可能需要重新调试车体物理效果;或者干脆放弃
    • 对于低版本的项目,建议切换到资源模式Force Text,再逐步从低版本升级高版本。如 Unity4.x -> Unity5.6 -> Unity 2018 -> Unity 2021
    • 从Unity5.6/2017直接升级到Unity2021,AnimatorController所引用的动画可能会缺失,一个可选的方式是,先升级到Unity2018,然后再到 Unity2021
    • 带有绑定GUILayout组件的Camera场景需要重新保存下,否则打包会Error
    • GetComponent/AddComponent("SomeBehaviour") 修改为 GetComponent/AddComponent<SomeBehaviour>()
    • C#中动态创建类型的代码在在il2cpp中是无法工作的,解决办法是枚举类型并展开,或者根据方法名去字典里查找对应的Func
      • typeof(T).GetMethod("methodName")
      • Activator.CreateInstance(type)
      • DynamicMethod, ILGenerator
      • AppDomain.CurrentDomain.GetAssemblies()
  • WebGL版本注意点
    • 不要设置 Application.targetFrameRate
    • 去掉 Application.Quit()
    • 去掉 对Screen.orientation的修改
    • 注意对Screen.width, Screen.height的调用,当浏览器窗口会发生变化时,任何依赖该值的计算都需要重新计算;这点与Android/iOS平台完全不一样
    • warning: 2 FS.syncfs operations in flight at once, probably just doing extra work,网络说读写文件会导致这个问题,建议使用PlayerPrefs,但是PlayerPrefs调用次数过多也会有该问题
    • Canvas中设置屏幕屏幕宽高比,否则某些UI元素位置会显示乱掉
    • UnityWebRequest 要么写在using()中,要么调用其dispose() 方法,否则会有内存泄漏的问题:A Native Collection has not been disposed, resulting in a memory leak.
    • 版本更新浏览器缓存内容:游戏资源更新需要添加版本号或者刷新CDN;游戏存档数据则需要做升级或者兼容性处理、或者自行清理缓存数据。总之,开发者更新游戏后不能要求玩家手动清理浏览器缓存
    • Prefab 'xxx.prefab' has unexpected file IDs and is likely to be corrupt,把prefab拖到场景里,然后再拖出成另一个prefab试试
    • 类空间为:BooUnityScript的遗留代码要改正
    • 加入垃圾回收机制
      • Resources.UnloadUnusedAssets()
      • GC.Collect()
    • 注意以下代码:
      • DllImport
      • RuntimePlatform.Android
      • UnityEngine.Input.touchCount, Input.touches
      • Social
  • 删掉以下内容相关的代码:
    • UnityEngine.Advertisements
    • AndroidJavaClass, AndroidJavaObject, AndroidJavaProxy,
    • Application.ExternalCall, Application.ExternalEval
    • APIUpdaterRuntimeServices, using Boo.Lang, using UnityScript.Lang
  • 包体优化
    • 把图片长宽设置为4的倍数,开启Crunch压缩
    • 减少图片尺寸,去掉 mipmap
    • 设置Audio的Compression FormatVorbis,设置Quality值为 20~25
    • 对.fbx文件设置 Mesh Compression
    • 删掉项目里没有用到的代码和资源
    • 删掉重复资源;注意,完全一样的两张图片,一张用于diffuse,另一张用于生成normal,虽然它们是相同的图片,但是它们表示的是不同的资源
    • 删掉不用的package
posted @ 2025-04-12 19:26  opencoder  阅读(428)  评论(0)    收藏  举报