文章目录

  • 一. 前言
  • 二. GetSpectrumData接口
  • 三. 具体制作

一. 前言

我们可以在音频软件中可以看到音频一些特效效果,比如这样:

Unity中如何制作类似的这种效果呢。
我做了个简易的效果(虽然效果很简单,但我相信懂了原理之后,上面这种效果也可以做出来了),如下:

Demo工程我已上传到GitHub,大家可以下载下来学习:
https://github.com/linxinfa/Unity-AudioDance

二. 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 framevoid 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音频效果可视化显示(GetSpectrumData接口)相关推荐

  1. 王楠——海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性

    海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性 发表于2012-09-07 17:24| 12534次阅读| 来源CSDN整理| 0 条评论| 作者杨依帆 游戏开发Unity游戏引擎王楠 ...

  2. Unity 2D游戏开发视频教程 Unity 2D Game Developer Course Farming RPG

    Unity 2D游戏开发视频教程 Unity 2D Game Developer Course Farming RPG Unity 2D游戏开发课程农业RPG MP4 |视频:h264,1280×72 ...

  3. HTML5游戏开发(四):飞机大战之显示场景和元素

    <HTML5游戏开发>系列文章的目的有:一.以最小的成本去入门egret小项目开发,官方的教程一直都是面向中重型:二.egret可以非常轻量:三.egret相比PIXI.js和sprite ...

  4. Cocos2d-xna : 横版战略游戏开发实验5 TiledMap实现关卡地图

    Cocos2d-xna : 横版战略游戏开发实验5 TiledMap实现关卡地图 在前面的几篇中动手实验使用了CCSprite.CCScene.CCLayer.CCAction.CCMenu等coco ...

  5. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...

  6. 游戏开发技术Unity开发引擎

    Unity 是一个完全集成的开发引擎,提供了丰富的开箱即用的功能,用于创建游戏及其他互动式3D内容.您可以使用Unity 将艺术和资源组装到场景和环境:增加物理效果:同步播放测试和编辑您的游戏,并在准 ...

  7. 【2d游戏开发】unity实现UI框架搭建

    前言 前面一直比较忙,然后到现在才继续接游戏的文章,那么本次将带大家去搭建一个ui框架,同样,需要更具体的教学,可以到b站搜索本人的关于2d游戏开发-unity实现xxx的系列视频. 步骤 其实大致的 ...

  8. 炸弹人游戏开发系列(3):显示地图

    前言 上文我们进行了初步的高层设计,现在我们将实现图片预加载和显示地图的功能需求.我采用TDD开发,大家可以看到在实现的过程中我们会修改设计,修改设计后又会修改对应的实现代码,这是一个不断迭代的过程. ...

  9. JavaScript实现“打地鼠”游戏开发(3)——锤子的显示及游戏音效的添加(基于H5+CSS3+JS+jQuery实现)

    说明: 上一节我们实现了打地鼠游戏的主体功能,包括:老鼠的随机出现.击中目标后分数增加,倒计时为0时游戏结束等功能.接下来我们将对游戏音效的添加.锤子效果的实现进行具体实现. 这是前两节的地址链接: ...

最新文章

  1. Java操作XML文件 dom4j 篇【转】
  2. 蒸发器分段设计matlab程序_制冷系统蒸发器过热度控制回路的MATLAB仿真_何煜
  3. 企业内部信息化项目管理之我所见
  4. day3—python——字符串常用方法
  5. 想成为一个Web前端开发工程师,需要掌握的详细知识总结
  6. 【SCOI2005】【BZOJ1083】繁忙的都市(MST模板)
  7. sublime添加到右键的注册表文件
  8. FRED应用:锥透镜的设计
  9. iTop-4412精英版的u-boot-2017.11移植教程(二)
  10. 以太网识别标准及接线标准、接线方法详解
  11. 抖音趣味测试、心理测试类短视频素材哪里找?文案怎么写?技巧大汇总
  12. 【英语:基础进阶_听口实战运用】D1.听口实战运用
  13. iOS开发者账号快速添加手机号码
  14. Ant Design Pro V4下载运行
  15. 程序猿致富之路——(投资理财篇)
  16. 漏洞复现篇——利用XSS漏洞实现键盘记录
  17. 从零到一:如何用你的电脑成功登录QQ
  18. 【算法无用系列】AC自动机敏感词过滤
  19. java-php-python-ssm研究生推免系统计算机毕业设计
  20. 信号频谱、幅度、功率谱和能量谱

热门文章

  1. linux下如何播放mp3文件,如何从Linux命令行播放MP3 | MOS86
  2. 微信小程序GIT的账号注册,前后连接以及git的简单使用
  3. 武林秘籍之C语言大法.第一式 数据 带你走向武林之巅
  4. PS新建画布时出现暂存空间已满
  5. 大学生应该脱口而出的
  6. aspose.cells导出EXCEL分页分组函数
  7. AVL树——深入浅出,一目了然
  8. BBEdit for Mac 注册码 代码编辑软件
  9. 昆仑通态中数据通道怎么使用
  10. 解决首次安装Captura免费录屏软件时出现FFMPEG was not found on your system的问题