NGUI插件的使用

article/2025/9/29 22:03:06
一、NGUI的公有属性

    Widget面板属性:

        Privot设置原点位置

        Depth设置深度(跟UGUI一样,深度高的会挡住深度低的UI)

        Snap恢复初始大小

        Size设置大小

        Aspect=宽度/高度,(Free模式下才可设置高度和宽度),其他两个模式固定宽度或者固定高度。


Anchors锚点与UGUI不同之处就是多了一个Advanced高级锚点,锚点相对位置可以针对不同的物体来设置,而不仅仅局限于父物体了。上图使用的Type是Unified普通模式。

Execute:OnEable启动时更新,OnUpdate每帧都更新

Target:指定物体设置的锚点挂载物体。UI Root是所有NGUI的父物体。

Left、Right、Bottom、Top设置左右下上的锚点。

设置锚点你要有个很清晰的思路:例如,我要把一个按钮固定放在窗口右下角,那么按钮的Left锚点和Right锚点都要设置到窗口右边去,后面的那个数值Unity会自动帮你算出一个距离,这个距离是绝对距离,那么当窗口左右宽度不断缩小或者放大,你那个设置了锚点的按钮宽度都不会变化,同样Bottom和Top都与窗口下边框保持一致距离,按钮高度也不会变化了。

注意:在设置好锚点后,一般我们都要亲自去测试是否真正完成了UI自适应,这一步不能漏。

二、Label组件

    在UI Root创建一个Label方法:在Hierarchy面板选中UI Root,然后在Scene中右击Create -> Label

    

    Unity->Font 表示Unity字体,源自系统字体.TTF

    NGUI字体、动态字体如下:

    

    出了那2个MyFont、MyFon1是动态字体(自定义字体),其余全是NGUI自带的字体。

    NGUI字体演示:

    

    动态字体集:NGUI-Open Font Maker,Type:Dynamic 点击Source选择你要设置为动态字体的字体资源,可设置大小和字体格式。

    

这里有个很坑的点,那就是选择字体格式Source,你点右边的那个小圈圈是没反应的,你要点Source去选。

然后Create the Font创建出来的是Prefab字体预制体。


三、Sprite

    

    图集Atlas的设计方法:

    NGUI-Open-Atlas Maker,New一个新的Atlas,然后选中你要设置成为图集的图片,点击Create,增删改图集的内容也是一样,删除直接选择要删除的Delete,增加和修改都要先选择你要增加的图片,然后点击Add/Update,如果你选中的图片名在图集中已存在,它会在图集中已存在的图片右方提示Update信息。

    

    Sprite属性是图片名称。

    Type:Simple、Sliced切片(九宫格切片技术,点Edit然后就可以切了)、Tiled(自动填充)、Filled(部分填充)、Advanced(高级模式:可切片也可自动填充)。

    其中Tiled演示如下:

    

    Filled可运用在技能CD的缓冲效果。

    Gradient渐变颜色模式

    Color Tint图片填充颜色


四、Panel

    Alpha透明度,Depth深度

    Clipping:Texture Mask贴图遮罩

                     Soft Clip只显示Panel范围内容

                     Constrain But Not Clip 不切除Panel范围内容

    Advanced Options不介绍


五、Button

    在Label或者Sprite的基础上,右击Attach->Box Collider和Attach->Button Sprite,就创建了一个Label-Button或Sprite-Button,在Sprite-Button下还可创建一个子Label充当Button内容。

    监听事件与UGUI一样。


六、Slider(进度条)

    创建一个Sprite,添加Box Collider和Slider Script成为Slider。

    

    Value进度数值

    Steps步长

    Apperance:Foreground:填充图片(作为Slider物体的子物体存在,利用锚点填满父窗口)

                         Background:背景图片 (作为Slider物体的子物体存在,利用锚点填满父窗口)

                         Thumb:游标图片(一般不需要用,Foreground可代替游标图片)

                         Direction:填充方向

    On Value Change:

                                    Notify通知一般是通知一个Label,让它的内容变为进度数值。

                                    Method:UILabel/SetCurrentPercent,这个方法的意思是设置UILabel的内容为当前进度数值。

    

