_TheStrongestSnail/TheStrongestSnail/Assets/Scripts/Scene_main/mainBTN.cs
2024-11-26 00:39:25 +08:00

84 lines
2.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//md FUCK everthing
//史山,别学
public class mainBTN : MonoBehaviour
{
public GameObject mainPanel;
private RectTransform mainPanelRect;
public GameObject BTN_0;
public GameObject BTN_1;
public GameObject BTN_2;
public GameObject BTN_3;
public GameObject BTN_0_0;
public GameObject BTN_1_1;
public GameObject BTN_2_2;
public GameObject BTN_3_3;
// Start is called before the first frame update
void Start()
{
// 确保mainPanel不为空
if (mainPanel == null)
{
Debug.LogError("mainPanel is not assigned!");
return;
}
mainPanelRect = mainPanel.GetComponent<RectTransform>();
// 添加按钮点击事件
BTN_0.GetComponent<Button>().onClick.AddListener(() => MovePanel(0));
BTN_1.GetComponent<Button>().onClick.AddListener(() => MovePanel(-2100));
BTN_2.GetComponent<Button>().onClick.AddListener(() => MovePanel(-3760));
BTN_3.GetComponent<Button>().onClick.AddListener(() => MovePanel(-5350));
}
// 统一的面板移动方法
public void MovePanel(float targetX)
{
// 更新按钮的显示和隐藏
BTN_0.SetActive(targetX != 0);
BTN_1.SetActive(targetX != -2100);
BTN_2.SetActive(targetX != -3760);
BTN_3.SetActive(targetX != -5350);
BTN_0_0.SetActive(targetX == 0);
BTN_1_1.SetActive(targetX == -2100);
BTN_2_2.SetActive(targetX == -3760);
BTN_3_3.SetActive(targetX == -5350);
// 启动协程,平滑移动 mainPanel
StartCoroutine(SmoothMovePanel(targetX, 0.3f));
}
// 协程实现平滑移动
private IEnumerator SmoothMovePanel(float targetX, float duration)
{
Vector2 startPosition = mainPanelRect.anchoredPosition;
Vector2 targetPosition = new Vector2(targetX, startPosition.y);
float elapsedTime = 0f;
while (elapsedTime < duration)
{
// 计算当前进度
float t = elapsedTime / duration;
// 逐渐改变 position
mainPanelRect.anchoredPosition = Vector2.Lerp(startPosition, targetPosition, t);
// 增加时间
elapsedTime += Time.deltaTime;
yield return null;
}
// 最终确保位置为目标位置
mainPanelRect.anchoredPosition = targetPosition;
}
}