IEnumerator LaserSound(bool isStop = false)
{
if (isStop && !isThereAttackTarget && template.weapon[level].myOwnAudioSource != null)
{
StopCoroutine(LaserSound());
template.weapon[level].myOwnAudioSource.Stop();
template.weapon[level].myOwnAudioSource.loop = false;
template.weapon[level].myOwnAudioSource.clip = template.weapon[level].laserStopSound;
template.weapon[level].myOwnAudioSource.Play();
isLaserSoundPlaying = false;
yield break;
}
else
{
if (isLaserSoundPlaying == false && template.weapon[level].myOwnAudioSource != null)
{
isLaserSoundPlaying = true;
template.weapon[level].myOwnAudioSource.clip = template.weapon[level].laserStartSound;
template.weapon[level].myOwnAudioSource.Play();
yield return new WaitForSeconds(template.weapon[level].laserStartSound.length);
template.weapon[level].myOwnAudioSource.Stop();
template.weapon[level].myOwnAudioSource.loop = true;
template.weapon[level].myOwnAudioSource.clip = template.weapon[level].laserLoopSound;
template.weapon[level].myOwnAudioSource.Play();
}
}
}
이 코루틴이 처음에 타워 프리팹 하나만 있을때는 작동을 잘함.
그런데 타워가 하나 더 설치되면 기존에 있던 타워는 template.weapon[level].myOwnAudioSource.clip = template.weapon[level].laserStartSound;
여기에 문제가 생겨서 레이저 발사 소리는 안나는데 오래 공격하면 루프 소리는 정상적으로 재생 됨.
근데 이유를 모르겠음. 리소스에서 직접 불러오는 방식으로도 해봤는데 똑같았음. 오디오 소스도 멀쩡히 존재하는데...
정확한 증상은 타워를 2개 설치 했을때 제일 먼저 설치한 타워는 레이저 발사 소리를 None으로 불러와서 아무소리도 안나는거임.
여러개 설치하면 마지막에 설치한 타워만 발사 소리 남.
테스트 여러번 해본 결과 타워의 레벨은 상관없음. 디버그 확인도 해봤는데 디버그로는 다 정상적으로 불러와짐.
위에 사진은 타워가 가지는 데이터 클래스에 클립도 제대로 등록했다는걸 보여주기 위해서 추가한거.
chat gpt 이 문제는 LaserSound 코루틴이 여러 타워에서 공유되는 template.weapon[level].myOwnAudioSource를 사용하기 때문에 발생하는 것 같습니다. 여러 타워가 같은 레벨의 무기를 사용할 때, 첫 번째 타워의 AudioSource가 두 번째 타워의 상태에 영향을 주는 것처럼 보입니다. 각 타워가 자신의 오디오 소스를 관리하도록 설계하는 것이 좋습니다. 해결책은 각 타워에 대한 독립적인 오디오 소스를 관리하는 것입니다. 이를 위해서는 다음과 같은 접근 방법을 사용할 수 있습니다. 1. 독립적인 오디오 소스 생성 각 타워가 자신의 오디오 소스를 가지도록 설계합니다. template.weapon이 각 타워에 대한 오디오 소스를 가지고 있도록 수정해야 합니다.
이거 토대로 뜯어고쳐서 됐음. 고마워