JK강재신 / Unity · XR
← 포트폴리오

ENGINEERING LAB / 2026

작은 예제로 보는
구현의 원리.

시간, 좌표, 행동을 직접 바꿔 보세요.
아래 데모와 C# 코드는 포트폴리오용으로 새로 작성한 설명 자료입니다.

01 / TIME

시간을 되돌리면,
상태도 되돌아갑니다.

실시간 훈련 로직을 다시 실행하지 않고, 기록한 위치를 시간축에서 읽습니다. 두 기록 사이에서는 위치를 보간합니다.

실제 프로젝트의 문제 해결 ↗
설명용 시뮬레이션 · 합성 데이터0s4s

실제 프로젝트 영상이 아닌 원리 설명용 2D 데모입니다.

02 / SPACE

회전 방향이 바뀌면,
더 잘 보이는 센서로.

세 관측 방향 중 장비의 회전 각도와 가장 가까운 방향을 선택합니다. 전환 임계값은 경계에서 선택이 반복되는 현상을 줄이기 위한 예제 설계입니다.

센서 선택 예제와 적용 범위 ↗
설명용 시뮬레이션 · 실제 센서 입력 없음A · 0°B · 120°C · 240°

입력 방향은 예시입니다. 캘리브레이션과 실제 자세 결합은 포함하지 않습니다.

03 / BEHAVIOR

보이는 것과
반응하는 것을 나눕니다.

시야 안에 있어도 장애물에 가려지면 적을 직접 탐지하지 않습니다. 거리·각도·가림을 구분하면 행동의 이유를 설명하기 쉬워집니다.

NPC 판단 코드 살펴보기 ↗
설명용 시뮬레이션 · 고정 거리의 합성 표적

시야각 90° 기준. 가림은 체크박스로 주입하며 실제 Raycast를 수행하지 않습니다.

VALIDATION

어디까지 확인했나요?

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

기존 제품의 완성도나 성능을 증명하는 테스트가 아닙니다. 예제에는 실제 훈련 데이터, 장비 SDK, 비공개 프로토콜이 포함되어 있지 않습니다.

Editor 검증 항목 전체 보기 ↗
리플레이 실행 데모 · Play Mode 7개 확인

시작, 시간 진행, 일시정지, 탐색, 역방향, 초기화, 반복 갱신을 Unity 재생 흐름에서 확인했습니다. 그래픽 없는 실행 검사이며, 화면 출력 품질·장비 연동 검증은 포함하지 않습니다.

Play Mode 검증 내역 ↗

OPEN IN UNITY

내려받고, 직접 재생해 보세요.

예제 16개, 리플레이 실행 장면, 사용 안내와 검증 기록을 한 묶음으로 제공합니다.

  1. ZIP을 새 폴더에 풀고 Unity Hub에서 프로젝트 추가
  2. Unity 6000.0.23f1로 열기
  3. ReplayLab 장면에서 Play · 시간축과 방향 조작
Unity에서 렌더링한 재구성 리플레이 예제: 기록 경로 위의 큐브
Unity 장면 렌더 · 2.5초 위치 · 재구성 데모
↓ Unity 예제 프로젝트 ZIP

2026년 포트폴리오용 재구성 코드 · 합성 데이터 · Built-in 렌더 파이프라인

C# SAMPLE LIBRARY

16개의 작은 구현 예제

전체 사용 안내 ↗

모두 2026년 포트폴리오용 재구성 코드입니다. 실제 업무 당시 소스로 표현하지 않습니다.

REPLAY

시간축을 앞뒤로 탐색하는 리플레이

위치·회전은 보간하고, 활성 여부와 애니메이션 상태는 기록 시점에 맞춰 선택합니다.

사용 방법과 범위

ReplayFrame 배열에 증가하는 시간을 넣고 Sample(frames, time)을 호출합니다. time을 줄이면 역방향 탐색이 됩니다.

단일 객체의 메모리 내 샘플입니다. 파일 입출력, 다중 객체 수명, 음성 동기화는 포함하지 않습니다.

TRACKING

공통 기준으로 자세 좌표 옮기기

센서 기준의 관절 자세를 로컬 좌표로 바꾼 뒤 아바타 기준으로 옮깁니다.

사용 방법과 범위

보정된 sensorRoot, sensorJoint, avatarRoot Pose를 Retarget에 전달합니다.

축·단위·스케일은 미리 일치해야 합니다. 장비 캘리브레이션이나 스켈레톤 리깅 전체를 구현하지 않습니다.

DATA

프레임 단위로 지연시키는 데이터 버퍼

정해진 개수의 샘플을 보관한 뒤 입력 순서대로 출력합니다.

사용 방법과 범위

new FrameDelayBuffer(delayFrames)를 만들고 샘플마다 Push를 호출합니다.

