게임 개발 포트폴리오 | 토당토당 찰떡쿵

내일배움캠프 1기 Unity 게임 개발 과정 트랙 수료생 최종 프로젝트 '토당토당 찰떡쿵'을 소개합니다.
Feb 26, 2024
게임 개발 포트폴리오 | 토당토당 찰떡쿵

🍡달 나라 삼남매 중 누가 떡집의 후계자인가!

 
notion image
🐰
VIDEO
Video preview
 
🍽️
게임 맛보기
WebGL 버전
  • WebGL 버전으로 최적화 되어있지 않아서 로딩 시간이 소요되는 점 참고해주시면 감사하겠습니다.
 
Window / MAC / Android 버전
 
 
게임 기능
 
🌙 게임 스토리와 소개 🐇
📙
게임 스토리
달 나라에서 가장 유명한 떡 집을 운영하는 토끼 부부
삼남매 중 누구에게 가업을 물려줘야 할지 고민인데…
“지구에 내려가서 혼자 떡 집을 운영해봐라!
가장 좋은 성과를 낸 사람에게 떡 집을 물려주겠다!”
 
🌙
게임 소개
🐰막내 토끼가 되어 최고의 떡집을 운영해보세요!🐰
 
🍡 다양한 떡과 음료를 판매하세요! 🍡
🍵 재료를 구매하고 유통 기한을 관리하세요! 🍵
🫖 새로운 레시피와 주방 기구를 잠금 해제해보세요! 🫖
🌵 귀여운 장식품으로 가게를 꾸며보세요! 🌵
📰 뉴스를 통해 지구 별 소식을 들어보세요! 📰
💨 떡 장인이 되기 위한 길을 걸어보세요! 💨
⭐ 평점 5점을 달성해서 토사장 님의 가게를 물려받으세요! ⭐
 
🐇 막내 토끼 파이팅! 🐇
 

게임 미리 보기

notion image
 

게임 기능 소개

⭐ 평점과 달조각 🌙
notion image
🥕 게임의 목표는 토슐랭 평점 5점을 달성하여 부모님인 토사장 님의 가게를 물려받는 것입니다.
🥕 게임에서는 ‘달조각’을 재화로 사용합니다.
🥕 하루 영업을 종료하면 그 날의 영업 결과를 볼 수 있으며, 영업 결과에 따라서 평점이 달라집니다.
🥕 만약 평점이 0점으로 떨어지면 게임 오버가 되어 처음부터 다시 시작하게 됩니다.
🥕 인벤토리에 남은 재료가 없고, 달조각 없다면 파산 이벤트로 연결 됩니다.
🥕 만약 재료는 있지만 보유한 달조각이 부족하다면, 도움 시스템을 사용할 수 있습니다.
 
notion image
🥕 도움 시스템
➕ 도움 시스템은 유저에게 남은 달조각이 부족하여 가게 영업을 정상적으로 진행할 수 없을 때, 이벤트를 통해 도움을 주어 지속적으로 게임을 즐길 수 있도록 하는 시스템입니다.
➕ 조건에 따라 일정 금액 또는 재료를 제공합니다.
➕ 재료를 제공하는 이벤트일 때는 평점이 1점 깎이게 됩니다.
➕ 일정 금액을 제공하는 조건일 때는 파산 이벤트로 연결됩니다.
 
🐰 튜토리얼 🐰
notion image
🥕 게임의 전반적인 흐름과 조작 방법 및 기능을 알려주기 위한 튜토리얼입니다.
🥕 첫 튜토리얼 이후에는 Skip 버튼이 활성화 되어, 튜토리얼을 건너뛸 수 있습니다.
 
 
notion image
🥕 조작 방법은 PC 버전모바일 버전이 다르기 때문에
각각 알맞는 방식을 튜토리얼로 제공합니다.
🥕 PC 버전 : 키보드 WASD로 캐릭터 이동
+ 마우스 좌클릭/우클릭으로 상호작용 및 들기/내려놓기
🥕 모바일 버전 : 가상 조이스틱으로 캐릭터 이동
+ 터치 버튼으로 상호작용 및 들기/내려놓기
 
 
notion image
🥕 평점 달조각에 대한 설명을 제공합니다.
🥕 레시피 및 주방 기구를 잠금 해제하고 업그레이드 하는 방법을 제공하며 재화 사용처에 대해서 알려줍니다.
 
