一. 前言

我们可以在音频软件中可以看到音频一些特效效果,比如这样:
在这里插入图片描述
Unity中如何制作类似的这种效果呢。

我做了个简易的效果(虽然效果很简单,但我相信懂了原理之后,上面这种效果也可以做出来了),如下:
在这里插入图片描述

二. GetSpectrumData接口

AudioSources有一个接口,用于采样声谱数据块:

public static void GetSpectrumData(float[] samples, int channel, FFTWindow window);

参数说明:
samples: 函数返回值。将音频样本数据传送至samples数组,数组大小必须为2的n次方,最小64,最大8192。
channel: 一般设置为0。
window: 转换信号所用的窗函数,算法越复杂,声音越柔和,但速度更慢。

用法 :
先声明一个浮点数组:

public float[] samples = new float[8192];

在Update方法里面使用方法:

audiosource.GetSpectrumData(samples, 0, FFTWindow.BlackmanHarris);
三. 具体制作

准备资源:
1 一个音频文件
2 一个材质球
3 一个Main脚本(脚本代码见文章下面)
在这里插入图片描述

材质球效果自己看着喜欢设置,我的材质球设置如下:
在这里插入图片描述

场景中,创建一个物体,命名为LienRenderer,挂上LienRenderer组件,并给设置材质球:
在这里插入图片描述

Main Camera挂上Main脚本,并赋值AudioclipLinerender
在这里插入图片描述

Main.cs脚本如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Main : MonoBehaviour
{
    private AudioSource m_audiosource;
    public AudioClip audioclip;
    public float[] samples;
    public LineRenderer linerender;

    private readonly int LINERENDER_POINT_CNT = 32;


    void Start()
    {
        m_audiosource = gameObject.GetComponent<AudioSource>();
        m_audiosource.clip = audioclip;
        m_audiosource.Play();
        samples = new float[1024];
        linerender.positionCount = LINERENDER_POINT_CNT;
        linerender.startWidth = 0.02f;
        linerender.endWidth = 0.02f;

    }

    // Update is called once per frame
    void Update()
    {
        m_audiosource.GetSpectrumData(samples, 0, FFTWindow.BlackmanHarris);
        for (int i = 0, cnt = LINERENDER_POINT_CNT; i < cnt; ++i)
        {
            var v = samples[i];
            linerender.SetPosition(i, new Vector3((i - LINERENDER_POINT_CNT / 2) * 0.2f, v * 20, -5));

        }
    }
}

最后运行Unity即可看到效果。


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】
【unity游戏开发——编辑器扩展】
【unity游戏开发——热更新】
【unity游戏开发——网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