- Home /
Audio stops after one second
My code seem to work, but the 12 sec audio clip stops after just one second, while the object continues to move.
#pragma strict
// define the origin and destination point objects in the game.
var originSpot : Transform;
var destinationSpot : Transform;
var isInTheZone : boolean; // this is set in triggerDoor.js
var speed : float;
// door audio position code
var lastPosition : Vector3;
var originPos : Vector3;
var destPos : Vector3;
var door_transform : Transform;
var isMoving : boolean;
var door_audio : AudioClip;
function Start()
{
audio.clip = door_audio;
door_transform = transform;
originPos = originSpot.position;
destPos = destinationSpot.position;
isMoving = false;
}
function Update()
{
if(isInTheZone)
{
// first person controller is inside the collider. Slide out the door.
transform.position = Vector3.MoveTowards(transform.position, destinationSpot.position, speed * Time.deltaTime);
}
else
{
// first person controller is outside the collider. Slide the door back to the original position.
transform.position = Vector3.MoveTowards(transform.position, originSpot.position, speed * Time.deltaTime);
}
// check if door is moving. If so, play audio clip.
if ( door_transform.position != destPos || door_transform.position != originPos)
{
isMoving = true;
audio.Play();
}
else
{
isMoving = false;
audio.Pause();
}
lastPosition = door_transform.position;
}
Comment
Best Answer
Answer by sath · Dec 31, 2013 at 03:32 PM
in line 45 you set audio.Play();
but this line is a continuous condition so always is starting audio.Play();
you can do something like
var playSound : boolean;//set a new bool
if ( door_transform.position != destPos || door_transform.position != originPos)
{
isMoving = true;
if(!playSound){
audio.Play();
playSound=true;
}
}
else
{
isMoving = false;
audio.Stop();
playSound=false;
}
Oh, and I also made a huge mistake in my code (for the googlers looking for an answer). The if line should be... if ( lastPosition != destPos && lastPosition != originPos )
and it's also better to use audio.Stop(); ins$$anonymous$$d of audio.Pause(); in this case.