Accessing Particle Amount or Spawnduration via script?

  • So I guess there is no way to access the other particle behaviors..?

     

    Comment actions Permalink
  • Hi El,

    You can do this by transitioning the number of particles in and out before turning them off. We can do this by modifying the particleControlHelper to include a transition state. 

    First we need to tell our particle system that we want to control the number of particles in the scene. Select your particle material and in its Inspector panel, tick the particle count box. 

    Then let's modify our particleControlHelper script. At the top of the file, we can declare some variable that keeps track of our state. I also added a variable to define how fast we should change the spawnCount. Finally, we will record the spawnMaxParticles we set in the material settings so that we can transition to and from it. 

    var transitionState = 0; // 0 none, 1 transition in, 2 particle showing, 3 transition out
    var transitionSpeed = 10;
    var spawnMaxParticles = meshVis.mainPass.spawnMaxParticles;

    Then in the update function, after we set our externalTimeInput, we will modify the number of particles we are spawning based on the state above.

    if (transitionState == 1) {
    meshVis.mainPass.spawnMaxParticles += transitionSpeed;

    if (meshVis.mainPass.spawnMaxParticles >= spawnMaxParticles) {
    transitionState = 2
    }
    } else if (transitionState == 3) {
    meshVis.mainPass.spawnMaxParticles -= transitionSpeed;

    if(meshVis.mainPass.spawnMaxParticles <= 0) {
    stopParticle();
    }
    }

    Notice that we call stopParticle here after our particle count is 0, rather than when particleStopEvent is called. 

    Finally we'll modify how our particle system start and stop to account for the transition state. In the startParticle function, we will add

     meshVis.mainPass.spawnMaxParticles = 0;
    transitionState = 1;

    to have our particle spawn count start from 0 then letting our update function know that we should increase it. 

    Then we will add another function that tells our update loop to decrease the particle count when the particleStopEvent gets triggered, rather than stopping the particle instantly  

     function startTransitionOutParticle() {
    transitionState = 3;
    }

    var particleStopEvent = script.createEvent(script.particleStopper);
    particleStopEvent.bind(startTransitionOutParticle);

    In our stopParticle function we will also set the transitionState to 0 to let our update loop know that we are not transitioning. 

    transitionState = 0;

    and now you should see your particles transitioning in and out!

     

    Let me know if you have any other questions. Can't wait to see what you come up with. 

    Cheers!

    Jon

    Our final script:

    // ParticleControlHelper with Transition!
    // Version: 0.0.1
    // Event: Lens Initialized
    // Description: Plays Particle on trigger

    // @input string particleTrigger = TouchStartEvent { "widget": "combobox", "values": [ { "label": "Brows Lowered", "value": "BrowsLoweredEvent" }, { "label": "Brows Raised", "value": "BrowsRaisedEvent" }, { "label": "Brows Returned To Normal", "value": "BrowsReturnedToNormalEvent" }, { "label": "Face Found", "value": "FaceFoundEvent" }, { "label": "Face Lost", "value": "FaceLostEvent" }, { "label": "Kiss Finished", "value": "KissFinishedEvent" }, { "label": "Kiss Started", "value": "KissStartedEvent" }, { "label": "Mouth Closed", "value": "MouthClosedEvent" }, { "label": "Mouth Opened", "value": "MouthOpenedEvent" }, { "label": "Smile Finished", "value": "SmileFinishedEvent" }, { "label": "Smile Started", "value": "SmileStartedEvent" }, { "label": "Touch Start", "value": "TouchStartEvent" }, { "label": "Touch End", "value": "TouchEndEvent" }, { "label": "Tap", "value": "TapEvent" } ] }

    //@ui {"widget":"separator"}
    // @input bool stoppable = false
    // @input string particleStopper = TouchEndEvent { "widget": "combobox", "values": [ { "label": "Brows Lowered", "value": "BrowsLoweredEvent" }, { "label": "Brows Raised", "value": "BrowsRaisedEvent" }, { "label": "Brows Returned To Normal", "value": "BrowsReturnedToNormalEvent" }, { "label": "Face Found", "value": "FaceFoundEvent" }, { "label": "Face Lost", "value": "FaceLostEvent" }, { "label": "Kiss Finished", "value": "KissFinishedEvent" }, { "label": "Kiss Started", "value": "KissStartedEvent" }, { "label": "Mouth Closed", "value": "MouthClosedEvent" }, { "label": "Mouth Opened", "value": "MouthOpenedEvent" }, { "label": "Smile Finished", "value": "SmileFinishedEvent" }, { "label": "Smile Started", "value": "SmileStartedEvent" }, { "label": "Touch Start", "value": "TouchStartEvent" }, { "label": "Touch End", "value": "TouchEndEvent" }, { "label": "Tap", "value": "TapEvent" }], "showIf":"stoppable" }


    // Get the Particle's Mesh Visual
    var meshVis = script.getSceneObject().getFirstComponent("Component.MeshVisual");
    // Variable to store what time particle started
    var startTime;

    var transitionState = 0; // 0 none, 1 transition in, 2 particle showing, 3 transition out
    var transitionSpeed = 10;
    var spawnMaxParticles = meshVis.mainPass.spawnMaxParticles;

    // Update the particle time every frame when needed
    function update()
    {
    if (startTime)
    {
    // Calculate how many seconds have elapsed since we've triggered partcles
    var particleTime = getTime() - startTime;

    // Pass it in to our Particle Material
    meshVis.mainPass.externalTimeInput = particleTime;

    if (transitionState == 1) {
    meshVis.mainPass.spawnMaxParticles += transitionSpeed;

    if (meshVis.mainPass.spawnMaxParticles >= spawnMaxParticles) {
    transitionState = 2
    }
    } else if (transitionState == 3) {
    meshVis.mainPass.spawnMaxParticles -= transitionSpeed;

    if(meshVis.mainPass.spawnMaxParticles <= 0) {
    stopParticle();
    }
    }
    }

    }
    var updateEvent = script.createEvent("UpdateEvent");
    updateEvent.bind(update);


    // On an event, store the time when particle is triggered
    function startParticle()
    {
    startTime = getTime();
    meshVis.mainPass.spawnMaxParticles = 0;
    transitionState = 1;
    }
    var particleTriggerEvent = script.createEvent(script.particleTrigger);
    particleTriggerEvent.bind(startParticle);


    if (script.stoppable) {
    // On an event, store the time when particle is triggered
    function stopParticle()
    {
    transitionState = 0;
    startTime = 0;
    meshVis.mainPass.externalTimeInput = 0;
    }

    function startTransitionOutParticle() {
    transitionState = 3;
    }

    var particleStopEvent = script.createEvent(script.particleStopper);
    particleStopEvent.bind(startTransitionOutParticle);
    }

     

    Comment actions Permalink
  • Supernice. thank you

    Comment actions Permalink
