0%

Unity

키오스크 하나가 한 가지 뇌 과학 개념을 담당하고, 일곱 대의 키오스크가 전시장에서 한 편의 이야기를 이룹니다.

전*원··수정됨 2026.07.21

키오스크 하나가 한 가지 뇌 과학 개념을 담당하고, 일곱 대의 키오스크가 전시장에서 한 편의 이야기를 이룹니다.

이 일곱 키오스크의 코드는 하나의 Unity 프로젝트 안에서 공유된 기반 위에서 자라났습니다. 이번 포스팅에서는 공동특별전 뇌 과학 멀티 콘텐츠 프로젝트의 기술적인 구현 과정을 공유합니다.

1. 시스템 아키텍처 개요

본 프로젝트는 크게 세 가지 단계로 구성됩니다.

공용 베이스 계층 구축: 페이지 전환, 종료 안전장치, 시리얼 통신, 사운드 풀을 제네릭 싱글톤으로 추상화해 모든 콘텐츠가 상속해 사용하도록 했습니다.

데이터 테이블 구동: 신경전달물질 6종과 전시 전체의 한국어 UI 문자열을 두 개의 CSVBrainContentsTable.csv, StringTable.csv)에 모아 런타임에 로드합니다.

콘텐츠별 독립 빌드: 일곱 콘텐츠가 한 프로젝트에 공존하되, 키오스크 단위로는 해당 콘텐츠 씬만 활성화한 채 독립 실행 파일로 빌드됩니다.

전체 환경은 Unity 2023.2 Windows Standalone 기반이며, 외부 버튼 박스 · 바코드 리더와 시리얼 프로토콜로 연동됩니다.

2. 주요 기술적 구현

2.1 델리게이트 주입형 제네릭 베이스 GameQuitManager.cs)

GameQuitManager<T> 는 제네릭 싱글톤으로, quitButtonCount(기본 10)회 종료 버튼 연타와 idleTime(60초) 타이머라는 공통 안전장치를 제공합니다. 콘텐츠별로 달라지는 '타이틀로 돌아가기' 동작은 loadToTitleFuntion : DvoidDelegate, checkCurrentCountensIsTitle : DreturnBoolDelegate 두 개의 델리게이트에 함수를 주입하는 방식으로 해결했습니다. 이 구조 덕분에 각 콘텐츠 매니저는 공통 안전장치를 상속만 하고, 화면 복귀 로직만 람다로 갈아끼우면 됩니다.

2.2 CSV 기반 콘텐츠 테이블 GameManager_Neurotransmitter.cs)

신경전달물질 콘텐츠는 6종(DOPAMINE, GLUTAMATE, NOREPINEPHRINE, GABA, ENDORPHINS, SEROTONIN) 각각의 이미지 경로, 설명 문자열, 마스코트 프리팹 경로를 BrainContentsTable.csv 에서 읽어 ENEUROTRANSMITTERTYPE enum 인덱스로 매핑합니다. gameObjectPools[] ObjectPool 이 6개 종류별 스폰 풀을 관리하고, spawnTime 주기마다 neurotransmitterSpawnLocations[] 좌표에서 마스코트를 생성해 시냅스 사이를 이동시키는 연출을 만듭니다.

- 데이터 소스: BrainContentsTable.csv (6행)

- 다국어 문자열: StringTable.csv ID, Kr 컬럼)

- 리소스 로딩: Resources/Prefabs/{마스코트명}

2.3 뉴런 연결 퍼즐의 경로 추적 ConnectionOfNeuronsGameManager.cs)

관람객이 시작 뉴런에서 끝 뉴런까지 화면 위의 노드를 손가락으로 이어야 하는 퍼즐은, 드래그 중 Raycast 로 감지된 뉴런을 HashSet<Neuron> visited 에 넣고 List<Neuron> connectedRoad 에 순서를 기록하며 경로를 확장합니다. 한 번 방문한 노드를 다시 지나가면 이후 경로가 connectedRoad 에서 역순으로 제거되어, 관람객이 실수로 지나친 경로를 되짚어오면서 자연스럽게 취소할 수 있도록 설계했습니다.

3. 사용자 경험(UX) 최적화

10연타 안전 종료 : 전시 현장에서 관람객이 실수로 종료 버튼을 누를 수 없도록, 60초 내 10회 연타라는 히든 조건을 GameQuitManager<T> 에 내재화해 모든 콘텐츠가 같은 안전장치를 상속받도록 했습니다.

콘텐츠별 맞춤 인터랙션 : 인지 편향 콘텐츠는 단일 선택 버튼, 뉴런 연결은 멀티 드래그, 인간 vs AI 는 fingerId 기반 3D 격자 스냅 배치 등 각 콘텐츠의 주제에 어울리는 입력 방식을 채택해 주제와 조작이 일치하도록 했습니다.

외부 하드웨어 확장성 : 공용 NetworkManager.cs 덕분에 대뇌화지수의 물리 버튼 박스, 신경전달물질의 시리얼 입력, 무궁무진 뉴오월드의 바코드 리더 같은 이질적인 외부 장치를 동일한 추상화 아래 수용합니다.

CSV 한 파일로 끝나는 문안 수정 : 모든 한국어 UI 텍스트가 StringTable.csv 에 모여 있어, 현장 담당자가 전시 중에도 Unity 재빌드 없이 텍스트만 수정해 반영할 수 있습니다.

4. 마치며

공용 베이스, 데이터 테이블, 콘텐츠별 특화 계층이라는 세 축을 분리한 덕분에 일곱 개의 이질적인 뇌 과학 주제가 한 Unity 프로젝트 안에서 충돌 없이 공존할 수 있었습니다. 단일 개발자가 아닌 여러 손이 들어오는 전시 프로젝트에서 '공유 자산'과 '콘텐츠별 자율성'의 경계를 코드로 그어보는 작업이었습니다.

향후에는 일곱 콘텐츠를 하나의 런처 앱에서 선택해 실행하도록 메타-콘텐츠 계층을 추가해 순회 전시 시 배포 관리를 단순화하고, 현재 콘텐츠마다 개별 상속된 NetworkManager 구조를 시리얼 프로토콜 어댑터 인터페이스로 추상화해 외부 하드웨어 교체 시 코드 수정 없이 인스펙터 설정만으로 대응하도록 발전시킬 계획입니다.

읽기 도구

6분 읽기

이 글이 도움이 되었나요?

다음으로 읽기