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 让可见窗口具有滑动的功能。

       

     

                 

猜你喜欢

转载自www.cnblogs.com/zhangyang4674/p/10848222.html