내일배움캠프 2일차 TIL + 깃허브 페이지 만들기 + 팀원 이미지 맞추기 게임
작업 내용
유니티 프로젝트1 팀원 찾기: 카드 뒤집기 게임
추가 기능 구현
오디오 기능
- Audio Clip에 소리를 추가하고, AudioSource로 PlayOneShot 등의 함수를 사용해 소리를 재생.
- Audio Source 하나당 한 번에 한 개의 소리만 재생 가능.
싱글톤
- Instance로 만든 싱글톤 오브젝트는 그 오브젝트에 붙은 스크립트 이름에
.instance
로 가져올 수 있다.
애니메이션 기능
- 애니메이션 타임라인 상단에서 우클릭으로 Event를 추가해 애니메이션 도중 이벤트를 트리거할 수 있다.
- Animator를 오브젝트에 추가하고, Animator에 애니메이션을 추가하여 애니메이션을 생성한다.
자료구조
- 배열(arr)보다는 List가 크기 조절이 자유로워 사용하기 편리하다. 하지만 힙에 할당되는 만큼 접근 속도와 생성 속도는 더 걸릴 것이다.
깃 페이지
- 깃 페이지에 포스트할 때
permalink
를 설정해야 이전 포스트와 링크가 겹치지 않아 내용을 볼 수 있다.
오늘 진행한 내용
베이스 + 추가 기능 5가지 구현
2-1 매칭 성공 시 팀원의 이름 표시 / 실패 시 실패 표시
- Board 클래스에
ownerNames
배열 추가(인스펙터 창에서 수정). 카드 생성 시 각 카드에 이름 추가. - Card 클래스에서
string ownerName
추가해 받은 이름 저장. - GameManager 클래스에
public Text matchTxt;
추가해 성공/실패 시 이름 표시하는 텍스트 칸 구현. - GameManager의
Matched()
함수에서matchTxt.text = firstCard.ownerName;
로 성공 시 이름 출력,matchTxt.text = "실패!";
로 실패 표시.
2-2 카드 클릭 시 시작/진행/성공/실패 소리 추가
- 클릭 시 Card 클래스의
OpenCard
에서 오디오 재생. - 시작 시 AudioManager에서 게임 시작 소리 재생.
- 매칭 성공 시 GameManager의
Matched()
에서 오디오 재생. - 실패 시 동일하게 오디오 재생.
2-3 타이머 시간이 촉박할 때 경고 기능
- GameManager 클래스의
Update()
에서time >= 20
이고bgmNotChanged == true
일 때 실행. - 카메라 배경 색을
Color.red
로 변경. - AudioManager의 audioSource를 bgmSource로 받아 긴박한 음악으로 클립 변경 후 재생.
2-4 한 번씩 뒤집은 카드 색 다르게 표시
- Card 클래스의
OpenCard()
실행 시 해당 Card prefab의 Back 이미지 색을Color.gray
로 변경.
2-5 결과에 매칭 시도 횟수 표시
- GameManager 클래스에
matchCount
변수 추가. Matched()
함수 호출 시matchCount++
로 증가.EndGame()
함수 호출 시endtext.text = "끝\n시도횟수: " + matchCount.ToString();
로 시도 횟수 출력. 끝 텍스트 크기 조정.
챌린지 추가 기능 구현
카드 뒤집기 애니메이션 연출
- CardFlip 애니메이션 수정.
- CardFlip 타임라인의 30 지점에 이벤트 추가.
- 해당 이벤트 시 Card 클래스의
FlipCard
함수 호출해 Back을 끄고 Front를 켬.
BGM 변경 오류 수정
- 10초 남았을 때 BGM 변경 후 재시작 시 되돌아오지 않는 오류 수정.
- AudioManager에 BGM 변경 함수 추가.
- 10초 남았을 때 BGM 변경 호출.
- 재시작 시 GameManager의 Start 함수에서 원래 BGM으로 되돌림.
카드 오브젝트 개수 늘리기
- Board 클래스 수정해 카드 개수를 public으로 받음.
- 받은 개수 기준으로 x, y축 따라 카드 나열 개수 루트 계산.
- 카드 크기와 간격 기존 4x4 기준으로 비율 조정.
- 카드가 원래 공간 벗어나면 다른 UI에 영향 주지 않도록 크기와 배치 조절.
마무리
팀원들이 각자 맡은 부분을 구현했지만 깃으로 모으는 과정에서 충돌 위험과 익숙하지 않은 깃 사용법으로 어려움을 겪었다. 결국 한 명이 만든 내용을 베이스로 main에 올리고 이를 기반으로 작업하기로 했다. 앞으로는 각자 맡은 부분만 수정하고, 깃 특강을 들은 후 merge 진행하기로 했다.
기능을 구현하면서 각자 방법과 결과가 달라 와이어프레임의 중요성을 깨달았다. 앞으로 기능 구현 전 와이어프레임을 작성해 시간 절약과 일관성을 유지해야겠다.
제안
내일 오전에 와이어프레임을 작성해보자고 제안할 계획이다.