🍡 매장 운영 🍡
notion image
notion image
🥕 화면 상단은 게임의 진행과 관련된 정보를 표시합니다.
+ 획득한 달조각, 남은 손님 수 등을 확인할 수 있습니다.
+ 중앙에는 시간의 경과가 표시되며, 주어진 시간이 다 되어가면 색상 변화효과음으로 경고합니다.
🥕 영업 조기 종료 버튼을 통해 하루의 영업을 일찍 마무리할 수 있습니다.
🥕 쿡북에서 보유한 레시피의 조리법을 확인할 수 있습니다.
 
 
notion image
🥕 일시정지 버튼을 눌러 홈으로 이동하거나, 게임 설정을 변경 할 수 있습니다.
+ 게임 설정에서는 배경음악효과음의 크기를 조절할 수 있고, 텍스쳐프레임을 설정할 수 있습니다.
+ 데이터를 초기화하거나 게임을 종료하는 등의 중요한 기능은 팝업을 통해 한 번 더 확인합니다.
 
 
notion image
🥕 각 주방 기구에 알맞은 재료를 넣고 상호 작용하여 요리를 만들 수 있습니다.
+ 돌아가는 레일 위 찜기 또는 냄비에 재료를 넣어 익힐 수 있습니다.
+ 조리대나 절구에서는 상호작용 버튼을 여러 번 눌러서 조리 할 수 있습니다.
🥕 음식을 오랫동안 익히거나, 잘못된 절차로 조리할 경우 쓰레기로 변합니다.
+ 쓰레기는 쓰레기통에 버려서 처리합니다.
 
 
notion image
🥕 손님이 픽업 테이블에 도착한 후 인내심 게이지가 올라가기 시작합니다.
+ 게이지가 다 찰 때까지 음식을 받지 못한 손님은 불만족하여 퇴장합니다.
🥕 손님은 음식을 받는 속도에 따라 다른 만족도를 표시합니다.
+ 손님은 만족도에 따라 다른 금액의 을 지불하며, 만족도는 Perfect, Good, Soso로 나누어집니다.
🥕 재료가 부족하여 음식을 서비스할 수 없는 경우, <거절하기> 버튼을 통해 손님의 주문을 거절할 수 있습니다.
+ 주문을 거절할 경우 손님은 불만족하여 퇴장합니다.
🥕 손님은 한 가지 또는 두 가지의 음식을 주문할 수 있으며,
두 가지의 음식을 주문할 때는 떡과 차를 한 종류씩 주문합니다.
+ 두 가지 음식 중 하나를 먼저 제공하면 손님의 인내심 게이지가 일정량 줄어듦으로써 더 오래 대기할 수 있게 됩니다.
 
 
🍵 재료 구매 🍵
notion image
🥕 영업을 종료하고 하루에 한 번 재료를 구매할 수 있습니다.
🥕 탭을 선택하여 전체 재료/떡 재료/차 재료로 나누어 확인할 수 있습니다.
🥕 재료의 가격 순으로 오름/내림차순 정렬이 가능합니다.
🥕 +, - 버튼을 눌러 재료를 장바구니에 담거나 뺄 수 있습니다.
🥕 전체 재료의 금액이 보유한 달조각을 초과하면 주문할 수 없습니다.
🥕 주문하지 않고 재료 주문 창을 닫으려고 하면 팝업으로 경고를 해줍니다.
 
 
notion image
🥕 인벤토리에서 재료의 수량 유통기한을 확인할 수 있습니다.
🥕 보유한 재료를 판매하여 재고를 관리할 수 있습니다.
🥕 재료의 유통기한이 지나면 하루 영업이 종료되었을 때 자동으로 폐기되며,
이때 재료 폐기 비용이 발생합니다.
 
