- Home /
Dopplereffect value sets internal to 0 when PlayOneShot starts on looping AudioSource
While experimenting on a car nitro script, I noticed some weird behaviour of the AudioSource.PlayOneShot(Audioclip clip) when dopplervalue > 0 and I highly doubt if it is intended to behave so.
The procedure with my use case is the following:
The audiosource refers to a looping clip of the nitro sound and plays while boosting. When the player starts to boost, an ignition sound is layered on top of the playing audiosource, using the PlayOneShot function.
The AudioListener is on the camera which is not moving to test the doppler effect. Now when the ignition sound starts, the doppler effect is not hearable anymore although the inspector value is untouched, so I assume it is internal set to 0.
This lasts as long as the PlayOneShot clips' duration, afterwards the doppler effect is the same as set by the inspector (default 1).
Now I could turn the doppler value to 0, but then I will never have this effect, and trying to set the doppler value after PlayOneShot to correct it has no effect.
This is the code attached to the car:
[RequireComponent(typeof(AudioSource))]
public class Nitro : MonoBehaviour {
private AudioSource nitro;
public AudioClip nitroIgnition;
public AudioClip nitroLoop;
void Awake(){
nitro = GetComponent<AudioSource> ();
nitro.loop = true;
nitro.clip = nitroLoop;
}
void Update(){
if (Input.GetKeyDown (KeyCode.LeftShift)) {
nitro.PlayOneShot (nitroIgnition);
nitro.Play ();
} else if (Input.GetKeyUp (KeyCode.LeftShift)) {
nitro.Stop ();
}
}
}
I think when using the PlayOneShot function a new hidden audio source with the same parameters as the already existing one, but why would it change the doppler value of that one at the beginning and when it is destroyed?
Could somebody clarify that?
Thanks in advance.
Answer by Jon_Olive · Jun 13, 2020 at 12:55 PM
@Noxury I don't understand why without digging into it further - but it would seem from other posts about problems with PlayOneShot() (see https://forum.unity.com/threads/playoneshot-pitch.704351/ for example) that PlayOneShot() can only take an initial value for pitch and not have that value vary during playback. Since the built in doppler is basically doing a pitch change on the source depending on the relative velocity of source and listener along the axis between them it would appear that would also stop doppler working on a source triggered by PlayOneShot().
Your answer
Follow this Question
Related Questions
AudioSource volume inconsistency 1 Answer
Problems combining Audio triggers, PlayOneShot and Audio Arrays 1 Answer
How to switch Audiosource without stacking by an input? 0 Answers
2nd Audio Clip Not Playing 0 Answers
Play Audio on Object click? 2 Answers