内容概要
采用较新的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
,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试试- 类空间为:
Boo
、UnityScript
的遗留代码要改正 - 加入垃圾回收机制
Resources.UnloadUnusedAssets()
GC.Collect()
- 注意以下代码:
DllImport
RuntimePlatform.Android
UnityEngine.Input.touchCount
,Input.touches
Social
代码优化
删除没有用到的代码库或者package,这样做能减少生成的代码包体大小。例如,WebGL版本里就不应该有Admob、UnityAds这类的代码。因为它们只供 手机端 使用。下面列出来的代码内容都可以考虑删除。
UnityEngine.Advertisements
AndroidJavaClass
,AndroidJavaObject
,AndroidJavaProxy
,Application.ExternalCall
,Application.ExternalEval
APIUpdaterRuntimeServices
,using Boo.Lang
,using UnityScript.Lang
包体优化
- 把图片长宽设置为
4
的倍数,开启Crunch
压缩 - 减少图片尺寸,去掉
mipmap
- 设置Audio的
Compression Format
为Vorbis
,设置Quality
值为20~25
- 对.fbx文件设置
Mesh Compression
- 删掉项目里没有用到的代码和资源
- 删掉重复资源;注意,完全一样的两张图片,一张用于diffuse,另一张用于生成normal,虽然它们是相同的图片,但是它们表示的是不同的资源
- 删掉不用的package