🫖 레시피와 주방 기구 관리 🫖
notion image
notion image
🥕 인벤토리에서 재료 뿐만 아니라 레시피주방 기구를 관리할 수 있습니다.
🥕 레시피 또는 주방 기구의 기본 정보업그레이드 비용 및 정보를 확인할 수 있습니다.
🥕 달조각이나 평점이 기준보다 부족하면 레시피를 잠금 해제/업그레이드 할 수 없습니다.
 
📰 뉴스 📰
notion image
🥕 유저는 뉴스를 통해 지구별의 새로운 소식들을 접할 수 있습니다.
🥕 뉴스의 내용에 따라 다양한 이벤트가 발생합니다.
+ 재료의 시장 가격이 변동되거나, 평소보다 손님의 수가 증가하는 등의 효과가 있습니다.
🥕 뉴스로 인한 효과는 다음 날부터 적용됩니다.
 
 
notion image
🥕 유저가 달성한 성과에 따라 여러 보상을 제공합니다.
🥕 새로운 주방 기구와 새로운 레시피를 함께 제공하여, 게임의 재미를 다채롭게 만듭니다.
🌵 장식품 상점 🌵
notion image
🥕 장식품 상점에서 매장 장식품을 구매할 수 있습니다.
🥕 각 장식품에는 특정 효과가 있으며, 해당 효과는 영구적으로 지속됩니다.
🥕 장식품 상점에서 산 매장 장식품들을 구입하면 홈 화면과 게임 화면에서
실제로 배치된 것을 확인할 수 있습니다.
장식품 종류
notion image
notion image
notion image
notion image
[ 테이블 ]
손님이 지불하는 팁 금액이 증가합니다.
 
 
[ 화분 ]
손님이 지불하는 팁 금액이 증가합니다.
 
 
[ TV ]
손님의 대기 시간이 증가합니다.
 
[ 바탁 타일 ]
손님의 대기 시간이 증가합니다.
 
 
💨 연습 모드 💨
notion image
notion image
🥕 하루 영업을 준비하기 위해 연습하기 모드를 제공합니다.
🥕 연습하기 모드에서는 재료를 제한 없이 사용할 수 있습니다.
🥕 제한 시간과 손님이 존재하지 않아서 원하는 때에 언제든지 종료할 수 있습니다.
🥕 연습하기 모드는 현재 유저의 보유 주방 기구, 레시피에 따라 세팅됩니다.
🥕 나가기, 레시피 버튼이 존재하여 레시피를 지속해서 참고가 가능하며, 필요할 때 바로 갈 수 있는 버튼 또한 존재합니다.
 
 
notion image
🥕 주방 기구에 가까이 다가가면 활성화 되는 물음표 버튼을 눌러,
주방 기구를 사용하는 방법을 확인할 수 있습니다.
 
 

 

🌨️ MAIN STRUCTURE 클라이언트 구조

🏡
Manager
notion image
 
 
🐇
플레이어
notion image
notion image
 
 
🍡
인벤토리
notion image
 
 
🍑
재료 주문
notion image
 
 
🐻
손님
notion image
 
 
📰
뉴스
notion image
 
 

 

🌈 CODE 코드

담당자
기능
GitHub
김정민
UIManager를 통한 UI 관리
김정민
Object Pooling
김정민
MVC 구조를 활용한 Inventory
박희원
Camera 해상도 대응
박희원
MVC 구조를 활용한 Market(재료주문)
박희원
확장성을 고려한 DecoStoreMapSetter
노동균
다양한 데이터를 저장하는 DataManager
노동균
EditorScript와 ScriptableObject를 이용한 커스터마이징 손님
노동균
[IMGUI] 빠른 개발을 위한 Cheater 개발
이현지
New InputSystem을 이용한 PC UI 대응
이현지
다양한 주방기구를 하나의 클래스, 인터페이스로
이현지
상태머신을 활용한 플레이어의 행동과 상태제어
 
 

 