七、PopupList(下拉列表)


    创建方法:新创一个Sprite,添加Box Collider和Popup List Script,再添加一个子物体Label。

    (注意:一定要有一个Label子物体去显示出下拉列表选择的内容!不然下拉列表形同虚设)

      

      Options下拉列表子项显示内容,每行都代表一个子选项。

          Position:显示方式:Auto自适应显示,Above向上显示列表,Below向下显示列表。

          Alignment:列表内容对齐方式.

      Open on:打开方式

          Click Or Tap(鼠标左击、右击、中间键方式打开)

          Right Click右击打开、Double Click双击打开

          Manual手指触摸打开

       Keep Value勾选上设置Initial Value默认选项内容

(Atlas可设置可不设置,看个人需求)

    

    使用图集设置Background下拉列表背景图片,Highlight子选项高亮图片

(下面的On Value Change设置必填)

    

    设置下拉列表内容的字体

    On Value Change:Notify通知一般是一个Label(属于PopupList下的子物体)。

    Method设置方法为UILabel/SetCurrentSelection,当选项内容改变时,将子物体Label的内容修改为选择的内容。

   

八、CheckBox(Toggle)复选框

    创建方法:新建一个Sprite,添加Box Collider和Toggle Script,再添加一个子物体Sprite作为勾选显示的图片

    

    在State Transition添加Sprite,其余的还可以添加Animator动作管理器、Animation动作、Tween动画,Transition属性设置移动模式。

    

九、InputField
    创建方式:新建一个Sprite,添加Box Collider和Input Field Script,添加一个子物体Label作为文本作用区域。

    

    

    Label:放入子物体Label文本作用区域

    UI Label(Script)关键属性:

      Overflow(溢出处理方式):

            Shrink Content(缩放文本模式)

            Clamp Content (固定文本模式) (其余2个不常用)

   选择Clamp Content后,可设置 Use Ellipsis 使用省略。

    UI Input(Script)属性:

        Input Type 输入模式:Password显示内容变为'*'

       Validation:验证模式:整数、浮点型、Alphanumeric(字母数字)、Username(用户名)、Name(英文名)、Filename(文件名).

      Mobile Keyboard设置移动键盘模式。

     Hide Input 隐藏输入

     On Return Key的Submit模式和New Line模式分别是按下回车发出Submit消息和按下回合换行。

     Character Limit 字数限制

    On Submit中设置发生Submit消息后将要发生的事件。

    On Change中设置发生Label内容改变后将要发生的事件。


十、Text List和Scroll Bar

1.Text List:

    创建方式:新建一个Label,添加Box Collider和直接Add一个Text List脚本,若你想文本列表有背景图片,要新建一个Sprite作为背景图片,把这个Text List放在背景图片下面作为子物体存在(锚点自适应填充满父物体)。

        

        Text Label:文本Label。

        Scroll Bar:关联滚动条。

        Style:Text文本模式(从左上角开始显示文本),Chat聊天模式(从左下角开始显示文本)

        Paragraph History:历史记录上限,当信息总数超过这个上限会将最旧的消息删除,来使得信息总数少于记录上限额度。

        如何给TextList添加文本,以及其他添加文本等问题都是脚本对象.Add() 这样添加。

2.Scroll Bar:

    创建方式:新建一个Sprite,添加Box Collider和Scroll Bar Script,添加一个子物体Sprite作为游标。

    设置如下图所示:

     

(有没有似曾相似的感觉,没错!它和Slider几乎一模一样,多了Size游标大小,Alpha透明度而已!)

游标Size其实不用设置的!因为其他UI关联滚动条,滚动条才有意义,一旦有了关联关系,游标的大小会根据对方的内容而变化大小,例如:当文本列表内容很少的时候,游标占据滚动条的比例是很大的,当文本列表内容很多的时候,游标占据滚动条的比例就变小了。


