【游戏开发实验】Unity音频效果可视化显示(GetSpectrumData接口)
文章目录
- 一. 前言
- 二. 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
脚本,并赋值Audioclip
和Linerender
:
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接口)相关推荐
- 王楠——海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性
海外华人程序员视角:解密移动游戏开发与Unity 4引擎特性 发表于2012-09-07 17:24| 12534次阅读| 来源CSDN整理| 0 条评论| 作者杨依帆 游戏开发Unity游戏引擎王楠 ...
- 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 ...
- HTML5游戏开发(四):飞机大战之显示场景和元素
<HTML5游戏开发>系列文章的目的有:一.以最小的成本去入门egret小项目开发,官方的教程一直都是面向中重型:二.egret可以非常轻量:三.egret相比PIXI.js和sprite ...
- Cocos2d-xna : 横版战略游戏开发实验5 TiledMap实现关卡地图
Cocos2d-xna : 横版战略游戏开发实验5 TiledMap实现关卡地图 在前面的几篇中动手实验使用了CCSprite.CCScene.CCLayer.CCAction.CCMenu等coco ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...
- 游戏开发技术Unity开发引擎
Unity 是一个完全集成的开发引擎,提供了丰富的开箱即用的功能,用于创建游戏及其他互动式3D内容.您可以使用Unity 将艺术和资源组装到场景和环境:增加物理效果:同步播放测试和编辑您的游戏,并在准 ...
- 【2d游戏开发】unity实现UI框架搭建
前言 前面一直比较忙,然后到现在才继续接游戏的文章,那么本次将带大家去搭建一个ui框架,同样,需要更具体的教学,可以到b站搜索本人的关于2d游戏开发-unity实现xxx的系列视频. 步骤 其实大致的 ...
- 炸弹人游戏开发系列(3):显示地图
前言 上文我们进行了初步的高层设计,现在我们将实现图片预加载和显示地图的功能需求.我采用TDD开发,大家可以看到在实现的过程中我们会修改设计,修改设计后又会修改对应的实现代码,这是一个不断迭代的过程. ...
- JavaScript实现“打地鼠”游戏开发(3)——锤子的显示及游戏音效的添加(基于H5+CSS3+JS+jQuery实现)
说明: 上一节我们实现了打地鼠游戏的主体功能,包括:老鼠的随机出现.击中目标后分数增加,倒计时为0时游戏结束等功能.接下来我们将对游戏音效的添加.锤子效果的实现进行具体实现. 这是前两节的地址链接: ...
最新文章
- Java操作XML文件 dom4j 篇【转】
- 蒸发器分段设计matlab程序_制冷系统蒸发器过热度控制回路的MATLAB仿真_何煜
- 企业内部信息化项目管理之我所见
- day3—python——字符串常用方法
- 想成为一个Web前端开发工程师,需要掌握的详细知识总结
- 【SCOI2005】【BZOJ1083】繁忙的都市(MST模板)
- sublime添加到右键的注册表文件
- FRED应用:锥透镜的设计
- iTop-4412精英版的u-boot-2017.11移植教程(二)
- 以太网识别标准及接线标准、接线方法详解
- 抖音趣味测试、心理测试类短视频素材哪里找?文案怎么写?技巧大汇总
- 【英语:基础进阶_听口实战运用】D1.听口实战运用
- iOS开发者账号快速添加手机号码
- Ant Design Pro V4下载运行
- 程序猿致富之路——(投资理财篇)
- 漏洞复现篇——利用XSS漏洞实现键盘记录
- 从零到一:如何用你的电脑成功登录QQ
- 【算法无用系列】AC自动机敏感词过滤
- java-php-python-ssm研究生推免系统计算机毕业设计
- 信号频谱、幅度、功率谱和能量谱