🫖 TROUBLE SHOOTING 기술적인 도전 과제

🍵
사용 기술

MVC 패턴 / 빌더 패턴 / 상태 머신

notion image
MVC 패턴
⚠️ 기술 도입 배경
  • UI에서 데이터를 보여주기 전 데이터를 가공하는 연산이 필요
    • → 해당 연산을 UI에서 처리하게 되면 UI가 너무 많은 역할을 맡게 되는 문제 발생
       
💡 기술 도입으로 얻은 이점
  • UI를 보여주는 View와 UI에서 보여주기 위한 데이터를 가공하는 Controller를 분리함으로써 클래스의 역할이 나누어짐
 
💫 발전
  • 초기에는 옵저버 패턴을 사용하여 View에서 필요로 하는 데이터를 직접 구독하고, 필요한 데이터는 Controller를 통해 받는 MVC 방식을 사용
    • → 다른 Scene에서 데이터의 갱신이 발생하면서 참조할 수 없는 UI에 접근하는 문제 발생
  • View의 데이터 갱신도 Controller를 통해서 하도록 MVP 패턴의 구조로 변경하여 문제를 해결
    • → View와 데이터의 결합도 감소
상태머신
⚠️ 기술 도입 배경
  • 플레이어와 손님의 경우 상태에 따라 행동이 달라, 이를 수월하게 통제할 요소가 필요
  • 플레이어의 경우 손에 음식을 들고 있는 상태, 아닐 때의 상태에서의 행동이 다른데, 이를 하나의 메소드로 통제할 경우, 코드 가독성과 확장성이 매우 떨어질 우려
 
💡 기술 도입으로 얻은 이점
  • 각 상태 별로 할 수 있는 행동을 제한하거나, 변경될 수 있는 상태를 지정함으로 써 상태에 따른 행동을 통제하기가 수월해짐.
  • 또 새로운 행동이 추가되었다고 하더라도, 해당 행동에서 변화할 수 있는 상태나, 기능에 대해서만 신경쓰면 되었기 때문에 편리
 
빌더 패턴의 일부 차용 시도
⚠️ 기술 도입 배경
  • 손님 초기화 과정에서 많은 매개변수 사용으로 코드 가독성 저하
  • 빌더 패턴에서 사용되던 메서드 체이닝을 이용 관련 있는 매개변수 끼리 묶어 메서드 화
 
💡 기술 도입으로 얻은 이점
  • 관련있는 메소드끼리의 사용으로 가독성 향상
 
💡 추가 개선
  • 오브젝트 풀 사용 과정에서 Init의 메서드 체이닝 보다는 필요 할 때만 각각의 Init을 수행하게 하여, 불필요한 초기화 과정을 줄이고, 초기화 과정의 오버헤드를 줄임.
 
 

데이터 Cheater

notion image
추가 설명
  • ⚠️ 기술 도입 배경
    • 게임을 테스트 하는 과정에서 테스트가 필요한 위치까지 도달하는 데에 시간이 많이 소요
    • ex) 뉴스 이벤트는 날짜 기준의 이벤트
      • 테스트를 위해 10,20일까지 게임 플레이를 해야했음(소요시간 多)
  • 🤔 기술 도입 과정
    • Inspector를 활용하는 방안
      • Hierachy에서 오브젝트를 선택하고, Inspector를 수정 해야하는 불편함 존재
    • 더 편리한 방법을 고민하였음.
  • 💡 기술 도입으로 얻은 이점
    • IMGUI를 도입함으로 써 인게임 내에서 필요시 즉각적으로 데이터를 수정가능
    • 필요한 날짜, 상태, 유저의 상태를 조정이 가능
    • 빠른 테스트 수행
사용 예
notion image
notion image
 

Firebase Analytics

