Unity3D Particle System + Audio Source = 音乐可视化

很简单的东西,上代码:

using UnityEngine;
using System.Collections;

public class particle_ocean : MonoBehaviour {

    public ParticleSystem particleSystem;
    private ParticleSystem.Particle[] particlesArray;

    public int resolution = 256;

    public float spacing = 0.5f;

    public float noiseScale = 0.2f;
    public float[] heightScale;

    private float perlinNoiseAnimX = 0.01f;
    private float perlinNoiseAnimY = 0.01f;

    public Gradient colorGradient;

    public float[] heightToGoto;
    private float heightGotoSpeed = 20f;
    private float heightRestoreSpeed = 2f;

    public float heightGoToTime = 1f;
    public float heightRestoreTime = 0.1f;

    public float heightClampMax = 40f;
    public float heightClampMin = 4f;

    public float particleSampleRate = 0.05f;

    private int frameCount = 0;

    //Audio
    public AudioSource audio;
    private float[] spectrum;
    public int spectrumScale = 60000;

    void Awake() {
        Application.targetFrameRate = 60;
    }

    void Start() {
        particlesArray = new ParticleSystem.Particle[resolution * resolution];
        particleSystem.maxParticles = resolution * resolution;
        particleSystem.Emit(resolution * resolution);
        particleSystem.GetParticles(particlesArray);

        heightScale = new float[resolution];
        heightToGoto = new float[resolution];
        spectrum = new float[resolution];

        InvokeRepeating ("updateHeight", 0, particleSampleRate);

    }

    void Update() {
        for (int i = 0; i < resolution; i++) {
            for (int j = 0; j < resolution; j++) {
                float zPos = Mathf.PerlinNoise (i * noiseScale + perlinNoiseAnimX, j * noiseScale + perlinNoiseAnimY) * heightScale[j];
                particlesArray [i * resolution + j].color = colorGradient.Evaluate (zPos * 0.025f);
                particlesArray [i * resolution + j].position = new Vector3 (i * spacing, zPos, j * spacing);
            }
        }

        perlinNoiseAnimX += 0.01f;
        perlinNoiseAnimY += 0.01f;

        particleSystem.SetParticles (particlesArray, particlesArray.Length);

        gotoHeight ();
        restoreTo2();
    }

    void updateHeight(){

        audio.GetSpectrumData (spectrum, 0, FFTWindow.BlackmanHarris);

        for (int k = 0; k < resolution; k++) {

            heightToGoto[k] = spectrum [k] * spectrumScale ;

            heightToGoto[k] = Mathf.Clamp (heightToGoto[k], heightClampMin, heightClampMax);
        }

    }

    void gotoHeight() {

        for (int k = 0; k < resolution; k++) {
            heightScale[k] = Mathf.SmoothDamp(heightScale[k], heightToGoto[k], ref heightGotoSpeed, heightGoToTime);
        }

    }

    void restoreTo2() {

        for (int k = 0; k < resolution; k++) {
            heightScale[k] = Mathf.SmoothDamp(heightScale[k], 2f, ref heightRestoreSpeed, heightRestoreTime);
        }
    }
}
时间: 2024-10-13 04:57:10

Unity3D Particle System + Audio Source = 音乐可视化的相关文章

【HTML5】Web Audio API打造超炫的音乐可视化效果

HTML5真是太多炫酷的东西了,其中Web Audio API算一个,琢磨着弄了个音乐可视化的demo,先上效果图: 项目演示:别说话,点我!  源码已经挂到github上了,有兴趣的同学也可以去star或者fork我,源码注释超清楚的哦~~之前看刘大神的文章和源码,感觉其他方面的内容太多了,对初学者来说可能一下子难以抓到Web Audio API的重点,所以我就从一个初学者的角度来给大家说说Web Audio API这些事吧. Web Audio API与HTML5提供的Audio标签并不是同

[原]Unity3D深入浅出 - 粒子系统(Particle System)

