您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 成林 于 2018-5-23 21:57 编辑
目前整理Unity4.x项目升级.x以及Unity2017.x 过程中出现的各种常见异常问题,与大家经验共享。按照问题出现的版本分为Unity5.x 升级到Unity2017.x以及Unity4.x升级到Unity5.x两种情形进行总结:
- Unity5.x升级 Unity2017.x容易出现的问题:
问题1:Unity开发导航寻路的源代码中原本定义的”NavMeshAgent” 类,系统已经不再识别? 解答:
应该是从Unity5.6以上版本,导航寻路中的大量API类,已经封装到新的命名空间“UnityEngine.AI”下。也就是说程序开头使用Using 导入命名空间UnityEngine.AI即可。
问题2: 项目升级到Unity2017.x过程中,源代码中的“Application.LoadLevelAsync()”(也包括“Application.LoadLevel()”)系统提示已经过时, 如何处理? 解答: 这个问题应该是Unity5.3以上版本就已经发生了变化。以上脚本可以通过导入“UsingUnityEngine.SceneManagement”命名控件,然后改为如下代码: SceneManager.LoadSceneAsync("");//异步场景转换
SceneManager.LoadScene(""); //同步场景转换
问题3:项目升级到Unity2017.x导航寻路失效,不再有反应? 解答: Unity5.6之后的版本,其导航寻路的底层API做了重写,所以原本导航寻路的NavMesh 是需要重新做导航烘焙才可解决。
问题4:项目升级到Unity2017.x后,烘焙的场景变得格外高亮(不正常)? 解答: Unity2017.x 的光影系统内部Shader等算法进一步优化与改善,所以在Unity5.x 中烘焙的场景应该再次重新烘焙,就可显示正常光影效果。
- Unity4.x 升级Unity5.x容易出现的问题:
问题1:Unity4.x 项目升级到Unity5.x中, 3D模型其材质丢失,成为“白模”? 解答: Unity5.x(包含Unity2017.x)中对于材质采用基于物理着色(PBS)的材质系统,所以3D模型升级后需要手工重新赋值材质与贴图等。
问题2:Unity4.x 项目中的NavMesh升级报错:“NavMesh assetformat has changed. Please rebake the NavMeshdata.”? 解答: 按照字面含义,重新对静态物体进行新的导航烘焙即可。
问题3:Unity4.x 项目天空盒子升级后显示混乱? 解答: 找到项目中“标准资源”(StandardAssets),点击天空盒子的材质,出现提示信息“This texture contains alpha, but is notRGBM(Incompatible with HDR[高动态光照渲染])”点击“Fix Now”进行自动修复即可。。
问题4:Unity4.x 在升级后出现某些3D模型不显示的“严重”问题? 解答: 由于Unity5.x与Unity4.x版本的底层编码变化较大,Unity5.x已经不能正确识别部分老“预设”,从而造成不显示问题。此时我们找到对应模型的“原型”3D模型,重新建立“预设”在场景中的原位置进行重新加载即可。(注意与原来的方位需要一致才可以)。
问题5:Unity4.x 项目升级后部分动画失效(即:不动没有反应)? 解答: 我们把Animation动画在Unity5.x中重新编辑与应用即可。
问题6:Unity4.x 的布料模拟升级到Unity5.x无法应用,也找不到原来的组件了? 解答: Unity5.x(包含Unity2017.x)中废弃了Interactive Cloth 与Cloth Renderer组件,转而使用Cloth与Skinned MeshRederer 组件代替。(注:详情请查阅本书籍11.5.5章节)
- 脚本问题汇总, 由于脚本升级过程中造成的各种异常现象汇总如下:
Screen.lockCursor = true;//Unity4.x传统写法 Cursor.lockState =CursorLockMode.Locked;//Unity5.x(2017.x)等价替换
2. 脚本AddComponent()、GetComponent() 问题
例如1: GoNeedAddScriptsObj.AddComponent("类名称");// Unity4.x传统写法 GoNeedAddScriptsObj.AddComponent<DynamicAddScripts>();//必须用泛型代替。
例如2: GoCreatObj.Renderer.Material.color=Color.red;//Unity4.x传统写法 GoCreatObj.GetComponent<Renderer>().material.color= Color.red//Unity5.x(2017.x)等价替换 例如3: AddComponent(“脚本字符串”);Unity4.x 中这种API写法,可以实现动态加载脚本功能。而到了Untiy5.x 被否决禁止使用,替代写法如下: GoNeedObj.AddComponent(System.Type.GetType(“脚本字符串”);
3. 脚本Animation播放动画问题 例如: this.Aniamtion.Play("xxx"); //Unity4.x传统写法 this.GetComponent<Animation>().Play("xxx");// Unity5.x(2017.x)等价替换
4.脚本刚体组件写法 例如: con.gameObject.collider.xx(); // Unity4.x传统写法,已经被否决。
con.gameObject.GetComponent<Collider>().xxx();//Unity5.x(2017.x)等价替换
5. 关于AssetBundle错误信息 报错信息: “UnityEngine.AssetBundle.Load(string)' is obsolete: `MethodLoad has been deprecated. Script updater cannot update it as theloading behaviour has changed. Please use LoadAsset instead andcheck the documentation for details.” 解答:分析以上错误信息表明AssetBundle.Load(“”) 这个API已经否决不再允许使用。替代写法是:AssetBundle.LoadAsset (“”)
|