notion image
추가 설명
⚠️ 기술 도입 배경
  • 기획적인 요소나 반영된 사항이 제대로 적용이 되고 있는 가를 데이터로 측정하여 현재 게임을 어떻게 보완해 갈 것 인가에 대한 정보를 수집하고 싶었음.
  • 플레이 데이터를 이벤트로그 로서 수집이 가능해, 구글 폼, 유저의 피드백을 받는 것보다 통계적인 데이터를 수집하기가 용이했음.
 
🤔 기술 도입 과정
  • Firebase Analytics가 도입이 쉽고 사용하는데 무리가 없다는 조언을 받아, 모듈을 설치하고 데이터를 적용함
  • 이 과정에서 모듈의 크기가 150MB가 넘어가는 일이 발생을 하였고, GitHub 에서는 100MB 이상의 파일을 Push 하기 위해서는 LFS를 활용
 
💡 기술 도입으로 얻은 이점
  • 통계자료를 통해 기획의 의도가 정확히 전달되는지 통계적으로 알기 쉬워졌음.
 
 
최적화

정적 배칭

  • HomeScene에 배치된 오브젝트들은 움직이지 않는 오브젝트이므로 정적 배칭을 사용하여 Batch 수를 줄였다.
notion image

Sprite Atlas

  • UI에 쓰이는 Sprite들은 Sprite Atlas를 활용하여 묶어서 Batch 수를 줄였다.
    •  

오브젝트 풀링

  • 인벤토리 슬롯, 요리 과정에서 발생하는 결과물(재료, 중간 결과물, 완성된 요리), 손님 오브젝트처럼 생성/파괴가 자주 일어나는 것들에 오브젝트 풀링을 사용했다.
    •  
 
🍵
인벤토리 탭 UI의 구현
notion image
추가설명
⚠️ 문제
  • 인벤토리 탭 UI의 구현 방식
 
🛠️ 시도
  • 각 탭마다 3가지의 UI를 미리 만들어서 탭을 누를 때 sort order를 조절하여 해당하는 탭 UI가 나타나도록 구현
    • → 매번 보이지 않는 UI까지 모두 생성해야 하는 문제
      → 해당 탭을 클릭하지 않는다면 불필요한 생성을 하게 되는 것이므로 효율성 저하
 
💡 선택
  • 1개의 UI를 재사용 하는 방식
    • 각 탭을 클릭하면 탭에 맞는 데이터들을 보여주도록 구현
    • ScrollView의 슬롯 오브젝트들은 오브젝트 풀을 활용
      • → 탭을 누를 때마다 ScrollView가 갱신되어야 하는데, 이때마다 슬롯 오브젝트들을 생성하고 파괴하는 것은 비효율적인 동작
        → 탭을 누르는 것은 자주 일어날 수 있는 동작이므로 매번 오브젝트를 생성/파괴하면 CPU 성능이 저하될 수 있음
        → 오브젝트 풀을 활용하여 미리 처음 인벤토리를 열었을 때 슬롯 오브젝트들을 생성한 뒤, 탭이 변경될 때마다 해당 탭의 데이터 개수만큼 슬롯 오브젝트들을 풀에서 가져와 사용
 
 
요리 과정을 검증하는 방식
notion image
notion image
추가 설명
⚠️ 문제
  • 게임의 핵심인 음식을 만드는 조리 과정과 재료를 처리할 로직이 필요하였음.
  • 로직을 어떻게 단순화하고, 음식을 추가하고, 삭제하는데 어려움이 없는가
