一、Button(Script)组件:
Interactable(是否可用):勾选,按钮可用;取消勾选,按钮不可用,并进入Disabled状态。
Transition(过渡方式):按钮在状态改变时自身的过渡方式:
Color Tint(颜色改变)
Sprite Swap(图片切换)
Animation(执行动画)
Target Graphic(过渡效果作用目标):可以是任一Graphic对象。
Navigation(按钮导航):假如你现在有四个按钮,当你点击第一个时,第一个会保持选中状态,然后通过按键盘方向键,会导航将选中状态切换到下一个按钮上,例如你的第一个按钮下方存在第二个按钮,当你选中第一个按方向键下时,第一个按钮的选中状态取消,第二个按钮进入选中状态,前提是这些按钮都开启了导航功能。
None(关闭):关闭导航。
Automatic(自动导航):自动识别并导航到下一个控件。
Horizontal(水平导航):水平方向导航到下一个控件。
Vertical(垂直导航):垂直方向导航到下一个控件。
Explicit(指定导航):特别指定在按下特定方向键时从此按钮导航到哪一个控件。
OnClick():按钮点击事件触发集合。
Color Tint(颜色改变过渡模式):
Normal Color(默认颜色):初始状态的颜色。
Highlighted Color(高亮颜色):选中状态或是鼠标靠近会进入高亮状态。
Pressed Color(按下颜色):鼠标点击或是按钮处于选中状态时按下enter键。
Disabled Color(禁用颜色):禁用时颜色。
Color Multiplier(颜色切换系数):颜色切换速度,越大则颜色在几种状态间变化速度越快。
Fade Duration(衰落延时):颜色变化的延时时间,越大则变化越不明显。
Sprite Swap(图片切换过渡模式):
Highlighted Sprite(高亮图片):选中状态或是鼠标靠近会进入高亮状态。
Pressed Sprite(按下图片):鼠标点击或是按钮处于选中状态时按下enter键。
Disabled Sprite(禁用图片):禁用时图片。
Animation(播放动画过渡模式):
Normal Trigger(默认触发器):默认状态触发。
Highlighted Trigger(高亮触发器):选中状态或是鼠标靠近会进入高亮状态。
Pressed Trigger(按下触发器):鼠标点击或是按钮处于选中状态时按下enter键。
Disabled Trigger(禁用触发器):禁用时触发。
Auto Generate Animatior(自动生成动画控制器):
点击此按钮,会自动生成一个包含了以上四种状态以及四种动画的animatior,然后选中此按钮,ctrl+6进入动画编辑界面,分别对以上四种动画进行调动就可以了。
二、点击事件
-
UnityAction本质上是delegate,且有数个泛型版本(参数最多是4个),一个UnityAction可以添加多个函数(多播委托)
-
UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有Invoke()方法能够一次性调用所有注册了的UnityAction。UnityEvent也有数个泛型版本(参数最多也是4个),但要注意的一点是,UnityAction的所有带参数的泛型版本都是抽象类(abstract),所以如果要使用的话,需要自己声明一个类继承之,然后再实例化该类才可以使用。
using System.Collections;
using UnityEngine.UI;
using UnityEngine.Events;
public class test : MonoBehaviour {
public GameObject obj;
public delegate void BtnDelegate();
public BtnDelegate btnEvent;
void Start () {
btnEvent = OnClick ;
AddEventListener (obj, OnClick);
//obj.GetComponent<Button> ().onClick.AddListener (OnClick);
}
public void OnClick()
{
Debug.Log ("我被点击了");
}
public void AddEventListener(GameObject _target,UnityAction _callback)
{
Button button = _target.GetComponent<Button> ();
if(button==null)
{
Debug.Log ("按钮" + _target.name + "丢失脚本Button!");
}
button.onClick.AddListener (_callback);
}
}