Unity 创建一个最简易的音乐可视化系统

 这个方法是源自Unity的官方文档Unity - Scripting API: AudioSource.GetSpectrumData可以去这里看相关的数据解释;

在编辑器中,们首先创建一个空物体,然后作为父节点创建多个子物体

排列分布可以使用UGUI快速排列,也可以手动进行调整

然后将控制代码挂载到那个空物体上

using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using TMPro;

[RequireComponent(typeof(AudioSource))]
public class CubeRy : MonoBehaviour
{
    public List<Transform> cubeList;
    public float[] Spectrum;
    public const int Spec_num= 32;
    public float heightScale= 10;
    public float heightMax= (float)5;
    public float delta_time = (float)0.1;//方块的更新间隔
    public float Remain_timer;

    private void Start()
    {
        
        for(int i = 0;i<Spec_num;i++)
            cubeList.Add(transform.GetChild(i));
            Remain_timer = delta_time;
            Thread.Sleep(millisecondsTimeout:500);
    }

    void Update()
    {
       if(Remain_timer>0)
       {
        Remain_timer-= Time.deltaTime;
        return;
       } 
       Spectrum = new float[256];
       AudioListener.GetSpectrumData(Spectrum,channel:0,FFTWindow.Rectangular);
       for(int j= 0;j<bin_num;j++)
       {
            float height = heightScale*Spectrum[j];//限制最大高度
            if(height >heightMax)
            {
                height= heightMax;
            }
            try
            {
                cubeList[j].transform.localScale=
                new Vector3(cubeList[j].localScale.x,y:height,cubeList[j].localScale.z);
            }
            catch(Exception)
            {
            Debug.Log("....");
            }
       }

       Remain_timer = delta_time;
    }
}

挂载好之后会自动挂载一个AudioSource组件(无法移除)

然后在AudioClip处挂载一段音频即可实现对该音频的可视化

挂载控制代码之后,可以在编辑器里修改高度范围(Height Scale)、最大高度(Height Max)、以及更新范围(delta_time)来控制显示效果

音频也可以通过GameController等进行更换。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值