최근 VR/AR/XR 기기를 활용해 기본적인 인지 및 행동 실험을 진행하는 연구가 많아졌습니다. 일반적인 2D 화면보다 훨씬 몰입감이 뛰어나고, 좁은 실험실 안에서도 현실의 다양한 환경과 변인들을 마음껏 제시할 수 있다는 점이 가장 큰 이유인듯합니다. 이에 따라 요즘은 PhysioLabXR(https://physiolabxr.org/), UXR 2.0(https://github.com/immersivecognition/unity-experiment-framework) 같이 복잡한 실험 환경 구축을 도와주고 개발 시간을 확 줄여주는 프레임워크들도 많이 나오고 있습니다.
하지만 막상 현업에서 이런 툴들을 써보면, 기능이 필요 이상으로 너무 방대해서 오히려 세팅이 무겁거나 , 정작 제일 필요한 '실험 중단 시 해당 위치부터 이어하기' 같은 소소하지만 치명적인 기능이 빠져있는 경우가 많습니다. 그래서 오늘 소개할 ExpTrialMng를 직접 만들게 되었습니다. 기능 자체는 기존 프레임워크들보다 적을지 몰라도, 석.박사과정동안 수많은 VR/AR 사용자 실험을 굴려보며 느꼈던 불편함들을 해결하는 데 초점을 맞춘 Unity 라이브러리입니다. 실험 설계의 뼈대가 되는 트라이얼 반복 제어와 CSV 자동 저장 기능 , 그리고 에러 발생 시 그 자리에서 바로 실험을 재개할 수 있는 복구 기능 등을 가볍게 만들어서 구현하신 Unity 실험 프로젝트에 간단하게 import 할 수 있도록 구현해보았습니다.
✨ 주요 기능
- 미리 생성된 CSV 파일을 읽어와 각 트라이얼의 자극(Stimuli) 설정을 실험 매니저에 전달합니다.
- 각 트라이얼이 끝날 때마다 실험 결과를 추가적인 단일 CSV 파일에 자동으로 저장하여 데이터 손실을 최소화합니다.
- 실험 중 예기치 못한 오류로 중단되었을 때, 처음부터 다시 시작할 필요 없이 결과가 채워지지 않은 특정 트라이얼 번호부터 실험을 바로 재개할 수 있습니다.
🛠 사용 방법 (Usage)
이 라이브러리를 사용하면 몇 줄의 코드만으로 본인의 실험 환경에 맞게 쉽게 적용할 수 있습니다.
1. 사전 트라이얼 데이터(CSV) 준비
- 실험 시작 전, 각 트라이얼의 자극 정보를 담은 CSV 파일을 생성(Python 등으로 생성)하여 Asset 폴더에 배치합니다.
- 이때, CSV 파일의 첫 번째와 두 번째 열(Column) 헤더는 반드시 partiNumber(참가자 번호)와 trialNumber(트라이얼 번호)로 지정되어야만 라이브러리가 정상 작동합니다.
- 결과를 저장할 출력(Output) 슬롯은 비워두어야 하며, 트라이얼이 종료될 때마다 채워집니다.
2. Unity Prefab 설정
- 제공되는 Experiment Manager 프리팹을 Unity 프로젝트에 불러옵니다.
- Inspector의 TrialData 탭에서 다음 파라미터들을 설정합니다:
- Csv File Name: 준비한 CSV 파일 이름.
- Input Idx: CSV 헤더의 입력(Input) 피처 개수.
- Output Idx: CSV 헤더의 출력(Output) 피처 개수.
- Start From: 실험을 시작할 트라이얼 인덱스 (에러 발생 후 이어하기 시 유용).
3. 코드 연동
- 파라미터 설정 후, ExperimentManager.cs 스크립트 내부에서 시각, 청각, 햅틱 등의 자극을 제어하는 코드와 트라이얼 정보를 연결해주기만 하면 됩니다.
더 자세한 예제 코드나 전체 소스는 아래 GitHub 링크와 arXiv 논문에서 확인하실 수 있습니다. 이 라이브러리를 통해 Unity 프로그래밍에 익숙하지 않은 다양한 분야의 연구자분들이 코딩에 대한 부담을 덜고, 실험 설계 본연에 더 집중하여 좋은 연구 성과를 얻는 데 도움이 되길 기대합니다.
- GitHub Repository: https://github.com/jinwook31/Unity-Experiment-Trial-Manager
- arXiv Preprint: https://arxiv.org/abs/2209.02966
'Cognitive Neuroscience > Perception' 카테고리의 다른 글
| Anticipated moments: Temporal structure in attention (0) | 2019.09.09 |
|---|---|
| Individualistic weight perception from motion on a slope (0) | 2019.09.09 |











