08.August.2023

정제로·2023년 8월 8일
0

C#

목록 보기
11/30
post-thumbnail

오늘은 내가 맡은 부분을 해나가기로 했다.
일단 오전에는 코테문제를 푸느라 시간을 다 쏟았다.
코테는 다른 게시물을 포스트 하겠다.
코테 넘모 어려워ㅠㅠㅠ


문제점

게임 종료시 end오디오 출력 안됨.

코드를 살펴보자

//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);
    }

이런 코드가 있었다.
대충 진행을 요약해보면

  1. GameEnd함수는
  • timescale을 0으로 하고,
  • endTxt를 turnon하며,
  • audioManager의 audioSource를 멈추고,
  • gameManager end라는 audio clip을 실행한다
  1. update문은
  • 계속 timeTxt에 설정해둔 시간 - 시간흐름을 소숫점 2자리로 바꾸어 업데이트한다
  • 타임오버가 되면(time <= 0) 위에말한 GameEnd함수를 실행
  1. isMatched는
  • 첫번째로 오픈한 카드와 두번째로 오픈한 카드가 같을때,
  • 카드가 2장 남았을때, 두 카드는 무조건 같으니, (카드가 같다면)
  • endTxt.SetActive(true);
    Time.timeScale = 0.0f;
    Invoke("GameEnd", 1f); //GameEnd함수를 1초 딜레이를 줌
    를 실행한다.

문제 1. 시간초과 했을 경우,

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();
        }
    }

해결~

문제 2. 카드 짝을 다 맞추었을때 실행안됨

오늘 이 두 오류를 해결하기 위해서, 거의 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차원적인 생각으로 접근을 했다.
결과는 이와같이 성공적이다. 나이스!

profile
초보자입니다.. 잘못된 정보, 달게 받겠습니다..

0개의 댓글

관련 채용 정보