프레임 수 기준 지연입니다. 가변 네트워크 지연 보정이나 TCP 전송 계층은 포함하지 않습니다.

GAMEPLAY

플레이어와의 간격에 따른 NPC 속도

경로 진행도 차이를 사용해 앞선 NPC는 늦추고 뒤처진 NPC는 빠르게 합니다.

사용 방법과 범위

동일한 경로의 playerProgress와 npcProgress를 Speed에 전달합니다.

폐곡선 경로의 랩 처리는 호출자가 해야 합니다. 물리 이동·경로 추종은 포함하지 않습니다.

GAMEPLAY

시야와 정보 기억을 나누는 NPC 판단

거리·시야각·가림 여부로 탐지를 판단하고, 아군 신호와 기억 시간으로 상태를 선택합니다.

사용 방법과 범위

InView에 월드 위치·방향과 외부 raycast 결과를 전달하고 Decide로 상태를 선택합니다.

Raycast, 실제 전투, 경로 이동, 동료 통신은 별도 계층입니다.

GAMEPLAY

순서가 있는 VR 조작 튜토리얼

잡기·작동·재장전 입력을 순서대로 확인하는 작은 상태 모델입니다.

사용 방법과 범위

장비 입력 어댑터에서 Accept(TutorialStep)를 호출합니다.

특정 XR SDK 입력 바인딩, 총기 물리, 실제 애니메이션은 포함하지 않습니다.

DATA

최고 점수와 동점 순서를 관리하기

플레이어별 최고 점수를 유지하고, 동점은 이름 순으로 정렬합니다.

사용 방법과 범위

Submit(player, score) 후 Top(count)로 결과를 받습니다. 스테이지별로 별도 인스턴스를 만듭니다.

메모리 내 모델입니다. 파일 저장·복원과 온라인 랭킹은 구현하지 않습니다.

GAMEPLAY

경로 이동 중 정체 상태 감지

이동해야 하지만 위치 변화가 없는 시간을 누적해 복구 필요 여부를 반환합니다.

사용 방법과 범위

매 프레임 Tick을 호출하고 true일 때 주변 공간을 검사한 뒤 복구 동작을 수행합니다.

안전한 위치 탐색이나 실제 이동은 호출자가 담당합니다. 벽을 통과시키는 코드는 없습니다.

TRACKING

큰 좌표를 지역 좌표로 변환하기

double 좌표에서 공통 원점을 뺀 뒤 Unity의 float 좌표로 변환합니다.

사용 방법과 범위

이미 같은 직교좌표계·단위로 변환된 WorldPoint와 origin을 사용합니다.

위경도 투영, ECEF 변환, 지구 곡률 계산을 대신하지 않습니다.

NETWORK

참가자 목록에서 조정 역할 선택

동일한 참가자 목록에서 가장 작은 ID를 선택하는 결정적 예시입니다.

사용 방법과 범위

SelectCoordinator에 현재 참가자 ID 목록을 전달합니다.

새로 작성한 일반 예제이며 당시 프로토콜이 아닙니다. 합의·장애 복구·분할 네트워크는 해결하지 않습니다.

VISUALIZATION

카메라 공간의 점을 화면 좌표로

가상의 카메라와 점을 사용해 화면 UV와 시야 내부 여부를 계산합니다.

사용 방법과 범위

카메라 로컬 좌표, 수직 FOV, 화면 종횡비를 Project에 전달합니다.

공개 수학을 이용한 독립 예제입니다. 실제 항공 장비·프로토콜·센서 모델을 재현하지 않습니다.

TOOLS

가상 절차의 순서와 확인 조건

가상의 Connect·Inspect·Complete 단계로 순차 검증 원리를 설명합니다.

사용 방법과 범위

임의의 단계 이름으로 생성하고 Confirm(name, result)을 호출합니다.

실제 발사 절차나 제어 코드와 무관한 교육용 예제입니다. 실패 시 현재 단계를 유지합니다.

TOOLS

하트비트로 장비 상태 표시하기

합성 장비 ID와 마지막 수신 시간으로 온라인 상태를 판단합니다.

사용 방법과 범위

단조 증가하는 초 단위 시간을 Heartbeat와 IsOnline에 전달합니다.

실제 장비 통신·개인정보·GPS 데이터는 사용하지 않는 일반 상태 모델입니다.

GAMEPLAY

경로 기반 투척물 위치 계산

시작점·제어점·도착점으로 2차 베지어 경로를 계산합니다.

사용 방법과 범위

Sample에 세 위치와 0~1 진행도를 전달해 표시 위치를 받습니다.

명중 판정과 점수는 별도입니다. 이동 표적을 따라갈지 고정할지는 호출자 정책입니다.