오늘은 내가 맡은 부분을 해나가기로 했다.
일단 오전에는 코테문제를 푸느라 시간을 다 쏟았다.
코테는 다른 게시물을 포스트 하겠다.
코테 넘모 어려워ㅠㅠㅠ
코드를 살펴보자
//gameManager cs안의 코드들
.....
public AudioClip match;
public AudioClip end;
public AudioClip wrong;
public AudioSource audioSource;
public audioManager audioManager;
.....
void Update() //60
{
time -= Time.deltaTime;
timeTxt.text = time.ToString("N2");
timeOver();
}
void timeOver()
{
if (time <= 0)
{
GameEnd();
}
}
.....
public void isMatched()
{
....
if (firstCardImage == secondCardImage)
{
.....
if (cardsLeft == 2)
{
endTxt.SetActive(true);
Time.timeScale = 0.0f;
Invoke("GameEnd", 1f);
}
}
}
..............
void GameEnd()
{
Time.timeScale = 0.0f;
endTxt.SetActive(true);
audioManager.audioSource.Stop();
audioSource.PlayOneShot(end);
}
이런 코드가 있었다.
대충 진행을 요약해보면
bgm이 꺼지긴꺼지는데, end오디오가 미친듯이 큰 볼륨으로 한 20~30개정도 섞인 소리가 나기 시작함.
문제점이 뭔지를 모르겠어서 gpt와 인터넷을 뒤져봤지만 답을 알 수 없었음.
그렇게 팀원들과 같이 문제를 공유하다가 문득
"update문은 1초당 60프레임으로 갱신되니까 엄청 빠르게 end오디오가 실행되며 생긴 문제인거 같은데? 한번 Fixedupdate로 옮겨볼까?"
그래서 GameEnd가 실행되는 부분만 옮겨보았다
void Update() //60
{
time -= Time.deltaTime;
timeTxt.text = time.ToString("N2");
}
void FixedUpdate()// 30
{
timeOver();
}
void timeOver()
{
if (time <= 0)
{
GameEnd();
}
}
해결~
오늘 이 두 오류를 해결하기 위해서, 거의 4시간을 쏟아부었다. 결국 해결을 했고!
일단 문제2는 GameEnd함수 자체가 실행이 안되던 문제였다. invoke의 딜레이 시간이 문제인것 같아 딜레이시간을 줄여보았음에도 실행이 되지 않았다.
결국 invoke의 문제다! 라고 생각이 들어, 팀원분께 허락을 맡고 invoke를 지우고 바로 GameEnd함수를 불러오도록 해봤다..
결과는 성공!!
.......
if (cardsLeft == 2)
{
endTxt.SetActive(true);
Time.timeScale = 0.0f;
GameEnd();
}
사실 이 문제를 풀기위해, audioManager를 gameManager에서 불러와서, audioManager로 bgm 실행과 중지, end 출력등을 하려 했는데, 도저히 방법이 안나와서 그냥 쉽게 풀어보자는 생각에, 그냥 바로 게임끝나면 end오디오 부르면 되잖아? 같은 가장 기초적인 1차원적인 생각으로 접근을 했다.
결과는 이와같이 성공적이다. 나이스!