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

Unity之NGUI常见问题汇总

2016-10-13 14:44 183 查看
          主要总结一下新手在使用NGUI时常见的问题。如有不明之处或是有更好的解决方法可以留言。希望大家可以把自己工作中遇见的问题分享出来,让我们共同进步!谢谢!

此贴会不定期更新。因为篇幅的原因,会将问题较多的组件单独写。以便大家能阅读。

一、UIToggle

      1.如何判断Toggle是否勾选状态。

                   可以直接通过btn.GetComponent<UIToggle>().value; 来判断是否勾选状态。

      2.代码控制改变Toggle状态。

                  btn.GetComponent<UIToggle>().value = true / false; 如果不行时,启个协程下一帧去执行或者看看是不是第三条原因导致的。

      3.如何在切页或更新时将Toggle隐藏不显示。

       编辑器的步骤:

                  首先是创建Sprite(暂且将它成为Object),然后添加Button,Box Collider,Toggle。

       此时要注意的是:Sprite的Atlas为空,Toggle的Starting State不勾选,Box Collider根据需要调整大小。

                   然后在创建的Object下面创建一个新的Sprite(暂且将它称为Icon)子物体放上需要的图片,将子物体拖到Toggle的State Transition 下的Sprite上。

       代码步骤:

                  在切页或更新时需要将数据从新赋值,这个时候将所有Object下面的Icon设为false;然后再次点击时将Icon设法true就OK啦。

       ★需要注意的是:

                  如果Object上没有Sprite的话,将Icon设为false后会导致点击没有任何反应。

                  如果Object上没有Toggle的话,也没有修改代码,点击是会导致上次点击的Icon还是处于显示状态,没有实现切换功能。(但此处也可以修改代码来解决)

二、UILabel

      1.读取数据库或代码输入一段字符串中使用“\n”等换行符号无效。

                  先让我吐槽10块钱的。刚接手一个项目,发现之前的同事的解决方法是每一行都实例化一个UILabel。我也是醉醉的。

                  解决方法是:ToString().Replace("#","\n");  #表示需要换行的标识符。

      2.为何Overflow选项只能选择Shrink Content和Clamp Content?

                  因为设置Anchors的Type了。将Type改为None就可以了。

      3.如何实现文字从上至下显示?

                  修改Widget中的Size大小。

      4.UILabel如何加下划线以及粗体等。

                  在文字前加入:加粗:[b]  ,斜体:[i] ,下划线:[u] ,直线穿过文字:[s] ,让文字在左下角或右上角显示:[sub] , 文字超链接显示:[u],

      5.当美术给颜色格式为十六进制时,如何直接使用。

                  如:美术给了 ff00fc 颜色值。 我们只需在文字加加上[ff00fc] 即可,无需转为RGB值在使用。

三、UIButton

      1.代码动态加UIbutton为什么点不了?

                  检查一下该Object上是否有Collider或Collider是否启用,还有Collider的Size。如果Collider也是动态加载的,请参考Collider问题。

      2.为什么代码添加UIbutton但Sprite还是灰色,但鼠标移动上去颜色就变正常了。

                  调整一下动态加载UIButton和Collider的循序。

      3.Button上面放置一个Label,为什么点不到Button。

                  因为Label上面也有一个Collider。如果点击不到Button查一查有没有别的Collider在Button上面。

                 想知道鼠标事件被什么阻挡可以在UIRoot下的Camera ->定位到UI Camera组件 -> 勾选Debug。运行点击即可。

四、Collider

      1.怎么修改不了Collider的大小?

                  检查Sprite或UILabel上的Collider是否勾选了。如果勾选了,运行游戏后就会自适应大小。

      2.动态加载Collider时,提前代码中也将Sprite或UILabel的autoResizeBoxCollider设为true了为什么Collider还不能自适应Size,如何设置?

                  最简单的方式就是:NGUITools.UpdateWidgetCollider(Object,true); 第一个参数是一个游戏对象,第二个参数是是否自动适应。这个函数会自动为Object添加一个            Collider,为什么不用提前添加一个Collider。 可以进这个函数中看一看。

五、ScrollView

      1.为什么运行时实例化的物体位置有时会出现偏移不对?

                  检查一下实例化物体的Collider的大小。

      2.如何实现鼠标下拉或上拽到一定位置后松开进行刷新?

                  可以通过ScrollView中的onDragFinished配合isDragging进行操作。

      大概实现方法是: 请参考我的另一篇文章[url=http://blog.csdn.net/qq_36238788/article/details/53026456]《Unity之NGUI拖拽刷新翻页》
 地址:http://blog.csdn.net/qq_36238788/article/details/53026456

                  设一个全局变量bool(m_IsCan);

                  写一个函数,判断是否isDragging,如果是,获取ScrollBar的value,然后判断ScrollView的LocalPosition.Y位置并且判断ScrollBar是否小于0.05f或0.98f;如果是,            将m_IsCan设为true,否则,设为false;
将这个函数放在Update里面去判断。

                  再写一个翻页的函数。当触发onDragFinished时调用。

六、设置控件对齐

        1.选中某个控件 -> Anchors -> Type 选中为Unified -> 选择要对齐到哪个对象 ->设置对齐。

                Unified:可以指定另外一个对象,以这个对象来对准。分为left,right,top,bottom。 可以四个选项都选择一个基准点。

                Advanced:可以分别为Left,Right,Top,Bottom指定一个对象来对齐,也可以指定四个。

        2.UILabel 输入Text时,如何使文字从左或右保持不动。

                设置widget下面的Pivot。

七、Tween

        1.如何让一个控件逐渐变大变小?

                可以使用Tween Height和TweenWidth。

        2.如何移动一个控件从一点到另一点。

                可以使用Tween Position。

        想要的淡进淡出等之类的效果,可以好好看一下Tween。

      Tween的设置:

            From:开始状态;

            To:结束状态;

            Animation Curve:动画曲线,用来微调这两个值的变化过程;

            Play Style:播放方式;(ping pong也表示循环播放,不过会播放完会回退这个过程再播放)

            Duration:开始状态变换到结束状态的时间,即一次动画的时长;

            Start Delay:进行延迟播放;

            Tween Group:可以控制在同一个object上的多个tween触发哪个,播放时指定group ID。

八、序列帧

        1.可以使用Sprite Animation来实现。

                Framerate :控制速度

                Name Prefix:需要播放的序列帧Icon名字

                Loop:是否循环

                Pixel Snap:勾选时是按图片的原大小播放,不勾选时,则按第一个Icon的大小进行播放。

        2.还有一种是Frame Animation。

                Count :图片数量

                FPS:刷新率

                Name:Icon的名字

                Is Loop: 是否循环

                Auto Start:自动开始

        我个人比较推荐使用第一种方法实现。

九、UISprite

        1.如何使用代码动态改变UI Sprite的Atlas和Sprite?

                 UISprite m_Icon = null;

                m_Icon.atlas = "AtlasName";

                m_Icon.spriteName = "IconName";

        2.图片如何切九宫。

                选择Atlas -> Sprite Details -> Border 输入要切的四个方向。然后返回UISprite 选择Type -> Sliced。

        3.如何用代码恢复图片的原大小

                m_Icon.MakePixelPerfect();   texture也是同样的方法。

十、UIInput

        1.UIInput问题请参考我的另一篇文章

        NGUI之Input计算字节位数等问题汇总

        http://blog.csdn.net/qq_36238788/article/details/52927505
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity ngui Button Toggle Sprite