The question is answered, right answer was accepted
Cant get sound playing BEFORE event happened.
It is the first time I am encountering this issue. I am making a script that changes the effect of wind on a Player after X amount of time and which lasts for Y amount of time. I need my sound to play together with this effect, however, it always plays only AFTER the event finishes. Here is my script:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class SnowScript : MonoBehaviour { public static SnowScript instance;
 AudioManager audioManager;
 IndentScript indentScript;
 Vector2 originalPos = new Vector2(-6.51f,7.53f);
 Quaternion originalRot = Quaternion.Euler(110,-90,-90);
 ParticleSystem ps;
 public float delay;
 [Range(0f, 2f)]
 public float randomDelay;
 public bool swapped;
 public float snowAffect;
 public float timer;
 public float burstDelay;
 [Range(0f, 2f)]
 public float randomBurstDelay;
 public float snowBurstAffect;
 public bool burst;
 public float burstTimer;
 public float burstActiveTime;
 void Awake()
 {
     instance = this;
     timer = delay;
     burstTimer = burstDelay;
     transform.position = originalPos;
     transform.rotation = originalRot;
     ps = GetComponent<ParticleSystem>();
 }
 void Start()
 {
     audioManager = AudioManager.instance;
     indentScript = IndentScript.instance;
 }
 void Update()
 {
     CheckTimers();
     CheckSwap();
 }
 void CheckTimers()
 {
     if (timer >= 0)
     {
         timer -= Time.deltaTime;
     }
     if (timer <= 0)
     {
         swapped = !swapped;
         Swap();
     }
     if (burstTimer > 0)
     {
         burstTimer -= Time.deltaTime;
     }
     if (burstTimer <= 0)
     {
         burst = true;
     }
 }
 void CheckSwap()
 {
     if (swapped)
     {
         if (!burst)
         {
             var main = ps.main;
             main.simulationSpeed = 1f;
             indentScript.transform.Translate(Vector3.left * snowAffect * Time.deltaTime);
         }
         if (burst)
         {
             var main = ps.main;
             main.simulationSpeed = 3f;
             StartCoroutine("Wait");
             indentScript.transform.Translate(Vector3.left * snowBurstAffect * Time.deltaTime);
         }
     }
     if (!swapped)
     {
         if (!burst)
         {
             var main = ps.main;
             main.simulationSpeed = 1f;
             indentScript.transform.Translate(Vector3.right * snowAffect * Time.deltaTime);
         }
         if (burst)
         {
             var main = ps.main;
             main.simulationSpeed = 3f;
             StartCoroutine("Wait");
             indentScript.transform.Translate(Vector3.right * snowBurstAffect * Time.deltaTime);
         }
     }
 }
 void Swap()
 {
     if (!swapped)
     {
         transform.position = originalPos;
         transform.rotation = originalRot;
     }
     if (swapped)
     {
         transform.position = new Vector2(10.91f, 7.53f);
         transform.rotation = Quaternion.Euler(20, -90, -90);
     }
     timer = delay * (1 + Random.Range(-randomDelay / 2f, randomDelay / 2f));
 }
 IEnumerator Wait()
 {
     //audioManager.PlaySound("WindBurst");  //    - Sound should play BEFORE the WaitForSeconds, however it only plays after.
     yield return new WaitForSeconds(burstActiveTime);
     burst = false;
     burstTimer = burstDelay * (1 + Random.Range(-randomBurstDelay / 2f, randomBurstDelay / 2f));
 }
 
               }
Answer by shpakrecords · Jun 07, 2019 at 11:34 AM
Figured out by myself. Apparently, sound does not want to play if it is simply in update. Added an extra condition to check:
void PlayAudio() { if (burst && windBurst.isPlaying == false) { windBurst.Play(); } if (!burst && windBurst.isPlaying) { windBurst.Stop(); } }
Maybe this will help somebody!
Follow this Question
Related Questions
how to stop particles shrink texture 1 Answer
Particle system error in world space 0 Answers
How can you create non circular rocket flame particle effect? 0 Answers
Few AudioSources as components on one gameobject 1 Answer
Is there a way I can control parameters within a shader via the particle system 0 Answers