JK강재신 / Unity · XR
← 프로젝트 목록

네스랩 / 2024

Beyond X-Verse

실시간 트래킹부터 시나리오 편집·리플레이까지

트래킹 원점 정합Addressables / FishNet음성·리플레이
프로젝트 연도 / 기록 당시 상태2024 · 개발 진행 중
개발팀 · 리소스 인력 제외2인 · 팀장
사용 기술Unity3D · VR · C# · CursorAI

PROJECT IN ACTION

실행 화면과 시연

Beyond X-Verse 프로젝트 화면
프로젝트 시연 프로젝트 이미지
Google Drive / PROJECT VIDEO

프로젝트 시연

직접 열기 ↗
시나리오 NPC · Waypoint 생성 프로젝트 이미지
Google Drive / PROJECT VIDEO

시나리오 NPC · Waypoint 생성

직접 열기 ↗
시나리오 NPC · 행동 Task 생성 프로젝트 이미지
Google Drive / PROJECT VIDEO

시나리오 NPC · 행동 Task 생성

직접 열기 ↗

OVERVIEW

프로젝트와 나의 역할

VIVE·OptiTrack 센서 연동, Addressables 리소스 관리, NPC FSM과 음성·리플레이 시스템을 개발했습니다.

  • VIVE Focus Vision HMD 및 VIVE Tracker / OptiTrack 센서 연동
  • Unity3D Addressable 기능을 이용한 리소스 관리 기능 개발
  • Scene 동적 로드 및 훈련 시나리오 제작 기능 개발
  • 위해범 및 시민 NPC FSM 초기 디자인
  • CSV 파일 포맷 및 XML, Json 파일을 통한 훈련 리플레이 데이터 저장 기능 개발
  • 훈련자간 음성 대화 기능 개발
  • 상용 네트워크 모듈을 이용한 네트워크 객체 동기화
  • 팀원 업무 분장 및 일정 관리

ENGINEERING NOTES

기능별 구현과 문제 해결

담당 기능의 배경부터 구현 방식과 선택한 범위까지 정리했습니다.

01

HMD와 OptiTrack의 좌표 기준 맞추기

배경과 과제

VIVE HMD와 OptiTrack을 함께 사용하면서 장비별 원점 차이로 움직임이 어긋났습니다.

내가 구현한 방식

OptiTrack 기준 마커로 위치 원점을 정하고, 머리 회전에는 HMD 자체 데이터를 사용했습니다. 트래커 종류에 따라 연동 방식을 선택하도록 구성했습니다.

선택의 이유와 범위

위치 기준과 머리 회전 입력을 분리했습니다. 아래 발췌는 초기화, 트래커 상태 반영, 클라이언트·서버 간 기준 위치 전달 순서로 이어집니다.

02

외부 목록을 통한 리소스 동적 로드

배경과 과제

리소스 업데이트를 쉽게 반영하기 위해 외부 XML 목록과 Addressables를 연결해야 했습니다. FishNet과 함께 적용하는 과정에서 참고 자료가 부족했습니다.

내가 구현한 방식

XML의 에셋 주소를 읽고 카탈로그를 불러온 뒤, 네트워크 오브젝트를 등록하는 로드 흐름을 구성했습니다. Cursor AI의 코드 지원을 참고하되, 기능을 분석하고 반복 디버깅하며 적용했습니다.

선택의 이유와 범위

XML은 사용할 리소스 목록을, Addressables는 로드를 담당하도록 구성했습니다. 아래는 목록 정의에서 네트워크 에셋 로딩으로 이어지는 설명용 코드입니다.

03

씬 로드와 훈련 시나리오 저작

배경과 과제

기능 씬·맵 씬을 동적으로 불러오고, 훈련 종류에 따라 NPC 행동 Task를 구성해야 했습니다. 초기에는 Task의 범위가 명확하지 않았습니다.

내가 구현한 방식

Addressables와 FishNet의 씬 로드 흐름을 연결했습니다. 경찰·특수부대 등 초기 훈련 대상을 먼저 정하고, 해당 시나리오에 필요한 Waypoint와 행동 Task부터 작성했습니다.

선택의 이유와 범위

모든 훈련 유형을 한 번에 다루기보다 초기 대상에 필요한 Task부터 만들고 고도화하는 범위를 선택했습니다.

04

시야와 동료 정보를 반영하는 NPC FSM

배경과 과제

NPC가 적을 발견하는 조건뿐 아니라 장애물, 주변 동료와의 상황 공유도 고려해야 했습니다.

내가 구현한 방식

Waypoint 기반 FSM을 초기 설계하고, FOV 및 장애물 검사로 적을 탐지하도록 구성했습니다. 적 발견이나 교전 정보를 주변 아군에게 전달해 무리가 상황을 인지하도록 했습니다.

선택의 이유와 범위

담당 범위는 위해범·시민 NPC의 초기 FSM 설계입니다. 아래 발췌에서 공통 상태 구조, 탐지 인터페이스, 소리·정보 전달을 확인할 수 있습니다.

05

동작 기록과 음성 기록을 연결하는 리플레이

배경과 과제

프레임을 제어하는 훈련 리플레이에 음성까지 연결하려면, 동작 데이터와 음성 기록을 함께 관리해야 했습니다.

내가 구현한 방식

CSV 기반 동작 기록과 별도 JSON 음성 기록을 구성하고 프레임 정보를 연결했습니다.

선택의 이유와 범위

동작과 음성을 서로 다른 기록으로 보관하고 프레임 정보를 연결한 구조입니다. 저장 형식의 선택과 실제 장비 환경의 동기화 품질은 구분해 확인해야 합니다.

06

음성 끊김과 지연 사이의 선택

배경과 과제

마이크 데이터를 프레임 단위로 곧바로 전송·재생하는 과정에서 음성이 끊기는 문제가 있었습니다.

내가 구현한 방식

일정량의 음성 프레임을 모으고 오디오 코덱과 버퍼를 활용하는 송수신 흐름을 구성했습니다.

선택의 이유와 범위

음성의 연속성과 전송 지연 사이의 균형을 다룬 구현입니다. 버퍼에 프레임을 모으는 구조를 보여주며, 지연 시간이나 음질의 정량 측정치는 포함하지 않습니다.

07

네트워크 동기화와 팀 개발 운영

배경과 과제

훈련자 아바타와 NPC 상호작용을 연결하면서, 신규 팀원의 Unity·C# 이해도에 맞춘 작업 관리도 필요했습니다.

내가 구현한 방식

FishNet을 이용해 네트워크 객체와 상호작용을 동기화했습니다. 팀에서는 주간 코드 리뷰로 각자 작성한 코드와 문제점을 설명하고 함께 검토했습니다.

선택의 이유와 범위

코드 지원 도구를 활용한 부분도 직접 분석·디버깅한 과정과 함께 설명했습니다. 팀 관리에서는 질문을 통해 팀원이 문제를 파악하도록 돕는 방식을 사용했습니다.

MORE SCREENS

추가 실행 화면

CODE & VALIDATION

코드와 검증 범위

기존 코드 발췌와 2026년 포트폴리오용 재구성 코드를 구분해 제공합니다. 재구성 코드는 실제 제품 소스가 아니며, 일반 원리를 설명하기 위해 새로 작성했습니다.

Unity 6000.0.23f1 컴파일 및 Editor 검증 56개 통과. 실제 장비 연동과 제품 통합은 검증 범위에 포함하지 않습니다.

예제별 사용법과 검증 내용 ↗
다른 프로젝트 살펴보기 ↗