Unity 中的音乐可视化

本帖最后由 204有个大坑 于 2017-5-31 17:33 编辑

1738music-visulization-in-unity.jpg (32.33 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

目标:本文的主要目标是让你知道在Unity中怎么样使用音乐可视化。
最终输出是这样的:

capture-1.gif (256.99 KB, 下载次数: 1)

下载附件  保存到相册

7 天前 上传

下边这张图片会给你一个最终输出的印象。

music-edit-300x188.png (14.5 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤一:创建一个2D工程,命名为“Music Visualization”
步骤二:白条(就是白色的条形图片啦!)
制作一个白条,也可以从末尾给出的工程源码中找到。

bar-300x136.png (1.29 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤三:制作预设,将白天做成预设,还有谁不懂怎做预设?百度或者你敢戳这里?
步骤四:
现在,将预设拖拽到场景中,需要64个预设。像这样摆好:
注意:
■ 你可以根据逻辑使用不同数量的对象
■在本例中,我使用的是44个对象的数组,大小=64(44<64)

sound-edit-300x268.png (2.44 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤五:新建脚本,新建C#脚本,命名为BarVisualization.cs。
[C#] 纯文本查看 复制代码
?
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
[RequireComponent(typeof(AudioSource))]
public class BarVisulization : MonoBehaviour
{
        public AudioClip[] clips;
        public SpriteRenderer[] barsSprites;
        public Slider musicSlider;
        [Range(0,10)]
        public float
                colorMultiplyer = 1;
        [Range(0,1)]   
        public float
                s = 1;
        [Range(0,1)]
        public float
                v = 1;
        private int index = 0;
        private float musicLength;
        private AudioSource audio;
        void Start(){
                audio = GetComponent<AudioSource> ();
        }
     
        void Update ()
        {
                Visulization ();
                if (Input.GetMouseButtonDown (0)) {
                        ChangeSound ();
                }
        MusicSlider();
        }
        void Visulization ()
        {
                float[] musicData = audio.GetSpectrumData (64, 0, FFTWindow.Triangle);
                int i = 0;
                while (i<44) {
                        barsSprites [i].transform.localScale = new Vector3 (musicData [i], 0.2f, 1);
                        barsSprites [i].color = HSVtoRGB (musicData [i] * colorMultiplyer, s, v, 1);
                     
                        i++;
                }
                 
        }
        void MusicSlider ()
        {
                musicLength = audio.time;
                Debug.Log(musicLength);
        musicSlider.value = musicLength/audio.clip.length;
        }
        void ChangeSound ()
        {
                index++;
                if (index > clips.Length - 1) {
                        index = 0;
                }
                print (index);
                audio.clip = clips [index];
                 
                audio.Play ();
        }
    #region Static
        public static Color HSVtoRGB (float hue, float saturation, float value, float alpha)
        {
                while (hue > 1f) {
                        hue -= 1f;
                }
                while (hue < 0f) {
                        hue += 1f;
                }
                while (saturation > 1f) {
                        saturation -= 1f;
                }
                while (saturation < 0f) {
                        saturation += 1f;
                }
                while (value > 1f) {
                        value -= 1f;
                }
                while (value < 0f) {
                        value += 1f;
                }
                if (hue > 0.999f) {
                        hue = 0.999f;
                }
                if (hue < 0.001f) {
                        hue = 0.001f;
                }
                if (saturation > 0.999f) {
                        saturation = 0.999f;
                }
                if (saturation < 0.001f) {
                        return new Color (value * 255f, value * 255f, value * 255f);
                }
                if (value > 0.999f) {
                        value = 0.999f;
                }
                if (value < 0.001f) {
                        value = 0.001f;
                }
         
                float h6 = hue * 6f;
                if (h6 == 6f) {
                        h6 = 0f;
                }
                int ihue = (int)(h6);
                float p = value * (1f - saturation);
                float q = value * (1f - (saturation * (h6 - (float)ihue)));
                float t = value * (1f - (saturation * (1f - (h6 - (float)ihue))));
                switch (ihue) {
                case 0:
                        return new Color (value, t, p, alpha);
                case 1:
                        return new Color (q, value, p, alpha);
                case 2:
                        return new Color (p, value, t, alpha);
                case 3:
                        return new Color (p, q, value, alpha);
                case 4:
                        return new Color (t, p, value, alpha);
                default:
                        return new Color (value, p, q, alpha);
                }
        }
    #endregion
}

注意:这个函数返回的是声音剪辑的频谱数组。更多信息戳这里。我用的是HSVtoRGB()函数将HSV转换成RGB .HSV比较容易理解,不信你戳这里。

untitled-300x154.png (12.33 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤六:应用脚本
将脚本拖到空物体上,选中所有44个GameObject,将它们拖拽赋值到barsSprites (我也是醉了)

main-camera-left-right-300x194.png (4.01 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤七:将相机的背景整成黑色滴。

game-300x202.png (6.98 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤八:声音剪辑
需要一些声音剪辑的样例。导入到工程里面,再拖拽赋值到数组Clips.(快扶我一下)

bar-visulaization-300x142.png (9.18 KB, 下载次数: 0)

下载附件  保存到相册

2017-5-24 16:10 上传

步骤九:测试
现在,一切就绪。点击播放按钮,让色彩随着你的音乐动起来吧。当你在Unity中用到声音可视化时,希望这篇可以给你些帮助。有任何问题可在底下评论,我会尽快回复。
广告时间:
想获取游戏开发的idea?还等什么?现在就联系我们,让idea瞬间活起来。我司在印度被称为最好的 游戏开发公司,有之一。
工程源码下载地址:https://codeload.github.com/tejas123/music-visualization-in-unity/zip/master
原文作者:Amit Kapdi
原文连接:http://www.theappguruz.com/blog/music-visualization-in-unity
扫描下方二维码关注游戏蛮牛官方微信~每日都有精选干货与你分享哟~

Unity 中的音乐可视化相关推荐

  1. 在unity中读取并可视化dicom图像(fo-dicom / C# / unity)

    第一步:在unity中安装fo-dicom插件 方法:点击window,选择Asset Store,然后搜索fo-dicom,导入即可. 第二步:读取dicom文件中的图像信息并转换为Texture2 ...

  2. Unity音乐可视化效果研究

    两年前,为项目做演示视频的时候用了一个AE模板弄了一个音乐可视化效果,当时也没想过会要做到项目里面. 后来项目落地的时候用了另外一个效果.前一段时间在学习图形学,突然想起这件事,对于那个未能完成的效果 ...

  3. Unity中的音频资料总结-基本使用+音频可视化+音效管理

    入门 基础用法一 基础用法二 进阶 音频可视化 看着一个基本就够了 这个是拆解 简单使用 具体使用 好看的 也是对第一个视频的拆解分析 核心api就一句 GetOutputData 各种炫酷的效果 # ...

  4. Unity中BVH骨骼动画驱动的可视化理论与实现

    前言 找了很久使用BVH到unity中驱动骨骼动画的代码,但是都不是特别好用,自己以前写过,原理很简单,这里记录一下. 理论 初始姿态 在BVH或者其它骨骼动画中,一般涉及到三种姿势:A-pose,T ...

  5. 一种城市道路网络的随机生成方式(Unity中可视化)

    一种城市道路网络的随机生成方式(Unity中可视化) 1. 说在开头 2. 有限元网格划分 2.1. 什么是有限元 2.2. 前沿推进法/波前推进法(Advancing Front Technique ...

  6. Unity中音乐操作

    一.目的 1.想知道:Unity中音乐操作 二.参考 1. 三.操作 1.MyAudio.cs using System.Collections; using System.Collections.G ...

  7. unity中添加中文字体实现UI可视化设计

    第一步:打开C盘下的Windows中的Fonts字体并选择一款喜欢的字体.路径为:C:\Windows\Fonts 第二步:将复制的字体放到unity项目下的Scenes文件下: 第三步:新建一个tx ...

  8. Unity音频采样器(用于Unity音乐可视化)

    主要用于音乐可视化 教程已经很多了,但是没有拖上来就能用的 直接提供组件,欢迎复制黏贴 using System.Collections; using System.Collections.Gener ...

  9. Unity中为场景添加音乐

    第一步 将下载好的音乐(MP3或者wav)拖拽至 project 中 第二步 在 Hierarchy 中右键点击空白处Audio -- Audio Source (或者在面板左上方点击Game Obj ...

最新文章

  1. Oracle 归档错误案例
  2. 让人又爱又恨的Mysql多表查询
  3. PHP实现http与https转化[转张宴]
  4. Echart图表X轴为时间轴的解释
  5. java 内部类泛型,java – 使用泛型强制转换为内部类
  6. 以架构师的眼睛看世界-Architect Inside
  7. 高端智能阿里手机 黑色 ZOPO C2 出售1499
  8. [css] 你有去看过或者了解过css的标准文档吗?
  9. 《万物互联》——2.3 理解智能设备
  10. ubuntu 压缩率最高的软件_[图]Linux六大压缩算法横评:Ubuntu 19.10最终选择LZ4
  11. Django项目实践3 - Django模型(view-数据库)
  12. JavaScript函数,思维导图
  13. 超好玩的msn自制动画头像
  14. 不同网段共享文件服务器,不同网段ip 如何设置局域网共享?
  15. html日历页面节假日_JavaScript实现有农历和节气节假日的日历
  16. linux syscall 内核系统调用API接口
  17. 芯片积累及封装(hdc1080、EL357N-G、74HC_HCT4052、XL6009、lm7805、LM393-D、irlr3410、BST-BMP280-DS001-19)
  18. 注册页面提交验证-密保问题实现
  19. 平安证券的竟借用咱对青海明胶的一分析文章
  20. 使用机器学习自动化半导体研究

热门文章

  1. 一个超级好看的代刷网模板-增加诸多功能 增加用户体验
  2. H.264码率控制算法研究及JM相应代码分析(二)
  3. 红米 12C earth Fastboot 线刷包 root TWRP 刷入magisk recovery卡刷
  4. Nginx+Lua 实现灰度发布详细步骤
  5. PCB电路板OSP工艺的优缺点都有哪些?
  6. 随机森林的原理和用随机森林的方式进行特征选择
  7. arcgis 栅格计算器,img叠加运算,con函数,img转txt
  8. vue+ echarts实现地图(中国地图)
  9. win2008 启用 mongodb 服务出错 1053 的解决方法
  10. idea中同一个项目同时启动多个端口进行访问