2 minute read

작업 내용

유니티 프로젝트1 팀원 찾기: 카드 뒤집기 게임

추가 기능 구현

오디오 기능

  1. Audio Clip에 소리를 추가하고, AudioSource로 PlayOneShot 등의 함수를 사용해 소리를 재생.
  2. Audio Source 하나당 한 번에 한 개의 소리만 재생 가능.

싱글톤

  1. Instance로 만든 싱글톤 오브젝트는 그 오브젝트에 붙은 스크립트 이름에 .instance로 가져올 수 있다.

애니메이션 기능

  1. 애니메이션 타임라인 상단에서 우클릭으로 Event를 추가해 애니메이션 도중 이벤트를 트리거할 수 있다.
  2. Animator를 오브젝트에 추가하고, Animator에 애니메이션을 추가하여 애니메이션을 생성한다.

자료구조

  1. 배열(arr)보다는 List가 크기 조절이 자유로워 사용하기 편리하다. 하지만 힙에 할당되는 만큼 접근 속도와 생성 속도는 더 걸릴 것이다.

깃 페이지

  1. 깃 페이지에 포스트할 때 permalink를 설정해야 이전 포스트와 링크가 겹치지 않아 내용을 볼 수 있다.

오늘 진행한 내용

베이스 + 추가 기능 5가지 구현

2-1 매칭 성공 시 팀원의 이름 표시 / 실패 시 실패 표시

  1. Board 클래스에 ownerNames 배열 추가(인스펙터 창에서 수정). 카드 생성 시 각 카드에 이름 추가.
  2. Card 클래스에서 string ownerName 추가해 받은 이름 저장.
  3. GameManager 클래스에 public Text matchTxt; 추가해 성공/실패 시 이름 표시하는 텍스트 칸 구현.
  4. GameManager의 Matched() 함수에서 matchTxt.text = firstCard.ownerName;로 성공 시 이름 출력, matchTxt.text = "실패!";로 실패 표시.

2-2 카드 클릭 시 시작/진행/성공/실패 소리 추가

  1. 클릭 시 Card 클래스의 OpenCard에서 오디오 재생.
  2. 시작 시 AudioManager에서 게임 시작 소리 재생.
  3. 매칭 성공 시 GameManager의 Matched()에서 오디오 재생.
  4. 실패 시 동일하게 오디오 재생.

2-3 타이머 시간이 촉박할 때 경고 기능

  1. GameManager 클래스의 Update()에서 time >= 20이고 bgmNotChanged == true일 때 실행.
  2. 카메라 배경 색을 Color.red로 변경.
  3. AudioManager의 audioSource를 bgmSource로 받아 긴박한 음악으로 클립 변경 후 재생.

2-4 한 번씩 뒤집은 카드 색 다르게 표시

  1. Card 클래스의 OpenCard() 실행 시 해당 Card prefab의 Back 이미지 색을 Color.gray로 변경.

2-5 결과에 매칭 시도 횟수 표시

  1. GameManager 클래스에 matchCount 변수 추가.
  2. Matched() 함수 호출 시 matchCount++로 증가.
  3. EndGame() 함수 호출 시 endtext.text = "끝\n시도횟수: " + matchCount.ToString();로 시도 횟수 출력. 끝 텍스트 크기 조정.

챌린지 추가 기능 구현

카드 뒤집기 애니메이션 연출

  1. CardFlip 애니메이션 수정.
  2. CardFlip 타임라인의 30 지점에 이벤트 추가.
  3. 해당 이벤트 시 Card 클래스의 FlipCard 함수 호출해 Back을 끄고 Front를 켬.

BGM 변경 오류 수정

  1. 10초 남았을 때 BGM 변경 후 재시작 시 되돌아오지 않는 오류 수정.
  2. AudioManager에 BGM 변경 함수 추가.
  3. 10초 남았을 때 BGM 변경 호출.
  4. 재시작 시 GameManager의 Start 함수에서 원래 BGM으로 되돌림.

카드 오브젝트 개수 늘리기

  1. Board 클래스 수정해 카드 개수를 public으로 받음.
  2. 받은 개수 기준으로 x, y축 따라 카드 나열 개수 루트 계산.
  3. 카드 크기와 간격 기존 4x4 기준으로 비율 조정.
  4. 카드가 원래 공간 벗어나면 다른 UI에 영향 주지 않도록 크기와 배치 조절.

마무리

팀원들이 각자 맡은 부분을 구현했지만 깃으로 모으는 과정에서 충돌 위험과 익숙하지 않은 깃 사용법으로 어려움을 겪었다. 결국 한 명이 만든 내용을 베이스로 main에 올리고 이를 기반으로 작업하기로 했다. 앞으로는 각자 맡은 부분만 수정하고, 깃 특강을 들은 후 merge 진행하기로 했다.

기능을 구현하면서 각자 방법과 결과가 달라 와이어프레임의 중요성을 깨달았다. 앞으로 기능 구현 전 와이어프레임을 작성해 시간 절약과 일관성을 유지해야겠다.

제안

내일 오전에 와이어프레임을 작성해보자고 제안할 계획이다.