Unity 通用按钮点击缩放脚本

前言

在很多的游戏当中都有这样的效果:当按钮被按下时缩小,松开时放大。今天带来一个通用的脚本,只需要挂载到需要实现效果的按钮上就可以啦

源码

(觉得代码墨迹的下边有懒b简洁版)

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;


[RequireComponent(typeof(Button))]
public class ButtonScaler : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
{
    //原始缩放
    private Vector3 originalScale;
    //点击缩放
    private Vector3 pressedScale;

    private Button button;

    [SerializeField] Transform tf;

    private void Awake()
    {
        //获取原始缩放  避免有些按钮一开始的缩放不是1
        originalScale = transform.localScale;
        //按下缩放为原始缩放的0.9倍
        pressedScale = originalScale * 0.9f;

        //默认获取自身的变换组件
        if (tf == null) tf = transform;
        //获取按钮组件
        button = GetComponent<Button>();
    }

    //按钮抬起
    public void OnPointerUp(PointerEventData eventData)
    {
        if (button.interactable) tf.localScale = originalScale;
    }
    //按钮按下
    public void OnPointerDown(PointerEventData eventData)
    {
        if (button.interactable) tf.localScale = pressedScale;
    }

    public void OnPointerClick(PointerEventData eventData)
    {
        
    }

    private void OnDisable()
    {
        Destroy(this);
    }
}

代码解释

有些代码也是可以优化的,我简单讲解一下:

1.首先开头添加了[RequireComponent(typeof(Button))] 特性,确保脚本只能添加到有 Button 组件的对象上。

2.使用缓存的originalScale和pressedScale 变量来存储缩放值,避免了每次点击的计算。

3.设置了一个带有[SerializeField]序列化的变换组件,这就是我们要缩放的物体,如果这个为空,那么默认就是按钮本身。我们也可以设置想要进行缩放的物体,增加可定制性,应对多种情况。

4.定义了一个Button 对象,并且在Awake中获取Button组件,这也对应了开头添加的[RequireComponent(typeof(Button))]特性, 这一步是为了让按钮只有在interactable可交互的时候才会触发缩放效果,有些时候我们在游戏中可能将按钮设置了不可点击interactable = false  那么也没有缩放的必要啦

代码清理

当然有些人觉得代码比较多,当你确定你的游戏中满足了以下要求你可以去掉对应的代码:

1.按钮只缩放自己本身  可以去掉 tf 变量的声明

2.按钮在游戏中不会设置不可点击,或者没有使用过interactable属性 可以去掉 button 的声明 以及[RequireComponent(typeof(Button))]特性 和UnityEngine.UI 的引用

3.你的游戏中所有的按钮初始缩放都是默认的1  那你也可以去掉开头变量的声明和Awake中的计算 ,直接使用写死的值

4. 如果你的游戏中,所有按钮的添加脚本都是在OnEnable方法中添加,而不是使用其他方式,那么一定一定不要去掉最下方的Destroy(this);  假设有这样的情况:你有一个设置界面,你在这个界面的脚本中的OnEnable()方法中写了这样的代码:btnClose.gameObject.AddComponent<ButtonScaler>();

意为在关闭按钮上添加缩放脚本。 假设这个关闭按钮的点击事件为禁用当前界面(而不是从场景中删除),那么当你下次打开设置界面时,你会发现你的关闭按钮上有两个ButtonScaler脚本。

简化版本

接下来给大家提供一个简洁版:

using UnityEngine;
using UnityEngine.EventSystems;

public class ButtonScaler : MonoBehaviour, IPointerDownHandler, IPointerUpHandler,
{

    //按钮抬起
    public void OnPointerUp(PointerEventData eventData)
    {
        transform.localScale =   Vector3.one;
    }
    //按钮按下
    public void OnPointerDown(PointerEventData eventData)
    {
        transform.localScale =   Vector3.one * 0.8f;
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值