본문 바로가기

내일배움캠프/[P1-Team.] ChillySauceCode

[TIL 24.04.16] 카드 매치 & 효과음 +Notion

게임의 기본적인 틀은 모두 구현했으니 이제 미니 프로젝트를 하면서 구현하라고 한 과제들을 수행할 시간이다. 

목   차

     


    내가 구현한 기능 목록.

    조원과 함께하는 프로젝트에서 내가 주가 되어 구현한 기능들로, 다른 사람이 업로드한걸 아주 약간 수정해주는 것은 생략했다. 서로서로 업로드 미스가 났거나 실수한 것을 자기가 수정하다가 conflict 날까봐 간단한 문제들은 수정해야 하는 스크립트를 현재 작성중인 사람에게 대신 부탁하는 식으로 매꿨다. 

    카드 매치 사인 만들기.

    1쌍의 카드를 선택했을 때 같다면 그 카드 주인의 이름을, 틀렸다면 "실패..." 사인을 출력하는 기능이다.

    #UI 구현

    처음에는 MainScene의 한가운데에 구현을 하려 했으나, 그렇게 하면 내가 방금 뒤집은 카드가 뭐였는지 확인할 수 없는 문제가 발생해 왼쪽 아래로 위치를 변경했다.

     

    MainScene의 Canvas 아래에 MatchPanel이라는 이름의 Image를 만들고, 그 이미지에 Text를 붙여주었다. 이 Image의 색과 Text를 바꿈으로써 현재 매치 상태를 알려줄 수 있다. 

     

    # 같은 카드 2개를 선택했을 때

    이미 GameManager에 만들어져 있는 Matched 메소드를 수정했다. switch문을 통해 특정 경우에 특정한 이름이 나오도록 했다. 또 이 경우에는 배경을 초록색(SuccessColor)으로 바꾼다.

     

    #다른 카드를 선택했을 때

    마찬가지로 Matched 메소드의 else문 안에서 텍스트를 "실패..."로 바꾸도록 해주고, 배경을 붉은색(FailColor)으로 바꾼다.

     

    #아직 아무것도 선택하지 않았을 때

    대기상태는 Invoke를 쓰기 위해 MatchInvoke 함수를 새로 만들어줬다. 이 안에는 배경을 회색(WaitingColor)으로 바꿔주는 코드와 text를 기본상태인 "화이팅!"으로 바꿔주는 코드가 있다. 이제 이 코드를 if문이 끝난 후에 Invoke()함수를 통해 카드가 뒤집어져 있는 시간인 1초 후에 실행되도록 한다.

     

    매칭 시도 횟수 표시

    카드를 2개 선택했으면 맞았든 틀렸든 시도 횟수가 늘어난다. 게임 중간에도, 게임 완료 후에도 매칭 시도를 확인할 수 있도록 구현했다.

    #플레이 중 화면에 매칭 시도 횟수 표시

    실패의 오른쪽에 시도 횟수를 표시했다. Canvas에 "시도:" 글씨(Try)와 횟수(TryCount)를 표시할 텍스트 창을 따로 써주고, TryCount를 GameManager와 연결해서 Matched 함수의 맨 위에 실행될 때마다 GameManager에 선언된 tryNum 변수에다가 ++ 기호로 횟수를 증가시킨다. 그리고 이 횟수를 ToString 함수을 통해 string형으로 바꾸어 TryCount 텍스트를 바꾸어준다.

     

    #게임이 종료되면 가운데로 이동하게 하기

    우선, Try("시도:")와 TryCount(int형: 현재진행중인 시도횟수 입력될 예정)가 함께 움직일 수 있도록 TryBox라는 빈 오브젝트를 만들어준다. 오브젝트 사이즈가 두 개의 오브젝트를 온전히 포함할 수 있도록 조정해준 후, TryBox 아래에 두 항목을 모두 포함하도록 해주었다.

     

    그 후, MoveTry 애니메이션을 만들고 TryBox에 삽입해준다. 2주차의 Balloon 만들기 프로젝트에서 배운 녹화기능을 응용해서 Try글씨의 움직임을 구현해준다. 

     

    처음에는 EndText(노란색의 "끝!" 글씨) 바로 밑에 딱 붙여서 구현했으나, 추후에 생긴 점수 UI와 겹치게 되어 애니메이션의 위치를 점수 아래로 이동시켰다.

     

    각종 효과음 삽입

    카드를 선택할 때 나오는 flip 소리, 두 개의 맞는 카드를 골랐을 때 나오는 match 소리는 이미 어제 구현한 내용이므로 생략한다. 에셋은 Unity에서 무료 효과음 중 제일 앞에 있는 것을 다운받아 사용했다.

    1. fail 소리 추가.
      • 가장 간단한 작업이다. 역시나 Matched 함수의 else 구문 안에 넣어주었다. Invoke로 약간의 지연을 가해주었다.
    2. start 소리 추가.
      • Stage 버튼 하나하나에 소리를 넣는 코드를 삽입하기에는 아직 Stage 구현도 제대로 되지 않았는데다가 복잡해지기에 약간의 꼼수를 써서 GameManager의 Start함수에 소리를 재생하게 해서 마치 버튼을 누르면 Start 소리가 나는 것처럼 만들어버렸다.
    3. button 소리 추가.
      • 현재까지 우리 프로젝트에 있는 Button은 StartScene의 시작하기 버튼, 스테이지 선택 종료 버튼, Pause 버튼, 그리고 게임종료시에 뜨는 EndText가 있다. 이 모든 것에 각각 button 소리를 추가해주었다.

    노션 정리

    팀이 함께 사용하는 노션 S.A. 페이지에서 내가 구성한 부분을 작성한다. 새로 알게 된 노션 사용방법을 포함한다.

    내가 만든 구획

    기존 홈페이지 구성에서 직접 수정한 것들에 대해서만 작성한다.

    #역할 분배 기록

    자신이 이 팀에서 어떤 역할을 했는지 가장 확실하게 보여줄 수 있는 지표이다. 아래에 있는 할 일 목록에서 자유롭게 원하는 기능을 선착순으로 하나씩 가져간 후, 구현이 완료되면 체크박스를 표시함으로써 다른 팀원들에게 알릴 수 있다.

    #할 일 목록

    처음에는 이곳에 "추가 구현 목록" + "추가 구현 목록 Challenge"를 모두 추가한 상태였다. 그 밑에는 하고 싶은 것 이라는 항목으로, 나중에 구현해보고 싶은 것들을 추가하는 란이다. 오늘 하루가 끝나가는 이 시점에는 거의 대부분을 구현했다.

    #Branch 관리자

     Github에 업로드하고 다운받을 때 만약 서로 같은 파일을 공유한다면 Conflict가 생겨버린다. 따라서 이 일을 방지하기 위해 실시간으로 수정사항이 보이는 Notion 페이지에 현재 편집중인 파일을 표시하는 란을 만들고, 그 밑에 주의사항도 적어두었다. 

    #팀 계획서

    이 부분은 일단 팀장 직을 맡은 만큼 내가 직접 작성하고 있다. 아침에 오늘 할 일에 대해 이야기하고, 점심 먹은 후 간단하게 현재까지의 상황을 중간점검하고, 저녁에는 서로 코드 동기화가 잘 되었는지까지 확인한 후에 TIL을 쓰는 시간으로 넘어가게 된다.

    #코딩 규칙

    막판에 여러 사람의 손을 거쳐가느라 제멋대로인 GameManager 코드를 보고 규칙을 세울 필요가 있다 생각하여 만든 란이다. 내일 아침 팀 내 토론을 거쳐 규칙을 만들어나갈 예정이다. 

     

    노션 사용법

    거창한 것은 없지만, 후에 까먹을까봐 적어놓는다. 어차피 그때 가면 노션만! 정리해놓은 다른 티스토리 블로그나 보겠지만...

    #이모지 삽입

    아주 간단하다. 노션 페이지에서 ' / '를 입력하면 내가 만들 수 있는 다양한 기능이 있는데, 이모지는 그중에서도 좀 아랫쪽에 배치되어 있기에 그냥 /이모지 라고 검색까지 해버리는게 편했다.

     

    #하이라이트/글씨 색 변경

    바꾸고 싶은 라인을 전체 또는 일부 드래그해서 묶은 후 뜬 툴 바에서 가장 오른쪽에 있는 더보기 버튼을 클릭한다. 그러면 그 안에 색 이라고 쓰여있는 기능이 있는데, 그 기능을 통해 글씨 색과 글씨의 배경을 원하는 색으로 변경할 수 있다.

     

    #글 타입 전환

    현재 줄의 가장 왼쪽에 점 6개가 있는 버튼을 클릭하고, "전환"을 누르면 각종 제목 종류와 할 일 목록, 글머리 기호 등을 확인할 수 있다.


     

    마무리

    정신없이 하루종일 일을 하다보니까 의외로 많은 일을 우리 팀이 해냈다는 사실을 깨달았다. 모든 팀원이 각자의 할 일을 열심히 해서 아마 이런 결과가 나왔을 것 같다. 또 저녁시간에 오늘 하루를 리뷰할 때 팀원들끼리의 사이도 좋아서 서로 상대가 한 일이 내가 한 것보다 대단하다고 치켜세웠었다. 

     

    내일은 이제 남은 기능의 구현을 완료한 후, 프로젝트를 더 깔끔하게 정리하는 시간을 가져보려 한다.