engine icon indicating copy to clipboard operation
engine copied to clipboard

ParticleCompositeCurve Curve and TwoCurves Mode not as expected

Open JujieX opened this issue 10 months ago • 0 comments

Describe the bug speed is still 0 when use ParticleCurveMode as Curve.

WebGLEngine.create({
  canvas: "canvas",
  graphicDeviceOptions: { webGLMode: WebGLMode.WebGL1 },
}).then((engine) => {
  Logger.enable();
  engine.canvas.resizeByClientSize();

  const scene = engine.sceneManager.activeScene;
  const rootEntity = scene.createRootEntity();
  scene.background.solidColor = new Color(15 / 255, 38 / 255, 18 / 255, 1);

  // Create camera
  const cameraEntity = rootEntity.createChild("camera_entity");
  cameraEntity.transform.position = new Vector3(0, 1, 3);
  const camera = cameraEntity.addComponent(Camera);
  camera.fieldOfView = 60;


      const particleEntity = cameraEntity.createChild();
      particleEntity.transform.position.set(0, -7.5, -8);

      const particleRenderer = particleEntity.addComponent(ParticleRenderer);

      const material = new ParticleMaterial(engine);
      particleRenderer.setMaterial(material);

      const { main, emission, velocityOverLifetime } =
        particleRenderer.generator;

      // Main module
      main.startSpeed.constant = 0;
      // Emission module
      emission.rateOverTime.constant = 5;

      // Velocity over lifetime module
      velocityOverLifetime.enabled = true;

      // velocityOverLifetime.velocityY.mode = ParticleCurveMode.Constant;
      // velocityOverLifetime.velocityY.constant = 1;

      velocityOverLifetime.velocityY.curve = new ParticleCurve();
      velocityOverLifetime.velocityY.curve.setKeys([
        new CurveKey(0, 1),
        new CurveKey(1, 1),
      ]);
      velocityOverLifetime.velocityY.mode = ParticleCurveMode.Curve;
    });
  engine.run();

Expected behavior

      velocityOverLifetime.velocityY.mode = ParticleCurveMode.Constant;
      velocityOverLifetime.velocityY.constant = 1;
      velocityOverLifetime.velocityY.curve = new ParticleCurve();
      velocityOverLifetime.velocityY.curve.setKeys([
        new CurveKey(0, 1),
        new CurveKey(1, 1),
      ]);
      velocityOverLifetime.velocityY.mode = ParticleCurveMode.Curve;
    });

should has almost same performance

JujieX avatar Apr 24 '24 06:04 JujieX