Home > Enterprise >  My audio only plays one time in unity c# (beginner)
My audio only plays one time in unity c# (beginner)

Time:07-31

I am making a gunshot code for a zombie shooter, but for some reason whenever I fire more than once in the same time period as the other shot, they don't overlap? Is there any way I can make it so that they do? Also, it only plays occasionally when I wait

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class audioplay : MonoBehaviour
{
    public AudioSource source;
    public AudioClip clip;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            source.PlayOneShot(clip);
        }
        
    }
}

CodePudding user response:

You wouldn't want a shoot function without any cooldown, especially in update. Also check your audio file to see if has blank space in it, like the one I used: I used Audacity to trim the audio file. (it's free and open source :D ) enter image description here

Code stuff:

using UnityEngine;

public class MyPlayAudio : MonoBehaviour {

public AudioSource audioSource;

public AudioClip audioClip;

public float shootCooldown; //change this according to how fast you want to shoot

private float currentShootCooldown;


void Update()
{
    //if you are holding mouse button down and we are ready to shoot
    if(Input.GetMouseButton(0) && currentShootCooldown <= 0)
    {
        Pewpew();
    }

    //make sure you are not changing the public value
    currentShootCooldown -= Time.deltaTime;
}

public void Pewpew()
{
    //code whatever gun is supposed to do, like dealing damage


    //resets cooldown for pewpew
    currentShootCooldown = shootCooldown;

    //plays the audio
    audioSource.PlayOneShot(audioClip);
}
}

I think .Play might be better if we are thinking about a gun. I don't know, try both and see which one is better for your needs

audioSource.clip = audioClip; //this is not necessary if your gun is only going to do 1 sound.
audioSource.Play();

`

CodePudding user response:

If you want it to overlap, you could for example add that component to two different gameobjects in the scene, that way there will be one frame where the function is called twice. Since Update would run on two objects.

  •  Tags:  
  • c#
  • Related