项目升级要把unity4.6的升级到5.6,在这里做一下记录。
1.导入项目时弹出unity项目版本变动框,点击upgrate。unity会自动把一些脚本更新成适应unity5.6。(部分脚本中变量及方法)
2.修改加载场景的方法。unity4.6使用的是
Application.LoadLevel("场景名");
Application.LoadLevelAsync("场景名");异步加载
unity5.6需要改成
SceneManager.LoadScene("场景名");
SceneManager.LoadSceneAsync("场景名");异步加载
需要添加 using UnityEngine.SceneManagement;
3.修改AssetBudle的加载方法。untiy4.6使用
AssetBundle ad = new AssetBundle ();
Object ob = ad.Load("");
AssetBundleRequest obj = ad.LoadAsync("",typeof(Object));
Object[] obs = ad.LoadAll();
改为
AssetBundle ad = new AssetBundle();
Object ob = ad.LoadAsset("");
AssetBundleRequest obj = ad.LoadAssetAsync("", typeof(Object));
Object[] obs = ad.LoadAllAssets();
4.spine动画的调整。更新新的spine运行库。然后把项目中的spine动画文件用于运行库想对应的spine版本重新导出一遍。
5.spine动画脚本引用的改变,脚本中引用spine的命名空间名不一样,由using Spine; 改为 using Spine.Unity;
6.哎 这个替换spine动画真的很烦,先替换spine运行库,之前的spine动画就会报错,点选一下spine动画中的文件unity会卡死你!!!还有就是原来的spine做了预制,或被其他脚本引用。只能手动在操作一遍了。可能先把spine动画文件替换后再更新spine运行库好一点(没试,你们可以试试)。
7.调整一个关于加载场景时用到的一个方法。
void OnLevelWasLoaded( int level ) { } 调整为
using UnityEngine.SceneManagement;
void OnEnable ( ) { SceneManager.sceneLoaded += OnSceneLoaded; }
void OnDisable ( ) { SceneManager.sceneLoaded -= OnSceneLoaded;}
void OnSceneLoaded (Scene scence, LoadSceneMode mode){ }
8.更新一些第三方插件。
9.更新assetbundle中打包和加载方式。这个网上比较多我就不多说了。
10.部分api功能的小调整。在unity4.6版本中使用触发检测方法 void OnTriggerExit2D ( Collider2D other ){}。如果该物体在触发范围内把被检测的物体的触发器.enabled =false;这个方法不会被触发。但是在unity5.6新的版本中,如果该触发器在触发范围内,把这个触发器物体的触发器隐藏掉,那么会触发 void OnTriggerExit2D ( Collider2D other ){}这个方法。(这里说的隐藏是指隐藏掉的那一刻会执行一次触发离开方法,之后这个物体被隐藏掉了当然就不会触发了)
11.2D刚体组件的调整。如果你带有2D刚体物体的isKinematic是勾选上的,那么在unity5.6中2D刚体是没有这个选项的,你需要把Rigibody 2D组件下的 Body Type 修改为isKinematic。脚本中unity5.6弃用了gameObject.rigidbody2D.fixedAngle = true; 改用: gameObject.GetComponent
12.还有对于第三方插件使用的shader。如果使用assetbundle打包场景或预制会有shader丢失,我的方法是手动重新把shader添加上。
13.我用assetbundle打包场景,在编辑器上运行打包后的场景很正常,但是打包后发现加载不了。最后通过测试发现,被打包的场景和预制添加assetbundleName的时候默认都是小写。而实际上我的场景名是大写小写都有的。是不是这个原因呢?我把场景名字都改成小写,然后打包发布,结果居然可以加载了。具体原因我也不是太清楚,不过我的猜测是,assetbundleName名字不管你写的时候是大写还小写都会变成小写。但是场景名字中有大写,那么发布apk后加载的场景名字你写的是大写。assetbundleName是小写会报错。
14.遇到了一个奇葩的现象。我打包后再unity中运行很正常啊,但是打包发布apk运行里面的触发事件都没有反应。瞬间懵逼了。在unity编辑器运行下完全正常啊!!!等我找到解决方法我会更新博客写在下面的。(我新创建了一个空项目把这个项目拷贝过去重新打开就好了。具体原因不明,如果有朋友也遇到了这种问题,有其他的解决办法欢迎在评论里共享一下)