脚本简单实现粒子系统的一些功能

发布时间 2023-12-30 17:19:09作者: terrificia

明明有粒子系统了为什么还要用脚本来模拟呢?当然是存在一些特殊情况钻了粒子系统的死角,无法使用粒子,所以才会使用,例如UI

1,曲线类——通常最常见的情况就是需要通过曲线来控制某个值,达到类粒子系统的效果,下面是一段伪代码示例

public class Test : MonoBehaviour
{
    public AnimationCurve Curve;    //需要曲线
    public Material mat;    //需要传入参数的对象
    public float TimeFrequency = 1.0f;    //曲线时间的频率,用来缩短或加长时间频率

    private float time;

    void Start()
    {
        time = 0.0f;    //初始化曲线时间
    }

    void Update()
    {
        if(XX.enabled)    //这里的XX可以是你需要开关的物体的属性
        {
            time += Time.deltaTime * frequency;

            // time %= endtime;//loop如需循环
            
            float CurveValue = FlashCurve.Evaluate(time);    //得到曲线值

            mat.SetFloat("_XXX", CurveValue);    //赋予对象shader的参数_XXX
        }
        else
            time = .0f;     //下次重新启动时归零
    }

2,开关类——我平时会碰到需要无缝衔接两个或以上粒子系统的需求,同时又要保证随机,所以我会通过脚本函数OnEable来控制这些粒子系统的随机种子,保证一次开启的时候所有粒子显示的内容都是一样的,同时每一次开启种子又不一样

public class Test : MonoBehaviour
{
    public ParticleSystem ps1;
    public ParticleSystem ps2;
    public ParticleSystem ps3;
    .......

   void OnEnable()
    {
        ps1.randomSeed = ps2.randomSeed = ps3.randomSeed = (uint)Random.Range(-100000, 100000);
    }