Unity のトグル スイッチで個人的な新人メモを作成

DOTween プラグインを使用して実現されるアニメーション効果

スクリプトは、Toggle コンポーネントが配置されているオブジェクトに配置できます。

スクリプトコードの表示と解析

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

public class SwitchToggle : MonoBehaviour
{
    //把手RectTransform
    [SerializeField] private RectTransform handleRectTransform;

    //把手开启颜色
    [SerializeField] private Color _handleActiveColor;

    //开关背景开启颜色
    [SerializeField] private Color _backgroundActiveColor;

    //动画时间
    [SerializeField] private float _duration = 0.5f;

    //开关背景与把手的图片
    private Image _handleImage, _backgroundImage;

    //开关背景与把手的默认颜色
    private Color _handleColor, _backgroundColor;

    //把手移动的位置
    private Vector2 _handlePosition;
    
    private Toggle _toggle;


    private void Awake()
    {
        
        _toggle = GetComponent<Toggle>();
        _handleImage =handleRectTransform.GetComponent<Image>();
        _backgroundImage = handleRectTransform.parent.GetComponent<Image>();

        _handleColor = _handleImage.color;
        _backgroundColor = _backgroundImage.color;

        _handlePosition = handleRectTransform.anchoredPosition;

        _toggle.onValueChanged.AddListener(OnSwitch);
        
        //在游戏对象启动时检查 _toggle 组件的初始选中状态,依据选中状态来执行OnSwitch方法函数
        if (_toggle.isOn)
        {
            OnSwitch(true);
        }
    }

    //控制开关动画方法函数
    private void OnSwitch(bool on)
    {
        handleRectTransform.DOAnchorPos(on ? -_handlePosition : _handlePosition,_duration).SetEase(Ease.InOutBack);
        
        _backgroundImage.DOColor(on ? _backgroundActiveColor : _backgroundColor,_duration).SetEase(Ease.InOutBack);
        
        _handleImage.DOColor(on ? _handleActiveColor : _handleColor,_duration).SetEase(Ease.InOutBack);
    }
    
    //避免持续监听 _toggle 的 onValueChanged 事件,防止在对象已销毁的情况下继续调用 OnSwitch 方法,避免潜在的错误或资源浪费
    private void OnDestroy()
    {
        _toggle.onValueChanged.RemoveListener(OnSwitch);
    }
}

おすすめ

転載: blog.csdn.net/WinDivI/article/details/131643481