今天教大家做一个简单的Ugui button事件的封装。
什么时候会用到该封装?
比如我们会遇到一些游戏,当点击一个按钮时,会弹出一个转圈的动画(可能在加载资源,也可能在从服务器获取数据)
按照惯例,我们几乎会在每个按钮的事件里添加一行代码,去打开转圈的动画。
这时候,我们就可以考虑下面的教程啦。
封装的目的是简洁代码,省去一些不必要的代码操作。
我这里教给大家封装的Button和Toggle的方法。其他事件类似,自己需要添加上就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using UnityEngine.UI; using UnityEngine.Events; public static class AddListenerExtend { public static void AddListener( this Button button, UnityAction action, bool showLoadingMask ) { button.onClick.AddListener( () => { action(); if ( showLoadingMask ) { // 这里修改为自己需要执行的方法。 LoadingMaskManager.ShowLoadingMask(); } } ); } public static void AddListener( this Toggle toggle, UnityAction<bool> action, bool showLoadingMask ) { toggle.onValueChanged.AddListener( (bool isOn) => { action( isOn ); if ( showLoadingMask && isOn ) { // 这里修改为自己需要执行的方法。 LoadingMaskManager.ShowLoadingMask(); } } ); } } |
调用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
using UnityEngine; using System.Collections; using UnityEngine.UI; public class NewBehaviourScript : MonoBehaviour { Button button1; Button button2; Toggle toggle1; Toggle toggle2; // Use this for initialization void Start() { button1 = transform.FindChild( "Button1" ).GetComponent<Button>(); button1.AddListener( OnButtonEvent, true ); button2 = transform.FindChild( "Button2" ).GetComponent<Button>(); button2.AddListener( OnButtonEvent, false ); toggle1 = transform.FindChild( "Toggle1" ).GetComponent<Toggle>(); toggle1.AddListener( OnToggleEvent, false ); toggle2 = transform.FindChild( "Toggle2" ).GetComponent<Toggle>(); toggle2.AddListener( OnToggleEvent, false ); } void OnButtonEvent() { } void OnToggleEvent(bool isOn) { } } |
- 本文固定链接: http://www.u3d8.com/?p=1060
- 转载请注明: 网虫虫 在 u3d8.com 发表过
受教了
这个封装UI,您有demo工程吗?
没有demo,只是分享了教程