UGUI基础

Canvas的渲染

渲染基本层次

基本渲染层次是根据可视化对象在继承窗口中的显示顺序来渲染的,在此有两种方式可以调节对象的顺序,第一种:直接在继承窗口拖拽。第二种:通过Transform的SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex函数来进行调节。

渲染模式

  • 屏幕覆盖模式
    直接屏幕映射方式显示,永远在屏幕的最上面,跟相机无关即使没有相机也可以显示
  • 屏幕相机模式
    此模式和屏幕模式相似但是受到相机的限制,但是始终都显示在相机的前面,如果有3D物体在UI的前面也是会挡住UI。
  • 世界模式
    把Canvas当成普通的对象在世界坐标系中定位渲染。

Canvas的屏幕适配策略

UGUI中的屏幕适配只需要在Canvas下挂一个CanvasScaler组件就行了。
适配模式分为3种:

  • 固定像素
    忽略屏幕的大小根据UI元素的实际像素显示
  • 根据屏幕大小进行缩放(也是最常用的一项)
    此项会根据设备真实分辨率与设计分辨率来对Canvas进行缩放。有三种模式:
    1.Match Width or Height
    根据宽或者高来对Canvas进行缩放,比如设备分辨率为1920x900,设计分辨率为1280x720,此时,如果采用宽进行匹配那么可以通过公式计算出此时应该缩放多少倍,公式如下:
    缩放因子:1920/1280 = 1.5
    缩放后的Canvas的宽为:1920(刚好能够完全显示)
    缩放后的Canvas的高为:720x1.5 = 1080
    由于设备的高为900所以会导致高度上的一部分不会被显示出来
    2.Expand
    适配的计算公式同上,只是在此模式下会保证设计分辨率下的东西能够全部显示出来,及选择设备分辨率和设计分辨率的宽、高比中选择最小值作为缩放因子。
    3.Shrink
    和Expand恰好相反,在此模式下不会留黑边但是会导致显示不完全。及选择设备分辨率和设计分辨率的宽、高比中选择最大值作为缩放因子。
  • 固定物理大小
    忽略屏幕大小和分辨率根据UI的实际物理大小来显示。

可视化对象

  • Text
    同NGUI的Label.富文本格式参见:http://docs.unity3d.com/Manual/StyledText.html
  • Image
    同NGUI的Sprite
  • RawImage
    同NGUI的Texture
  • Mask
    此可视化组件是不可见的,只是用于定义一个子对象的显示区域不能超过父对象的显示区域,超出部分将被剪切掉。同NGUI Panel的剪切功能。在Unity5.3里有两个Mask组件
    1.Mask
    2.RectMask2D
  • Effects
    1.Shadow
    2.Outline
    3.PositionAsUI1(未知功能)

布局系统

基础布局

Rect Tool

选中此工具后,我们就可以在场景视图中编辑它的大小,位置,缩放,轴心点和锚点。
Toolbar buttons with Rect Tool selected

Rect Transform

功能同Rect Tool只是此组件是需要自己手动输入参数。

Pivot(轴心点)

旋转,大小和缩放的修改都依赖于Pivo的位置。当ToolTar设置了Pivot时,Rect Transform的Pivot能够在场景中被移动。
Toolbar buttons set to Pivot and Local

Anchors

有两种情况,在每种情况下Rect Transform显示是不同的如下:
1.四个锚点都在一起的情况
在此种状态可视化组件可以根据屏幕的任意位置来定进行定位,大小不会根据屏幕的大小的改变而调整。

2.四个锚点分开的情况
在此种状态下可视化组件的大小会根据屏幕的大小改变而调整可视化组件的大小。下图中Left,Right,Top和Bottom表示与这四个锚点构成的矩形的边的距离。

更详细的说明参见官方文档:http://docs.unity3d.com/Manual/UIBasicLayout.html

自动布局

自动布局系统依赖于基础布局系统。自动布局系统有两部分组成:布局元素和布局控制器。

布局元素

布局元素定义了如下尺寸:

  • Minimum width
  • Minimum height
  • Preferred width
  • Preferred height
  • Flexible width
  • Flexible height
    可以通过ILayoutElement接口查看他们的定义:
public interface ILayoutElement
    {
        float flexibleHeight { get; }
        float flexibleWidth { get; }
        int layoutPriority { get; }
        float minHeight { get; }
        float minWidth { get; }
        float preferredHeight { get; }
        float preferredWidth { get; }
        void CalculateLayoutInputHorizontal();
        void CalculateLayoutInputVertical();
    }  

每个可视化对象都继承了ILayoutElement来控制自己的大小。当然也可以通过LayoutElement组件去重写这些属性。

布局控制器

布局控制器是根据布局元素定义的大小属性来确定自己或子对象的大小和位置的。
布局控制器有两种类型的控制器:控制自己和控制子对象
控制自己
ContentSizeFitter:内容填充
Aspect Ratio Fitter:比例控制
控制子对象
Horizontal Layout Group:让子对象水平排布
Vertical Layout Group:让子对象垂直排布
Grid Layout Group:让子对象按网格排布

局控计算顺序

1.计算自己的宽(子在父之前计算),通过调用ILayoutElement的CalculateLayoutInputHorizontal
2.控制器计算宽,通过调用ILayoutController的SetLayoutHorizontal
3.计算自己的高(子在父之前计算), 通过调用ILayoutElement 的CalculateLayoutInputVertical
4.控制器计算高,通过调用ILayoutController的SetLayoutVertical

布局控重建触发时机

