본문으로 이동
imjae.PORTFOLIO / 2027

PORTFOLIO 2027 / GAME DEVELOPMENT – PROGRAMMING

Unity와 C# 그리고 AI와 함께, 새로운 세상을 제작합니다.

게임 플레이와 기능 그리고 제작 도구를 함께 구현합니다. 게임 엔진의 동작 원리와 실시간 그래픽스에 관심을 가지고 관련 기능을 직접 구현하며 문제 해결 과정을 코드와 글로 남깁니다.

  • Unity 6
  • C#
  • HDRP
  • Addressables
  • ShaderLab / HLSL

PROJECT / UNITY · C#

DCB

지게에 짐을 싣고 운반하는 익스트렉션 액션 게임

조선을 배경으로 한 익스트렉션 액션 생존 RPG입니다. 게임의 전반적인 구성과 아트 방향을 잡고, 3D 모델러·3D 애니메이터와 논의하며 모델과 애니메이션의 콘셉트를 구체화했습니다. 협의를 바탕으로 제작된 리소스를 게임에 통합하고, 게임플레이와 시스템을 구현했습니다. IK 트레버설 시스템을 도입해 지면·환경과 상호작용하는 이동과 옆걸음, 클라이밍, 계단 오르기 같은 장애물 통과를 구현했습니다. 무기 파츠를 자유롭게 조합할 수 있는 구조도 구현했습니다. 아래 사례는 기능의 동작과 구현 방식을 보여 주고, 구현하며 생긴 문제는 연결된 글에서 따로 읽을 수 있습니다.

01AI USAGE

AI 활용

공통 지침과 Git 워크트리로 작업을 나누고, 검증 결과를 통합·인계한 방식을 소개합니다.

01.1활용 사례

병렬 세션 지침과 통합 방식

문제 파악·구현·검증·통합 단계별로 필요한 컨텍스트를 분리했습니다. 이전 단계의 가정이나 다른 작업의 지시가 섞여 수정 범위를 벗어나거나, 구현한 내용을 검증 완료로 단정하는 AI의 실수를 줄이려는 목적입니다.

운영 방식
공통 지침으로 작업 기준을 맞추고, Git 워크트리로 구현·검증 공간을 분리했습니다. 작업마다 수정·보존 범위와 완료 조건을 정하고, 슬롯 소유 기록으로 중복 사용을 관리했습니다. 결과는 작업별 커밋과 검증 기록으로 받아 의존 순서대로 통합하도록 했습니다.

작업 절차

  1. STEP 01
    문제와 보존 범위 지정

    재현 조건, 수정할 파일, 보존할 자산과 완료 조건을 정하고 실제 호출·프리팹·데이터 연결을 먼저 확인하게 했습니다.

  2. STEP 02
    세션과 실행 공간 분리

    배치·캡처·장시간 검사는 별도 워크트리에 맡기고, 공통 지침과 슬롯 소유 기록으로 작업 범위와 공유 입력을 관리했습니다.

  3. STEP 03
    결과를 보고 채택 판단

    코드의 변경 범위와 재생 결과를 함께 검토하고, 자동 검사를 통과해도 손목 외형이 악화한 IK 후보는 제외했습니다.

  4. STEP 04
    검증 수준과 통합 기록

    AI가 수행한 컴파일·자동 검사·캡처·측정을 구분하고, 작업별 커밋과 남은 문제를 받아 의존 순서에 맞춰 통합하도록 했습니다.

02CLIENT SYSTEMS

게임플레이를 만드는 세 가지 구현

캐릭터의 접촉, 적의 판단, 장비 데이터가 실제 동작으로 이어지는 구조를 다룹니다.

상태·전이 · 공유 자원

개별 패턴과 그룹 전투의 권한 분리

Samurai가 자리를 나누고 접근, 공격, 블러프를 이어 가는 그룹 전투를 만들고, 패턴 원본을 Unity Behavior 그래프에서 C# 코드로 옮겼습니다.

  • FSM·DSL
  • 공격 토큰
  • 중단과 반납
전투 — 일반 교전에서 옥귀 처치까지 일반 적과의 교전부터 옥귀의 대검·도약·특수 공격과 최종 처치까지, 중간 대치를 생략한 원속도 하이라이트입니다.영상 원본 보기 ↗ (새 탭)
소개
Samurai는 플레이어를 발견하면 쫓아오다 가까워지면 주변에 자리를 잡습니다. 공격 기회를 받은 개체만 들어가고, 나머지는 접근했다 빠지는 블러프로 압박합니다.
구현
  • 몬스터 타입별 C# definition을 패턴의 원본으로 두고, 등록된 primitive만 조합하는 코드 기반 FSM·DSL을 공통 실행기와 스케줄러가 돌립니다.
  • 그룹 디렉터가 플레이어 주위의 거리 층과 방향으로 자리를 나누고, 실제 공격 권한(토큰)과 접근 권한(클레임)을 인원별 상한으로 따로 배정합니다.
  • 전이를 한눈에 보는 뷰어와 매개변수 프리셋을 에디터에 두어 코드 원본을 유지한 채 튜닝합니다.

캐릭터 제어 · 애니메이션

지형과 손발 접촉을 잇는 IK 트레버설

턱 오르기, 벽 타기, 선반 옆걸음을 진입부터 손발 지지, 보행 복귀까지 한 흐름으로 연결했습니다.

  • IK
  • Root Motion
  • 상태 복원
