Unity3D学习笔记_粒子系统

Unity3D学习笔记_粒子系统

08-01 粒子系统属性与主要子模块(下雪效果)

使用 菜单 -> GameObject -> Effects -> Particle System 在游戏对象场景中添加一个 Particle System。

在这里插入图片描述
在这里插入图片描述

粒子动画的参数:

  1. Duration 发射器喷粒子的时间长度
  2. Looping 如果启用此属性,系统将在其持续时间结束时再次启动并继续重复该循环
  3. Prewarm 如果启用此属性,系统将初始化,就像已经完成一个完整周期一样(仅当 Looping 也启用时才有效)
  4. Start Lifetime 粒子的初始生命周期
  5. Start Speed 每个粒子在 适当方向 的初始速度

在这里插入图片描述

Emission 模块 , 此模块中的属性会影响粒子系统发射的速率和时间。其中有一个突发发射配置表

Shape 模块,此模块用于定义可发射粒子的体积或表面以及起始速度的方向。

在这里插入图片描述
在上面的基础上调整做出下雪效果:

  1. 在原参数main 模块,设置start size = 0.2
  2. 选择 Transform 组件,使得粒子系统 position y = 10, rotate x = 90 (Z 轴向下)

在这里插入图片描述
勾选Size over lifetime可以调整粒子随着时间的大小变化
在这里插入图片描述

08-03 粒子材料与渲染(爆炸效果)

  1. 选择 MyEx 的 MyExposion 对象
  2. 选择 Inspection 面板
    展开 Particle Syetem 的 Render 设置:
    Material 选择 Exposion2 材料,观察到 66 的面片飞出
    Render 模式选择 Vertical Biliboard
    Max Parricle Size 设置成 5
    展开 Texture Sheet Animation, 选择动画设置
    Tiles 设置为 6
    6
    选择 Frame over Time, 在最下面有曲线编辑器,最终结果如图所示
    在这里插入图片描述

在这里插入图片描述

取消 Shape 则发射成直线
选择并展开 Emission
设置 Rate Over Time 为 1000

在这里插入图片描述

1.展开 particle 主控
2.设置 Duration 为 1
3.设置 Start Lifetime 为 1.5
4.设置 Start Speed 为 0
5.设置 Start Size 为 6
6.设置 Scaling Mode 为 Shape
7.设置 Max Particles 为 4
8.设置 Looping 为 false

在这里插入图片描述

08-05 模拟汽车尾气效果

在这里插入图片描述
在已经下载的ParticaleSystems>Perfabs中寻找Smoke粒子,拖出来就可以看到效果。
在这里插入图片描述

08-06 粒子海洋效果

在这里插入图片描述
脚本输入以下代码:

//创建了3个变量:一个粒子系统、一个粒子数组、还有一个大海分辨率数值
using UnityEngine;
using System.Collections;
 
public class MyParticleSea : MonoBehaviour {
	 
    public ParticleSystem particleSystem;
    private ParticleSystem.Particle[] particlesArray;
 
    public int seaResolution = 25;
	 
    void Start() {
        particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution];
        particleSystem.maxParticles = seaResolution * seaResolution;
        particleSystem.Emit(seaResolution * seaResolution);
        particleSystem.GetParticles(particlesArray);
    }
 
}

并且给刚刚的空白对象的Component增加particleSystem:
在这里插入图片描述
在这里插入图片描述
然后修改脚本:

using UnityEngine;
using System.Collections;
 
public class MyParticleSea : MonoBehaviour {
	 
    public ParticleSystem particleSystem;
    private ParticleSystem.Particle[] particlesArray;
    
    public int seaResolution = 25;
	public float spacing = 0.25f;//对比上一条多了这个

    void Start() {
        particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution];
        particleSystem.maxParticles = seaResolution * seaResolution;
        particleSystem.Emit(seaResolution * seaResolution);
        //对比上一条修改了下面的部分
        for(int i = 0; i<seaResolution; i++) {
            particleSystem.GetParticles(particlesArray);
            for(int j = 0; j <seaResolution; j++) {
                particlesArray[i * seaResolution + j].position = new Vector3(i * spacing, j * spacing, 0);
            }
        	particleSystem.SetParticles(particlesArray, particlesArray.Length);
        }
    }
 
}

然后修改particleSystem的一些参数:

  • Looping: False
  • Start Lifetime: 100
  • Start Speed:0
  • Play on Awake: False
  • Emission Rate: 0
    -在这里插入图片描述
    并且修改Renderer的Material为Default-ParticleSystem
    在这里插入图片描述
    这样运行就会看到以下效果(方形圆点矩阵):
    在这里插入图片描述
    之后再次修改脚本:
using UnityEngine;
using System.Collections;
 
public class MyParticleSea : MonoBehaviour {
	 
    public ParticleSystem particleSystem;
    private ParticleSystem.Particle[] particlesArray;
    
    public int seaResolution = 25;
	public float spacing = 0.25f;

    public float noiseScale = 0.2f;//对比上一条多了这个
	public float heightScale = 3f;//对比上一条多了这个
    void Start() {
        particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution];
        particleSystem.maxParticles = seaResolution * seaResolution;
        particleSystem.Emit(seaResolution * seaResolution);
        
        
        for(int i = 0; i<seaResolution; i++) {
            particleSystem.GetParticles(particlesArray);
            for(int j = 0; j <seaResolution; j++) {
                //对比上一条修改了以下部分
                float zPos = Mathf.PerlinNoise(i * noiseScale, j * noiseScale) * heightScale;
                particlesArray[i * seaResolution + j].position = new Vector3(i * spacing, zPos, j * spacing);
            }
            particleSystem.SetParticles(particlesArray, particlesArray.Length);
        }
    }
 
}

为了更好观察,镜头位置在(0,0,0),然后调整粒子海的参数如下图,运行之后就会得到左边的结果:
在这里插入图片描述
再次修改脚本:

using UnityEngine;
using System.Collections;
 
public class MyParticleSea : MonoBehaviour {
	 
    public ParticleSystem particleSystem;
    private ParticleSystem.Particle[] particlesArray;
    
    public int seaResolution = 25;
	public float spacing = 0.25f;

    public float noiseScale = 0.2f;
	public float heightScale = 3f;

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

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


    void Update() {
        for(inti = 0; i<seaResolution; i++) {
            for(int j = 0; j <seaResolution; j++) {
                floatzPos = Mathf.PerlinNoise(i * noiseScale + perlinNoiseAnimX, j * noiseScale + perlinNoiseAnimY) * heightScale;
                particlesArray[i * seaResolution + j].position = new Vector3(i * spacing, zPos, j * spacing);
            }
        }

        perlinNoiseAnimX += 0.01f;
    	perlinNoiseAnimY += 0.01f;
 
        particleSystem.SetParticles(particlesArray, particlesArray.Length);
    }
 
}

这样粒子海就会动了!

之后再为粒子海增加一个随着粒子高度而变换颜色的功能。
修改脚本:

		public Gradient colorGradient;//增加一个这个参数
		//修改update里面的for循环:
		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].color = colorGradient.Evaluate(zPos);
		        particlesArray[i * seaResolution + j].position = new Vector3(i * spacing, zPos * heightScale, j * spacing);
            }
        }

之后就可以在脚本那里修改颜色了
在这里插入图片描述
运行效果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值