博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Unity] UGUI功能扩展插件包
阅读量:7243 次
发布时间:2019-06-29

本文共 2943 字,大约阅读时间需要 9 分钟。

在使用Unity的UGUI时,发现自带的控件很少,而且功能比较简单,比如Button在属性面板中只有一个OnClick事件可以设置。但是我需要有更多功能的Button,比如能在属性面板中设置OnDown, OnUp, OnEnter, OnExit, OnLongClick这些事件等。我在网上看到有高手做了一些东西来增加相关UI组件的易用性,比如的EventTriggerListener类(网址:)。EventTriggerListener类算是比较好用的封装了,但这需要写代码,有时候还是感觉很麻烦。

 

有麻烦就需要解决,经过这两天的学习,到处查了资料,后来又找到了ugui的开源代码(UGUI之前以为没有开源,造成很多困扰),然后就做了ButtonEx。

我们先来看看效果图:

可以直接在Hierarchy窗口中右键菜单 UI\ButtonEx 添加一个ButtonEx组件。

 

可以看到多了很多事件设置项。这样子用起来就方便了。

可以在C#中通过设置 FormerlySerializedAs 来让事件属性显示在 Inspector 面板上。

 

[Serializable]        public class ButtonClickedEvent : UnityEvent {}        [FormerlySerializedAs("onClick")]        [SerializeField]        private ButtonClickedEvent m_OnClick = new ButtonClickedEvent();        [FormerlySerializedAs("onLongClick")]        [SerializeField]        private ButtonClickedEvent m_OnLongClick = new ButtonClickedEvent();        [FormerlySerializedAs("onDown")]        [SerializeField]        private ButtonClickedEvent m_OnDown = new ButtonClickedEvent();        [FormerlySerializedAs("onUp")]        [SerializeField]        private ButtonClickedEvent m_OnUp = new ButtonClickedEvent();        [FormerlySerializedAs("onEnter")]        [SerializeField]        private ButtonClickedEvent m_OnEnter = new ButtonClickedEvent();        [FormerlySerializedAs("onExit")]        [SerializeField]        private ButtonClickedEvent m_OnExit = new ButtonClickedEvent();

 

通过设置 MenuItem 来修改Hierarchy面板的菜单。

[MenuItem("GameObject/UI/ButtonEx")]        static void CreateButtonEx(MenuCommand menuCmd) {            // 创建游戏对象            float w = 160f;            float h = 30f;            GameObject btnRoot = UICommon.CreateUIElementRoot("ButtonEx", w, h);            // 创建Text对象            UICommon.CreateUIText("Text", "Button", btnRoot);            // 添加脚本            btnRoot.AddComponent
(); Image img = btnRoot.AddComponent
(); img.color = Color.white; img.fillCenter = true; img.raycastTarget = true; img.sprite = Common.findRes
("UISprite"); if (img.sprite != null) img.type = Image.Type.Sliced; btnRoot.AddComponent
(); btnRoot.GetComponent
().image = img; // 放入到UI Canvas中 UICommon.PlaceUIElementRoot(btnRoot, menuCmd); }

 

通过设置 AddComponentMenu 实现在主菜单中的 Component 菜单中增加菜单项。

[AddComponentMenu("UI/ButtonEx", 50), RequireComponent(typeof(RectTransform))]    public class ButtonEx : Selectable, IPointerClickHandler, ISubmitHandler, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler {

 

从UGUI的开源代码中可以看到很多东西的实现, 其中 MenuItem 的添加UI对象的功能, 用到了 MenuOptions, DefaultControls 这两个类里面的东西, 但是很郁闷的时, 这两个类里面很多都是私有方法, 我们自定义控件时不能很方便的直接使用, 于是我封装了 YxdUGUI 这个开源库, 其中的 UICommon.cs 实现了这两个类的大部分功能。

有兴趣的童鞋可以下载源码, 有问题欢迎指正, 我会慢慢的完善这个开源库。

 

项目开源地址:   

 

本文为原创内容,转载请注明出处。

 

转载于:https://www.cnblogs.com/yangyxd/articles/5308274.html

你可能感兴趣的文章
shell seq
查看>>
docker技术剖析--数据卷 for centos7.2
查看>>
linux环境安装node.js环境和pm2
查看>>
跳槽的时候如何和招聘方谈薪水
查看>>
mysql5.7的主从复制+读写分离
查看>>
周工作不得超过40小时
查看>>
synchronized块
查看>>
maven 引入 本地 jar
查看>>
Struts2.1.6+Spring2.5.6+Hibernate3.3.1全注解实例详解(四)
查看>>
服务器RAID6三块硬盘离线 数据丢失的恢复过程
查看>>
Sql Server数据库由于未知原因丢失的恢复方法
查看>>
dsp技术
查看>>
Win7出现临时用户解决办法
查看>>
HttpClient 和 HttpUrlConnection 简单封装
查看>>
windows redis 集群搭建(三)
查看>>
[软考]关键路径法CPM详细解释及应用,实例讲解收集(信息系统项目管理师-时间管理)...
查看>>
基于Cubieboard的HuLuduino硬件计划和Sunduino软件计划启动
查看>>
esxi虚拟机无法正常启动
查看>>
[iOS]内存管理
查看>>
netgear交换机配置
查看>>