按钮缩放特效和音效管理脚本

在游戏开发中,大部分游戏的按钮都有一些点击效果。其中,用的比较多的是缩放效果。所以在项目中,我会用一个统一的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面板中根据需要设定值。

可以在点击事件中调用播放按钮音效。

其他的通用按钮事件也可以添加到这个脚本中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值