using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Events; [System.Serializable] public class TrajectoryPoint { public int index; public RectTransform pointTransform; public Button pointButton; public Vector2 initialPosition; // 初始位置 public Vector2 currentPosition; // 当前位置 public TrajectoryPoint(int idx, RectTransform transform, Button button, Vector2 initPos) { index = idx; pointTransform = transform; pointButton = button; initialPosition = initPos; currentPosition = initPos; } } public class SmoothTrajectorySystem : MonoBehaviour { [SerializeField] RectTransform[] points; [Header("Movement Settings")] [SerializeField] float movementDuration = 1f; [SerializeField] float curveHeight = 50f; [SerializeField] AnimationCurve movementCurve = AnimationCurve.EaseInOut(0, 0, 1, 1); [Header("Debug")] [SerializeField] bool enableDebug = true; private List trajectoryPoints = new List(); private bool isMoving = false; private Vector2 fixedTargetPosition; // 固定的目标位置(0号位置的初始位置) void Start() { InitializePoints(); } void InitializePoints() { trajectoryPoints.Clear(); if (points == null || points.Length == 0) { Debug.LogError("Points array is empty!"); return; } // 设置固定的目标位置(0号位置的初始位置) if (points[0] != null) { fixedTargetPosition = points[0].anchoredPosition; if (enableDebug) Debug.Log($"Fixed target position (index 0 initial): {fixedTargetPosition}"); } // 初始化所有点 for (int i = 0; i < points.Length; i++) { if (points[i] == null) continue; Button button = null; // 尝试获取按钮(可能在点本身或其子对象上) if (points[i].GetComponent