unity实现简单粒子系统

创建一个粒子系统
unity实现简单粒子系统_第1张图片

设置以下模块
unity实现简单粒子系统_第2张图片
unity实现简单粒子系统_第3张图片
unity实现简单粒子系统_第4张图片
unity实现简单粒子系统_第5张图片
代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ParticleSea : MonoBehaviour
{
    public new ParticleSystem particleSystem;                  // 粒子系统
    ParticleSystem.Particle[] particlesArray;       // 粒子数组

    public float spacing = 1;                       // 分配粒子位置
    public int seaResolution = 100;                 // 大海分辨率数值
    // 柏林噪声
    public float noiseScale = 0.2f;     
    public float heightScale = 3f;    
    // 柏林噪声参数
    float perlinNoiseAnimX = 0.01f;
    float perlinNoiseAnimY = 0.01f;         
    public Gradient colorGradient;                  // 粒子颜色动态变化

    void Start()
    {
        particleSystem = gameObject.GetComponent<ParticleSystem>();
        particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution];
        //particleSystem.maxParticles = seaResolution * seaResolution;
        particleSystem.Emit(seaResolution * seaResolution);
        particleSystem.GetParticles(particlesArray);
    }

    private 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);               
                particlesArray[i * seaResolution + j].startColor = 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实现简单粒子系统_第6张图片
动态效果
动态效果

你可能感兴趣的:(3D游戏编程,unity,游戏引擎)