Hi all
After so much research, even here, I could not find the answer to my question.
Basically I’ve a door to open. I inserted one sound for the opening and one sound for closing. Everything is ok.
Now I want to insert a sound to unlock the door before opening it, but any method I use does not work. I found many tips on the web, using “WaitForSeconds” method, but for me dont work…
Do you have any advice?
Below a example of my script… The WaitForSeconds is unchecked.I am a beginner with C#, so forgive me if it’s not correct or clear
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Doors : MonoBehaviour
{
public bool open = false;
private bool hasOpenedCompletly;
public float DoorOpenAngle = 90.0f;
public float DoorCloseAngle = 0.0f;
public float Smooth = 2.0f;
public bool front = false;
public bool back = false;
[SerializeField] private AudioClip[] LockedDoorSound;
[SerializeField] private AudioClip[] OpenDoorSound;
[SerializeField] private AudioClip[] UnlockedDoorSound;
private AudioSource Audio;
public bool isLocking = false;
void Start()
{
Audio = GetComponent ();
}
public void ChangeDoorState()
{
if (isLocking != true)
{
open = !open;
if (Audio != null)
{
PlayOpeningDoorSound();
}
}
else
{
PlayLockedDoorClosed();
}
}
private void PlayLockedDoorClosed()
{
int n = Random.Range(1, LockedDoorSound.Length);
Audio.clip = LockedDoorSound[n];
Audio.PlayOneShot(Audio.clip);
LockedDoorSound[n] = LockedDoorSound[0];
LockedDoorSound[0] = Audio.clip;
}
private void PlayOpeningDoorSound()
{
int r = Random.Range (1, OpenDoorSound.Length);
Audio.clip = OpenDoorSound[r];
Audio.PlayOneShot(Audio.clip);
OpenDoorSound [r] = OpenDoorSound [0];
OpenDoorSound [0] = Audio.clip;
}
private void PlayUnlockedDoorSound()
{
int u = Random.Range (1, UnlockedDoorSound.Length);
Audio.clip = UnlockedDoorSound;
Audio.PlayOneShot(Audio.clip);
UnlockedDoorSound = UnlockedDoorSound [0];
UnlockedDoorSound [0] = Audio.clip;
}
/*public IEnumerable WaitForOpenDoors()
{
yield return new WaitForSeconds(2.2f);
PlayUnlockedDoorSound ();
}*/
// Update is called once per frame
void Update ()
{
if (open)
{
Quaternion targetRotationOpen = Quaternion.Euler (-90, -DoorOpenAngle, 0);
transform.localRotation = Quaternion.Slerp (transform.localRotation, targetRotationOpen, Smooth * Time.deltaTime);
if (transform.localRotation == targetRotationOpen)
{
hasOpenedCompletly = true;
}
}
else
{
Quaternion targetRotationClose = Quaternion.Euler (-90, DoorCloseAngle, 0);
transform.localRotation = Quaternion.Slerp (transform.localRotation, targetRotationClose, Smooth * Time.deltaTime);
hasOpenedCompletly = false;
}
}
}