- Home /
(SOLVED) Audio issue
I am working on a simple open-able doors in Unity and I want them to have open and close AudioClips. I nearly got to where I want, but the only problem is that now, I hear the audio clips play immediately when I load or build the game scene, even thought I have Play On Awake unmarked, and I am far from the trigger collider. After wards everything goes perfectly and no problems. So I thought the problem might be somewhere in the script.. but I have no idea where. Tested many examples I found here and there, but the problem remains.
If anyone had the same issue or might know whats causing it, I would really appreciate any help ;)
Here's the script:
@script RequireComponent(AudioSource)
var smooth = 2.0;
var DoorOpenAngle = 90.0;
var audio1 : AudioSource;
var audio2 : AudioSource;
private var open : boolean;
private var enter : boolean;
private var defaultRot : Vector3;
private var openRot : Vector3;
function Start(){
var aSources = GetComponents(AudioSource);
audio1 = aSources[0];
audio2 = aSources[1];
defaultRot = transform.eulerAngles;
openRot = new Vector3 (defaultRot.x, defaultRot.y + DoorOpenAngle, defaultRot.z);
}
//Main function
function Update (){
if(open){
//Open door
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, openRot, Time.deltaTime);
audio2.Play ();
}else{
//Close door
transform.eulerAngles = Vector3.Slerp(transform.eulerAngles, defaultRot, Time.deltaTime * smooth);
audio1.Play ();
}
if(Input.GetKeyDown("e") && enter){
open = !open;
}
}
//Activate the Main function when player is near the door
function OnTriggerEnter (other : Collider){
if (other.gameObject.tag == "Player") {
enter = true;
}
}
//Deactivate the Main function when player is go away from door
function OnTriggerExit (other : Collider){
if (other.gameObject.tag == "Player") {
enter = false;
}
}
EDIT: oh and one more thing. I have two AudioSources attached to the door body object with each audio clip.
And the sound also plays for just a second when I stop the game scene
if(open){
audio2.Play ();
}else{
audio1.Play ();
}
so one sound is always set to play. Audio1 will always play as soon as you start the scene.
Answer by Rickenbaker · Apr 25, 2013 at 08:40 PM
ha, this script solved it for me:
//Instruction:
//Make an empty game object and call it "Door"
//Rename your 3D door model to "Body"
//Parent a "Body" object to "Door"
//Make sure thet a "Door" object is in left down corner of "Body" object. The place where a Door Hinge need be
//Add a box collider to "Door" object and make it much bigger then the "Body" model, mark it trigger
//Assign this script to a "Door" game object that have box collider with trigger enabled
//Press "f" to open the door and "g" to close the door
//Make sure the main character is tagged "player"
// Smothly open a door
var smooth = 2.0;
var DoorOpenAngle = 90.0;
var DoorCloseAngle = 0.0;
var open : boolean;
var enter : boolean;
var audio1 : AudioClip;
var audio2 : AudioClip;
//Main function
function Update ()
{
if(open == true)
{
var target = Quaternion.Euler (0, DoorOpenAngle, 0);
// Dampen towards the target rotation
transform.localRotation = Quaternion.Slerp(transform.localRotation, target, Time.deltaTime * smooth);
}
if(open == false)
{
var target1 = Quaternion.Euler (0, DoorCloseAngle, 0);
// Dampen towards the target rotation
transform.localRotation = Quaternion.Slerp(transform.localRotation, target1, Time.deltaTime * smooth);
}
if(enter == true)
{
if(Input.GetKeyDown("e"))
{
open = !open;
}
}
}
//Activate the Main function when player is near the door
function OnTriggerEnter (other : Collider)
{
if (other.gameObject.tag == "Player")
{
(enter) = true;
}
}
//Deactivate the Main function when player is go away from door
function OnTriggerExit (other : Collider)
{
if (other.gameObject.tag == "Player")
{
(enter) = false;
}
}
//@youtube.com/user/maksimum654321
//sound from door script:
var Trigger : AudioClip;
//when he enters the trigger zone
function OnTriggerStay()
{
//if he presses the e key
if (Input.GetKeyDown ("e"))
{
//audio plays
if (open) audio.PlayOneShot(audio1);
else audio.PlayOneShot(audio2);
}
}
Your answer
Follow this Question
Related Questions
GetSpectrumData - what does it fill the samples argument with exactly? 0 Answers
AudioClip stuttering while loop is OFF and not using function Update? 1 Answer
Browsers prevent WebGL Audio to start at Awake. How to get notification of actual Audio start? 0 Answers
2 audio or more at the same time 0 Answers
Multiple AudioSources overwriting a looping AudioSource 1 Answer