using UnityEngine;

public class ElasticScale : MonoBehaviour
{
    [Header("弹性参数")]
    public float amplitude = 0.3f;//值越大，缩放变化越明显
    public float frequency = 3f;//值越大，弹动越快
    public float phaseOffset = 0.25f; // 控制X和Y轴动画的时间差
    
    private Vector3 originalScale;
    private float timer;

    private void Start()
    {
        /*
0相位差：X和Y轴同时达到最大/最小值（对角拉伸）

90度相位差：X轴最大时Y轴正常，反之亦然（经典Q弹效果）

180度相位差：X轴最大时Y轴最小（压扁效果）
         */
        
        originalScale = transform.localScale;
    }

    private void Update()
    {
        timer += Time.deltaTime;
        
        // 计算相位差（PI/2 = 90度相位差）
        float phase = phaseOffset * Mathf.PI * 2f;
        
        float xScale = 1f + amplitude * Mathf.Sin(timer * frequency * 2f * Mathf.PI);
        float yScale = 1f + amplitude * Mathf.Cos(timer * frequency * 2f * Mathf.PI + phase);
        
        transform.localScale = new Vector3(
            originalScale.x * xScale,
            originalScale.y * yScale,
            originalScale.z
        );
    }
}