Unity UGUI学习(一)

来源:互联网 发布:新西兰 购物 知乎 编辑:程序博客网 时间:2024/06/05 09:57

上次的坦克大战已经做好了(然而还是没有找到实习……),好歹也是自己做的,先上图
这里写图片描述
哈哈,也就这样了

最近在学习UGUI做界面,现在在做个简单的RPG游戏界面,个人感觉UGUI挺好用的,虽然没学过NGUI,不清楚两者的区别,但UGUI在适应分辨率,事件触发等等方面都不错。接下来分享一些制作心得。

如何做一个弹出的顶置界面

首先新建一个Image作为蒙层,在Image下面新建需要弹出的界面,如下
这里写图片描述
蒙层(在上图是指DescritionMask)的Anchor Persets设置为充满全屏,如下
这里写图片描述

弹出这个功能可以使用Canvas Group组件实现,这个组件真的十分好用

这里写图片描述

Alpha代表UI对象的透明度,从0到1是完全透明到完全不透明,可以用于界面的隐藏/显示,可以做出渐入渐出的效果;
Interactable代表是否可以交互;
Blocks Raycasts代表是否阻挡射线;
Ignore Parent Groups代表是否无视父对象;

在DescritionMask添加Canvas Group,设置Alpha默认为0,即不显示这个界面,当然也不可以操作
这么做可以不通过SetActive(false)来隐藏界面,通过脚本来查找这个对象就很方便。
另外Blocks Raycasts不勾选,因为界面处于不显示状态。

设置一个按钮弹出界面添加点击事件,如下

void OnPress()    {        //设置蒙层透明度为1,即完全不透明        GetComponent<CanvasGroup>().alpha = 1;        //打开蒙层阻挡点击,相当于顶置UI,点击不了其他界面        GetComponent<CanvasGroup>().blocksRaycasts = true;    }

接下来是顶置

顶置的实际表现就是当点击这个界面以外的的地方这个界面就会关闭(起码我是这么认为的- -)
那么关键就在于侦测鼠标是不是点击了这个界面,这个需要用脚本实现

大家可以搜搜EventSystem事件系统,是负责UI管理的,根据想要响应的事件实现对应的接口,功能十分强大

这里实现IPointerClickHandler接口,调用事件OnPointerClick(PointerEventData data),
OnPointerClick(PointerEventData data)是当绑定了这个脚本的UI界面被点击时自动触发的,具体代码如下

void OnPointerClick(PointerEventData data)    {        //获取射线接触到的第一个对象的数据        RaycastResult rr = data.pointerPressRaycast;        if (rr.gameObject != descUI)        {            //设置蒙层透明度为1,即完全透明            GetComponent<CanvasGroup>().alpha = 0;            //关闭蒙层阻挡点击            GetComponent<CanvasGroup>().blocksRaycasts = false;        }    }

PointerEventData这个类的属性十分丰富,可以获取很多数据,给出官方文档传送门:http://docs.unity3d.com/ScriptReference/EventSystems.PointerEventData.html
把完整的脚本绑定到DescritionMask

以上需要注意三点:
1.Canvas Group组件中的Blocks Raycasts设置为true时可以阻挡鼠标点击DescritionUI背后的按钮,实现顶置,也确保鼠标如果不是点击在DescritionUI上,就是点击在DescritionMask上;
2.data.pointerPressRaycast返回的是射线第一个接触到的对象结果,但是如果DescritionUI的Image组件不勾选Raycast Target,则不会被侦测到(好像Panel也不会被侦测到);
3.实现了IPointerClickHandler接口就必须调用里面的事件,相反地,调用响应事件(例如OnPointerClick())就必须实现相应的接口,否则无效。

———————————–

通过以上步骤,一个可以弹出,可以隐藏的顶置界面就做好了,有时间再慢慢分享其他心得
长路慢慢,上下求索。

1 0
原创粉丝点击