内容概要
采用较新的Unity版本
- 更加低级的版本如,Unity 2/3/4 导出来的网页运行版本只能在安装了Unity Web Player插件的32位浏览器中运行
- Unity 5/2017/2018 导出的网页版本,支持初步的WebGL和H5,但只仅仅限制于桌面浏览器,手机浏览器还不行
- Unity 2021+ 在这个之上的版本已经对手机和桌面浏览器有很好的支持了,可以真正做到跨平台运行了;对于手机浏览器的支持,可以在微信小游戏、抖音小游戏中流畅运行起来(当然手机的硬件配置,如内存、处理器不能太差)。
- 目前市场上主流是H5,强烈建议你把老项目升级到新的Unity版本。你可以想象下,你导出一个H5版本的游戏,部署到了github上,然后把链接通过微信分享给你的朋友们,而他们直接点开链接就可以玩你的游戏了(安卓和iOS设备都是一样的操作)。你作为开发者再也不用经历繁琐的APP上传流程了,而且整个过程你都可控了。这是不是很爽!!
Unity 5/2017/2018 项目升级问题
- 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中是无法工作的,解决办法是枚举类型并展开,或者根据方法名去字典里查找对应的Functypeof(T).GetMethod("methodName")Activator.CreateInstance(type)DynamicMethod,ILGeneratorAppDomain.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试试- 类空间为:
Boo、UnityScript的遗留代码要改正 - 加入垃圾回收机制
Resources.UnloadUnusedAssets()GC.Collect()
- 注意以下代码:
DllImportRuntimePlatform.AndroidUnityEngine.Input.touchCount,Input.touchesSocial
代码优化
删除没有用到的代码库或者package,这样做能减少生成的代码包体大小。例如,WebGL版本里就不应该有Admob、UnityAds这类的代码。因为它们只供 手机端 使用。下面列出来的代码内容都可以考虑删除。
UnityEngine.AdvertisementsAndroidJavaClass,AndroidJavaObject,AndroidJavaProxy,Application.ExternalCall,Application.ExternalEvalAPIUpdaterRuntimeServices,using Boo.Lang,using UnityScript.Lang
包体优化
- 把图片长宽设置为
4的倍数,开启Crunch压缩 - 减少图片尺寸,去掉
mipmap - 设置Audio的
Compression Format为Vorbis,设置Quality值为20~25 - 对.fbx文件设置
Mesh Compression - 删掉项目里没有用到的代码和资源
- 删掉重复资源;注意,完全一样的两张图片,一张用于diffuse,另一张用于生成normal,虽然它们是相同的图片,但是它们表示的是不同的资源
- 删掉不用的package
