zoukankan      html  css  js  c++  java
  • 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);
            }
        }
    }
  • 相关阅读:
    必须使用"角色管理工具"安装或配置microsoft.net framework 3.5
    RAC和ASM环境下修改控制文件control file
    Spring Boot热部署(springloader)
    Spring Boot返回json数据及完美使用FastJson解析Json数据
    Windwos配置Maven环境变量
    Spring Boot之HelloWorld
    查询SQLSERVER执行过的SQL记录
    《老妈语录》 读后感
    MySql安装
    MyEclipse中常用的快捷键大全
  • 原文地址:https://www.cnblogs.com/wangsta/p/5451897.html
Copyright © 2011-2022 走看看