美文网首页UGUI
Unity中,按钮按下抬起的缩放效果

Unity中,按钮按下抬起的缩放效果

作者: 全新的饭 | 来源:发表于2022-02-14 13:35 被阅读0次

示意

按钮点击效果.gif

相关配置

在Button组件同级下挂上该脚本组件:UIBtnScaleEffect


image.png

代码

UIBtnScaleEffect.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class UIBtnScaleEffect : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    [SerializeField, Header("按下时缩小至多少?"), Range(0, 1)]
    private float _downScale = 0.85f;
    [SerializeField, Header("缩放变化持续时间:按下过程")]
    private float _downDuration = 0.2f;
    [SerializeField, Header("缩放变化持续时间:抬起过程")]
    private float _upDuration = 0.15f;

    private RectTransform RectTransform
    {
        get
        {
            if (_rectTransform == null)
            {
                _rectTransform = GetComponent<RectTransform>();
            }
            return _rectTransform;
        }
    }

    private RectTransform _rectTransform;

    public void OnPointerDown(PointerEventData eventData)
    {
        StopAllCoroutines();
        StartCoroutine(ChangeScaleCoroutine(1, _downScale, _downDuration));
    }

    public void OnPointerUp(PointerEventData eventData)
    {
        StopAllCoroutines();
        StartCoroutine(ChangeScaleCoroutine(RectTransform.localScale.x, 1, _upDuration));
    }

    private IEnumerator ChangeScaleCoroutine(float beginScale, float endScale, float duration)
    {
        float timer = 0f;
        while (timer < duration)
        {
            RectTransform.localScale = Vector3.one * Mathf.Lerp(beginScale, endScale, timer / duration);
            timer += Time.fixedDeltaTime;
            yield return null;
        }
        RectTransform.localScale = Vector3.one * endScale;
    }

    private void OnDisable() 
    {
        RectTransform.localScale = Vector3.one;
    }
}

点击按钮时播放音效

UIClickBtnAudioCtr.cs
需在Resources/Audio/Sounds下放置音效资源文件:ClickBtn
AudioSys的代码见:Unity中,基本的音乐音效控制系统

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Button))]
public class UIClickBtnAudioCtr : MonoBehaviour
{
    private Button _btn;
    private void Start()
    {
        Init();
    }

    private void OnDestroy()
    {
        Destroy();
    }
    
    public void Init()
    {
        _btn = GetComponent<Button>();
        _btn.onClick.AddListener(OnClickBtn);
    }
    
    public void Destroy()
    {
        if (_btn != null)
        {
            _btn.onClick.RemoveListener(OnClickBtn);
        }
    }

    private void OnClickBtn()
    {
        Audio.AudioSys.Instance.PlaySound("Audio/Sounds/ClickBtn");
    }
}

相关文章

网友评论

    本文标题:Unity中,按钮按下抬起的缩放效果

    本文链接:https://www.haomeiwen.com/subject/nbiclrtx.html