粒子系统是在三维控件渲染出来的二维图像,主要用于烟,火,水滴,落叶等效果.一个粒子系统由例子发射器.粒子动画器和粒子渲染器三个独立的部分组成. Unity中自带了一些粒子效果,在Assets>ImportPackage>Particles,即可将Prticles.UnityPackage导入到项目中,这些粒子效果包括:Dust(沙尘).Fire(火焰).Water(水).Smoke(烟雾).Sparkles(闪光),还有一些粒子资源 Sources.Misc(杂项),如下图 随便拖出来几个 接

Unity3D学习笔记——组件之Effects(效果/特效)——Particle System(粒子系统)

Effects:效果/特效. Particle System:粒子系统.可用于创建烟雾.气流.火焰.涟漪等效果. 在Unity3D 3.5版本之后退出了新的shuriken粒子系统:   添加组件之后的效果:   其中的Open Editor按钮可以打开粒子编辑器,用于编辑复杂的粒子效果. 由于shuriken粒子系统是模块化的管理方式,所以可以动态的添加模块: 1.初始化模块:此模块是效果组件固有的模块. Duration:粒子发射器,发射粒子的时间.单位为S(秒). Looping:是否开启

Unity3D:粒子系统Particle System

1. GameObject → Create Other  →  Particle System. 2. 选中 Particle System,可看到下列屬性: 3.Particle System: Duration: 粒子发射时间(设定为5秒,每5秒发射一次粒子). Looping:是否循环产生粒子(如果要持续发射就打勾:否则将Looping关闭). Start Delay:粒子一开始产生是否延迟发射(若设定为5,时间过5秒才开始发射粒子,预设为0). Start Lifetime:粒子生命周

lkmusic项目改进版本之WebAudio版本支持音乐可视化(目前还有问题)后续发布到github

index.html <!DOCTYPE html> <!--对离线存储进行支持--> <html lang="zh-cmn-Hans" <!--manifest="lkmusic.appcache"--> > <head> <meta charset="UTF-8"> <meta name="viewport" content="widt

lkmusic项目改进版本之WebAudio版本支持音乐可视化 已更新至github 欢迎下载

亲们如果觉得好请fork我的github lkmusic 效果预览图(2016-4-26日已经改进) 更新: 优化界面效果 修复播放完成后不会自动切换处于暂停状态的bug 已经上传至github(敬请关注) GitHub 项目仓库地址(欢迎访问): https://github.com/laikedou/LMusic.git 目录结构: index.html <!DOCTYPE html> <!--对离线存储进行支持--> <html lang="zh-cmn-Ha

QML官方教程——Using the Qt Quick Particle System

附网址:http://qt-project.org/doc/qt-5/qtquick-effects-particles.html Using the Qt Quick Particle System-- 使用Qt Quick粒子系统 所有粒子系统的类型都可以在QtQuick.Particles模块文档中找到. 注意想要使用粒子模块中的类型,你需要使用下面这个代码进行引入: import QtQuick.Particles 2.0 · The ParticleSystem 粒子系统包含4个主要的

粒子系统模块(Particle System Modules40)

粒子系统模块(忍者飞镖) 粒子系统(忍者飞镖)(Particle System (Shuriken)) 用模块描述粒子一段时间内的行为.此处记载了模块的详细说明.有关模块介绍,请参阅此页面. 初始化模块 该模块始终存在,无法删除或禁用.     持续时间 (Duration) 粒子系统 (Particle System) 发射粒子的持续时间. 循环 (Looping) 粒子系统 (Particle System) 是否循环. 预热 (Prewarm) 只可预热循环系统,这意味着,粒子系统 (Pa

unity3d 给游戏添加音源 Unity3d adds a sound source to the game

unity3d 给游戏添加音源 Unity3d adds a sound source to the game 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 视频目录及链接: 16 创建游戏工程和游戏场景,添加游戏对象  9:00  17 创建游戏脚本,脚本与对象绑定  5:43  18 游戏发布与运行   | 6:15  19 常用的四种外部资源导入方法  4:10  20 采用包和