通过调用LayoutRebuilder.MarkLayoutForRebuild后在下一帧进行重建。

  • 在设置了能够改变布局属性的时候
  • 在一下回调被调用的时候
  • OnEnable
  • OnDisable
  • OnRectTransformDimensionsChange
  • OnValidate (仅在编辑器有效)
  • OnDidApplyAnimationProperties

交互式组件

交互式组件是用于处理鼠标,键盘,Touches和控制器的交互的组件,此组件是不可见的必须与一个或多个可视化组件一起使用。
交互式组件的公共功能能被放在了Selectable中,其中包括了交互组件的状态(normal, highlighted, pressed, disabled)切换,以及交换式组件的导航。

Button

按钮组件,通过OnClick来相应单击事件。

Toggle

Toggle是一个复选框,OnValueChanged监听它的值改变。

Toggle Group

Toggle Group是一个单选框

Slider

滑动器控件

Scrollbar

滚动条控件,通常联合Scroll Rect 和 Mask制作滚动视图。

Input Field

输入字段控件

Scroll Rect

同NGUI的ScrollView.需要配合Mask一起制作。

注意:一般在一个对象上不会挂两个交互式组件。

事件系统

事件系统是一中发送输入信息(比如像鼠标,键盘和Touches等的事件)到对象上的一种方法。
在事件系统中包括了两个主要模块:

输入模块

输入模块决定了事件系统的将有怎么样的行为。主要作用如下:

  • 处理输入
  • 管理事件状态
  • 发送事件到场景对象

同一时刻只有一个输入模块作用于事件系统,输入模块必须和EventSystem组件在同一个对象上。

Raycasters(射线器)

Raycasters主要被用于检查发送指针进入,离开和悬浮在对象。它通常用于输入模块去计算设备指针的进入,离开和悬浮等
Unity提供了3种类型的Raycasters:

  • Graphic Raycaster 用于UI
  • Physics 2D Raycaster 用于2D 物理元素
  • Physics Raycaster 用于3D物理元素

扩展自定义消息

从IEventSystemHandler借口派生一个接口出来就定义了一个消息

public interface ICustomMessageTarget : IEventSystemHandler
{
    // functions that can be called via the messaging system
    void Message1();
    void Message2();
}

通过ExecuteEvents类可以发送一个消息,此类是消息的的帮助类,可以查看,验证一个对象上的消息接口。

ExecuteEvents.Execute<ICustomMessageTarget>(target, null, (x,y)=>x.Message1());

支持的事件

  • IPointerEnterHandler - OnPointerEnter - Called when a pointer enters the object
  • IPointerExitHandler - OnPointerExit - Called when a pointer exits the object
  • IPointerDownHandler - OnPointerDown - Called when a pointer is pressed on the object
  • IPointerUpHandler - OnPointerUp - Called when a pointer is released (called on the original the pressed object)
  • IPointerClickHandler - OnPointerClick - Called when a pointer is pressed and released on the same object
  • IInitializePotentialDragHandler - OnInitializePotentialDrag - Called when a drag target is found, can be used to initialise values
  • IBeginDragHandler - OnBeginDrag - Called on the drag object when dragging is about to begin
  • IDragHandler - OnDrag - Called on the drag object when a drag is happening
  • IEndDragHandler - OnEndDrag - Called on the drag object when a drag finishes
  • IDropHandler - OnDrop - Called on the object where a drag finishes
  • IScrollHandler - OnScroll - Called when a mouse wheel scrolls
  • IUpdateSelectedHandler - OnUpdateSelected - Called on the selected object each tick
  • ISelectHandler - OnSelect - Called when the object becomes the selected object
  • IDeselectHandler - OnDeselect - Called on the selected object becomes deselected
  • IMoveHandler - OnMove - Called when a move event occurs (left, right, up, down, ect)
  • ISubmitHandler - OnSubmit - Called when the submit button is pressed
  • ICancelHandler - OnCancel - Called when the cancel button is pressed

参考文献

Unity官网-UIhttp://docs.unity3d.com/Manual/EventSystem.html
Unity官网-EventSystemhttp://docs.unity3d.com/Manual/EventSystem.html

附录-组成结构图

UGUI组成结构图

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity的UGUI基础控件是设计界面和交互的重要组成部分,它们能够让开发者轻松地创建出各种各样的UI界面。其中,最常见的基础控件包括Button、Toggle、Slider、Scrollbar等。下面,我将详细介绍如何在Unity中使用UGUI基础控件。 首先,我们需要了解如何创建UI控件。打开Unity编辑器,选择GameObject->UI->想要创建的控件(例如Button)即可创建一个UI控件。可以通过拖拽、调整属性等方式将其设置为想要的样式和功能。 接下来,我将用一个简单的血条和蓝条的实例来展示UGUI基础控件的使用。首先,我们需要创建两个UI Image控件,用于显示血条和蓝条。在Inspector面板中,设置它们的颜色、位置、大小等属性,使它们符合我们想要的效果即可。 然后,我们需要创建一个Slider控件,用于控制血条和蓝条的填充量。在Inspector面板中,我们需要设置Slider的Value属性,使其在滑动时能够控制UI Image的填充量。同时,还需要将Slider的Direction属性设置为左向右或下向上,以符合我们想要的UI设计。 最后,我们需要编写一些简单的脚本来实现血条和蓝条的逻辑。在每一帧中,我们需要将Slider的Value值与UI Image的Fill Amount属性关联起来,使得它们随着Slider的滑动而变化。同时,还需要根据游戏的状态和变化来更Slider和UI Image的Value和Fill Amount属性,从而实现动态的UI控件。 通过这个简单的实例,我们可以看到UGUI基础控件的使用非常简单,只需了解每个控件的属性和使用方法,就能轻松创建各种各样的UI界面。同时,我们还需要注意UI控件的优化,以保证游戏的流畅性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值