Question by
RobbyT15 · Mar 27, 2016 at 08:10 PM ·
audioaudiosourceaudioclipaudio listener
Audio not playing when conditions are met.
I am working on a simple driving game, my car object has an AudioSource
which is passed different AudioClips
when a certain condition is met. In my script, I'm able to actually see the clips changing in the game view when the conditions are met, but the actual clips are not playing. I have an AudioListener
on the main camera, which is a child object of my car GameObject
, the AudioSource
is also attached to the parent car object, and the AudioClips
are being set within the inspector for the carSounds
array. Can anyone explain why this would be happening and how I can fix it?
C#
private Rigidbody playerCar;
private AudioSource engine;
public AudioClip[] carSounds = new AudioClip[4];
private bool isCarStarted;
private bool isCarIdling;
private bool isCarAccelerating;
private bool isCarToppedOut;
private bool isPlaying;
private float timer;
void Start(){
playerCar = GetComponent<Rigidbody>();
engine = playerCar.GetComponent<AudioSource>();
isCarStarted = true;
isCarIdling = false;
isCarAccelerating = false;
isCarToppedOut = false;
if(isCarStarted){
engine.clip = carSounds[0];
if(!engine.isPlaying){
engine.Play();
}
}
}
void FixedUpdate(){
timer += Time.deltaTime;
if(timer <= carSounds[0].length){
isCarStarted = true;
}
else{
isCarStarted = false;
isCarIdling = true;
engine.Stop();
timer = 0f;
}
if(isCarIdling){
engine.clip = carSounds[1];
if(!engine.isPlaying){
engine.Play();
}
}
if(isCarAccelerating){
engine.clip = carSounds[2];
if(!engine.isPlaying){
engine.Play();
}
}
if(isCarToppedOut) {
engine.clip = carSounds[3];
if(!engine.isPlaying) {
engine.Play();
}
}
if(Input.GetKeyDown(KeyCode.W)){
isCarAccelerating = true;
isCarIdling = false;
engine.Stop();
}
if((speed <= 0) && (speed > -2) && (!isCarStarted)){
isCarAccelerating = false;
isCarIdling = true;
engine.Stop();
}
if(Input.GetKey(KeyCode.W)){
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
if(speed <= topSpeed){
speed += acceleration * Time.deltaTime;
Vector3 movement = new Vector3(vertical, 0f, horizontal);
playerCar.AddForce(movement * speed);
Debug.Log(speed);
}
else{
speed = topSpeed;
if(speed == topSpeed){
isCarToppedOut = true;
isCarAccelerating = false;
engine.Stop();
Debug.Log(speed);
}
}
}
Comment