Reputation: 11319
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using Whilefun.FPEKit;
public class RoboSphereWindowBreakInteraction : MonoBehaviour
{
public Transform target;
public InteractableObjects interactableObjects;
public AudioClip audioClip;
public float speed;
private bool hasStarted = false;
private Animator anim;
void Update()
{
if ((Input.GetKeyDown(KeyCode.B) || (hasStarted == true)))
{
float step = speed * Time.deltaTime; // calculate distance to move
transform.position = Vector3.MoveTowards(transform.position, target.position, step);
hasStarted = true;
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "Square 1")
{
GetComponent<Rigidbody>().isKinematic = false;
hasStarted = false;
Destroy(GameObject.Find("Wall_Window_Long_03"));
}
}
public void ActivateRoboSphere()
{
foreach(Transform child in transform)
{
if(child.name == "Camera")
{
RepositionCamera(child);
}
}
anim = GetComponent<Animator>();
anim.enabled = true;
if (!anim.GetBool("Open_Anim"))
{
anim.SetBool("Open_Anim", true);
StartCoroutine(PlayAudio());
}
else
{
//anim.SetBool("Open_Anim", false);
}
}
private void RepositionCamera(Transform camera)
{
var Eyes = GameObject.Find("eyeDome");
camera.position = Eyes.transform.position + Eyes.transform.forward;
camera.LookAt(Eyes.transform);
camera.GetComponent<Camera>().enabled = true;
}
IEnumerator PlayAudio()
{
AudioSource audio = GetComponent<AudioSource>();
audio.Play();
yield return new WaitForSeconds(audio.clip.length);
audio.clip = audioClip;
audio.Play();
}
}
It's getting inside the PlayAudio but the sound is not heard.
The audio source component screenshot settings :
Upvotes: 0
Views: 45
Reputation: 144
The only problem I see with this code is that initially, your audio source's clip isn't set to anything. Thus will result in a null ref exception on this line:
yield return new WaitForSeconds(audio.clip.length);
Add a null check and you should be good to go
if (audioSource.clip != null)
{
yield return new WaitForSeconds(audioSource.clip.length);
}
Upvotes: 1