TH1/Unity/Assets/Scripts/TH1_UI/Common/ToggleButtonController.cs
2025-08-18 23:16:13 +08:00

76 lines
1.8 KiB
C#

using System;
using Animancer;
using TH1Resource;
using TMPro;
using UnityEngine;
using UnityEngine.UI; // 用于 Button 组件
// 自动为该物体添加一个 Button 组件,确保它总是可点击的
[RequireComponent(typeof(Button))]
public class ToggleButtonController : MonoBehaviour
{
private bool _isOn; // 当前开关状态
//操作对象
public GameObject Handle;
public AnimationClip TurnOn;
public AnimationClip TurnOff;
private AnimancerComponent _anim;
public Action On;
public Action Off;
public Action Get;
private bool _initialized;
public void Init()
{
_initialized = true;
_anim = Handle.GetComponent<AnimancerComponent>();
GetComponent<Button>().onClick.AddListener(OnToggleClicked);
}
public void Refresh(bool isOn,Action actOn,Action actOff)
{
if (!_initialized)
Init();
_isOn = isOn;
On = actOn;
Off = actOff;
if (_anim != null)
{
var ani = _isOn ? TurnOn : TurnOff;
var state = _anim.Play(ani);
state.NormalizedTime = 1f;
}
}
/// <summary>
/// 当Toggle被点击时调用
/// </summary>
private void OnToggleClicked()
{
// 1. 翻转状态
_isOn = !_isOn;
if (_isOn)
On.Invoke();
else
Off.Invoke();
//2. 播放对应动画
if(_anim != null)
_anim.Play(_isOn ? TurnOn : TurnOff );
// 3. 传递信息
}
void OnDestroy()
{
// 移除监听,防止内存泄漏
var button = GetComponent<Button>();
if (button != null)
{
button.onClick.RemoveListener(OnToggleClicked);
}
}
}