UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

Unity 2D游戏开发快速入门4

Unity 2D游戏开发快速入门4

1.3  使用NGUIUI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

要使用NGUI,需要首先为游戏项目导入NGUI插件资源,然后再创建UI Root对象,在这以后才可以添加各种UI控件,下面本节会详解介绍这些知识!

1.3.1  导入NGUI插件UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

NGUI插件在Unity的应用商店里,是需要先购买然后才能使用的,具体的介绍如图1-1所示。

图1-1  不同NGUI插件的收费情况说明UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

NGUI学习的成本居然这么昂贵,很多人都会望而怯步吧,但这根本就不成问题!实际上网上有很多人购买了NGUI,然后将它做成资源分享了出来,读者就可以直接拿来学习了。本书所使用的NGUI也是来自于网上,版本是3.0.2。

提示:本书附带了这一版本NGUI的下载资源。才3.0.2!现在都3.7.2了!没错,NGUI的版本更新很快,每个月基本都会更新两次,但是就学习使用NGUI而言,根本就没有必要追求最新的,学会一个版本的以后,其它的版本根本就不是问题!不就是功能更加强大,而且还添加了新的功能么!学会本书介绍的这些方法,再学习新的功能,会更加容易上手。

在游戏项目中使用NGUI的方法很简单,直接将NGUI资源包拖动到Unity中即可!

1.3.2  创建UIUI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

要让NGUI创建UI,可以使用它提供的“UI向导”,而打开此向导的方法是单击NGUI|Open|UI Wizard命令,然后会弹出名为UI Tool的对话框,如图1-2所示,此对话框就是“UI向导”。

图1-2  打开NGUI提供的“UI向导”UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

此向导中一共有2个参数,以及1个触发“创建UI”操作的按钮:

q  Layer:此参数表示要将UI控件绘制在哪一个图层里;

提示:建议读者将游戏场景中不同种类的元素,置于不同的图层。例如,将使用NGUI绘制的UI控件放置于名为NGUI的图层,方法是:首先新建新的图层“NGUI”,然后将使用UI向导创建的UI指定到“NGUI”图层中。

即首先设置参数Layer为Add Layer…,即可弹出名为Tags&Layers的对话框,在此对话框的Layers参数中自定义一个图层,将其命名为NGUI。然后回到“UI Tool”对话框中,重新设置Layer参数为NGUI即可。如图1-3所示。

图1-3  新建图层,并为UI指定图层UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

q  Camera:此参数决定了控件的显示效果;

提示:此属性包含3个参数。None表示不会额外使用摄像机;Simple 2D表示会使用一个呈现2D效果的摄像机;Advanced 3D表示会使用一个呈现3D效果的摄像机;

1.4  UI对象的结构UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

使用NGUI创建的Camera参数为Simple 2D的UI,会在游戏的场景中生成1个名为UI Root(2D)的游戏对象,且此对象下还包含了3个其它对象:Camera、Anchor和Panel,如图1-4所示。本小节会分别介绍这4个游戏对象。

图1-4  在Hierarchy视图里查看新创建的UI游戏对象

1.4.1  UI Root(2D)UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

此游戏对象将负责控制UI控件的大小。在Hierarchy视图里选中UI Root(2D)对象,然后在Inspector视图里查看此游戏对象上的组件,如图1-5所示。

图1-5  在Inspector视图里查看UI Root(2D)对象的各组件

Transform组件在Unity的游戏对象上很常见,或者说所有的游戏对象上都有此组件,很平常就不做介绍了。而UIRoot(Script)组件是此游戏对象所特有的,其属性和介绍如下:

q  Scaling Style:可以用于修改UI控件的缩放样式。

提示:此属性下有3个可选的参数:PixelPerfect、FixedSize和FixedSizeOnMobiles。

²  PixelPerfect,将确保UI控件无论在何种游戏分辨率中,始终保持指定的像素大小。例如,指定像素大小为300×200,那么游戏在320×240的分辨率下,此UI控件就会很大,而在1920×1080的分辨率下,此UI控件就会很小。

²  FixedSize,将确保UI控件无论在何种游戏分辨率中,始终于游戏视图保持指定的大小比例。即UI控件会随着游戏视图的缩放,而成比例的缩放。

²  FixedSizeOnMobiles,将确保UI控件,在移动设备上的时候,保持指定的大小比例;在其它设备上时,保持指定的像素大小。

q  Manual Height:当UI控件的缩放样式为FixedSize时,此属性就决定了UI控件是否需要成比例的缩放。例如,当游戏视图的高度大于这个属性设置的值时,UI控件会成比例的放大;当高度小于这个值时,UI控件会成比例的缩小;

提示:UI控件缩放时,控件的宽高比是恒定的。

q  Minimum Height:当UI控件的缩放样式为PixelPerfect时,此属性就指定了游戏视图的最小高度,当游戏视图的高度值小于这个属性的设置值时,UI控件就会主动成比例的缩小;

q  Maximum Height:当UI控件的缩放样式为PixelPerfect时,此属性就指定了游戏视图的最大高度,当游戏视图的高度值大于这个属性的设置值时,UI控件就会主动成比例的放大;

