프로젝트

ELEMENTAIL

원소 카드를 조합하고 유물을 모아 전투를 이어 가는 덱빌딩 로그라이크입니다.

ELEMENTAIL 이미지 1/3
1 / 3

이미지 출처: ELEMENTAIL Steam 스토어 화면

담당 업무

클라이언트 개발자 2명 중 한 명으로 카드·유물 기능과 튜토리얼, 전투 연출을 개발했습니다. 모바일 이식 과정의 리소스·렌더링 조정과 플랫폼별 빌드·업로드도 맡았습니다.

해금·백과사전·설정·사운드·다국어 기능을 구현했으며, Unity Analytics의 주요 행동 이벤트와 개발·서비스 환경 분리를 작업했습니다.

기술 사례

튜토리얼의 단계 실행과 안내 표시

카드·유물 기능과 Timeline·DOTween 기반 연출을 담당했습니다. 튜토리얼에서는 실제 게임 조작으로 카드 사용과 전투 과정을 익히도록 구현했습니다.

단계 클래스에 입력 처리와 안내 표시가 함께 들어 있던 코드를 역할별로 나눴습니다. 단계에서는 허용 입력과 완료 조건을 관리하고, 안내 설정과 하이라이트 처리는 별도 클래스로 분리했습니다.

튜토리얼 구성
구성담당 처리
단계 실행허용 입력·완료 조건, 게임 데이터·화면 연동
안내 설정문구·캐릭터·강조 대상 설정
강조 표시위치 계산과 하이라이트 처리

공격 단계는 피해 계산과 연출이 끝나는 시점을 완료 조건으로 삼았습니다. 버튼을 누르자마자 다음 안내로 넘어가지 않도록 처리했습니다.

실기기 프로파일링과 모바일 이식

PC 기준으로 개발한 게임을 Android와 iOS로 옮기며 플랫폼별로 텍스처 압축 형식과 최대 크기를 나눴습니다. 압축 뒤 화질이 눈에 띄게 떨어진 리소스는 따로 확인해 설정을 되돌렸습니다.

불필요한 밉맵을 제거하고 모바일용 URP의 Light·Shadow 설정을 조정했습니다. 모바일에서는 카드의 ShadowCaster2D를 끄고, 게임 설정 화면의 캔버스를 분리했습니다.

Unity Profiler와 Frame Debugger로 실기기의 렌더링 비용, 메모리와 UI 배치를 확인했습니다. 아래는 개발 당시 실기기와 UI를 프로파일링한 화면입니다.

ELEMENTAIL을 삼성 SM-F731N 기기에서 측정한 Unity Profiler
삼성 SM-F731N 실기기 측정 · CPU·렌더링·메모리 확인 화면
ELEMENTAIL의 UI 배치와 캔버스별 정보를 확인한 Unity Profiler
UI Profiler · UI 배치와 캔버스별 렌더링 정보를 확인한 화면
이 작업에서 시작한 에셋 분석 도구

팀 공용 Jenkins 빌드·업로드

Jenkins에서 실행하면 Unity 빌드와 플랫폼별 업로드가 이어지도록 구성했습니다. 개발팀 전원이 사용했으며, ELEMENTAIL 모바일 빌드는 마켓에, Steam 빌드는 Steamworks에 업로드했습니다.

빌드·배포 구성
항목구현
플랫폼 설정Unity 6 빌드 프로파일로 Windows·macOS·Android·iOS 설정 관리
실행 값버전·출력 위치 전달, 모바일 빌드 번호와 Android 서명 설정 적용
업로드빌드 후 모바일 마켓·Steamworks 업로드 수행

커스텀 빌드 프로파일 사용 중 Steamworks.NET의 컴파일 반복 문제를 수정했습니다. 라이브러리 초기화 중 설정을 변경하는 작업을 지연했고, 수정한 PR은 공식 저장소에 병합됐습니다.

Steamworks.NET 수정 PR #701

추가 작업

공격 순서에 따른 시간 계산

여러 카드를 한 번에 사용하는 공격에 가속 효과를 추가했습니다. 카드 수와 공격 순서에 따라 간격이 점차 짧아지도록 만들고, 피해량 표시도 전체 공격 시간에 맞췄습니다.

일반 전투와 튜토리얼에서 같은 시간 계산을 사용하도록 했습니다. 이후 카드가 적을 때 가속이 과하게 적용되지 않도록 범위를 조정하고, 피해량을 계산하는 연출에도 별도의 속도 설정을 적용했습니다.

유물 효과 해제와 상태 변경의 실행 순서

유물을 버리는 도중에는 효과 해제가 끝난 뒤 다음 게임 동작이 이어져야 했습니다. 제거 처리를 비동기로 바꾸고, 효과 해제 → 관련 목록에서 제거 → 변경 알림 순서로 실행하도록 수정했습니다. 호출부에서도 제거 작업의 완료를 기다리도록 변경했습니다.

설정 항목을 추가할 때 재사용하는 구조

언어·비디오·사운드 설정을 추가하면서 저장과 화면 갱신에 공통으로 쓰이는 코드를 기반 클래스로 모았습니다. 설정 데이터, 화면, 둘을 연결하는 컨트롤러는 인터페이스로 나눴습니다.

새 카테고리는 각 역할의 하위 클래스를 만들고 옵션의 키와 입력 요소를 연결하도록 했습니다. 설정 값을 저장하고 변경을 알리는 코드는 함께 사용합니다.

설정 구조와 구현 코드

수상·선정

프로젝트의 팀 성과입니다.

수상

  • 2025 ALT+G 인디게임 페스티벌 2관왕 — Loop Division Winner · ALT+G's Choice Winner