您的位置:首页 > 移动开发 > Unity3D

unity4升级到unity5注意事项解析

2016-10-08 18:54 525 查看
这里搜罗总结了部分网友unity4升级到unity5出现的问题,总结一下,方便需要的时候查阅:

一. 如果发现升级中有脚本错误,请第一时间使用菜单:
Assets -> Run API Updater ...

升级前做好项目备份。如果用了版本管理,最好重新建一个代码库,别把5的项目Commit到4上,到时候回滚很麻烦。常见错误:一个内置的摄像机脚本,有个preview变量报错,把它改成 _preview即可。很多API的命名错误可以用Assets / Run API Updater解决。Shader会变,尤其是一些野生的从第三方拿来用的Shader。这个没办法,只能逐个找类似的替换。真正让人崩溃的是物理引擎,尤其是Joint相关的东西。这种大多发生的车辆类产品里。这个只能逐个去击破。把Joint的关节逐个拆分,找出问题所在。5.0最大的改动是Joint的Connect Anchor都需要重新设置。其它的想到再补充吧。感觉5.2还不太稳定,按照Unity的尿性,起码等到5.5以后才能真正稳定下来.

二.NGUI遇到的问题:

=====================================

额 这是最近遇到的一个比较严重的问题:
NGUI无法直接用新的AssetBundle机制更新,每次从包里Load带UI的prefab就会有类似
GameObject (named 'Sprite') references runtime script in scene file. Fixing!
的错误。论坛上也有类似的问题Assetbundle loading error

至于问题发生的情况,以UISprite为例的话,是因为UI和Atlas不在一个AssetBundle里。

具体原因看Unity5 AssetBundle support 大概能理解了:
Loading streamed-scene will fail if exist game object that have component with a script property type and value is prefab's script.

Code: [Select]

class UISprite
{
[SerializeField] UIAtlas mAtlas; // It's prefab's script. Not works for AssetBundle
}