十一、Tween相关动画脚本(NGUI自带)

    Tween Xxxx形式的都是Tween动画脚本,例如:Tween Rotation控制旋转动画...

    每种Tween动画脚本都有这些属性:

    

    From 就是动画控制物体的初始状态,To 就是 动画控制物体的终止状态。(上图是控制旋转的)

    Tweener中设置的是动画属性>Play Style:Loop“开始->结束模式循环”、Ping Pong“狗咬尾循环”。

    Tween Group动画组,NGUI对动画进行编组。

    Ignore TimeScale 忽视TimeScale影响


十二、拖拽功能和调整大小功能

    UI Drag Object给物体增加可拖拽功能脚本。Target设置可拖拽的物体。(一般是个Sprite背景图) 

    

设置可拖拽的箭头,Sprite+box collider+drag resize script,设置Drag Resize中的Target设置为窗体物体。(这样拖动箭头可缩放Target物体的大小)(drag resize意思是拖动调整[大小])
可拖拽的箭头设置好自适应,这个可拖拽的箭头适应父物体的右下角。
这个箭头物体是ChatWindow的子物体ButtonResize(名字随意起的).

            

十三、UI血条跟踪角色功能

   UI Follow Target脚本实现UI跟踪游戏物体功能。(UI需要带这个脚本,被跟踪的物体不需要带)   

   Target:跟踪的物体Transform

   Game Camera:游戏摄像机物体

   UI Camera:UI摄像机物体

   *Disable If Invisible:表示当Target物体不可见时,禁用掉带有UI Follow Target脚本的物体的子物体。

  (注意:为了优化性能,我们需要把带有Follow Target脚本的物体B在不可见的情况下,能禁用掉。所以,我们要在把这个物体B放在一个空物体A下,空物体A带上Follow Target脚本并且勾选上Disable If Invisible,物体B只是一个普通的UI,这样我们就优化了。)

    

十四、伤害值或治愈值动态跟踪显示功能

    HUD Text脚本:

        主要介绍3个动画曲线:

        Offset Curve 位移曲线
        Alpha Curve 透明度曲线
Scale Curve 大小曲线

使用方法:创建一个空物体,Add一个HUD Text脚本,然后在另外一个脚本中,通过获取该物体身上的HUD Text脚本,调用hud.Add(数值,Color,逗留时长),然后这样就会在那个空物体的位置显示出类似于“伤害值”这样的数值,并且带有3个动画:位移动画、大小动画、透明度动画。

    演示图:(这里面也是用到了UI Follow Target脚本的,是为了将这个带有HUD Text脚本物体跟踪到角色的头上)

    (红色代表扣血,绿色代表加血)

        我们可以在这个基础上,再结合上面介绍的UI Follow Target脚本,让伤害值能够显示在对应的位置上面,并且你也可以将其他的一些例如:血条、名称、称号等等一系列东西弄上去。

    (为了再次强调我在[十三]说的优化性能,我再说一次,Disable If Invisible是设置当Target物体不可见时,血条、伤害值、名称、称号这些UI都会被禁用掉,从而优化性能,注意:禁用的是带有UI Follow Target脚本的(物体X)身下的子物体!!那么我们可以把这些需要去跟踪角色的UI成为物体X的子物体,然后设置好相对位置,当角色不可见时候,这些UI也会被禁用了。)

例子:

HudGo带有UI Follow Target脚本的空物体,旗下有3个UI,Hud显示数值的,其他2个分别是血条和名称

在Editor模式下的Scene如图:

运行后:(左击是减血,右击是加血,血条没有增加和减少是因为我没弄响应事件,在这里主要是简单实验一下)


