• Unity3D UGUI显示3D特效

    2020-06-03 23:32:08
    Unity UGUI下显示3D特效,如粒子特效、Mesh UV特效等,解决不同分辨率手机下的屏幕自适应问题、显示叠层问题。
  • Unity3d UGUI 官方示例

    2020-06-29 16:53:41
    Unity3d UGUI 官方示例 包换UGUI各个控件的用法的示例
  • unity3d UGUI官方案例

    2020-07-08 17:27:58
    unity3d UGUI官方案例,unity3d UGUI官方案例,unity3d UGUI官方案例
  • Unity3D_UGUI入门

    2018-03-08 14:37:57
    什么是UIUI即User Interface(用户界面)的简称 好的UI设计...它从 Unity 4.6 开始,被集成到 Unity 的编辑器中。相较于旧的 UI 系统,它绝对属于一个巨大的飞跃!因为只要有过旧 UI 系统使用体验的开发者,大部...

    什么是UI

    UI即User Interface(用户界面)的简称 
    好的UI设计不仅是让软件变得有个性有品味,还要让软件的操作变得舒适、简单、自由、充分体现软件的定位和特点。 
    这里写图片描述 
    这里写图片描述


    什么是UGUI

    UGUI 是Unity 官方推出的最新UI系统。它从 Unity 4.6 开始,被集成到 Unity 的编辑器中。相较于旧的 UI 系统,它绝对属于一个巨大的飞跃!因为只要有过旧 UI 系统使用体验的开发者,大部分都对它没有任何好感,以至于在过去的很长一段时间里,大家都在使用资源商店(Asset Store)里,由第三方开发者开发的付费插件 NGUI,实现游戏中与 UI 相关的功能部分。


    UGUI的优点

    新的 UI 系统,有以下三个优点: 
    灵活 
    快速 
    可视化

    这对于开发者而言,带来的好处是: 
    运行效率高, 
    执行效果好易于使用, 
    方便扩展(新 UI 系统代码开源)与 Unity 的兼容性高


    UGUI基础

    • 画布Canvas 
      Canvas就类似我们的作画的画布,而在Canvas上的控件,则类似画布上的图画,画布是画的载体,同时我们也可以Canvas也是控件的载体 
      所有的UI都应该放在Canvas里面(子层)。Canvas是一个带有Canvas组件的Game Object。 
      所有的UI都应该是Canvas的孩子(子层;子节点)
    • 设置自适应

    • UI控件的绘制顺序 
      UI元素绘制顺序和在Hierarchy(层级视图)中的顺序。后面的将在更早的上面绘制。改变元素的层级关系(绘制顺序,上下关系),可以通过拖拽,进行简单的排序。也可以通过脚本:使用使用Transform组件上的方法:SetAsFirstSibing,SetAsLastSibing和SetSiblingIndex。

    • 绘制模式 
      1.在screen空间中渲染 
      2.在world空间中渲染

      Screen Space-Overlay 
      在这个渲染模式中,UI元素将在场景的上面。如果场景改变大小或改变分辨率,Canvas将自动改变大小去适配。

      Screen Space-Camera 
      这和Screen Space-Overlay类似,但是在这个模式中,这个Canvas放置在了给定距离的摄像机的前面。这些UI元素都是通过摄像机绘制的。这意味着摄像机影响UI的外观。如果摄像机设置为Perspective(透视视角),UI元素将会通过透明视角渲染,通过摄像机可视区域控制。 
      如果屏幕改变大小或改变分辨率,或摄像机frustrum改变,Canvas将自动改变大小去适配。

      World Space 
      在这个绘制模式中,Canvas将和场景中的其他对象一样显示。Scene可以通过手动设置Rect Transform 来控制大小。在场景中,UI元素将绘制在其他基于3D放置的对象的钱前面或后面。对于UI作为世界的一部分是有用的。也被称为”diegetic interface”。

    • UI控件的布局 
      在“画布”上“绘制”的 UI 控件,除了要考虑上一节介绍到的 绘制顺序以外,还需要考虑它们的布局问题,以及当布局不符合开发者预期时的处理方法。接下来我们介绍一个工具Rect Tool,让开发者有了直接操作 UI 控件的能力。另外还要介绍一个组件——RectTransform,让 UI 控件有了“自适应”的本事!

    • Rect Tool小工具 
      Rect Tool是新版本 Unity 编辑器(Unity 4.6)在工具栏上添加的一个新按钮,位于界面左上角,如图 
      这里写图片描述 
      提示: 
      Rect Tool 不单单专用于操作 UI 控件,实际上它可以被用于操作任何游戏对象。只不过这个工具是在 UI 系统加入的时候一并被添加进来的。Rect Tool 可以对 UI 控件展开下列操作: 
      改变位置:将鼠标置于 UI 控件矩形框的内部,按下鼠标左键任意拖动,即可改变UI 控件的位置,如图所示。 
      这里写图片描述 
      改变大小:将鼠标置于 UI 控件矩形框上,待鼠标变成双向的箭头,按下鼠标左键拖动,即可改变 UI 控件的大小这里写图片描述 
      旋转:将鼠标移动到 UI 控件矩形框靠近 4 个角的外部,待鼠标出现一个旋转的标志,按下鼠标左键拖动,即可令 UI 控件旋转 
      这里写图片描述
    • RectTransform组件 
      Rect Transform组件是新版Unity为UI控件提供的新组件。它只在UI控件上取代Transform组件,而后者是其它任何游戏对象所必须的组件。如图所示,对比了Transform和 Rect Transform 组件。 
      这里写图片描述 
      Rect Transform 组件除了拥有 Transform 组件的位置(Position)、朝向(Rotation)和缩放(Scale)属性外,还纳入了更多的属性: Width、 Height、 Anchors、 Pivot 和 Anchor Presets。 
      Width 和 Height 用于表示 UI 控件的长和宽 
      Pivot 用于表示 UI 控件的轴心点,在 Scene 视图中用蓝色的空心小圆圈表示;当开发者对 UI 控件做旋转处理的时候, UI 控件旋转时所围绕的点就是轴心点。 
      这里写图片描述
    • Anchors属性 
      Rect Transform是专为UI元素准备的,它的一个重要属性就是锚点Anchors,用于指定自身相对父级的布局。对于这个UI元素,它的父级就是Canvas。锚点一共有四个,分别对应自身矩形的四个顶点。在父级元素形状发生变化时,四个锚点到四个顶点的偏移offset不变。

      Anchors 属性是重点,因此拿出来单独介绍。它本身在 Scene 视图中有专门的图标来表示,同时它还有自己的子属性,最后它还会影响除 Anchor 属性以外的其它属性。 
      Anchors 用于表示 UI 控件的锚点,在 Scene 视图中使用 4 个小三角表示。当 UI 控件的父对象也拥有 Rect Transform 组件的时候,锚点才会出现。锚点的 4 个小三角依次与 UI 控件四边形边框的四个角对应,且在父对象的大小发生改变时,锚点会令子对象自动完成自适应操作。例如,Button 的锚点位于 Canvas 的中央、两角和一边上时,那么当 Canvas 的大小发生改变的时候, Button 的自适应效果如图 
      这里写图片描述 
      锚点位于Canvas的中央,锚点的四个三角形与UI边框的四个角距离固定 
      这里写图片描述 
      Button 的锚点位于 Canvas 的两角(锚点的 4 个三角形,与 UI 控件边框的 4 个角的距离固定) 
      这里写图片描述 
      Button 的锚点位于 Canvas 的一边(锚点的 4 个三角形,与 UI 控件边框的 4 个角的距离固定)

      【注意】注意:从锚点的位置所导致 UI 控件自适应的效果上来看,应该发现一个不变的真理,就是表示锚点的 4 个三角形,始终与 UI 控件边框 4 个角的距离是固定的。 
      单击 Rect Transform 组件里的 Anchors 属性左侧的小三角,可以展开此属性的子属性 Min 和 Max。 Min 记录的是 Anchors 左下角小三角的位置, Max 记录的是 Anchors右上角小三角的位置。 
      当表示 Anchors 的 4 个小三角处于同一位置的时候,Rect Transform 组件里就会出现我们前面一直在介绍的 Pos X、Pos Y、Width 和 Height 属性。Width 和 Height 我们前面介绍过了,而 Pos X 和 Pos Y 的值表示以 Anchors 为原点的 Pivot 的坐标 
      这里写图片描述

      当表示 Anchors 的 4 个小三角不在一起的时候,这 4 个属性名就变成了 Left、 Top、Right 和 Bottom。它们分别表示 UI 控件的 4 条边,到 4 个三角形所构成矩形对应边的距离 
      这里写图片描述

      Anchor Presets 属性是一个“样子特殊的下拉列表”,一般容易被忽略。但是如果灵活的使用它,可以为 UI 控件的布局提供大大的便利,因为它提前预置了常见的布局方式 
      Anchor Presets,此属性位于 Rect Transform 组件的左上角,使用鼠标单击那个正方形即可打开 Anchor Presets 属性,如图 2-24 所示。此属性中预先定义了锚点的位置,开发者可以直接从预定义的锚点中选择。例如,将 Button 的锚点设置到左上角,效果如图 
      这里写图片描述 
      这里写图片描述 
      使用 Anchor Presets 属性为 Button 设置锚点

      使用 Anchor Presets 属性也可以一并设置 UI 控件的 Pivot 和 Position 属性,只需要按下 Shift 和 Alt 键盘即可 
      这里写图片描述


    可视功能的UI组件

    在介绍 UI 系统的 UI 控件之前,同学们首先应该有一个这样的认识:UI 控件之所以在游戏场景中是可见的,是因为 UI 控件上有一些特定功能的 UI 组件! 
    接下来就来介绍这些为UI控件提供了可视功能的UI 组件。

    • Text控件 
      Text(Script)组件的文字显示效果,如图所示。该组件用于向玩家显示不可交互的文本信息。玩家无法修改、删除其中的文本,只能从中了解信息。 
      这里写图片描述 
      注意:Text(Script)组件只包括可见的文字,它的背景是透明的。 
      这里写图片描述 
      Text:此属性中的内容,就是 Text(Script)组件要显示的文本信息 
      Color:用于设置文字的颜色 
      Material:用于设置文字的材质。注意:游戏场景中的文字控件本身就是一个游戏对象,当前就可以设置它的材质属性了。

      Character 表示接下来的属性负责设置字符的格式: 
      Font:用于设置文本信息的字体格式; 
      Font Style:用于设置文本信息的样式,可选择的样式有:Normal(正常)、Bold(加粗)、Italic(倾斜)和 Bold And Italic(倾斜并加粗),如图所示 
      这里写图片描述 
      Line Spacing:用于设置文字的行间距 
      这里写图片描述 
      Rich Text:决定文本中的标记元素是否可用 
      这里写图片描述 
      提示:Text 属性中的< b>和< /b>就是“标记元素” 
      Paragraph 表示接下来的属性负责设置字符构成的段落的格式: 
      Alignment:用于设置段落的对齐方式 
      这里写图片描述 
      Horizontal Overflow:当段落内容的宽度大于 Text(Script)组件本身的宽度时,处理段落内容有两种可选的方式,分别为 Wrap(换行)和 Overflow(溢出)。效果如图 
      这里写图片描述 
      Horizontal Overflow:Wrap 
      这里写图片描述 
      Horizontal Overflow:Overflow 
      Vertical Overflow:当段落内容的高度大于 Text(Script)组件本身的高度时,处理段落内容有两种可选的方式,分别为 Truncate(截断)和 Overflow(溢出)。 
      这里写图片描述

      Best Fit:是否应该忽略对文字大小的设置,让字体的大小自动改变到能让段落的内容全部显示出来的状态,效果如图 
      这里写图片描述

    • Image控件 
      Image(Script)组件的图片显示效果,所示。它用于向玩家显示不可交互的图片信息,常作为游戏场景的装饰。 
      这里写图片描述 
      这里写图片描述 
      Source Image:指定 Image(Script)组件要显示的图片; 
      注意:Image(Script)组件显示的图片必须是 Sprite 类型的。这就要求开发者在将这个图片导入到 Unity 中的时候,设置此图片的 Texture Type 属性为 Sprite(2D and UI)。 
      Color:设置图片的颜色;提示:对此属性的设置会改变图片显示的主色调,就像是在用有颜色的光照射图片。 
      Material:设置图片控件的材质; 
      Image Type 用于设置图片的显示类型,可选的属性值有 Simple、 Sliced、 Tiled 和 Filled。不同的图片显示类型,导致了 Sprite“填充”图片控件的不同方式。 
      Simple: Sprite 将直接显示在图片控件中。默认情况下,如果图片控件的大小与 Sprite不一致时,后者将经过拉伸处理来符合前者的大小,如图所示。但如果此时复选了Preserve Aspect属性,那么图片在经过缩放处理时,长宽的比例将保持恒定。 
      这里写图片描述 
      图片的显示类型:Simple(Sprite 长宽比例固定) 
      这里写图片描述 
      图片的显示类型:Simple(Sprite 长宽比例固定) 
      Sliced:Sprite 将被看作是由 9 个切片组成的,如图 1所示。而图片控件将只显示中间切片的边缘,如图 2 所示,若此时选中了 Fill Center 属性,那么将显示完整的中间切片,如下图所示。 
      这里写图片描述 
      这里写图片描述 
      Tiled:此种类型的 Sprite 一般尺寸较小,如图 1 所示。为使此 Sprite 填满整个图片控件,就会在保持 Sprite 尺寸不变的前提下不断重复,就像是在铺地板砖一样,如下图所示。 
      这里写图片描述 
      Filled:此种类型的 Sprite 与 Simple 相似,但是它可以表现出一种“从无到有”的呈现过程,如图所示。 
      这里写图片描述 
      “呈现方式”也叫“填充方式”,由 Fill Method 属性决定,可选项有 Horizontal、Vertical、Radial 90、Radial 180 和 Radial 360, Fill Origin 决定了填充操作的起点,Fill Amount 决定了填充的进度。 
      这里写图片描述 
      Set Native Size:单击此按钮,将使得图片控件的大小主动调节到与 Sprite 原始大小 一致,如图所示。 
      这里写图片描述
    • RawImage控件 
      Raw Image(Script)组件与 Image(Script)组件的功能类似,如下图所示,用于向玩家显示不可交互的图片信息,常作为游戏场景的装饰。但 Raw Image(Script)组件与 Image(Script) 组件上的属性并不完全一致,Raw Image(Script)组件如图 
      这里写图片描述

      Raw Image(Script)组件各属性作用的说明如下: 
      Texture:指定 Raw Image(Script)组件要显示的图片; 
      注意:Raw Image(Script)组件所显示的图片,可以是任何类型,而不单单只是 Sprite 类型。 
      Color:设置图片的颜色; 
      提示:对此属性的设置,会改变图片显示的主色调,就像是在用有颜色的光照射图片。 
      Material:设置图片控件的材质; 
      UV Rect:令图片中的一部分显示在 Raw Image(Script)组件里。X 和 Y 属性指定图片左下角的位置,W 和 H 属性指定图片右上角的位置,如图所示。 
      这里写图片描述

    • Mask组件 
      拥有Mask(Script)组件的 UI 控件,可以限制其子对象的显示范围,即当子对象的显示范围明显大于父对象的显示范围时,游戏视图就只显示父对象范围内的子对象,其它部分自动隐藏。父对象是 Panel,子对象是 Image,为前者添加 Mask(Script)组件,作用效果如图 
      这里写图片描述
      注意:添加了 Mask(Script)组件的游戏对象,要想发挥出此组件的效果,要求此对象上必须包含 Image(Script)组件。如图所示,查看 Panel 上的所有组件,可以看到它默认就有 Image(Script)组件,所以才能发挥出 Mask(Script)组件的遮罩效果。 
      这里写图片描述 
      Show Mask Graphic:此属性决定是否显示父对象上的图片,效果如图所示 
      这里写图片描述


    展开全文
  • Unity3D_UGUI进阶

    2018-03-08 14:40:25
    ButtonButton控件除了公共的Rect Transform与Canvas Renderer两个UI组件外,Button还默认拥有Image(Script)与Button(Script)两个组件。组件Image(Script)里的属性与前面所讲的Image控件的Image(Script)组件里的属性...

    Button

    Button控件除了公共的Rect Transform与Canvas Renderer两个UI组件外,Button还默认拥

    有Image(Script)与Button(Script)两个组件。

    组件Image(Script)里的属性与前面所讲的Image控件的Image(Script)组件里的属性是一样的,例如Source Image的图像类型仍为一个Sprite(精灵),通过为此赋值,就可改变此Button的外观了,如果你为属性赋值了图片精灵,那么此Button的外观就与此精灵一致了。

    Button是一个复合控件,它中还包含一个Text子控件: 
    这里写图片描述

    通过此子控件可设置Button上显示的文字的内容、字体、样式、字大小、颜色等,与前面所讲的Text控件是一样的。 
    Button(Script)组件里的属性: 
    Interactable:是否启用(交互性) 
    如果你把其后的对勾 
    这里写图片描述 
    去掉,此Button在运行时将点不动,即失去交互性了。 
    Transition:过渡方式 
    这里写图片描述 
    None:没有过渡方式 
    这里写图片描述 
    Color Tint:颜色过渡 
    Target Graphic:目标图像 
    Normal Color:正常颜色 
    Highlighted Color:经过高亮色 
    Pressed Color:点击色 
    Disabled Color:禁用色 
    Color Multiplier:颜色倍数 
    Fade Duration:变化过程时间

    Sprite Swap:精灵交换。需要使用相同功能不同状态的贴图。 
    Target Graphic:目标图像 
    Highlighted Sprite:鼠标经过时的贴图 
    Pressed Sprite:点击时的贴图 
    Disabled Sprite:禁用时的贴图 
    这里写图片描述 
    Animation:动画。最复杂,效果最绚丽。 
    这里写图片描述 
    其中的Normal Trigger、Highlighted Trigger、Pressed Trigger、Disabled Trigger等属性是不能赋值的,它们是自动生成的。当单击“Auto Generate Animation”(自动生成动画)按钮时,系统会为你打开一个New Animation Contoller(新建动画控制器)窗口,要求你选择动画存放的路径,所以我们要先在Project中新建一个文件夹,专门用来存放动画,比如此文件夹取名为_Animator,此时就可选中此文件夹,并给此动画取名(动画的名默认为该Button的名字,当然其扩展名为controller),创建成功后,会在Project中的_Animator文件夹中可看到刚才创建的动画文件(动画的名默认为该Button的名字),且在这个Button的Inspector检视图中可看到会为此Button增加一个Animator组件: 
    这里写图片描述 
    该事件处理器中有3个组件: 
    Event System:事件系统组件(事件) 
    Standalone Input Module:独立输入模块 (输入) 
    Touch Input Module:触控输入模块 (触控) 
    如果我们将Event System (Script) 前的勾去掉,则管理整个场景的事件系统则不起作用了,此时运行程序,如果有Button,单击它时就不会有反应了。


    InputField

    输入域控件:在其层级Hierarchy视图将其展开 
    这里写图片描述 
    该控件为一个复合控件,在主控件上还包含两个子控件,一个为Placeholder与Text,其Text就是前面所介绍的文本控件,程序运行时用户所输入的内容就保存在这个Text中,而Placeholder是占位符,它表示程序运行时在用户还没有输入内容时显示给用户的提示信息在这里我们把它设置为“请输入…”,设置方法是在层级视图中展开这个InputField控件,选中其子控件Placeholder,在Inspecter视图中可发现其Text(Sript)组件,修改其值为“请输入…”即可,如下图所示: 
    这里写图片描述 
    InputField控件与其他控件一样,也有Image(Script)组件,自身组件InputField(script)中也有变换Transition属性,其默认值也为颜色变换,除此之外,它有一个重要的属性: 
    ContentType(内容类型),有10个选项,如下图: 
    这里写图片描述 
    Standard:标准的 
    Autocorrected:自动修正 
    Integer Number:整数 
    Decimal Number:十进制小数 
    Alphanumeric:字母数字 
    Name:人名 
    Email Address:邮箱 
    Password:密码 
    Pin: 
    Custom:定制的 
    第一个InputField的内容类型设为第5个Alphanumeric:字母数字, 
    第二个InputField的内容类型设为第8个Password:密码,这样程序就可启用其自动验证功能,例如在用户名称输入框中如果你输入的不是字母或数字则不能输入进去,第二个密码框中输入密码时它会默认以*号占位输入的密码。


    Slider控件

    Slider也是一个复合控件 
    这里写图片描述 
    Background是背景,默认颜色是白色,我们保持不变Fill Area是填充区域,其子控件Fill中只有一个Image(Script)专有组件,假设我们将其颜色改为红色Handle Slice Area中的子控件Handle(手柄)中也只有一个Image(Script)专有组件。 
    当我们在Hierarchy中选中Slider控件,其Inspector中的Slider(Script)属性面板如下图所示: 
    这里写图片描述 
    上部的Interactable、Transition与前面介绍的控件是差不多的,下面谈谈它特有的一些属性: 
    Fill Rect:填充矩形区域 
    Handle Rect:手柄矩形区域 
    Direction:Slider的摆放方向,可以从左到右、从右到左、从上到下、从下到上 
    Min Value:最小数值 
    Max Value:最大数值 
    Whole Numbers:整数数值。假设我们将Min Value设为1,Max Value设为100,那么调节手柄时,对应的值在1到100之间,而且是一个小数,如55.67,有时我们希望它是整数,那么选中该项即可。 
    Slider的动态事件 
    假设我们想在拖动手柄的时候,让其值显示在右边的一个文本框中,如下图所示: 
    这就要用到Slider的动态事件了 
    这里写图片描述 
    指的是Slider的滑块滑动其值发生改变时而产生的动态事件,它有一个参数Single:单精度,实际上这里指的是float,整个事件的机理是,当滑动滑块时,其值发生改变,事件产生,而且会实时将滑块所对应的值传给此事件,保存在这个参数中,供程序使用。


    ScrollBar 控件

    这里写图片描述 
    其属性与前面的Slider差不多,动态事件也是一样的,这里就只谈其特有的属性: 
    Value:当拖支滑块时,其值是在0到1之间变化的 
    Size:是滑块的大小,如果把它改成0.5,滑块就会大到占滑条的一半大。 
    Number Of Steps:数值的步骤。假设设定为5,那么就会把Value分成5个值,调节滑块时其值就在这5个值中变化。


    Toggle控件

    Toggle开关,当我们创建它后可发现它也为一个复合型控件 
    这里写图片描述 
    这里写图片描述 
    它有Background与Label两个子控件,而Background控件中还有一个Checkmark子子控件,如果我们将其拖散可清楚地看见,Background是一个图像控件,而其子控件Checkmark也是一个图像控件,其Label控件是一个文本框,它们与我们所讲的控件是一致的,我们通过改变它们所拥有的属性值,即可改变Toggle的外观,如颜色、字体等等。下面来看看Toggle的一些重要属性。 
    Is On:目前是处于开还是关。用鼠标点击那个Toggle按钮,将发现其中的对勾符号会在出现与不出现之间切换,同时与之相对应的,在其Inspector面板中,属性In On后面的对勾也在勾选与不勾选之间切换。

    Graphic:图像。用鼠标点击那个Toggle按钮,其对勾符号会在出现与不出现之间切换,它的原理就是控制那个对勾图像出现与不出现而实现的,这个Graphic就是设置这个属性值的,你可以通过 
    这里写图片描述 
    设置 
    这里写图片描述 
    Group:组(单选框功能) 
    在Hierarchy面板中,选中我们刚才创建的Toggle,然后按键盘Ctrl+D两次,就可复制出两个Toggle了,并在场景视图中拖动它们的位置,使它们都可见,运行,我们将发现这个三个都可选中,即它们是复选框。如果我们把这三个组成一个组,让它们关联,就可做成单选了。 
    这里写图片描述 
    从Group属性可看出它需要一个ToggleGroup。我们先在画布上建立一个空对象,并命名为_ToggleGroup,在其Inspector中单击 
    AddComponent这个按钮,为其添加组件,在弹出的菜单中选择UI,在后续弹出菜单中 
    这里写图片描述 
    选择“Toggle Group”,这样我们就为此对象添加了ToggleGroup组件了。在Hierarchy中同时选中要成组的那3个Toggle,把已添加了ToggleGroup组件的_ToggleGroup拖到Inspector的 
    这里写图片描述 
    中即可,这样我们便把这3个Toggle成组了,于是它们3个就只能单选其中一个了。为了更完美,首先调整空对象_ToggleGroup的位置与大小,让其包含那3个Toggle控件,然后在Hierarchy中,把3个Toggle选中并拖到_ToggleGroup中成为子物体 
    这里写图片描述 
    这样在逻辑上与外观上均完备,且移动父物体时子物体也会跟着移动。 
    Toggle控件动态事件On Value Changed(Boolean) 
    这里写图片描述


    高级控件ScrollRect

    滑动区域控件ScrollRect是在一个较小区域显示较多内部控件的一种机制。在UI系统中,这种控件的原型是没有的,它是我们开发者利用UI系统里已有的基本控件组合而成的。不过在UI系统里有ScrollRect这个类,即它是一个组件,不是控件。 
    控件与组件有什么区别呢?简单地说,在一个控件里可以添加组件,如在Button上可添加Animator组件。有些控件在创建时,它会默认自带一些组件,如Panel会自带Image组件,其带括号的Script就表示这个Image是组件,因在UI系统里有Image这个基本控件的,故加上一个带括号的Script来区别控件与组件,说明此处的Image是组件而不是控件。同理,当我们创建一个Button控件时,默认情况下我们可以在其Inspector视图里发现它带有Image与Button两个组件的。

    实际上我们可以这样理解,组件是一个脚本,是一个类,控件是这个类的实例化对象,是一个具体实现,比如Button控件里含有Button组件就好理解了。

    1 、ScrollRect是待开发者自己去建立的控件,我们暂时把它称作隐形控件。下面我们来创建这个控件。 
    创建一个画布Canvas,在画布上创建两个空对象,其中一个命名为ScrollRect,另一个命名为Content,再创建一个Scrollbar。调整它们的大小与位置,大致如下: 
    这里写图片描述 
    2、在Content上创建几个子对象,这里我们创建4个Button,并调整它们的位置,使它们平铺在Content中,同时设置Button的Image的SourceImage的值 
    这里写图片描述 
    3、组装ScrollRect:3个组件2个属性 
    添加ScrollRect组件:选中空对象ScrollRect,在其Inspector视图中单击“AddComponent”按钮,选择UI中的Scroll Rect,这样便为这个空对象添加上了ScrollRect组件。此组件里有2个重要属性Content、Horezontal Scrollbar,其功能简单说是用滑动条的滑动去控制内容区域的移动。根据此原理我们把Hierarchy视图中的Content与Scrollbar分别拖挂到这两属性值框中即完成了对象的指定工作。试运行程序并拖动滑动条,发现Content中4个按钮图片确实能随着滑动条的移动而移动了,如图: 
    这里写图片描述 
    但这还不完美,如果能隐藏多余的内容,只显示特定区域的内容,就象网页中的滚动条那样就好了,如下图所示: 
    这里写图片描述 
    要达到此功能,还要为已添加了ScrollRect组件的对象增添Image、Mask(遮罩)两个组件,其添加方法与上一致。至此,组装ScrollRect的3个组件ScrollRect、Image、Mask ,2个属性:ScrollRect中的Content、ScrollRect中的Horezontal Scrollbar已完备,但当我们运行时,其效果仍然与前面相同,不能隐藏多余部分。如果在Hierarchy视图中我们把Content拖到ScrollRect上,使Content成为ScrollRect的子对象,就可达到我们想要的效果了。 
    这里写图片描述 
    其原因是,我们所添加的Image与Mask是在ScrollRect上,那么用图像去遮罩的对象是ScrollRect,所以我们要把Content作为ScrollRect的子对象才能达到此效果。 
    Viewport :拖动后内容的返回位置


    高级控件 标签页面TagPage

    这里写图片描述 
    如图,当我们点击顶部不同的标签时,下部的内容区域会显示对应的内容版面。

    在画布上创建一个空对象,命名为Lable,创建一个Image,布局上Lable在上面,Image在下面,如下图: 
    这里写图片描述 
    在Lable中创建三个子控件,它们均为Toggle,命名为Toggle1、Toggle2、Toggle3,并调整它们的 
    Background与Checkmark,使其看起来像按钮: 
    这里写图片描述 
    详细制作过程 
    这里写图片描述 
    Background是背景,是未被选中时表现出来的图景。首先在场景视图中将其大小调大,使其与整个按钮形状一样大,然后在其Inspector视图中的Image组件里设置Source Image或Color属性值,这里为了简便,我们将其Color值设为较暗的灰度色,用于它未被选中时展现出来的颜色。 
    这里写图片描述 
    Checkmark是选中时表现出来的图景,默认是一个对钩,同理首先在场景视图中将其大小调大,使其与整个按钮形状一样大,这样一来,Checkmark与Background一样大,两个重叠起来了,当未选中时,表现出来的是Background的景象,选中后表现出来的是Checkmark的景象。对于Checkmark的调整,然后在其Inspector视图中的Image组件里设置Source Image或Color属性值,这里为了简便,将Image组件里的Source Image属性设为空None,即去掉那个对钩图像,并将其Color值设为较亮的灰度色,用于它被选中时展现出来的颜色。

    这三个按钮状的Toggle按设计思路应该为单选,所以按以前所学的知识,需设置它们的Group属性值为Lable ,同时,对于它们的Is On属性,第一个Toggle的保持勾选,另两个去掉勾选,即使开始时,第一个处于默认选中状态。

    在Image上创建三个为空的子控件,分别命名为Page1、Page2、Page3,并调整它们的大小,使其与Image一样大,位置上与Image重叠。再在Page1、Page2、Page3上各自创建一个Text子控件,也调整它们的大小大致与Image相当,且位置上也与Image重叠,并分别输入要显示的文本内容。这三个Text是重叠在一起的,显示时,其内容也会重叠,如果我们只勾选第一个Text的父控件Page1的 ,另两个去掉勾选,那么显示时会默认显示第一个,另两个处于未激活状态,不会显示出来,自然就不会发生显示的重叠了。

    最后一步我们来实现当我们点击顶部不同的标签时,下部的内容区域会显示对应的内容版面。也许你会认为这要用到脚本,实际上有更简便的方法,当然会离不开事件处理机制的。下面以Toggle1为例,选中它,在其Inspetctor视图中,单击: 
    这里写图片描述 
    中的“+”号,为其添加事件,如下图: 
    这里写图片描述 
    委托事件处理对象,这里我们把Page1拖给 None(Object)如下图 
    这里写图片描述 
    虽然我们没有编写自己的脚本,但Unity有内置的许多方法的,这里我们选择第二项GameObject: 
    这里写图片描述 
    选择上边的动态方法:SetActive,设置结果如下图: 
    这里写图片描述 
    这个事件的运行机理是:当Toggle1的选中状态发生改变时(注意是状态发生改变,选中时会产生事件,那么由选中到取消选中,也会产生事件),所挂接的对象Page1会被激活或失效。 
    根据这个原理,Toggle2的事件委托对象为Page2,Toggle3的事件委托对象为Page3,这样就实现了当我们点击顶部不同的标签时,下部的内容区域会显示对应的内容版面了,如下图: 
    这里写图片描述


    布局器使用

    添加布局组件 
    这里写图片描述 
    这里写图片描述 
    这里写图片描述 
    这里写图片描述 
    这里写图片描述


    点击事件的三种实现形式

    Unity3D的uGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。 
    这里写图片描述 
    先以PointerClick为例。这个是用于某点点击事件。其他事件都可以根据相同的办法调用。 
    实现事件主要有3种方式: 
    方式一:继承基础接口实现 
    这里写图片描述 
    步骤一:创建ClickEvent脚本。继承MonoBehaviour和IPointerClickHandler

    using UnityEngine;
    using System.Collections;
    using UnityEngine.EventSystems;
    public class ClickEvent : MonoBehaviour,IPointerClickHandler 
    {
    
         public void OnPointerClick (PointerEventData eventData)
         {
            Debug.Log("点击了我");
         }
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    步骤二:实现public void OnPointerClick(PointerEventData eventData)方法: 
    步骤三:创建一个名为Panel_IPointer的UI对象。并且将ClickEventt脚本附加到对象上。 
    步骤四:启动,并点击Panel_IPointer对象。在Console输出如下:

    方式二:Unity3D编辑器操作设置实现

    步骤一:创建一个C#脚本。在脚本中添加一个public方法。 
    这里写图片描述 
    步骤二:创建一个命名为Empty的UI对象,用于接收和响应点击事件。创建一个名为Panel的UI对象,用于触发点击事件。 
    步骤三:Panel对象添加EventTrigger组件,” Add New” -> 选择” PointerClick”。将Empty对象拖拽到触发者位置。然后点击”No Function”选择我们写在Test脚本中的OnTestClick事件。 
    这里写图片描述 
    这里写图片描述 
    方式三:程序动态设置实现

    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Events;
    using UnityEngine.EventSystems;
    
    public class ClickTest : MonoBehaviour {
    
        // Use this for initialization
        void Start ()
        {
            var trigger = transform.gameObject.GetComponent<EventTrigger>();
            if (trigger == null)
            {
                trigger = transform.gameObject.AddComponent<EventTrigger>();
            }
    
    
            // 实例化delegates
            trigger.triggers = new List<EventTrigger.Entry>();
    
            // 定义需要绑定的事件类型。并设置回调函数
            EventTrigger.Entry entry = new EventTrigger.Entry();
            // 设置 事件类型
            entry.eventID = EventTriggerType.PointerClick;
    
            // 设置回调函数
            entry.callback = new EventTrigger.TriggerEvent();
            UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(OnScriptControll);
            entry.callback.AddListener(callback);
            // 添加事件触发记录到GameObject的事件触发组件
            trigger.triggers.Add(entry);
        }
    
        public void OnScriptControll(BaseEventData arg0)
        {
    
            Debug.Log("Test Click");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    事件运行模式

    在事件组件面板中,第一个选项框中的值我们在Button时就是一直使用的是其默认值:Runtime Only,如下图所示: 
    这里写图片描述 
    当我们单击该选项时,出现的下拉菜单如下: 
    这里写图片描述 
    Off:关闭事件处理功能; 
    Editor And Runtime:编辑与运行时,其事件处理功能均起作用,调编辑器参数时管用; 
    Runtime Only:仅在运行时,其事件处理功能才起作用。

    展开全文
  • 《精解uGUI Unity UI设计与开发从入门到精通》 随书代码下载
  • Unity3d UGUI源码下载

    2020-06-21 17:11:25
    UGUI源码,通过研究UGUI源码。获得更多的UI修改灵感。
  • Unity3D Ugui基础控件的使用demo 举例了inputField image text button toggle Slider Scrollbar scrollview(listview),GridView的基本使用方法
  • Unity3d UGUI 界面适配 实例解析 三种适配方式
                   

    之前做游戏都是用公司自己的引擎,对于界面的适配分Android和IOS两种系统处理。

    对于IOS设备,由于数量有限,只要做到 960x640  1024x769 1136x640 (当时还没有iphone6呢) 三种适配即可,所以我们对这三种屏幕做了三种不同的界面配置文件。

    对于安卓设备,屏幕分辨率实在太多种,所以统一设置为1136x640的缩放比例了。


    现在使用Unity制作游戏,虽然仍然可以使用原来的这一套方案,但是却显得没有这个必要了。


    Unity4.6新版UGUI,提供了三种基本的界面适配方案。

    我们先添加一个Image,这样就会有一个Canvas被自动创建。来看Canvas的属性设置。



    Canvas Scaler就是用来做适配的

    Reference Resolution表示我们设计界面的时候使用的屏幕大小

    Screen match Mode有三种选择,即三种界面适配方案。

    Shrink 保持缩放比例,裁切Expand 缩放不裁切Match Width Screen Size如果是Match Width 那么就是适配宽度,把宽度设置为屏幕宽度,然后保持比例如果Match height,那么适配高度,首先把高度设置为屏幕高度,然后保持比例


               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • Unity3d中,UGUI提供了 Scroll Rect、Grid Layout Group、Mask这三个组件,我们用来实现滚动视图,这里用一个简易的背包作为示例。

    Unity3d中,UGUI提供了 Scroll Rect、Grid Layout Group、Mask这三个组件,我们用来实现滚动视图。

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    首先我们放置好背包的底层方框,如下图。


    我们在红色的那一块,作为物品栏的滑动区域。   文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    接下来创建一个Panel ,改名为ScrollRectPanel,把大小拉动到红色方框大小。先Reset ,添加Scroll Rect 组件。勾选 Vertical 选框,意思是只有Y轴可以滑动。


    然后在 ScrollRectPanel 下面添加一个 Panel 作为 Child ,改名为 GridLayoutPanel ,先Reset ,拉伸宽度为 红框 宽度,高度稍微弄大一点 。添加 Grid Layout Group 组件。修改 颜色为红色 ,便于区分。 文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn



    然后 选择 ScrollRectPanel ,把GridLayoutPanel 拖到 Scroll Rect 的Content 中。  文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    运行测试一下,现在可以上下滑动了。   文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    然后在 GridLayoutPanel 下添加一个Button 作为 Child ,然后Ctrl + D 复制出 多个。文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    最后在 ScrollRectPanel 上 添加 Mask 组件,使超出 ScrollRectPanel 范围的不显示。文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn

    最后看看效果   文章转自 http://blog.csdn.net/huutu/  星环游戏 http://www.thisisgame.com.cn


    展开全文
  • UGUIUnity官方的UI UI创建方式如下: 创建之后,就可以给UI添加组件,如下: 当然也可以直接在Inspector面板中添加   二、Canvas画布 当第一次添加UI时,会自动产生两个物体Canvas和EventSystem ...

     

    一、添加UI

    UGUI:Unity官方的UI

    UI创建方式如下:

    创建之后,就可以给UI添加组件,如下:

    当然也可以直接在Inspector面板中添加

     

    二、Canvas画布

    当第一次添加UI时,会自动产生两个物体Canvas和EventSystem

    Canvas:画布,所有UGUI游戏物体都必须是Canvas的子物体,否则UI游戏物体将无法正常渲染显示,Canvas的宽和高会自动适配当前的Scene视图的宽和高,也就是说Canvas会跟随Scene视图的形态发生改变

    EventSystem:事件系统,UGUI所有的操作事件都由该游戏物体处理,如果场景内没有该物体UGUI相关物体将无法操作

    当你在画布中添加空物体时,它们身上默认的组件是Rect Transform,它们继承至Transform,有一些新的功能

     

    展开全文
  • 转载自:Unity3d UGUI基础控件使用(一) 一:UGUI介绍 UGUI是Unity4.6之后,经过多重测试,推出全新的UI系统,更灵活,快捷,易用的可视化游戏UI开发工具。 由于之前传统的UI系统存在很多诟病,因此出现了很多UI...
  • UGUIunity公司请NGUI制作团队来制作的unity内置的UI组件。 学习UGUI,可以先和NGUI做个比较区别, 1. NGUI有图集,UGUI没有图集的gain 2. NGUI有Depth,UGUI没有Depth深度的概念, 但UGUI根据在Canvas层次可以...
  • Unity3D UGUI下拉菜单/Dropdown组件用法、总结 Unity3DUGUI实现下拉菜单 Chinar-本文提供全流程,中文翻译。 助力快速使用 UGUI 实现 下拉菜单 UGUI 最初是没有下拉菜单的组件的 动态添加监听事件 后来更新...
  • 修改两个相机 Clear Flags 模式为 Depth only,才能通过 Depth 控制两个相机渲染顺序,将 3D 物体渲染到 UGUI 前面。 注意:场景中保留主相机不要动,否则可能出现渲染上的一些 Bug。照射 3D 模型就...
  • U3D官方源代码,UGUI源代码,可以供大家学习参考,避免开发的时候采坑
  • Unity 3D - UGUI性能优化

    2018-04-28 21:26:06
    Unity 3D - UGUI性能优化: 平时开发中常见的操作隐藏/显示(GameObject.SetActive),这样操作会导致Canvas丢弃它的VBO(Vertex Buffer Objects,顶点缓存对象)数据,重新显示的时候Canvas又需要执行重新构建(Rebuild...
  • unity3d UGUI下拉框

    2016-01-21 14:51:59
    可以用来让用户从列表中选择一个选项的选择。 控制显示当前选择的选项。 一旦点击,它打开了选项列表中,可以... 在选择一个新的选项,再次关闭的列表,控制显示了新的选择选项。... 一个下拉。打开下拉列表的选项。... 看到In
  • unity 3D中的UGUI

    2018-08-09 16:12:01
    UGUI:Unity自带的UI系统 NGUI:外部插件 1.Hierichy-create-UI 2.Image  Rect Transform:继承于Transform  Pivot:轴心(物体位置点,蓝色的小圆圈),左下角为原点,右上角为(1,1)  Anchor:锚点(适配,4个小白色的...
1 2 3 4 5 ... 20
收藏数 7,001
精华内容 2,800