新 Unity 最新粒子系统如何用代码改变参数

本文介绍如何使用代码控制Unity最新粒子系统的各项参数,包括粒子发射率、形状等,并展示了如何让粒子受风力影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity 最新的用粒子系统用代码控制各项参数

          新的粒子系统api换了不少,采用了很多的结构,原先很多api已经过时,或者更早就没有,网上找了找发小也是少之又少,下面小白就展示一下如何用代码控制各个参数(这里只是一小部分,有兴趣可以自己试试,!!一会百会!!)

  之前无心随便写写,可能写的比较乱,现在重新整理下,我用的unity5.5

   

1.1代码

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

public class ParticleTest : MonoBehaviour
{
    public ParticleSystem particleSys;
    ParticleSystem.EmissionModule parEmission;
    ParticleSystem.ShapeModule parShape;
    //----------------------
    ParticleSystem.MinMaxCurve parMinMaxCurve;
    void Start()
    {
        parEmission = particleSys.emission;
        parShape = particleSys.shape;
        //-----------------
        parMinMaxCurve = new ParticleSystem.MinMaxCurve(20);
        parEmission.rateOverTime = parMinMaxCurve;
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.O))
        {
            particleSys.Play();
        }
        if (Input.GetKeyDown(KeyCode.S))
        {
            particleSys.Stop();
        }
        if (Input.GetKeyDown(KeyCode.E))
        {
            SetParEmission(50, 1000);
        }
        if (Input.GetKeyDown(KeyCode.A))
        {
            ChangeParEmission(10);
        }
        if (Input.GetKeyDown(KeyCode.H))
        {
            SetParShape();
        }
    }
    /// <summary>
    /// 设置emission
    /// </summary>
    private void SetParEmission(float min, float max)
    {
        //单独设置
        //parEmission.rateOverTimeMultiplier = min;
        //or parEmission.rateOverDistanceMultiplier = min;
        //Curve设置
        parEmission.rateOverDistance = new ParticleSystem.MinMaxCurve(min, max);
        //or  parEmission.rateOverTime = new ParticleSystem.MinMaxCurve(min, max);//设置粒子数量,min10 max100;
    }
    private void ChangeParEmission(float addRate)
    {
        parMinMaxCurve.constant += 10;
        parEmission.rateOverTime = parMinMaxCurve;
        //另一种
        //如果设置
        //parMinMaxCurve = new ParticleSystem.MinMaxCurve(10,100);
        //parEmission.rateOverTime = parMinMaxCurve;
        //那么
        //if (parMinMaxCurve.constantMin < parMinMaxCurve.constantMax)
        //{
        //    parMinMaxCurve.constantMin += addRate;
        //    parEmission.rateOverTime = parMinMaxCurve;
        //}
    }
    private void SetParShape()
    {
        parShape.shapeType = ParticleSystemShapeType.Box;//设置为box形状
        parShape.box = new Vector3(2, 2, 2); //设置长宽高
    }
}



2:另外新版的例子系统可以让粒子受到WindZone风的影响 ,只需要将External forces打勾勾




### Unity粒子系统参数设置及功能详解 Unity中的粒子系统是一种强大的工具,用于创建动态和视觉效果丰富的场景。以下是关于粒子系统参数配置和使用方法的详细说明: #### 1. 粒子系统的结构与模块 粒子系统由多个模块组成,每个模块控制不同的属性。这些模块包括但不限于 Emission(发射)、Shape(形状)、Velocity over Lifetime(生命周期内的速度)、Color over Lifetime(生命周期内的颜色)等[^2]。 #### 2. 发射模块 (Emission) 发射模块控制粒子生成的方式和速率: - **Rate over Time**:定义每秒生成的粒子数量。例如,设置为 10,则每秒会生成 10 个粒子[^4]。 - **Rate over Distance**:定义粒子系统每移动一定距离时生成的粒子数量。适用于模拟移动物体的效果,如火箭尾焰[^4]。 - **Bursts(爆发)**:在特定时间点生成大量粒子。可以通过设置 Time(时间)、Count(数量)、Cycles(循环次数)、Interval(间隔)和 Probability(概率)来控制爆发事件[^4]。 #### 3. 形状模块 (Shape) 形状模块决定了粒子从哪里发射以及它们的初始分布。常见的形状包括 Sphere(球体)、Hemisphere(半球)、Cone(锥体)、Box(立方体)等。用户可以通过调整 Shape 模块中的参数改变粒子的发射范围和方向。 #### 4. 生命周期模块 (Lifetime) 粒子的生命周期决定了其存在的时间长度。通过调整 Start Lifetime 参数可以控制粒子的初始存活时间。此外,还可以通过 Color over Lifetime 和 Size over Lifetime 等模块来改变粒子在其生命周期内的颜色和大小变化。 #### 5. 缩放模式 (Scaling Mode) 缩放模式影响粒子系统如何响应父物体的缩放。Local 模式下,粒子的缩放仅考虑粒子系统本身的属性,不受父物体的缩放影响;而 Hierarchy 模式下,粒子的缩放会受到父物体的影响[^3]。 #### 6. 材质与渲染 (Material & Rendering) 粒子系统的材质决定了粒子的外观。如果粒子显示为紫色,可能是由于材质丢失或未正确设置。此时需要检查粒子系统的 Material 属性,并确保使用了正确的 Shader 和纹理。 #### 7. 性能优化 为了提高性能,可以采用以下技巧: - 减少粒子的数量或复杂度。 - 使用更简单的材质和纹理。 - 启用 Pre Warm(预热)功能以减少粒子初始化时的性能开销[^1]。 ```python # 示例代码:通过脚本动态控制粒子系统的发射速率 using UnityEngine; public class ParticleController : MonoBehaviour { public ParticleSystem particleSystem; private ParticleSystem.EmissionModule emission; void Start() { emission = particleSystem.emission; emission.enabled = true; emission.rateOverTime = 20; // 设置每秒生成的粒子数量 } } ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值