Unity 粒子海洋效果实现

截图:

Unity 粒子海洋效果实现_第1张图片

关键信息:

柏林噪声:一个噪声函数基本上是一个种子随机发生器。它需要一个整数作为参数,然后根据这个参数返回一个随机数。如果你两次都传同一个参数进来,它就会产生两次相同的数 API注解 在Unity里通过mathf使用柏林噪声,传入的参数是一个平面的坐标,对应一个坐标,每次返回的都是相同的值

Gradient : 渐变,使用时要在在相应的面板上修改颜色
这里写图片描述

添加ParticalSystem组件:也要修改相应的参数
Unity 粒子海洋效果实现_第2张图片

代码如下,其中注释:

using UnityEngine;
using System.Collections;

public class ParticleSea : MonoBehaviour {

    public ParticleSystem particleSystem; // 粒子系统
    private ParticleSystem.Particle[] particlesArray; //存储粒子的数组

    public float spacing = 0.25f; // 粒子之间的空隙

    public int seaResolution; //例子范围

    //noise 这里使用了柏林噪声,用以制造波浪效果
    public float noiseScale = 0.2f;  //噪声范围
    public float heightScale = 3f;  // 高度范围

    //..
    private float perlinNoiseAnimX = 0.01f; // 柏林噪声相关参数
    private float perlinNoiseAnimY = 0.01f;

    //...color
    public Gradient colorGradient; // 颜色的渐变

    void Start() {
        particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution]; //初始化数组
        particleSystem.maxParticles = seaResolution * seaResolution; //最大粒子数,也就是循环时用到的边界
        particleSystem.Emit(seaResolution * seaResolution); //发射粒子,参数为要发射的粒子数量
        particleSystem.GetParticles(particlesArray);
    }

    void Update() {
        for(int i = 0;i<seaResolution;i++) {
            for(int j=0; j<seaResolution;j++){
                float zPos = Mathf.PerlinNoise (i*noiseScale+perlinNoiseAnimX,j*noiseScale + perlinNoiseAnimY) * heightScale; // 由柏林噪声确定的高度值
                particlesArray [i * seaResolution + j].color = colorGradient.Evaluate (zPos); // 由高度值确定的颜色变化
                particlesArray [i * seaResolution + j].position = new Vector3 (i*spacing,zPos*heightScale,j*spacing);
            }
        }

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

        particleSystem.SetParticles(particlesArray, particlesArray.Length); // 设置该系统的粒子
    }

}

原文网址

你可能感兴趣的:(unity)