Have a comment?

Please sign in to leave a comment.

We're here to help! We just need a little bit of information...

What system are you using?

Have you downloaded the latest version of Lens Studio?

Please download the latest version of Lens Studio. If you still run into this issue, please come back and report it!

Is this issue causing Lens Studio to crash?

What system do you run Lens Studio on?

Version

Graphics

Follow the next steps to help us solve your issue:

  • Copy and paste this text into your TerminalCommand Window
    open ~/Library/Preferences/Snap/Lens\ Studio/ %LOCALAPPDATA%\Snap\Lens Studio Copy Text
  • Press ReturnEnter to run the command. The Lens Studio folder will automatically open
  • Prepare to upload your files: zip the "Log" Folder by right-clicking and choosing "compress."
    Locate the Log.txt file right above it.

    Attach a screenshot of the issue:

Name:

Email:

What is this most relevant to?

Please enter a brief description of your issue:

Thanks for submitting this issue.

Unfortunately, it's likely due to the operating system or hardware you're using – since they don't meet the system requirements for Lens Studio.

Still, we hear you loud and clear, and are logging the issue in case there's ever a workaround we can provide!

Minimum Requirements

Operating System: Windows 10 (64 bit); MacOS 10.11+

Hardware: Minimum of Intel Core i3 2.5Ghz or AMD Phenom II 2.6Ghz with 4 GB RAM; Intel HD Graphics 4000 / Nvidia GeForce 710 / AMD Radeon HD 6450 or better; screen resolution of 1280x768 or higher

We'll try to resolve this issue as soon as possible. Thanks for letting us know about it!

Keep an eye out for a followup email from us. We may have a couple more questions for you, or we might already have a solution to offer.

Happy creating!