using DG.Tweening; using UnityEngine; using UnityEngine.UI; public class UIDynamicMover : MonoBehaviour { public RectTransform uiElement; // 要移动的UI元素 public Transform startPos; // 起始点Transform public Transform endPos; // 结束点Transform public float duration = 0.5f; // 动画持续时间 public Button arrBtn; private bool isAtEndPosition = false; // 当前是否在结束点位置 private void Start() { arrBtn.onClick.AddListener(SwitchPosition); } public void SwitchPosition() { // 根据当前位置开始动画 if (isAtEndPosition) { arrBtn.transform.GetChild(0).gameObject.SetActive(false); arrBtn.transform.GetChild(1).gameObject.SetActive(true); uiElement.DOMove(startPos.position, duration).OnComplete(() => isAtEndPosition = false); } else { arrBtn.transform.GetChild(0).gameObject.SetActive(true); arrBtn.transform.GetChild(1).gameObject.SetActive(false); uiElement.DOMove(endPos.position, duration).OnComplete(() => isAtEndPosition = true); } } public void AtEnd() { arrBtn.transform.GetChild(0).gameObject.SetActive(true); arrBtn.transform.GetChild(1).gameObject.SetActive(false); uiElement.DOMove(endPos.position, duration).OnComplete(() => isAtEndPosition = true); } public void AtStart() { arrBtn.transform.GetChild(0).gameObject.SetActive(false); arrBtn.transform.GetChild(1).gameObject.SetActive(true); uiElement.DOMove(startPos.position, duration).OnComplete(() => isAtEndPosition = false); } }