프로젝트 개요
팀원 소개
프로젝트 소개
프로젝트 목표
- 유니티기능 다양하게 활용해보기
게임 목표
- 팀원간 얼굴, 이름 외우면서 친해지기
게임 조작
- 마우스를 이용한 게임플레이
게임 진행
- 제한시간내에 모든 카드를 매치해야함
- Stage1. 슬랙 사진(Image) 카드끼리 매치해야 정답
- Stage2. 잽아바타 사진(Image) 카드끼리 매치해야 정답
- Stage3. 나이 카드끼리 매치해야 정답
- Stage4. MBTI(Text) 카드끼리 매치해야 정답
주요 화면 구성
순서도
시연 영상
게임 설계
- StartScene
- Intro 배경음악
- Intro 화면
- 게임시작 및 종료 버튼
- 카드 이미지 출력 애니메이션
- Stage 화면
- 이전 스테이지 클리어 되어야 다음스테이지 해금
- Intro 화면으로 돌아가기 버튼StartScene
- MainScene
- InGame 배경음악
- InGame 화면
- 시간 감소 기능
- 종료 10초전 시간 붉게 변하기
- 스테이지별 제한시간 다름
- 애니메이션 - 카드 배치, 뒤집기전 효과, 뒤집기
- 카드 효과음 - 성공 및 실패, 클릭, 10초전 경고음
- 한 번 뒤집은 카드는 주황색 표시
- 매칭 성공 시, **팀원의 이름** 표시 / 실패 시 **실패** 표시
- 실패시 -0.5초 감소
- 일시정지 버튼
- EndGame 화면
- 매칭 시도 횟수, 현재 점수 표시
- 다시하기, 메인메뉴(Intro화면) 버튼
- Setting 화면
- 소리 조절(배경음, 효과음, 음소거)
- 다시하기, 메인메뉴(Intro화면) 버튼
클래스 설계
기술스택
GitHub
- Organizations 리포지토리 생성
- GitHub Desktop 사용
- Branch protection Rule 적용
- Full Requests
- 2인이상 승인 후 Merge
- Stash 후 Main에서 안전하게 받아오기
- 그외 Discard, Revert 사용해봄
Unity / C#
- 유니코드 깨짐 현상 해결
- SystemManager.cs을 만들어서 매니저 스크립트들 관리 및 구조화
- 싱글톤 패턴을 활용하여 메모리 관리 및 데이터 공유 및 접근성을 향상
- StageScene을 따로 두지 않고 StartScene하나에서 처리하여 최적화(프로퍼티 사용)
- 이미지 오브젝트 최적화를 위해 Resources 폴더로 이미지 경로 사용
- Json이라는 경량화된 데이터 포멧을 사용하여 게임 데이터 저장
- 람다식으로 버튼 컴포넌트 관리 스크립트 작성
- 코루틴을 사용하여 시간의 흐름에 따른 이벤트를 구현
커뮤니케이션 협업툴
Notion
- 팀원 정보 정리
- 게임 계획서 문서화
- 시간, 활동, 깃허브 규칙 및 약속
- 회고록 작성
Slack
- 파일 주고 받기
Discord
- 화면공유를 통해 실시간 회의
KPT 회고
Keep
- 체계적인 Git 사용 : 각자의 브랜치를 사용하여 서로 겹치지않고 각각의 맡은바를 완벽히 할수있게 되었다.
- 적극적인 소통 : 누구하나 빠지지않고 많은 소통을 나누며 오류를 겪으며 서로가 도와주며 해결하는 문화를 구축
- 목표 달성 : 해당 역할을 적절히 분담하여 각자의 역할을 다 했고 이에 처음에 설계했던 목표보다 많은 성과를 이루어내며 달성
- 피드백 문화 구축 : 지속적인 피드백 공유를 통해 서로의 오류를 찾아주고 발전해 나아가는 문화 구축
- 꾸준한 기록 유지 : TIL 작성 및 오류 해결에 관한 기록하기
- 주석 달기 : 코드의 가시성을 높이기 위해 자신이 작성한 코드에 대한 주석 달기
- 올바른 성장 자세 : 어렵더라도 혼자 도전해보고, 해결 못했을 때 질문을 하는 자세
Problem
- 깃 코드 충돌에 대한 문제 : 병합 순서 문제
- 이미 작업하던 것들이 있는데 다운받아야할 때 stash로 임시저장한 후 다운받아오기
- 작업 환경 설정 문제 : 코드의 한글이 깨지는 현상
- 모든 팀원들이 유니코드 설정을 하여 해결
- 스테이지 해금 문제 : 클래스간의 데이터를 제대로 전달하지 못하는 문제(성지윤)
- GameManager의 스테이지 레벨 변수가 변하고 있지 않고, 계속 레벨1 상태였음. 그래서 SystemManager에서 데이터를 관리하게 설정하니까 해결되었음. 다만 SystemManager의 역할에 맞지 않는 설정이어서 앞으로는 좀 더 나은 방법을 갈구해야겠음.
- 부족한 설명으로 인해 나타나는 차이(이강혁)
- 기획 ⇒ 설계 ⇒ 구현 ⇒ 검증의 모든 단계에서 육하원칙에 맞춰 자신의 의견을 전달하고 서로의 상황을 파악하고 있어야 문제가 발생하지 않는다.
- 발제를 제대로 읽지 않음(안보연)
- 필수를 놓치고 챌린지 먼저하다가, 앞부분을 다시 읽고 필수부터 다시 시작
- 카드가 제대로 매칭이 되지 않았는데도 불구하고 카드가 사라지는 문제(김현수)
- 카드를 클릭하였을때 실제로 뒤집히게 보이는 효과를 넣던 중에 애니메이션 효과의 x값을 마지막에 0으로 집어 넣어 생긴 어처구니 없는 문제였음…x값을 다시 1로 수정 후 문제 해결
Try
- 트러블 슈팅 기록
- 마지막에 PPT 자료를 만들 때 기억을 다시 되짚어서 작성했지만 누락된 것이 많았음. 오류 문제에 대한 이야기는 많이 나눴지만 막상 기록은 하지 않았음. 다음에도 똑같은 오류를 겪었을 때 기록을 통해 더 빠른 해결을 할 수 있게 Git Issues 같은 곳에 기록하는 습관 길들이기
- 깃허브 명명 규칙
- 깃허브에 커밋할 때 설명 메모글은 적어서 커밋을 했지만 히스토리를 봤을 때 빠른 파악이 안됐음. 다음부터는 명명 규칙을 팀원들과 정한 후 깃허브 사용하기
- 브랜치 전략 자세히 활용하기
- 해당 프로젝트에서는 Main 브랜치 밑에 팀원 각자의 브랜치 하나씩 만들어서 사용했음. 깃허브 특강을 듣고 난 후 ‘Main - Dev - 기능별 브랜치‘ 전략을 사용해야겠다는 것을 깨달음.
- 빠른 원인파악 및 해결
- 팀 전체에 대한 기술 오류가 있었을 때 튜터님께 질문시 다같이 가서 설명을 듣기
- 구현 할 기능 및 작업에 대한 순서 정하기
- 빼먹거나 순서가 중요한 부분에 대해서 해결점이 되지 않을까 싶습니다
팀원별 느낀점
성지윤
첫 프로젝트때부터 난이도를 올려서 진행했는데 제 자신한테도, 팀원들에게도 큰 성장이 이뤄진 것 같습니다. 특히 강혁님의 도움을 많이 받았습니다. 유니티를 많이 사용해보신 분이어서 여러 도전들을 할 수 있었습니다.
첫날부터 깃허브 사용을 시작했는데 어려운 부분도 많고, 충돌도 많이 겪음에도 불구하고 잘 따라와준 팀원들에게 감사의 인사를 전합니다.
이강혁
개발자 간의 팀프로젝트가 처음이기에 예상하지 못한 상황이 종종 연출되었습니다. 특히, 깃허브와 관련해서 데이터가 사라지거나 연동이 잘 안되는 문제가 있었습니다. 그리고 기획한 것을 구현하는 부분에서 명확하게 의견교류가 되지 못한 부분에 난항을 겪기도 하였습니다. 그럼에도 이러한 시행착오를 겪으며 팀원분들과의 더 많은 소통과 학습을 통해 여러면에서 성장할 수 있는 경험이 되었습니다.
아직 배우지않은 부분도 있었음에도 질문과 소통을 통해 포기하지 않고 끝까지 도전하여 마무리를 해주신 모든 팀원 분들께 감사합니다.
김현수
게임 개발이 처음인 나에게는 정말 어려운 도전이 됬던 것 같다 개발 도 처음인데 팀프로젝트라니 정말 떨리는 마음으로 처음 조에 들어 갔을 때 팀원들이 다들 너무 잘하셔서 안심이 되면서도 나도 분발 해야 겠다 라는 마음이 생겨 열심히 했던것 같다. 그래도 마지막에 영상 편집을 좀 해서 살짝의 마음의 짐을 조금 내려 놓은것 같다!
같은 조 였던 조원 분들 감사합니다! 이번 프로젝트는 끝이지만 다음에 또 뵙 날을 기대하겠습니다! 다음엔 저도 조금 더 실력이 있는 조원이 되어보도록 하겠습니다.
안보연
좋은 팀원들 만나서 좋게좋게 잘흘러간듯합니다. 혹시 프로젝트별로 팀이 바뀐다면 팀바뀌고 나서도 자꾸 찾아가겠습니다 :)
유니티도 어렵고 C#도 어렵네요.... 아는거 나왔다! 싶으면 써볼려고 하면 바롬 모르는거 되고, 모르는건가 싶어서 따라가다 보면 또 아는거 같기도하고 를 계속 반복 중인듯합니다.
댓글