🛠️ 시도
🔥
행위를 특정 인덱스로 고정시킴 재료 내에 각 행위 인덱스를 부여하고, 레시피의 int배열과 조리 과정의 int배열을 비교하는 방식
🔥
유저가 재료들을 string형태의 id로 보관 각 주방 기구는 재료들의 string에 따른 결과물을 보관 유저가 재료들 string을 주방 기구에 넣고, 상호작용 수행 재료들의 string을 주방 기구 내 재료들의 string을 비교하여 결과물을 반환
🔥
주방 기구 (내 재료 → 결과물) 을 보관 재료를 주방 기구에 넣고, 그 상호작용으로 나오는 중간 결과물을 반환, 중간 결과물을 다른 주방 기구에 넣어 또 다른 결과물을 반환을 반복하는 형식
💡 선택
  • Cookstep(재료 리스트, 결과물)를 만들어 각 주방 기구에서 보유할 수 있게 함.
  • 주방 기구는 유저가 놓기로 내려놓은 받은 재료들을 보관
  • 유저가 상호작용을 통해 조리를 완료 시, 주방기구가 보유한 Cookstep리스트 검색해 재료 내용이 일치하는 Cookstep이 있을 때 해당 결과물을 반환할 수 잇게 변경
💡 얻은 이점
  • (재료→ 결과물)을 가지는 Cookstep를 ScriptableObject로 관리되어, 주방기구에서 각각의 Cookstep을 추가/삭제가 편리함.
  • 요리 과정 전체를 들고 있을 필요가 없어 메모리 절약
  • 요리 과정 중간중간 다른 요리를 넣어 만들 수 있음.
 
💡 관련 코드
CookStep.cs (ScriptableObject)
[CreateAssetMenu] public class CookStepSO : ScriptableObject { [SerializeField] public List<IngredientInfoSO> Ingredients; [SerializeField] public GameObject result; public IngredientInfoSO ResultData { get { IngredientObject ingredientObj; IngredientInfoSO ingredientInfoSo; if (result.TryGetComponent<IngredientObject>(out ingredientObj)) { return ingredientObj.GetIngredientObjectSO(); } Debug.LogError("Null : IngredientObject"); return null; } } }
KitchenInteraction.cs (주방기구 클래스 내 비교부분)
protected virtual void CheckValidity() { List<IngredientInfoSO> ingredientStack = new List<IngredientInfoSO>(); foreach(var ingredient in ingredients) { if (ingredient == null) continue; ingredientStack.Add(GetIngredient(ingredient)); } foreach (var cookStep in availableRecipe) { if (AreListsEquivalent<IngredientInfoSO>(ingredientStack, cookStep.Ingredients)) { MakeResult(cookStep.result); return; } } MakeResult(); currentProgress = 0; }
 
 
🍵
UIManager를 통해 Popup들을 관리하는 방식
notion image
추가 설명
⚠️ 문제
  • 팝업의 종류가 증가하면서 모든 팝업의 매개변수를 UIManager의 메서드에 전달하던 방식에 문제 발생
    • → 확장성 및 가독성 저하
       
🛠️ 시도
  • UIManager의 ShowPopup 메서드에는 각 팝업들의 공통된 속성만 전달 후 해당 팝업 컴포넌트를 반환 받는 방식
    • 반환 받은 팝업 컴포넌트에 메서드 체이닝 기법으로 각 팝업에서 필요로 하는 파라미터를 Set하는 메서드 사용
      • → 반환 받은 컴포넌트가 Null일 경우 메서드 체이닝으로 인한 오류 발생 가능
    • 컴포넌트 변수를 선언하여 해당 변수를 Null 체크 후 Set 메서드 사용
      • → 각 팝업들을 Show하는 동작과 파라미터를 Set하는 동작이 분리되어 불편
         
💡 선택
  • 팝업들의 매개변수를 담는 PopupParameter 클래스 생성
    • 각각 세분화 되는 팝업들은 PopupParameter 클래스를 상속 받아서 필요한 Parameter를 선언하여 전달
    • 세분화 되는 팝업 내부에서 필요한 Parameter 클래스 타입으로 형 변환하여 사용
    • → 파라미터를 Set하는 동시에 팝업의 Show 동작까지 UIManager를 통해 한 번에 처리 가능
 
 
마우스 좌클릭의 동작
notion image
추가 설명
⚠️ 문제
  • 상호작용 키를 마우스 좌클릭으로 변경하면서 Input 입력과 버튼 클릭이 겹치게 됨
    • → 재료상자나 찻주전자 앞에서 UI버튼을 누를 경우, 입력이 우선적으로 처리되어 전용 UI가 뜨기 때문에 버튼의 기능을 수행할 수 없는 상황이 됨
       
🛠️ 시도
🔥
마우스 커서를 숨기고, alt키를 눌렀을 때만 커서가 보이도록, 이 때는 상호작용 입력 경로로 사용되지 않도록 설정하는 방법 고민. 하지만 기획적인 측면에서 좋지 못하다고 판단
🔥
UI 버튼을 On-ScreenButton으로 변경하는 것을 고려했으나, 마우스 클릭보다 늦게 인식되는 것이 마찬가지였고, 인풋 액션의 우선순위를 설정하지 못한다는 문제가 여전히 존재
🔥
버튼 위에 마우스가 있을 때 인풋 자체를 막는 방법에 대해 생각했으나, 순간적으로 인풋을 막는 행위가 반복적으로 일어나는 것은 비효율적이고 이미 인풋을 활성/비활성화하는 부분이 있기 때문에 문제 발생 우려
 
💡 선택
  • 마우스 좌클릭 이벤트에 연결 된 콜백 메서드에서 현재 마우스가 버튼 위에 있는지 확인한 후 메서드를 실행하도록 함 (EventSystem.current.RaycastAll)
 
 
🍵
해상도 대응
notion image
추가 설명
⚠️ 문제
  • 해상도에 따라서 배치된 오브젝트들이 보이지 않거나 너무 많은 빈 공간과 함께 보이는 문제 발생
 
🛠️ 시도
  • 레터박스를 이용하여 고정된 화면 비율을 나타내는 방식
    • → main 카메라 외에도 UI만 그리는 별도의 카메라 사용
      → GPU가 두 번의 렌더링을 수행하여 메모리가 추가로 소비됨
  • 가장 극단적인 해상도 비율을 계산하고 현재 해상도와 비교하여 비율의 차이만큼 카메라 size를 조절
    • → 매직넘버 사용으로 더 극단적인 해상도 비율이 나온다면 대응할 수 없음
 
💡선택
  • 기준이 되는 물체를 두고 ScreenPoint를 가져와서 해상도 안에 들어올 때까지 카메라 사이즈를 조절하여 보다 더 자연스럽게 조절이 가능하며, 극단적인 경우에도 유동적으로 대응
    • → 화면 크기를 비율에 맞게 동적으로 조절하여 게임의 해상도 대응 문제 해결
 
 
 

 

🌕 ACHIEVEMENT 십이갅zl 팀은 이런 목표를 달성했어요!

notion image
 
프로젝트 초반 목표
  • 안드로이드 빌드 후 플레이 스토어 앱 출시
 
🏆
현재 목표 달성 현황
  • 안드로이드 빌드 후 플레이 스토어 앱 출시 등록 완료
    • notion image
  • 안드로이드/Window/Mac 빌드하여 베타 테스트 진행 중
  • itch.io에 WebGL 베타 테스트 진행 중
 
🗓️
앞으로의 계획
  • 플레이 스토어 검토 완료 후 정식 출시
  • Steam 배포 검토
 
 

 

✨ QA 토당토당 찰떡쿵은 이렇게 개선 되었어요!

Date
Case
Issue
Improvement
Nov 29, 2023
피드백
레시피 북의 가독성이 떨어진다
레시피 북에 눌러야 하는 버튼과 각 재료 및 중간 결과물의 이름을 텍스트로 표시하여 가독성 향상
Nov 29, 2023
피드백
좌클릭/우클릭 표시 UI가 직관적이지 않다
좌클릭/우클릭 가상 패드에 색상을 추가 레시피 북에서도 같은 색상을 사용하여 어떤 버튼을 눌러야 하는지 명확하게 보여주도록 수정
Dec 2, 2023
피드백
영업 조기 종료 버튼을 실수로 누를 수 있을 것 같다
팝업 창을 띄워서 한 번 더 확인 후 영업 종료 하도록 수정 취소를 누를 경우 계속 게임 진행
Dec 2, 2023
피드백
3일차에 녹차 및 찻주전자가 잠금 해제되는 이벤트 팝업창의 prev/next 화살표 버튼이 잘 보이지 않는다
버튼 이미지를 변경하여 잘 보이도록 수정
Dec 2, 2023
피드백
2일차부터 가래떡을 판매하면서 급격하게 난이도가 상승한다
튜토리얼에서 잠금 해제하는 레시피를 가래떡에서 시루떡으로 변경하여 난이도 조절 손님의 수를 영업 일수에 따라 증가하도록 수정 초기 손님의 수를 줄여서 밸런스 조절
Dec 2, 2023
피드백
다이얼로그의 타이핑 소리가 거슬린다
사운드 변경
Dec 2, 2023
피드백
모바일에서 뉴스 및 게임 설정의 X 버튼이 잘 보이지 않고, 잘 눌리지 않는다
버튼의 크기를 키우고 raycast padding 값을 늘려서 조절
Dec 2, 2023
피드백
손님이 음식을 받았을 때 빨리 반응하지 않아서 답답하다
음식을 받은 뒤 반응까지의 시간을 줄임
Dec 2, 2023
피드백
이미 상태가 BAD인 손님에게 음식을 줄 수 있어서 불편하다
손님의 상태가 BAD가 되면 음식을 받지 않도록 수정
Dec 2, 2023
피드백
영업이 종료될 때 갑자기 종료되어서 당황스럽다
영업이 종료되기 10초 전 시간을 표시하는 바가 붉은 계열로 깜빡거리고 영업이 종료되기 5초 전부터 경고음이 울리도록 수정 영업이 종료된 뒤에는 끝이 났다는 것을 UI 이미지로 표현
Dec 2, 2023
피드백
레시피 북을 볼 때 시간이 일시 정지 된다는 사실을 알기 어렵다
레시피 북의 Tip 대신 시간을 정지했다는 문구를 추가
Dec 2, 2023
피드백
다이얼로그 대화 창을 넘길 때 당근 버튼을 눌러야 하는 것이 불편하다
대화 창 전체를 눌러도 넘어가도록 수정
Dec 2, 2023
피드백
모바일에서 현재 플레이어가 어떤 기구와 상호 작용 중인지 잘 보이지 않아서 불편하다
상호 작용 중인 기구에 아웃라인을 추가하여 가시성을 높임
Dec 3, 2023
버그
Day 01 홈씬 영업 시작 전 튜토리얼에서 ESC를 누르면 다이얼로그 창이 사라진 뒤 튜토리얼이 진행되지 않는다
튜토리얼 중에 ESC를 누르면 설정 창이 뜨도록 수정
Dec 3, 2023
피드백
레시피를 잠금 해제하지 않고도 평점 5점을 달성한다
절구 및 냄비를 제공하는 이벤트에서 각 기구를 사용하여 만드는 레시피를 함께 제공하도록 수정
*Version 모두 알파
 
 
 

 

🐇 ABOUT TEAM 십이갅zl 팀을 소개합니다!

이름
태그
블로그 주소
Github주소
담당
노동균
팀장
손님 AI,뉴스,프롤로그 씬,게임 엔딩 씬,데이터,Cheater,애널리틱스
김정민
부팀장
인벤토리,장식품 상점,튜토리얼,게임 오버 씬,연습모드,오브젝트 풀링,UIManager,UI 디자인
박희원
팀원
재료주문,하루결산,게임설정,해상도대응,파산 씬,Sound
이현지
팀원
플레이어,입력시스템,주방기구,뉴스,연습모드,쿡북,닷트윈,애니메이션 디자인,UI 디자인
 
 
 
 
 
 
Share article
Subscribe to our newsletter
RSSPowered by inblog