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

unity及NGUI的一些细节

2014-04-12 14:42 225 查看
最近摸索NGUI.记录一些使用中摸索出的做法.也不知道是否还有更好的做法..欢迎指正...

 

1.NGUI的分辨率自适应问题

  NGUI的自适应做的很棒.如果只是想在手机上适配各种分辨率.只需要将UIRoot的Scaling Style改为FixedSize即可.之后你所有在此Root下的界面都会按比例缩放.

  当然,有时候有些界面是不希望被缩放的.而且随意的缩放可能导致贴图的效果不好.这种情况下就要将UIRoot的Scaling Style改为PixelPerfect.但此时所有此Root下的界面都保持原来的像素.  (其实Root就是根据Scaling类型去算一个LocalScale.FixSize的时候就缩放大小为2/ManualHeight.PixelPerfect的时候缩放大小为2/当前屏幕的Height.)

  那在PixelPerfect中界面又如何做分辨率适配呢?探索下来可以用两个UIStretch来做保持比例的适配.比如说我想做一个界面.是保持16:9的比例来缩放.那首先界面放一个UIWdige的节点Anchor1.加上UIStretch. Style设置为FitInternalKeepingRatio.InitialSize设置为16:9.在Anchor1下再加入一个空节点Anchor2.这一点很重要.在看了UIStretch的代码才发现.这个脚本对于UIPanel.UIWdiget都是直接设置Dimensions的.而如果没有这两个组件.就会去设置LocalScaler.加入UIStretch.Style设置为Both.然后设置RelativeSize.这个值跟你的界面设计大小有关.公式是这样的.LocalScale
= RelativeSize * ScreenSize.也就是说这里的ReletiveSize控制的是节点的Scale.比如说我们标准分辨率定为1920*1080.美术在做界面的时候如果按照一半也就是960*540来做.那公式就是 2=ReletiveSize.x*1920.得到ReletiveSize.x=0.0010416.

所以我们的做法原理是用一个Widget来保持界面与屏幕的比例.然后再用一个UIStretch来保持子节点与此Widget的缩放比例.

 

Anchor1



 

Anchor2



 

给美术做界面的时候为了有个参考.弄个参考的Widget.Demensions设为960*540 如下图.红色的框是可视区.会根据Game窗口大小变的.



 

 

2.使用Animation时的问题

在使用Unity的Animation时 发现不能操作那些需要在Set时候做一些事情的Property上.实验下来.不会调用Set操作..在文档中并未找到相关论述.可能是BUG?Unity的版本是4.3.4f1.

所以在使用Animation操作Sprite的FillAmount的时候.会没有效果.如果一定要这么做的话.需要加个脚本.在Update的时候判断是否有改变.再设置.

另外.不要将Animation和Panle放在同一个GameObject上.Panel的Dirty机制可能导致动画播放有问题.

 

 3.在使用NGUI的PlayAnimation时.会将原来的Animation的Active设置成false.结果是原来Animation中的Animation Event失效.

 

 4.打包进assetbundle的文件不能重名.比如一个Prefab文件名为GameUI.prefab.如果再有一个文件名为GameUI.cs的脚本.打包进assetbundle后.想要获取GameUI.可能得到的是脚本文件.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C# Unity NGUI