I changed the property type to GameObject(prefab) from Script(prefab's script).

It works.

Code: [Select]

class UIScript
{
[SerializeField] GameObject mAtlasPrefab; // for AB, use mAtlasPrefab.GetComponent<UIAtlas>()...
}


Other controls are same.

不过像链接里这么改NGUI底层的话有点太折腾(也可能是我没掌握精髓),所以我和同事准备尝试绕过UIAtlas这类序列化的脚本试试。

后来自己尝试了一种解决方案,就是把atlas.prefab打到引用到的AssetBundle里,然后atlas.mat和atlas.png单独打成一个包,这样每个panel打包后只会变大几KB,而又能正常使用atlas,一举两得~&lt;img src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/5dac30170439b9a215a8cb748416750a.jpg" data-rawwidth="890" data-rawheight="508"
class="origin_image zh-lightbox-thumb" width="890" data-original="https://pic2.zhimg.com/73b82e346c5d3092cce984cfb4aa602d_r.jpg"&gt;


另外一些坑:

1、升Unity5有不少API改了,有的插件没事,不过动画那块的插件基本废掉了T T

2、渲染方面,现在知道一个alpha blend 会锁住alpha通道,试了好久没效果。。
[Unity5]how to change alpha by using shader. 这里给出了解决方法 主要是下面那句最后要加alpha:blend
#pragma surface surf NoLighting noambient **alpha:blend**

三.示例一

第一次升级的时候,系统会问你是否自动升级现有接口。我手欠就选择否,结果惨了,一大堆错误,我还真一个个跳出来解决掉了,看起来就是接口干净了,删除了很多余的。第二次我学乖了,再次升级的时候选择自动升级接口,完美的都给自动搞定了。
其实升级的主要目的是需要支持64位ios系统,这时候需要选择IL2CPP的生成方法,这个不能完全保证之前能正确编译执行的东西再IL2CPP中也能正确执行,多少有一些不一样的地方,还好Unity3D社区给力,仔细搜索下就能找到。我们遇到了这个问题

Sina Visitor System ,找到了相应的解决办法,但是我不确定你是否会遇到和我们不一样的问题。
渲染的地方似乎有一些不同,我们之前在Unity4时候是没有问题的,但在Unity5的时候,在某些安卓机器上发现会出现雪花的错误,后来发现是最里面的一个摄像机必须要清理背景,不能选择Don‘t Clear。

四.示例二

Unity5终于正式发布了,我们也赶紧尝试着把现在的项目升级到Unity5.0,升级的过程遇到了不少问题,估计也是大家将来会遇到的,分享出来供大家参考

一、先说说Unity4.0 烘焙面板里常用的参数

&lt;img data-rawheight="463" data-rawwidth="834" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/a893b9d8659c9085ef24f2416102364f.jpg" class="origin_image zh-lightbox-thumb" width="834" data-original="https://pic1.zhimg.com/0c990c639cd74557f74fa071cbefc4ac_r.jpg"&gt;


Quality烘焙质量一般会选择高

Bounces 反弹 这个值一般选1,如果选2,烘焙的时间会增长50%左右,所以设置这个值要谨慎。

SkyLight Intensity 天空光强度 这个一般我也不会设置的太高

BounceBoost 反弹增强,同一单位面积内增大光的反射数量,相比较来说,这个值增大会直接影响渲染时间。

BounceIntensity 增强光的反射强度

ContrastThreshold 对比度,这个只是偶尔会调。

下面是我烘焙大场景时用到的参数,基本是在效果和时间上达到了一个合理的平衡点。

&lt;img data-rawheight="502" data-rawwidth="789" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f0bd015b3e343b4c34c08f00f6d3a4a1.jpg" class="origin_image zh-lightbox-thumb" width="789" data-original="https://pic1.zhimg.com/3df7d810d2fbdb230c368768d04c2d3c_r.jpg"&gt;


二、再说说Unity5.X,和4.X的区别,首先光照烘焙技术就不同,

Unity4.X版本采用的是Autodesk的Beast技术

Unity5.X版本采用的是PowerVR Ray Tracing和Enlighten技术,所以Lighting Window 面板里的参数差别就很大。

整体的参数介绍这个官网的网址里有,

http://docs.unity3d.com/Manual/GlobalIllumination.html

我只说说常用的。

(一)Object面板

&lt;img data-rawheight="288" data-rawwidth="327" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7df75f1c80ae774a38f69e64bd247631.jpg" class="content_image" width="327"&gt;


Lightmap Static:必须把烘焙的物体设置成静态

Scale in Lightmap:数值的大小与该物体的表面积有关,这个值影响烘焙时间,值越大时间越长。(效果如下图)

Scale In Lightmap 设置成0.1时的效果

&lt;img data-rawheight="508" data-rawwidth="835" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/852c007169a34ca259aa47077ae4b09a.jpg" class="origin_image zh-lightbox-thumb" width="835" data-original="https://pic2.zhimg.com/1bb4a4721d30b07b5980b31ce39b6115_r.jpg"&gt;


Scale In Lightmap 改成1时的效果

&lt;img data-rawheight="551" data-rawwidth="836" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7b97a503eb47a9d395de4dc62bd2460f.jpg" class="origin_image zh-lightbox-thumb" width="836" data-original="https://pic3.zhimg.com/81343e826a9d67ade0f45b263d29ef4a_r.jpg"&gt;


(这个值也影响光影图的数量)

Preserve UVs: 如果物体没有在3dmax里展好UV,那么这里必须勾选。

(二)Scene面板

&lt;img data-rawheight="528" data-rawwidth="386" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/2417f37b9436234b2bb0459d63060398.jpg" class="content_image" width="386"&gt;


Skybox:会直接影响你的环境光

Ambient Source:环境源,这里选的skybox

Ambient Intensity: 环境光的强度值,也就是环境光的亮度值

Reflection Source:反射源,这是Unity4.X里没有的。烘焙后会在场景文件的同名文件夹中多出一个名为 LightmapSnapshot的文件。

Realtime Resolution:实时分辨率,这个物体所产生的GI对其它物体的影响程度,值越大影响越大。例如

Realtime Resolution 参数设成比原默认的小10倍即 0.2 ,

这个值调成1后,墙上的绿玻璃颜色,能更多的影响地面了

&lt;img data-rawheight="393" data-rawwidth="768" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/24897303cc165b5847e2f412d23e2b46.jpg" class="origin_image zh-lightbox-thumb" width="768" data-original="https://pic2.zhimg.com/ddd503ef4eed821c9f6765ab0307a3bd_r.jpg"&gt;


Realtime Resolution 参数改成 0.4后的效果绿色墙所产生的环境光,影响范围变小了。

&lt;img data-rawheight="416" data-rawwidth="836" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b914d36bdba5229e3e282a709b8f19a3.jpg" class="origin_image zh-lightbox-thumb" width="836" data-original="https://pic2.zhimg.com/babb5ed6d4ad475c435e2044de2de445_r.jpg"&gt;


CPU Usage:选的默认。

Baked Resolution:烘焙分辨率,如果数值是10,那么就是每个单位里分布10个纹理元素,实际测试的效果如下

Baked Resolution的参数值调成10后,阴影的边变实了

&lt;img data-rawheight="310" data-rawwidth="839" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7f12f9c1ad245b2a5f2ecaabe690fa9e.jpg" class="origin_image zh-lightbox-thumb" width="839" data-original="https://pic2.zhimg.com/190ffea2a250ecad7ccbd60340c6b0b9_r.jpg"&gt;


Baked Resolution的参数值调成1后,阴影的边变的很虚了

&lt;img data-rawheight="405" data-rawwidth="834" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/dea56f3ba60e05bc358f8d5072ef32fc.jpg" class="origin_image zh-lightbox-thumb" width="834" data-original="https://pic1.zhimg.com/6a2732a6132f8d504f44e1c49e4eade0_r.jpg"&gt;


Indirect Intensity:间接强度,这个和unity4.x里的参数有些像,可以简单的理解为光的反射强度。

Bounce Boost:反弹强度,同一单位面积内增大光的反射数量,相比较来说,这个值增大会直接影响渲染时间。

Default Parameters:默认参数,这里还可以自己创建自己的参数。一般情况在预烘焙时选择最低设置。

Atlas Size:烘焙图的大小,以前4.X版本只能通过脚本来调整,现在好了。

(三)灯光参数

&lt;img data-rawheight="506" data-rawwidth="555" src="https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/a42267aeccc1a03e497db93b20dfce10.jpg" class="origin_image zh-lightbox-thumb" width="555" data-original="https://pic4.zhimg.com/93518c101f725dc1a0cc695d9e1eb73b_r.jpg"&gt;


这里需要注意的是Baking 选项里要设置成Baked ,否则烘焙不起作用。

剩下的两个参数,基本和Unity4.X的参数功能相同。

最后说一下,下面这几个参数一定要注意,它们影响烘焙速度和光影图数量,当初就在这上面吃过亏,场景太大,参数没调小,烘了一晚上啥也没出来。“Scale In Lightmap
、RealtimeResolution、Baked Resolution、Atlas Size”

总体来讲要想提高烘焙速度,就从这Scale In Lightmap 、Realtime Resolution、Baked Resolution三个参数入手基本就可以了。

其实升级到Unity5 ,我们遇到了很多问题,很多以前的脚本、插件都不好用,都需要我们一步步解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: