zoukankan      html  css  js  c++  java
  • Unity的NGUI插件学习

    1:Label显示文字

          Label现实的文字字体可以选择Unity中的也可以选择NGUI中的,NGUI是将字体制成字体集使用

          Label的一些属性

                                      overflow 字体伸缩   ShrinkContent字体,文本框够大时,文字按设置的字体大小显示,文本框不够大时,字体大小自动变小

                                                                      ClampContent字体,文字按设置的字体大小显示,文本框不够大时,部分字体不显示,如果空间足够会自动换行

                                                                      ResizeFreely字体,文字按设置的字体大小显示,文本框不够大时,横向扩大文本框。

                                                                     ResizeHight字体,按文子设置的大小显示,文本框不够大时,纵向扩大文本框

                                     Alignment  对齐方式  Justified自适应

                                                                        Automatic 自动

         代码控制Label更改显示文字

         public   UILabel   label1//直接把UILabel脚本通过面板赋给这个脚本使用

         private  UILabel  label2

         label2=Gameobject.Find("***").Getcomponent<UILabel>()//获取***物体的UILabel脚本,在这个脚本中对那个物体的Label脚本进行操作。

    2 Sprite精灵,表示图集中的图片的

       Sprite的一些属性

                                    Atlas:选择图集

                                    Sprite:选择要显示的精灵

                                   Type:Simple直接导入精灵,不进行修改

                                                Sliced可以对精灵进行切割,选择自己需要的一部分图片(这叫九宫切图)

                                                Filled 能实现冷却效果

                                    Color:设置精灵图片的颜色

         用代码控制精灵的切换

                            UISprite.SpriteName=Name(name是精灵在图集中的名字)

    3 Panel   用来设置UI渲染的顺序

       Panel的一些属性    Alpha:透明度,用来设置Panel下的物体的透明度

                                      Depth :Panel中的Depth是决定Panel的渲染顺序的,不同的Panel的显示顺序,Panel中Depth值越大,他显示的子物体就会挡住Panel中Depth值小的子物体

                                                    相同的Panel子物体的显示是由Widget中的Depth决定的,哪一个物体的Depth大,就会挡住Depth小的物体

                                    Clipping:设置Panel的大小的

                                                    None 正常大小,子物体超过Panel的部分不渲染

                                                    Soft Clip 自己裁剪Panel的大小,子物体超过Panel的部分不渲染

                                                   Constrain But Dont Clip  自己裁剪Panel的大小,子物体超过Panel的部分渲染

      Panel的作用一个是控制显示顺序,还一个就是UI切换,(UI中的子物体可以通过Panel控制)不同的Panel可以切换显示.(第二个作用与Invisible Widget的作用相似)

       一个物体是否能挡住另一个物体:首先他们是否有在空间位置上的前后关系,如果同处一个空间UI,其渲染顺序看Panel的Depth,Depth大的会挡住Depth小的,优先渲染Depth大   的,同一个Panel,看物体的widget中的 Depth,谁 大谁显示。    

    4 Button:用一个精灵作为Button的图标,给图标加BoxCollider---->ButtonScript--->Play Sound Script

                    用事件监听   :先获取UIButton脚本,在把点击触发的事件让Button监听上;

                                             private  UIButton   button

                                            button=Gameobject.Find("button脚本挂载的对象")。GetComponent<UIButton>();

                                            EventDelegate  ed=new EventDelegate(this.Function)//这里的This是不能缺少的

                                           button.onclick.add(ed)//注册的是事件,所以要把方法变成事件

                                           void Function()//点击触发的事件

                    用面板的Button脚本中的OnClick监听,先确定监听脚本挂在那个对象上,把对象绑定到OnClick上,在确定绑定触发对象脚本中的公共函数

    Notify确定button绑定的对象

    method确定绑定对象上的公共方法

    一个button可以绑定多个触发事件

    5  DynamicFont动态字体   :创建动态字体  project面板 Open BitMap Font Mask--->Type:Dynamic这样就创建一个动态字体了 

    6 Widget :每一个物体都有,用来设置物体的中心点,大小和Depth

                    Pivot :用来设置物体的中心点的

                    Depth:同一个Panel下物体的显示顺序的渲染顺序

                    Size:物体的大小的

    7Anchors瞄点设置:用来固定一个物体与另一个物体的位置关系,屏幕调整时,这两个物体的相对位置不变

      属性:Type      None  不设置锚点

                               Unified :Target Position   设置物体与目标物体在上下左右的边距,以后物体会随着目标物体进行缩放

    Execute:更新的设置

    Target:设置物体固定面板的物体

    Left:设置自己的左边与目标物体的上下左右其中一边的边距。(边距确定后,无论整个ui怎么变,这两个物体的边距不变)

                               Advanced 物体可以将四个边都绑定对象,用来设置每个边与其绑定物体的边距关系

    高级设置:

    物体的每一个 边都可以绑定一个不同物体的四个边

    8 Itween 动画

       属性:Play Style:播放风格   Once /Loop/PingPong

                   Duration  :动画播放间隔      

                  Animation Curve动画播放速度的曲线

                 Start Delay :延迟多长时间播放动画      

                 Form  开始动画的设置

                 To    结束动画的设置

        一些常用的动画效果  

        Tween.Alpha:透明度动画,可以设置物体逐渐显示或逐渐消失的动画

        Tween.Color:设置物体从一种颜色变化成另一种颜色

        Tween.Width :设置物体从某一宽度变化到另一宽度

        Tween.Hight:设置物体从某一高度变化到另一宽度

        Tween.Position:设置物体从一个位置变化到另一个位置

        Tween.Rotation:设置物体自转

        Tween.Scale:设置物体缩放

        Tween.Transform:设置物体从一个位置变化到另一个位置,不需要设置坐标,直接将物体的坐标赋予Form和To即可

         private TweenPosition=this.GetComponent<TweenPosition>().PlayForward();//从Form播放到To

         private TweenPosition=this.GetComponent<TweenPosition>().PlayReserve();//从To播放到Form

         

    9:Invisible Widget:虚拟的一个框,框的大小对其子物体无影响

                                 Alpha:透明度,设置子物体的透明度

      Invislble widget 中的Widget的Depth对其子物体无影响,物体渲染还是看同一个Panel的Depth大小,他只相当一个容器,可以把一个Panel分成不同的功能块

     Invislble widget的作用:他可以控制子物体显示。

    10 Silder  :Sprite---->BoxCollider---->SliderScript(Slider作为背景)

                    在创建一个子精灵Sprite作为前景

                    UISlider:Value是控制子精灵的显示长度的(0------>精灵自身长度)

                                   Alpha:设置Slider的前景和背景游标的透明度,不能改变自己的透明度

                                   Steps:每次移动的大概值

                                   Appearance:

                                              Background  :用来指定Slider的背景图片

                                              Foreground :  前景,改变Value值,可以改变前景的大小

                                              Thumb:设置游标的,如果设置需自己再创建一个Sprite,通常是不用游标的,通常滚动条才需要指定一个游标

                                              Driection:设置滑条的变化方向。

                                  On value change :可以通过面板绑定事件,在Slider的Value值发生变化时,触发这个方法,绑定的方法与Button绑定的方法相同

    检测Slider中的Value值变化,在Value变化时触发方法

    1:通过面板上的on value change 监听方法,在value值发生变化时触发这个事件

    2:把Value改变时触发的方法注册成事件,用OnChange.add(事件)函数,把事件设置为监听value值的变化

          private UISlider slider 

          slider=GameObject.find("").getcomponent<uislider>()

         EventDelegate ed=new EventDelegate(this.function)

         slider.onchange.add(ed)

         Slider中的Value值在变化时,就会触发function方法

                                   

    11文字描述的打字效果:给Label添加TypeWriteEffect 让Label实现打字机的效果

    12 PopupList下拉菜单   Sprite--->BoxCollider--->PopUpList   创建一个下拉菜单

                         属性:Options 下拉菜单的选项

                                   Default 默认选中哪一项

                                   Position 下拉菜单的弹出位置

                                   Alignment 对齐方式

                                   Open On 选中下拉菜单的方式

                                  Atlas:Background  :用来指定下拉菜单的背景图片

                                              HighLight     :某一项选中时的显示图片  

                                             Background  :用来指定下拉菜单的背景图片颜色

                                              HighLight     :某一项选中时的显示图片颜色

                                              Animated:鼠标滑到某个框,框就显示出选中的效果

                                 Font :下拉菜单中文字的显示效果                       

    获取下拉框选中的按钮值:UIPopupList.current.value.trim();

    选中下拉框中选项时触发的方法:

    OnchangeValue:通过面板中的OnValueChange来绑定点击时触发的方法:先把该方法挂载的物体绑定到OnvalueChange,在绑定方法所在的脚本,再绑定方法

    在脚本中获取下拉框的脚本,在把方法注册成事件,绑定到下拉框的脚本上   

       

    using UnityEngine;
    using System.Collections;
    
    public class PopUplist : MonoBehaviour {
    
        private UIPopupList popuplist;
        public UILabel label;//第一Label脚本   
    
        void Awake()
        {
            popuplist = transform.GetComponent<UIPopupList>();//获取自身的UIPopupList脚本
                   EventDelegate ed1 = new EventDelegate(this.PopUpList);//把方法注册成事件
            popuplist.onChange.Add(ed1);//把事件给UIPopUpList脚本绑定
               } 
        void PopUpList()
        {
            label.text = UIPopupList.current.value.Trim();//获取复选框选中的值
        }
      }

    13: 利用Panel和Invisible Widget实现Ui切换,panel 和Invisible widget实质上是表示一种容器,在Panel和invisible widget中用脚本来控制其子物体的显示

          1:利用动画实现UI的切换 TweenPosition.............在Panel或Invisible widget 上添加动画的脚本,用来切换UI,这样实质上并没有销毁UI物体,

          2:使用SetActive(false/true)实现场景的切换,用Panel 或Invisible widget调用SetActive();可以把UI显示或隐藏        

    14: 技能冷却效果  :利用Sprite中Type选则Filled,控制FillAmount的值实现技能冷却效果,他需要两个Sprite精灵相互配合,实现技能CD的冷却效果,需要把前景Sprite设置为filled模式

    实现:Sprite.FillAmount=Time.deltatime/10      //能够展现十秒中的冷却CD的效果

    15:Input Filed Script输入框  单行输入 多行输入

    Sprite---->BoxCollider---->InputFieldScript

    给InputFieldScript来指定Label来显示出入内容

    Label:用来显示InputFixed输入框输入的文字

    starting Value :输入框开始现实的文字

    Input Type:输入文字的格式   标准的,密码,自动纠正

    Validation:输入文字的种类

    on return Key :new Line:支持回车键换行

    On Submit :只有在On Return Key选择submit时,在输入框按下回车键时,会自动调用On submit检测的事件

    可以通过面板绑定公共方法,让input 每输入一个字符就会调用绑定的方法一次;先绑定物体,再绑定脚本,再绑定脚本中的方法

    通过事件注册,把方法绑定到Onsubmit上,、在输入框按下回车键,会自动调用注册的事件

    on  change:在输入框,每输入一个字符,系统会调用Onchange绑定的方法

    可以通过面板绑定公共方法,让input 每输入一个字符就会调用绑定的方法一次;先绑定物体,再绑定脚本,再绑定脚本中的方法

    通过事件注册,把方法绑定到Onchange上,让input 每输入一个字符就会调用绑定的方法一次

    实现:

    using UnityEngine;
    using System.Collections;
    
    public class PopUplist : MonoBehaviour {
    
         private UIInput input;
        void Awake()
        {
            input = GameObject.Find("inputText").GetComponent<UIInput>();//获取inputText的UIIput脚本
               EventDelegate ed2 = new EventDelegate(this.submit);//把Submit注册成事件
            EventDelegate ed3 = new EventDelegate(this.change);//把Change方法注册成事件
            input.onSubmit.Add(ed2);//把事件ed2绑定在Onsubmit,每输入一个字符就会调用Submit方法一次
            input.onChange.Add(ed3);//把事件ed3绑定在Onchange,输入完后按回车键表示输入结束,会自动调用change方法一次
    
        } 
           
        void submit()//每输入一个字符就会调用Submit方法一次
        {
            print(UIInput.current.value);
        }
        void change()//输入结束后,按回车键,表示输入结束,输入结束会调用该方法
        {
            print(UIInput.current.value);
        }
    }

    UIInput.Current.value得到输入框输入的文字

    16:给窗口添加拖拽和缩放效果

           窗口的拖拽效果:给Sprite --->box collider-->Drag Object脚本

           

    指定Target:指定移动的物体

          给窗口添加缩放的效果:sprite--->boxcollider-->DragResize

    Target:指定要缩放的物体

    pivot:缩放的方向

    17:用ScollBar实现滚动条  sprite-->boxcollider-->ScollBar 脚本,这个精灵作为背景,在创建一个子精灵作为前景

    Thumb:固定的位置

    Direction:滑动的方向

    Alpha :前景的透明度

    Steps:移动一次更改的Value值

    size :一般把前景作为游标,size是游标的大小占整个前景的比例,前景作为游标后,只有游标的部分会显示出来。前景的大小要和背景的大小一样大,因为游标滑动的区域是与前景的大小是一致的,所以只有一样大时,游标才能滑动到整个背景区域。

    size的值,一般是由滑动条内存放的内容决定的,内容越多size值越小。

    value:游标的值

    On value change的使用和其他的是一样的,可以用面板绑定方法,也可以用事件注册

    代码:

    using UnityEngine;
    using System.Collections;
    
    public class PopUplist : MonoBehaviour {
    
         private UIScrollBar scrollBar;//滑动条
        void Awake()
        {
            scrollBar = GameObject.Find("scrollBar").GetComponent<UIScrollBar>();//获取scrollBar物体的UIScrollBar脚本
            EventDelegate ed4 = new EventDelegate(this.ScrollBar);
            scrollBar.onChange.Add(ed4);
                       
        } 
          
           void ScrollBar()
        {
            print(UIScrollBar.current.value);
        }
    }

    18:TextList文本列表:多行文本显示,是在label的基础上扩展的,所以也是只有显示的功能

          Label---->boxcollider--->Textlist脚本,把label扩展成文本列表

           

            Textlabel:指定要改成文本列表的Label

            ScrollBar:给文本列表指定滑动条,用来滑动文本列表

            Paragraph History:文本列表最多能存储文字的行数

            代码实现:

            private UITextList  list

            list=Gameobject.find().GetComponent<UITextList>();

            list.add(string);//往文件列表中添加文字

    19:能对物体进行拖拽,并能检测出拖拽结束时的一些数据

            对物体进行拖拽用:Drag and drop item脚本和Boxcollider

           重写这些功能的函数脚本要继承Drag and drop item这个脚本

           我们要监测拖拽开始时,执行一些功能,拖拽结束时执行一些功能,等等,我们可以通过重写Drag and drop item 的中的方法实现这些功能

           Drag and drop item:OnDragdropEnd() 拖拽结束时执行的方法

                                             OnDragdropStart() 拖拽开始时执行的方法

                                             OnDragdropMove() 拖拽时执行的方法

                                             OnDragdropRelease(Gameobject Surface) 拖拽功能执行结束后执行的方法

           重写这些方法,这些方法执行的条件是不会变的,重写这些方法在某些条件下执行。

          OnDragdropEnd()  ,让函数在拖拽结束时执行自己想要的功能

       

       /// <summary>
        /// 重写OnDragDropEnd方法,让其实现自己想要的功能
        /// </summary>
        protected override void OnDragDropEnd()
        {
            base.OnDragDropEnd();
            //添加自己想要在拖拽结束时执行的功能
        }

    OnDragdropStart() 拖拽开始时执行的方法 重写这个方法

    /// <summary>
        /// 重写OnDragDropStart方法,让其实现自己想要的功能
        /// </summary>
        protected override void OnDragDropStart()
        {
            base.OnDragDropStart();
            //添加自己想要的功能
        }

      OnDragdropMove() 拖拽时执行的方法 重写这个方法

    /// <summary>
        /// 重写OnDragDropMove(Vector2 delta)方法,让其实现自己想要的功能
        /// </summary>
        /// <param name="delta"></param>
        protected override void OnDragDropMove(Vector2 delta)
        {
            base.OnDragDropMove(delta);
            //添加自己想要在拖拽时执行的功能
        }

    OnDragdropRelease(Gameobject Surface) 拖拽功能执行结束后执行的方法  重写这个方法

     /// <summary>
        /// 重写OnDragDropRelease这个方法
        /// </summary>
        /// <param name="surface"></param>
    
        protected override void OnDragDropRelease(GameObject surface)
        {
            base.OnDragDropRelease(surface);
            //自己想要实行的功能 Surface是他拖拽时碰撞到的物体对象
              }

    在背包系统中,想要交换背包中的两个物体,要通过重写OnDragdropRelease(Gameobject Surface)实现

     /// <summary>
        /// 重写OnDragDropRelease这个方法
        /// </summary>
        /// <param name="surface"></param>
    
        protected override void OnDragDropRelease(GameObject surface)
        {
            base.OnDragDropRelease(surface);
            //自己想要实行的功能 Surface是他拖拽时碰撞到的物体对象
           if(surface.tag=="Window")
            {
                transform.parent = surface.transform;
               transform.localPosition = Vector3.zero;
            }
           if(surface.tag=="Knapsack")
            {
                Transform parent = transform.parent;
                transform.parent = surface.transform.parent;
                transform.localPosition = Vector3.zero;
                surface.transform.parent = parent;
                surface.transform.localPosition = Vector3.zero;
               
            }
        }

          

    20:progressBar Script:本质和Slider Script一样,都是添加UISlider,

          都是用UIProgressBar.Current.Value获取到滑动条的值得。也可以通过改变UIProgressBar.Current.Value来改变滑动条的显示效果

    21:单选框 UIToggle   创建单选框 Sprite -->boxcollider--->UIToggle   在Sprite创建一个子精灵表示选中与否的图标

           

          Starting State:单选框的初始状态

          State Transition  :点击复选框时显示的效果

           Sprite :选中是显示的图标

           animator /animation选中时可以放动画

          OnValueChange:绑定点击时触发的方法

         当点击单选框时,触发方法:

         1:通过面板中的OnValueChange来绑定点击时触发的方法:先把该方法挂载的物体绑定到OnvalueChange,在绑定方法所在的脚本,再绑定方法

         2:在脚本中获取单选框的脚本,在把方法注册成事件,绑定到单选框的脚本上

             获取当前单选框的选中状态:UIToggle.Current.Value

    using UnityEngine;
    using System.Collections;
    
    public class PopUplist : MonoBehaviour {
    
       
        public UILabel label;//第一Label脚本   
        private UIToggle toggle1;//定义Toggle脚本
        void Awake()
        {
            toggle1 = GameObject.Find("Toggle").GetComponent<UIToggle>();//获取Toggle脚本
            EventDelegate ed = new EventDelegate(this.Toggle);//把方法注册成事件
            toggle1.onChange.Add(ed);//把事件给Toggle脚本绑定
        } 
        void  Toggle()
        {
            label.text = UIToggle.current.value.ToString();//获取单选框的状态
        }
    }

           

    22:插件NGUI-HVD的使用

           NGUI-HVD的使用是和NGUI配套使用的

           NGUI-HVD只有两个脚本

           1:UIFollowTarget让自己创造的Label 、slider、progressBar等跟随着目标物体进行移动

            2:HUDTextScript制作伤害和治疗的效果

                属性:只介绍Offset Curve/Alpha Curve/Scale Curve

                           Offset Curve:设置伤害和治疗的效果在Y轴上的变化效果

                           Alpha Curse:设置伤害和治疗的效果显示效果的透明度变化变化

                          Scale Curve:设置伤害和治疗的效果显示效果的大小变化

                  用HUDTextScript制作伤害和治疗的效果

     private   HUDText text;
        void Start () {
          text = this.GetComponent<HUDText>();
    
        }
        
        // Update is called once per frame
        void Update () {
        if(Input.GetMouseButtonDown(0))
            {
                text.Add(+10, Color.red, 1.0f);
            }
        }

     23:Grid自动排序:在Grid的子物体下对子物体进行排序

     Arrangment:对子物体进行排序

                          Horizontal:对子物体按水平方向进行排序

                          Vertical:让子物体按垂直方向进行排序

    Cell Widget:子物体在水平方向的间距像素

    Cell Height:子物体在垂直方向的间距像素

    Column limit:设置每行或列排列的子物体数

    Pivot:子物体排列开始方向

     24:Scroll view和  Dray Scroll view

           Scroll view :设置可见窗口,子物体只有在可见窗口内,才会被渲染

          

           Movement:指定窗口滑动的方向。

          sprite---->boxcollider--->Dray Scroll View 只有在box collider的范围内才可以滑动可视窗口

           Dray Scroll view :指定scroll view 让可见窗口具有滑动的功能。

           

         

                     

  • 相关阅读:
    数学之美:判断两个随机信号序列相似度
    为什么自己设计的嵌入式系统不如工业级产品稳定?
    由static来谈谈模块封装
    算法类书籍汇总
    Linux驱动:手把手教hello world驱动配置、编译进内核或为模块
    刨根问底之链表数据结构
    Redis进阶
    构建高可用的写服务
    再推荐 5 款私藏的优质 Chrome 插件
    MySQL-SQL优化
  • 原文地址:https://www.cnblogs.com/zhangyang4674/p/10848222.html
Copyright © 2011-2022 走看看