Unity
바코드로 알아보는 탄소발자국, 친환경 장보기 체험 개발기
김*균··수정됨 2026.09.03
전시장 내 모형 매대에서 상품을 골라 USB 바코드 스캐너로 찍으면, 옆 화면에 해당 상품이 국산인지 수입산인지, 가공식품인지 아닌지에 따라 탄소 포인트가 다르게 적립됩니다. 마지막엔 영수증 화면이 자동으로 페이지를 넘기며 오늘 장보기의 탄소 성적표를 읽어줍니다. 이번 포스팅에서는 이 콘텐츠의 바코드 인식 구조와 탄소 포인트 로직, 영수증 자동 재생 시스템 구현 과정을 공유합니다.
시스템 아키텍처 개요
콘텐츠는 크게 세 가지 요소로 구성됩니다.
바코드 입력 처리: USB 바코드 스캐너를 키보드 입력 장치로 인식시켜, 별도의 SDK 연동 없이 Input.inputString만으로 스캔 이벤트를 처리합니다.
상품 데이터베이스: 29개 품목(개별 패널 13개 + 공산품 패널 16개)을 ProductType enum과 Dictionary로 매핑해, 바코드 문자열 → 품목 → 탄소 포인트 → 패널 타입까지 한 번에 조회합니다.
영수증 자동 재생: 스캔이 끝나면 코루틴 기반으로 영수증 페이지를 자동으로 넘기며, 페이지별 오디오 내레이션과 타이머로 동기화합니다.

주요 기술적 구현
2.1 키보드 에뮬레이션 방식의 바코드 스캔 처리
USB 바코드 스캐너 대부분은 별도 드라이버 없이 키보드처럼 동작합니다. 즉 바코드를 찍으면 그 내용이 문자로 입력되고 마지막에 Enter(개행 문자)가 전송됩니다. 이 특성을 그대로 활용해 Update()에서 매 프레임 Input.inputString을 확인하고, 문자가 들어오면 _barcodeBuffer에 누적합니다.

개행 문자가 들어오기 전까지는 계속 버퍼에 문자를 쌓고, 개행이 감지되는 순간에만 완성된 바코드 문자열을 처리합니다. 이 방식 덕분에 별도의 하드웨어 SDK 없이도 대부분의 USB 스캐너를 그대로 사용할 수 있고, 개발 단계에서는 스페이스바로 임의 품목을 스캔하는 시뮬레이션 모드를 두어 스캐너 없이도 테스트가 가능하도록 했습니다.
2.2 문자열 기반 품목 조회와 탄소 포인트 구조
바코드에는 Banana, AppleChile처럼 품목을 나타내는 텍스트가 직접 담겨 있습니다. 이 문자열을 enum으로 변환할 때는 Enum.TryParse를 대소문자 무시 옵션으로 사용하고, 파싱된 값이 실제 등록된 품목인지 Dictionary 존재 여부로 한 번 더 검증합니다.

29개 품목은 각각 한글명, 연결된 패널 타입, 탄소 포인트를 ProductInfo 레코드로 미리 정의해 두었습니다. 탄소 포인트는 단순히 상품 종류가 아니라 원산지·가공 여부에 따라 갈립니다. 예를 들어 국산 사과는 10점이지만 칠레산 사과는 0점, 국산 포도는 10점이지만 미국산 포도는 0점입니다. 식빵·휴지·샴푸·모자·장갑처럼 일반형과 가공식품형(Process)이 함께 존재하는 품목은 가공 처리가 된 쪽에 20점을 부여해, "가공 과정을 줄일수록 친환경적"이라는 메시지를 포인트 차등으로 드러냅니다.
마치며
장바구니에 무엇을 담을지는 늘 우리가 선택하지만, 그 선택이 어떤 결과로 이어지는지는 바코드를 찍기 전까지 잘 보이지 않습니다. 이 콘텐츠는 익숙한 "삑" 소리 뒤에 숨어 있던 원산지와 가공 과정을 점수로 드러내, 장보기라는 일상적인 행동을 다시 한번 돌아보게 만듭니다. 전시장에서 바코드를 찍고, 나의 장바구니가 몇 점짜리인지 확인해보세요.
읽기 도구
약 4분 읽기
이 글이 도움이 되었나요?
Work with GIWorks
프로젝트에 GIWorks의 경험이 필요하신가요?
전시·콘텐츠·엔지니어링 프로젝트의 아이디어와 고민을 들려주세요. 필요한 기술과 실행 방법을 함께 찾겠습니다.
문의하기