-
2023.12.27TIL 2023. 12. 27. 20:37
오늘은 크게 다른게 없었습니다.
라고 생각했지만 일이 계속 있더라구요.ㅎㅎ
제가 맡은 부분은 저는 완료했습니다.
그래서 다른 분들 진행하시는거 보면서 디테일을 넣으려고 노력했습니다.
게임 시간이 끝나게 되면 endPanel이 나오도록 되어있습니다.
마찬가지로 모든 카드를 다 짝지어 맞출 경우에도 endPanel이 나오도록 되어있습니다.
하지만 이 경우에 카드가 짝 지었을 때 나오는 소개 카드와 같이 endPanel이 등장하게 되더라구요.
그래서 소개 카드가 사라지면 endPanel이 등장하도록 만들려고 했습니다.
처음에는 간단하게 카드를 클릭했을 때 소개 카드가 사라지면 나타나게하면 되는 거라 생각해서 함수 끝나면 실행될 수 있는 방법을 찾아봤습니다.
못찾았습니다..
있는지는 모르겠지만 우선 찾아봤을 때 없더라구요.
그래서 카드 짝이 맞춰지는 갯수에 맞춰서 새로운 함수가 발동되도록 만들었습니다.
public bool LastCard(float c) { if (c - 1 == clickcount) { setClick = true; Debug.Log(c); return setClick; } else return false; }
소개 카드를 클릭할 때마다 clickcount가 1씩 증가되도록 만들었습니다.
float c는 GameManager에서 설정된 카드의 갯수/2를 받기 위해서 설정해주었습니다.
스테이지마다 카드 갯수들이 달라지기 때문에 변수를 사용해주었습니다.
Debug.Log는 잘 작동하는지 확인하기 위해서 넣었습니다.
카드 갯수의 -1을 한 이유는 고양이에게 밥 주는 게임을 만들 때에도 그랬지만 if문이 true가 된다고해서 바로 실행되는 것이 아니기 때문입니다.
마지막 카드 2장 전에 c-1 == clickcount는 true가 됩니다. 그러나 함수는 c-1 == clickcount가 false인 상태에서 이미 함수가 실행되었기 때문에 setClick은 false 상태로 있습니다.
여기서 한번 더 함수를 실행시켜줘야 c-1 == clickcount가 true인 상태로 함수가 실행되는 것 입니다.
처음에는 if - return setClick;만 입력했는데 부분 데이터만 전달되기 때문에 안된다는 오류가 계속 떴습니다.
이유는 else를 사용하지 않았기 때문입니다.
그러다가 문득 든 생각인데, if-else문에서 else를 사용하지 않는 경우들이 많습니다.
제가 생각했을 때에는 return이 있고 없고 차이라고 생각됩니다.
return 반환 값이 필요한 경우에는 else인 상황에서 어떤 값을 반환해야하는지 지정해주지 않으면 다른 곳에서 이 함수를 받았을 때 오류가 발생할 수 있습니다. 이것을 미리 알고 else return 을 적으라고 한 것 같습니다.
저희에게 중요한 부분은 if문이기 때문에 else는 간단하게 적고 넘깁니다.
void Setendpanel() { if (nameCard.GetComponent<Introduction>().LastCard(boardSizeX * boardSizeY / 2) == true) { setEndpanel = true; } }
GameManager에서 LastCard 함수를 사용하기 위해서 새로운 함수를 만들어주었습니다.
사실 원래 있던 코드에 if문을 넣어서 하면 될 것 같은데 이후에 수정이 필요할 경우(없을 것 같지만) 수정하기 편하게 하기 위함도 있고 무엇보다 팀원들이 추가된 부분에 대해서 알기 쉽게 하기 위해서입니다.
그리고 깃허브로 공유하여 push와 pull을 했을 때 원래 있던 함수 안에 새로운 코드를 작성할 경우 다른 사람이 pull을 하면 충돌이 일어날 수 있기 때문에 새롭게 만드는 것을 따로 아래로 빼고 작성해봤습니다.
setEndpanel = true가 되면 게임이 종료되고 판넬이 사라지면 작동이 될 것이라고 생각했습니다.
그 전이랑 똑같이 EndPanel과 소개카드가 같이 나오더라구요.
좀 더 방법을 찾다가 어제 팀원분께서 IEnumerator을 사용한 것을 보고 yield return에 대해서 찾아본 것이 생각났습니다.
yield return
단순히 Invoke처럼 몇 초 뒤에 함수가 실행된다 라고 생각했습니다.
그렇지 않았습니다.
yield return new WaitForSeconds(0.001f);
0.001초 뒤에 이 후에 있는 코드를 실행한다 입니다.
if(setEndpanel == true) { yield return new WaitForSeconds(0.001f); OnDisable(); }
즉 setEndpanel이 true일 때 OnDisable() 함수를 0.001초 뒤에 실행한다 라는 것입니다.
그렇다면 왜 0.001초에 실행하는 것인데 잘 되는 것이냐?
바로 소개 카드가 등장할 때 Time.timeScale = 0f로 설정해줬기 때문에 시간이 흐르지 않는 것입니다.
소개 카드를 다시 눌러서 Time.timeScale = 1f로 설정해주면 다시 시간이 흐르면서 0.001초 뒤에 OnDisable();함수가 실행됩니다.
OnDisable()함수는 GameObject.SetActive(false)일 때 실행되는 함수입니다.
그래서 원래는 yield return을 쓸 생각이 없었는데 소개카드가 등장함과 동시에 짝지어진 카드가 Destroy되기 때문에 Destroy되는 것에 맞춰서 OnDisable함수가 실행되더라구요.
아마 OnDisable함수가 아니더라도 yield return 덕에 제대로 실행될 것 같습니다.
OnDisable 함수가 아니더라도 제대로 실행됩니다. OnDisable 함수는 다음 기회에 제대로 사용해보는 게 좋을 것 같습니다.
void OnDisable() { if (endPanel != null) { endPanel.SetActive(true); } Time.timeScale = 0f; }
OnDisable함수가 실행되면 endPanel이 나오고 Time.timeScale = 0으로 해서 게임을 멈추게 만듭니다.
여기서 if문은 무슨 의미냐 라고 하시면 저도 모르겠습니다.
어떤 오류가 있는지 모르겠지만 팀원분이 넣어주셨습니다.
endPanel이 안나타나서 넣은 것 같은데 잘 모르겠습니다.
이렇게 완성 시키고 다음은 10초 남았을 때 새로운 소리 등장입니다.
근데 새로운 소리를 추가하는 것이 아닌 원래 있던 배경음의 pitch와 volum 크기를 조절하는 걸로 바꾸셨더라구요.
그래서 게임이 끝났을 때 pich와 volum 크기를 원래대로 바꾸는 것을 추가했습니다.
if (gameTime <= 0) //게임 종료 { . . . audioSource.pitch = 1f; audioSource.volume = 0.1f; }
되게 간단하다 생각했는데 pitch는 원래대로 돌아갔는데 volume이 안돌아가더라구요.
확인해보니깐 밑에 if문으로 따로 있던 것이 문제였습니다.
else if (gameTime <= 10f) // 필요에 따라 조절 { if (audioSource.volume < targetVolume) { audioSource.volume = Mathf.Lerp(initialVolume, targetVolume, 1.0f - (gameTime / 10f)); } . . . }
지금은 else if이지만 원래는 if로 따로 있었습니다.
아무래도 if문으로 그것도 조건이 gameTime에 관한 조건이기 때문에 적용이 되지 않았던 것 같습니다.
아무래도 둘 다 gameTime이 음수인 상태에서 아래있는 if문이 실행된 것 같습니다.
그래도 간단하게 else if를 사용해서 수정했더니 위에 있는 if문이 잘 실행되게 되었습니다.
그래서 else if를 사용하는 것 같습니다.
이후에는 소개카드 수정하고 또 버그 없나 계속 플레이하면서 봤던 것 같습니다.
여담이긴 한데 팀장님 시연영상 찍으시느라 고생하셨긴했는데 왜... 종료되면 초기화 되는거 적용이 안됐지?
그리고 첫화면 사진 내 사진만 너무 커서 좀 부담스럽.. 다시 찍어주심 안되나..?
9시까지 제출인데 지금봐서 다시 찍으실 수 있으시려나..
아직 안친해서 이야기하기가 쉽지않네여..
당당하게 말하는 자신감! 길러지겠죠..?
'TIL' 카테고리의 다른 글
2023.12.29 - 주석 단축키, 조건문, 배열, 컬렉션 (1) 2023.12.29 2023.12.28 (0) 2023.12.28 2023.12.26 (1) 2023.12.26 2023.12.22 (1) 2023.12.22 2023.12.21 (0) 2023.12.21