放在小球身上,设置对应组件即可
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class MusicBall : MonoBehaviour
{
public float minScale = 1f;
public float maxScale = 2f;
public float scaleMultiplier = 1f;
public Color minColor = Color.blue;
public Color maxColor = Color.red;
public float colorMultiplier = 1f;
public AudioSource audioSource;
private float[] audioSpectrum;
private Transform ballTransform;
private Renderer ballRenderer;
private void Start()
{
audioSpectrum = new float[256];
ballTransform = transform;
ballRenderer = GetComponent<Renderer>();
}
private void Update()
{
// 获取音频频谱数据
audioSource.GetSpectrumData(audioSpectrum, 0, FFTWindow.BlackmanHarris);
// 计算音频频谱的平均值
float average = 0f;
for (int i = 0; i < audioSpectrum.Length; i++)
{
average += audioSpectrum[i];
}
average /= audioSpectrum.Length;
// 根据音频频谱的平均值调整小球的缩放大小
float scale = Mathf.Lerp(minScale, maxScale, average * scaleMultiplier);
ballTransform.localScale = new Vector3(scale, scale, scale);
// 根据音频频谱的平均值调整小球的颜色
Color color = Color.Lerp(minColor, maxColor, average * colorMultiplier);
ballRenderer.material.color = color;
}
}