提示:游戏视图的分辨率比例多种多样,而UI控件仅仅以高度为依据,决定是否缩放控件,因此就有可能导致在不同的游戏分辨率比例下,出现UI控件可能会被视图“裁剪”的情况。为了应对这一情况,建议读者使用两种方法来避免。

方法一:将UI控制设置为正方形,即UI控件的宽度和高度相同;

方法二:为游戏视图指定游戏时的分辨率比例。指定的方法是,在Unity中单击Edit|Project Settings|Player命令,会弹出名为PlayerSettings的对话框,如图1-6所示。

图1-6  PlayerSettings对话框UI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

展开PlayerSettings对话框里的Resolution and Presentation属性组,设置其中的Supported Aspect Ratios属性,如图1-7所示。

图1-7  Resolution and Presentation属性组

Unity默认支持的游戏视图分别率有很多,如4:3、16:10等等,如果希望游戏仅能在分别率4:3下运行,就取消对其它分辨率的复选。

1.4.2  CameraUI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

在Hierarchy视图里,选中Camera,然后在Inspector视图里查看其各组件,如图1-8所示。对于Transform和Camera组件,对于使用过Unity的读者来说再熟悉不过。但是其上名为UICamera(Script)的脚本组件,才是NGUI创建的UI控件所特有的。

提示:UICamera(Script)脚本组件通常会被赋予特定的摄像机对象,而这些摄像机的特殊之处在于它需要与UI控件发生交互。即接收来自于UI控件的各种消息事件,例如,游戏界面上的特定按钮被点击的事件。

图1-8  Camera里的各组件

UICamera(Script)脚本组件包含了大量的属性:

q  Event Type:指定这个摄像机将会发送的事件类型;

提示:此属性包含了两个参数:World和UI。前者表示事件来自于与3D世界中游戏对象的交互;后者表示事件来自于与2D控件的交互;

q  Event Mask:指定可以接收到事件消息的图层;

q  Allow Multi Touch:指定是否允许多点触控;

q  Sticky Press:指定当手指在一个按钮处按下,然后手指滑动到按钮外部的时候,按钮是否会弹起,而其它对象则是否会接收到来自于这个手指的触发事件;

提示:复选Sticky Press属性的时候,按钮会持续处于被按下的状态,即使此时手指已经滑动到了按钮外,而其它控件也不会接收到来自于手指的触发事件;

q  Sticky Tooltip:指定UI控件上作为控件说明的便笺信息,将在怎样的事件被触发以后显示;

提示:Sticky Tooltip属性被复选的时候,便笺信息在鼠标移动到UI控件外部的时候显示;取消复选的时候,鼠标移动到UI控件上的时候显示便笺信息,移出后马上消失。

q  Tooltip Delay:用于设置便笺信息持续显示的时间,单位是秒;

q  Raycast Range:Raycast实际上可以被看作是一条不可见的射线,它以鼠标的位置或者屏幕上被触摸的位置为起点,以当前摄像机的朝向为方向发射一条射线,此射线就被用于检测碰撞以及其它事件,有些开发者或许希望可以指定这个射线能够检测的范围,就可以通过设置这个属性来实现。

提示:Raycast Range默认的属性值是-1,表示没有范围限制;

q  Event Sources:此属性用于指定摄像机所监听事件的来源;

提示:一共有4个可选项,Mouse表示监听鼠标事件,可以来自于鼠标左键、右键、中键和滚轮;Touch表示监听移动设备的触摸事件;Keyboard表示监听键盘的输入事件;Controller表示监听来自于操纵杆设备的事件;

q  Thresholds:指定特定事件可以被触发的临界值;

提示:一个有4个可设置的值,Mouse Drag表示判定当前事件是鼠标拖动事件的临界值是鼠标至少拖拽了多少个像素点;Mouse Click表示判断当前事件是鼠标点击事件的临界值是鼠标按下了以后,在拖动了多少个像素点之内,松开了按键,超出范围则不判定为点击事件;Touch Drag与Touch Tap类似于前两个可设置的值,只不过是鼠标换成了手指;

q  Axes and Keys:设置NGUI插件的输入系统。

提示:在Unity中,Keys几乎表示了所有输入设备的键值,例如,键盘上的所有按键都有对应的Keys,其它游戏操纵杆也一样,因此可以直接使用Keys表示特定的按键。同时,Unity将其中一些常用的Keys映射到了一些其它的Axes上,因此开发者也可以直接使用Axes表示特定的按键。NGUI对Axes and Keys属性的默认设置如图1-9所示,前3个是Axes,后4个是Keys。

图1-9  NGUI对Axes and Keys属性的默认设置

对于Keys,读者可以直接从名称上识别出其对应的键,但是对于Axes,与它对应Keys读者也许并不了解,而且读者有时可能需要修改Axes对应的Keys,有时则是直接添加Axes。那么,在Unity中如何添加和修改Axes呢?方法是,单击Edit|Project Settings|Input命令,即可弹出名为InputManager的对话框,读者可以在此对话框中添加和修改Axes,如图1-10所示。

图1-10  Unity默认设置的AxesUI对象的结构UI Root(2D) CameraEvent SourcesRaycast Range

Comments are closed.