IK 트레버설 — StepUp, SideStep과 Climb StepUp과 SideStep의 진입부터 보행 복귀, Climb의 수직 등반과 상단 오르기를 보여줍니다. Climb은 중간 이동을 생략하고 화면을 확대한 원속도 요약입니다.영상 원본 보기 ↗ (새 탭)
소개
턱은 걷다가 그대로 올라서고, 벽과 좁은 선반은 안내가 잡힌 자리에서 Space로 들어갑니다. 세 동작 모두 손발이 실제 지형에 붙은 채 진행되고, 끝나면 일반 보행으로 돌아옵니다.
구현
  • 작업자에게 받은 클립을 실제 Avatar에서 120Hz로 샘플링해 몸의 이동량, 손발의 접촉·이탈 시점, IK 좌표를 데이터로 만듭니다.
  • 몸을 옮기는 코드와 손발을 지형에 붙이는 IK를 분리하고, 트레버설 중에는 일반 이동과 루트 모션 전달을 막아 이동 주체를 하나로 둡니다.
  • 공중의 발은 원본 궤적에 출발·착지 오차를 나눠 더하고, 착지 뒤 남은 보정은 보행 IK에 넘겨 한 프레임 튐을 피합니다.

데이터 · UI · 오브젝트 수명

하나의 파츠 트리로 연결한 장비 조합

파츠 트리 하나로 인벤토리 이미지, 3D 장착과 드랍, 작업대 프리뷰, 저장과 복원을 모두 처리합니다.

  • 파츠 트리
  • RenderTexture
  • 풀 반환
장비 — 파츠 조합, 장착과 실제 공격 모루에서 파츠를 교체하고 조합을 완성한 뒤 장착과 공격으로 이어집니다.영상 원본 보기 ↗ (새 탭)
소개
모루에서 무기의 연결 지점에 파츠를 붙여 하나의 무기를 만듭니다. 완성한 무기는 인벤토리 이미지, 3D 장착과 드랍, 저장에 그대로 쓰입니다.
구현
  • 조합의 원본은 재귀적인 파츠 트리 하나이며, 2D 이미지와 3D 모델은 같은 트리를 읽되 배치 보정만 표현별로 계산합니다.
  • 작업대 프리뷰는 실제 장착용 리그를 별도 카메라로 RenderTexture에 그리고, 연결 지점을 화면 좌표로 옮겨 마커를 놓습니다.
  • 프리뷰 bounds 계산에서 비활성 효과와 트레일·파티클 렌더러를 제외하고, 풀에서 빌린 리그는 꺼 둔 효과를 복원한 뒤 돌려줍니다.

03RUNTIME & GRAPHICS

재생 비용과 표현을 다룬 작업

Unity 런타임에서의 데이터 읽기, 버퍼 관리, 메시 갱신과 이펙트 저작 경험입니다.

비동기 I/O · 버퍼 · Unity 렌더링 API

물 캐시의 읽기·변환·메시 업로드

오프라인에서 계산한 유체를 바로 올릴 수 있는 메시 캐시로 바꾸고, 디스크 읽기와 Unity 메시 갱신을 분리했습니다.

  • 선행 읽기
  • Mesh Buffer
  • 자원 수명
물 — 계곡 수면과 폭포 계곡과 출렁다리에서 보이는 수면·폭포의 화면 표현입니다.영상 원본 보기 ↗ (새 탭)
소개
급류는 게임 중에 유체를 계산하지 않습니다. 지형과 바위에 맞춰 오프라인에서 계산한 수면과 포말·물보라를 같은 시간에 맞춰 재생합니다.
구현
  • Alembic 결과를 정점 28바이트 레이아웃의 직접 업로드용 캐시로 변환하고, 해당 프레임의 데이터만 메시 버퍼에 올립니다.
  • 리그마다 슬롯 세 개로 다음 두 프레임을 작업 스레드에서 미리 읽고, 메시 업로드와 객체 해제는 캐시를 만든 스레드에서만 수행합니다.
  • 보조 입자는 표시 범위 밖을 CPU에서 걸러낸 뒤 Burst 변환으로 입자 시스템에 전달하고, 읽기·대기·변환·업로드를 프로파일러 마커로 나눠 잽니다.

셰이더 · VFX · 저작 도구

화염 레이어와 화면 크기별 표현 제어

볼륨 화염과 불혀, 연기와 재를 한 불로 묶어 제어하고, 캐릭터 효과는 애니메이션의 발생 프레임과 부착점에 붙입니다.

  • HDRP
  • 품질 단계
  • VFX 타임라인
불 — 마을 화염과 연기 마을 진입 시네마틱과 플레이 중의 화염·연기를 보여줍니다.영상 원본 보기 ↗ (새 탭)
소개
환경 화염은 영역과 모양을 정하면 볼륨 화염, 불혀, 연기, 재와 광원을 함께 제어합니다. 캐릭터 효과는 애니메이션의 특정 프레임과 부착점에서 재생됩니다.
구현
  • FireZoneV2가 연료 영역과 화염 모양을 정의하고, ProceduralStructureFireEffect가 절차적 밀도 볼륨과 디테일 셸을 제어합니다.
  • 화면에서 차지하는 크기로 Full·Reduced·Minimal·Culled 단계를 고르고 경계에 hysteresis를 둡니다. 레이어를 생략해도 재생 시간은 초기화하지 않습니다.
  • 애니메이션 이펙트 타임라인이 발생 프레임·부착점·재생 방식(OneShot·Sustained)을 지정하고, 풀 인스턴스 준비는 로딩 중 여러 프레임에 시간 예산으로 나눠 실행합니다.

CONTACT & LINKS

GitHub ↗ (새 탭)개발 블로그 ↗