该课时下暂无相关问答
暂无与本课时相关联的问
按钮介绍
按钮是制作UI过程中最核心、最重要的控件之一。在游戏中,按钮是用户操作最依赖的控件,无处不在。
广泛地说,按钮的核心在于接收事件,任何可以接收事件的,都可以称作按钮.
下面的按钮可以说是我们经常见到。
按钮的创建
运用NGUI制作一个能够响应用户操作的按钮,需要具备的条件有哪些?
* 1.按钮的外貌—–使用UISprite来呈现。
* 2.用于处理鼠标交互的碰撞器——Collider.
* 3.用于展现按钮的组件-UIButton(此组件并不是必须的)
* 1.按钮的外貌—–使用UISprite来呈现。
* 2.用于处理鼠标交互的碰撞器——Collider.
* 3.用于展现按钮的组件-UIButton(此组件并不是必须的)
按钮的属性
按钮的属性基本分三部分
* 按钮交互四种颜色过度控制
* 按钮交互过程中精灵控制
* 按钮常用Click事件调用处理
按钮的交互方式
对于按钮的交互处理,有很多种方式,下面给大家一一做说明。
第一种方式
通过Inspector 面板的On Click组进行制定。
在脚本中定义Public 方法,然后将脚本挂载到某个游戏对象上,并将此对象拖拽到OnClick面板中,从Method险种选择相应类中的方法。
第二种方式
此方法与第1种方法类似,为按钮添加EventTrigger组件,每组事件都和第一种方法中的OnClick一样,然后采用第一种方法,为相应的事件添加方法调用。
- OnHoverOver
- OnHoverOut
- OnPress 鼠标左键按下
- OnRelease 鼠标左键松开
- OnSelect
- OnDeselect
- OnClick/Tap 鼠标点击或触屏点击
- OnDouble-Click/Tap 鼠标双击或触屏双击
- OnDragOver 按下鼠标拖动到按钮上
- OnDragOut 按下鼠标拖动到按钮外
第三种方式
这种方式是再脚本中编写固定的方法签名,然后将脚本挂在到按钮对象上。
using UnityEngine;
using System.Collections;
public class ButtonDemo : MonoBehaviour {
void OnDrag(Vector2 delta){
print("拖动"+delta);
}
void OnHover()
{
print("鼠标移上");
}
void OnClick(){
print("点击");
}
void OnDoubleClick () {
print("鼠标双击");
}
}
第四种方式
通过定义添加VoidDelegate的形式添加交互操作(仅限处理OnClick事件)
using UnityEngine;
using System.Collections;
public class ButtonDemo : MonoBehaviour {
void Start () {
//获取按钮组件
UIButton btn = this.GetComponent<UIButton>();
//创建委托
EventDelegate dele1 = new EventDelegate(onBtnClickA);
//将委托添加给按钮的Click
btn.onClick.Add(dele1);
}
private void onBtnClickA()
{
print("按钮被点击了");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
第五种方式
通过交互对象添加UIEventListener组件方法处理按钮多种相关事件.
using UnityEngine;
using System.Collections;
public class ButtonDemo : MonoBehaviour {
void Start () {
//为按钮添加UIEventListener组件,并处理点击事件
UIEventListener ue = this.gameObject.AddComponent<UIEventListener>();
//处理点击事件
ue.onClick = onBtnClickA;
}
private void onBtnClickA(GameObject go)
{
print("按钮被点击了 onBtnClickA");
}
//直接使用简写方式处理
UIEventListener.Get(this.gameObject).onClick = onBtnClickB;
}
对于Start中的方法,可以采用下面的简写方式。
UIEventListener.Get(this.gameObject).onClick = onBtnClickA;
UGUI动态创建按钮
UIEventListener.Get(this.gameObject).onClick = onBtnClickA;
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- /// <summary>
- /// 脚本位置:UGUI的按钮身上
- /// 脚本功能:动态的添加按钮的点击事件
- /// </summary>
- public class ListenerTest : MonoBehaviour {
- private Button button ;
- void Start () {
- button = GetComponent<Button>();
- button.onClick.AddListener(
- delegate() {
- TestButtonClick testClick = GameObject.FindObjectOfType<TestButtonClick>();
- testClick.OnClickButton();
- }
- }
- }
- <pre name="code" class="csharp">using UnityEngine;
- using System.Collections;
- /// <summary>
- /// 脚本位置:摄像机身上
- /// 脚本功能:当点击按钮的时候动态的添加此脚本上的OnClickButton方法
- /// </summary>
- public class TestButtonClick : MonoBehaviour {
- // Use this for initialization
- void Start () {
- }
- // Update is called once per frame
- void Update () {
- }
- public void OnClickButton()
- {
- Debug.Log("已经成功监听按钮的点击事件");
- }
- }
NGUI动态创建按钮
- using UnityEngine;
- using System.Collections;
- /// <summary>
- /// 脚本位置:NGUI的Button身上
- /// 脚本功能:监听事件的添加和取消
- /// 创建时间:2015年11月18日
- /// </summary>
- public class Listener : MonoBehaviour
- {
- // Use this for initialization
- void Start ()
- {
- // 给Button按钮添加监听事件
- EventDelegate.Add (GetComponent<UIButton> ().onClick, AddOnClick);
- }
- // Update is called once per frame
- void Update ()
- {
- }
- public void AddOnClick ()
- {
- Debug.Log ("按钮的监听事件添加成功");
- }
- // 取消NGUI按钮的监听事件
- public void CancelOnClick ()
- {
- EventDelegate.Remove (GetComponent<UIButton> ().onClick, AddOnClick);
- }
- }