Unity ParticleSystem(粒子系统)

文章目录

    • 前言
    • 控制粒子移向目标点

前言

2020.8.5:
添加粒子中的移动效果效果可参考金币飞效果。参考链接:Unity3D-代码控制粒子移动或者按照预定的路径移动
2020.8.6:
更新一些基础属性的细节

控制粒子移向目标点

  1. 思路:获取粒子系统的所有粒子,让他们向目标点移动。一般目标点可能会是UI所在的位置,到达粒子的位置UI产生反馈.但是粒子移动的目标点不能是Rect Transform,所以可以用SpriteRender代替(可以将粒子坐标系设置目标点,当粒子位置为Vector3.Zero就到达目标点)。粒子系统开启Triggle属性,触发对象为2D精灵,触发就kill粒子。可以通过判断粒子数量是否为0,判断粒子移动是否完成执行以后逻辑。
  2. 代码
=========================自定义粒子系统的模拟空间
 particles = new ParticleSystem.Particle[particleSys.main.maxParticles];
 ParticleSystem.MainModule main = particleSys.main;
  main.simulationSpace = ParticleSystemSimulationSpace.Custom;
 main.customSimulationSpace = targetTransform;
 =========================朝目标点插值缓动
   int count = this.particleSys.GetParticles(particles);
           for (int i = 0; i < count; i++)
           {
               particles[i].position = Vector3.Lerp(particles[i].position, Vector3.zero, speed);
             //  this.particles[i].velocity = (targetTransform.position - transform.position) * speed;
               if (speed > 0.22f)
                   speed -= 0.01f;
           }
           this.particleSys.SetParticles(particles, count);
           if (count == 0)
           {
               //par.Play(true);
               StartCoroutine(gamePanel.AddSizGem());
               isMove = false;
           }
  1. 存在的问题:粒子朝目标点插值移动时,如果速度很小的话,粒子在到达目标点周围(未到达触发范围)时会进行莫名抖动,并且不会继续移动,暂时不确定是粒子的问题还是插值函数的问题。

2020.8.6:
4.

  • 获取粒子属性块的属性只能写成如下,如获取设置模拟控件:
ParticleSystem.MainModule main = gemsys2.main;
main.simulationSpace = ParticleSystemSimulationSpace.Custom;

错误:gemsys2.main.main.simulationSpace = ParticleSystemSimulationSpace.Custom;

  • 粒子做成预制体,一些属性会丢失(如:空间对象、触发对象等),需要代码动态添加。

你可能感兴趣的:(Unity)