在游戏开发中,大部分游戏的按钮都有一些点击效果。其中,用的比较多的是缩放效果。所以在项目中,我会用一个统一的C#脚本来管理这些按钮的点击效果和声音。
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using UnityEngine.Events;
using DG.Tweening;
public class UIButton : Button
{
public float normalScale = 1f;//Õý³£³ß´ç
public float pressScale = 0.8f;//°´Ï³ߴç
public float duration = 0.2f;//¶¯»¹ý³Ìʱ¼ä
public override void OnPointerClick(PointerEventData eventData)
{
base.OnPointerClick(eventData);
//ÒôЧ
AudioManager.instance.PlayUISounds("defaultBtn");
}
// Start is called before the first frame update
// ½Å±¾¿ªÊ¼Ê±£¬Îª°´Å¥Ìí¼Ó¼àÌýʼþ
protected override void Start()
{
AddTriggersListener(gameObject, EventTriggerType.PointerDown, OnPointDown);
AddTriggersListener(gameObject, EventTriggerType.PointerUp, OnPointUp);
}
// °´ÏµĻص÷ʼþ
void OnPointDown(BaseEventData bd)
{
if (transform.Find("icon_btn") != null)
{
transform.Find("icon_btn").DOScale(pressScale, duration);
}
else
{
transform.DOScale(pressScale, duration);
}
}
// ̧ÆðµÄ»Øµ÷ʼþ
void OnPointUp(BaseEventData bd)
{
if (transform.Find("icon_btn") != null)
{
transform.Find("icon_btn").DOScale(normalScale, duration);
}
else
{
transform.DOScale(normalScale, duration);
}
}
// Ìí¼Ó¼àÌýʼþµÄ·½·¨
private void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction<BaseEventData> action)
{
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = obj.AddComponent<EventTrigger>();
}
if (trigger.triggers.Count == 0)
{
trigger.triggers = new List<EventTrigger.Entry>();
}
UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventID;
entry.callback.AddListener(callback);
trigger.triggers.Add(entry);
}
}
要使用这个组件,需要项目中已经存在DoTween插件。
使用的时候,只需要在按钮上添加此组件即可。
这里需要说明的是:
1.之所以代码里会先去自物体里寻找一个名为:"icon_btn"的物体,是因为我习惯将按钮的图片放在子物体上,按钮本身的图片全透明。这样子可以方便的通过按钮的大小去调整感应区域,而不会使按钮变形。
2. 使用图片的监听事件而不使用按钮本身的onClick.AddListener()监听事件,是因为我们的项目中,添加按钮点击事件时,都会先清空按钮的点击事件。我也推荐使用图片监听事件,这样就不会因为按钮点击事件会被清空而失去效果。
3.变量使用public,是为了方便不同的按钮可以使用不同的缩放尺寸和时间。我们可以在Inspector面板中根据需要设定值。
可以在点击事件中调用播放按钮音效。
其他的通用按钮事件也可以添加到这个脚本中。