十五、背包系统的拖拽道具功能

    

    新建一个Sprite+Box Collider+自定义脚本(Knapsack Drag Drop Item)成为一个可拖拽的道具。

    Knapsack Drag Drop Item脚本如下:

    

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class KnapsackDragDropItem : UIDragDropItem {//保存道具的UISprite脚本public UISprite sprite;//道具数量文本public UILabel label;//道具数量private int count = 1;/// <summary>/// surface是检测到boxcollider的,没有boxcollider的物体检测不到/// 注意:Depth影响到检测,一般道具都是在Cell上方的,所以如果Cell里面有道具,说明检测到的是Item/// </summary>/// <param name="surface"></param>protected override void OnDragDropRelease(GameObject surface){base.OnDragDropRelease(surface);//Cell为背包标签,Item为道具标签(任何道具都是Item标签)//一定要确保真的是Cell下没有物体才能直接移动过去,不然会出现重叠道具现象if(surface.tag=="Cell"&&surface.transform.childCount==0){this.transform.parent = surface.transform;//添加到移动到的格子下,然后设置局部坐标为(0,0,0)居中this.transform.localPosition = Vector3.zero;}else if(surface.tag=="Item"){//将要移动到的背包格子带的道具的父物体赋值给parent保存Transform parent = surface.transform.parent;//将要移动到的格子身上的道具surface设置它的父物体为正在移动的道具身上的父物体surface.transform.parent = this.transform.parent;//设置局部坐标为(0,0,0)居中显示surface.transform.localPosition = Vector3.zero;//设置正在移动的道具的父物体为目标格子this.transform.parent = parent;this.transform.localPosition = Vector3.zero;//居中}}/// <summary>/// 增加道具数量/// </summary>/// <param name="number"></param>public void AddCount(int number=1){count += number;label.text = count + "";}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class knapsackController : MonoBehaviour
{public GameObject item;        //道具预制体(捡起物体就要生成这个预制体)public string[] equipmentsName;//保存装备名字(其实是Sprite名字)千万不要打错装备名,因找不到装备而出错!public GameObject[] cells;     //保存所有的背包格子private void Update(){//按X按键会捡起物体if(Input.GetKeyDown(KeyCode.X)){PickUp();}}/// <summary>/// 捡起物品 思路:随机出一个装备名,在空背包中生成一个item预制体,修改这个预制体的Sprite=装备名,/// 然后居中显示,若背包中已经有相同装备名的物体,则将那个道具的数量加1,而不会添加新的道具上去。/// 这种模式是模拟捡道具,真实情况下,道具的叠加是根据用户的操作而决定的。/// </summary>public void PickUp(){int index = Random.Range(0, equipmentsName.Length);//随机捡起string name = equipmentsName[index];bool isFind = false;for(int i=0;i<cells.Length;i++){//判断当前格子有没有物品,判断cells[i]下的游戏物品的Sprite名字if(cells[i].transform.childCount>0){//获取当前格子下的道具的特有脚本KnapsackDragDropItemKnapsackDragDropItem item = cells[i].GetComponentInChildren<KnapsackDragDropItem>();//若item不为空,证明该背包格子下有道具。if (item != null){//这个脚本保存了道具的UISprite脚本以及道具的Label子物体脚本//判断当前游戏物体的Sprite名与捡起物品Sprite名字是否一样if (item.sprite.spriteName == name){//找到了有相同名字的道具isFind = true;//只修改道具数量item.AddCount(1);break;}}}}//如果添加入的道具,在背包中没有找到相同的,则在背包中找到空Cell添加这个道具if (isFind == false){//根据名字实例化出来物品,放在Cell下面for (int i = 0; i < cells.Length; i++){//说明这个格子没有物品if (cells[i].transform.childCount == 0){//添加捡起来的物品进入cell[i]下面GameObject go = NGUITools.AddChild(cells[i], item);//注意这个:item是公有成员GameObject//更新道具的Sprite,因为这个go是空壳子go.GetComponent<UISprite>().spriteName = name;//重设位置go.transform.localPosition = Vector3.zero;//居中break;}}}//TODO 如果背包满了的处理,等等都要考虑,这里我只作一个简单的例子说明}
}




http://chatgpt.dhexx.cn/article/idYWVXZS.shtml

相关文章

网上订餐系统项目实战

写在前面&#xff1a;学习编程过程中写的一个网上订餐系统&#xff0c;记录一下大概的思路&#xff0c;源码跟实现过程 &#xff0c;这也是一个学习的过程&#xff0c;这时候还有很多不足的地方 MVC的分层做得不是很好&#xff0c;如果还有其他可以改进的地方&#xff0c;欢迎…

肯德基宅急送网上订餐系统(移动扫码点餐)的设计与实现(小程序+PHP+MySQL)

目 录 第1章 绪论 1 1.1研究背景及意义 1 1.2研究现状 1 1.3章节安排 2 第2章 关键性技术介绍 3 2.1 PHP 3 2.2 JSON 4 2.3 XML 5 2.4 HTML 5 2.5 Mysql介绍 6 第3章 需求分析 7 3.1系统业务流程分析 7 3.2 功能需求分析 8 3.3用例分析 10 3.3.1领域类图 10 3.3.2系统用例 14 3…

基于移动端的网上订餐系统的设计和实现

随着智能手机的快速普及,智能手机操作系统市场风生水起。为了让智能手机能够随时随地地查询互联网所提供的服务,一种高效的方法就是将应用系统的功能拓展到手机终端上,让手机能够通过移动网络以及互联网访问相关资源信息。因此,智能手机应用软件及其需要的服务将有广阔的发展前…

基于javaweb+mysql的网上订餐在线点餐管理系统(前台、后台)

基于javawebmysql的网上订餐在线点餐管理系统(前台、后台) 运行环境 Java≥8、MySQL≥5.7、Tomcat≥8 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适用 课程设计&#xff0c;大作业&#xff0c;毕业设计&#xff0c;项目练习&#xff0c;学习演示等 功能说明 …

Java+mysql毕业设计,网上订餐系统

1 绪 论 1.1 网上订餐配送系统的简介 本系统是基于B/S架构的系统。随着互联网技术与时俱进的不断更迭&#xff0c;人们对订餐的方式要求也逐渐提高&#xff0c;而本文所论述的网上订餐配送系统&#xff0c;正式随着互联网的兴起应运而生的。本系统能够帮助用户远程浏览餐饮信…

Java基础实战项目-------网上订餐系统

目录 前言 项目需求 项目环境准备 技能点 实现思路 ​编辑 项目总结 完整代码&#xff1a; 前言 已学完Java基础部分的内容&#xff0c;如下 理解程序的基本概念&#xff1a;程序、变量、数据类型 会使用顺序、选择、循环、跳转语句编写程序 会使用数组以及Arrays的…

毕设系统之网上订餐管理系统

距离毕业已经过去一个月了&#xff0c;毕设那一段难忘的时光相信大家也都还记得&#xff0c;我当时做的毕设系统是网上订餐管理系统&#xff0c;有三个角色&#xff0c;分别是管理员、用户&#xff08;含会员&#xff09;、商家&#xff0c;所用的技术为SpringBootMybatisThyme…

网上订餐系统需求分析报告

一&#xff0e;研究意义 随着计算机和网络的日趋发展&#xff0c;网上店铺如雨后春笋般出现&#xff0c;就连沃尔玛&#xff0c;金拱门这一类老品牌的商家都开拓了自己的网上购物渠道&#xff0c;有调查表明:无论是中国还是西方国家&#xff0c;越来越的用户已经习惯于网络购物…

《网上订餐系统》开发全程回忆

一、需求分析 随着信息经济的发展,许多上班族因工作繁忙导致就餐时间紧凑,而没法享受各种美味。传统的订餐方式过于乏味。而不能满足当今社会快速的生活节凑。然而,把餐饮与互联网结合起来正好解决了这一问题。网上订餐系统对广大顾客提供网上订餐服务,既方便了上…

网上订餐点餐用餐系统的设计与实现(SpringMVC, BootStrap, MySQL)

1、项目功能介绍 本设计的开发是基于B/S结构&#xff0c;采用JSP编程技术及Mysql数据库进行开发。本文首先介绍网站开发环境和运行平台、ASP、HTML、CSS3和java script&#xff0c;并对系统的设计进行了详细的需求分析&#xff1b;然后给出了网上订餐系统的设计方案及系统的具体…

基于java网上订餐网站系统

通过网上西餐厅网上订餐管理系统这个平台&#xff0c;消费者足不出户就可以了解大量的西餐厅菜单信息&#xff0c;给消费者带来了极大的方便。网上西餐厅管理系统平台的主要功能包括菜单类别管理、菜单信息管理等&#xff0c;根据客户种类又可以划分成管理员客户和会员客户两种…

网上订餐管理系统的设计与实现

技术&#xff1a;Java、JSP等 摘要&#xff1a; 随着信息技术的广泛使用&#xff0c;电子商务对于提高管理和服务水平发挥着关键的作用。越来越多的商家开始着手于电子商务建设。电子商务的发展为人们的生活提供了极大的便利&#xff0c;也成为现实社会到网络社会的真实体现。 …

Javaweb 网上订餐系统

第一部分是绪论。介绍了本研究课题的研究背景及意义、国内外研究现状和课题设计的思路等&#xff1b; 第二部分是系统开发的技术&#xff08;Javaweb技术、servlet、jsp页面、MVC模式&#xff09;以及使用的工具&#xff08;Eclipse集成开发工具、MySQL数据库&#xff09;等基础…

JAVA毕设项目-网上订餐系统(附:源码 论文 Sql文件)

课题背景 上世纪90年代&#xff0c;互联网逐渐走进人们的视野&#xff0c;在不知不觉中改变着社会的商品交易方式。国内各大企业从认识到互联网的重要性之后&#xff0c;一直坚持不断的探索网上交易的可能。但是由于网络生活具有很大的虚拟性&#xff0c;商家的信誉很难得到保…

网上订餐系统设计与实现(JSP+SSM+MySQL)

目 录 摘 要 I ABSTRACT II 第一章 概述 1 1.1 课题背景 1 1.2 目的和意义 1 1.3总体设计原则 1 1.4 本章小结 2 第二章 系统开发技术 3 2.1 SQL SERVER 2005简介 3 2.2 TOMCAT简介 3 2.3 JAVA 简介 3 2.4 ECLIPSE简介 4 2.5 JSP简介 4 2.6 本章小结 4 第三章 系统规划与分析 5…

基于SpringMVC的网上订餐系统

一、系统分为两端 &#xff08;1&#xff09;网上订餐前端 &#xff08;2&#xff09;网上订餐管理端 系统开发的技术&#xff08;Javaweb技术、Spring、jsp页面、MVC模式&#xff09;以及使用的工具&#xff08;Eclipse集成开发工具、MySQL数据库&#xff09;等基础知识&am…

基于SSH的网上订餐系统设计与实现

目录 摘 要 I 第一章 引言 1 1.1背景和意义 1 1.2国内外现状 1 第二章 系统开发平台 3 2.1开发工具介绍 3 2.2主要开发技术介绍 4 2.2.1 JavaEE平台 4 2.2.2 SSH技术介绍 5 2.2.3 MySQL数据库 7 2.3系统环境需求 8 第三章 需求分析 9 3.1可行性分析 9 3.1.1经济可行性 9 3.1.2…

Java简单小项目---网上订餐系统

1、系统需求说明 概要&#xff1a;现今已进入网络时代&#xff0c;网上购物、看新闻、交友等人们的日常生活已离不开网络。“只要点点手指&#xff0c;就能送餐上门”&#xff0c;网上定餐越来越受到都市年轻人的青睐 现要求开发一个网上订餐系统&#xff0c;其具体功能如下…

基于Java的网上订餐系统(附:源码 课件)

项目介绍 基于SSM框架实现一个网上点餐系统&#xff0c;包括用户端和管理员端; 前台主要功能有用户注册, 用户登录, 我的购物车、我的订单、用户中心、我的餐车,配送说明等; 管理员端主要功能有&#xff1a;菜单管理、公告管理、销售订单管理、系统用户管理等 运行环境 jdk8…

SSM+校园网上订餐系统 毕业设计-附源码211510

校园网上订餐系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对校园网上订…