
知识总结
知识点一:Sprite对象
Unity图片类型为Texture时,没有办法为其加入动画、碰撞等效果,也无法用脚本来控制,可以将其设置为Sprite。如飞机射击游戏中子弹、敌人等所有可操控或者有触发事件的对象都需要将其设置为Sprite类型。需要设置为Sprite类型的对象,基本上具备了以下任意一个条件。
(1)动画:在2D软件的任务设置中,最常遇到的就是动画的展示,例如角色在接收到指令时,会快速显示一连串动作的分解图,利用人眼视觉暂留的效果来达到角色动起来的错觉。
(2)碰撞与触发:在软件中最重要的设置就是碰撞检测与触发事件,如操作的角色触碰到某个对象(陷阱),就让角色执行某项动作(生命值减少)。这时候为了能够加入碰撞检测与程序控制,角色和陷阱都需要被设置为Sprite类型。
(3)UI界面:软件中常常要使用到按钮,按钮事件的触发必须通过鼠标、键盘、手指等外来的操控方式,需要在程序中特别去监听这些外来操控方式的发生。
知识点二:Sprite类型设置
Sprite类型的设置方法为:首先选中要设置的图片,在Inspector面板中将图片的类型(Texture Type)选择为“Sprite(2 D and UI)”值。还可以根据需要对图片的Sprite Mode属性进行修改。该属性用来决定当前对象是用多少张图片组成的。如果选择Single值,就代表此对象由一张大图组成;如果选择Multiple值,就代表此对象由多张分割图片所组成。
知识点三:Sprite Editor编辑器
有时因为准备的素材图片是连成一个整体的,无法对图片进行操作,所以需要对图片进行切割。这时就可以用Unity所提供的Sprite Editor编辑器来执行。在Slice分割设置菜单中提供了两种Type的切割方式,分别为Automatic和Grid。
(1)自动分割(Automatic):对整个图片中非透明背景的区域进行分割。选择自动分割时,会出现Pivot、Method等辅助选项。在本范例中,选择自动分割方式后,其余设置都采用默认值。最后单击Slice按钮,即可自动对每个按钮图片进行切割,如图2-17所示。
其中Pivot参数用于设置每张分割图的定位点,通常使用图片中心(Center)。Method参数用于设置分割模式,在下拉列表中包含Delete Existing、Smart和Safe三种模式。当Method设置为Delete Existing模式时,删除原有的分割框重新分割;当Method设置为Smart模式时,会保留或调整原有的分割框进行分割;当Method设置为Safe模式时,则在不改变原有分割框下进行分割。

图2-17 自动分割类型选择
(2)网格分割(Grid):通过设置每格分割框的大小,以同样大小的框架范围进行图片的切割。因此选择网格分割时,出现的辅助设置选项是用来设置分割框尺寸的,如图2-18所示。

图2-18 网格分割
其中Pixel Size参数用来设置每格分割框的宽(X)与高(Y)。Offset参数用于设置所有分割框向右偏移(X)、向下偏移(Y)的量。Padding参数用于设置每个分割框横向(X)和纵向(Y)的间距。Pivot参数用于设置每张分割图的定位点。
知识点四:鼠标碰撞检测与事件监听
鼠标事件,都是当鼠标和GUI或者碰撞体(Collider)交互时候触发。鼠标事件有多种类型,当发生不同事件时会调用不同的函数,常用函数如下。
(1)OnMouseDown()当鼠标按下:当用户鼠标在GUIElement(GUI元素)或Collider(碰撞体)上单击时,OnMouseDown被调用。
(2)OnMouseDrag()当鼠标拖曳:当用户鼠标在GUIElement或Collider上拖曳时,OnMouseDrag被调用。需要说明的是,drag其实就是鼠标down后up之前持续每帧都会发送此消息。
(3)OnMouseEnter()当鼠标进入:当鼠标进入到GUIElement或Collider中时,调用OnMouseEnter。
(4)OnMouseExit()当鼠标退出:当用户鼠标退出GUIElement或Collider上时,OnMouseExit被调用。
(5)OnMouseOver()当鼠标经过:当用户鼠标在GUIElement或Collider上经过时,OnMouseOver被调用。
(6)OnMouseUp()当鼠标弹起:当用户释放鼠标按钮时调用OnMouseUp。
(7)OnMouseUpAsButton()当鼠标作为按钮弹起时:OnMouseUpAsButton只有当鼠标在同一个GUIElement或Collider按下,再释放时调用。
知识点五:SpriteRenderer
在实现控制菜单按钮时,当鼠标实施不同的动作、菜单按钮颜色切换时,利用Sprite_Renderer.sprite脚本进行按钮图片的切换,将图片切换为数组中Sprite类型的图片,即鼠标实施不同动作,菜单按钮颜色发生的变化实质是显示的图片发生了改变。
试一试
请将本节制作控制菜单界面中的各个场景补充完整,要求如下。
(1)创建名字为Scene1至Scene4的四个场景,为每个场景分别添加一个“返回”按钮,从而实现鼠标按下、光标进入、光标退出、鼠标弹起等鼠标事件时按钮呈现不同的状态。
(2)单击场景Scene1至Scene4中的“返回”按钮,可以返回初始的控制菜单界面。
(3)从初始的控制菜单界面,单击“种子发芽”的按钮,可以打开名字为Scene1的场景,从该场景单击“返回”按钮,可以回到控制菜单界面。其他按钮以此类推,分别打开不同的场景,在场景中单击“返回”按钮,也可以回到控制菜单界面。