# 캐릭터 리소스 규칙 v1 — 영구 SOT > **목적**: EerieVillage 플레이어 캐릭터 자산 네이밍 표준 + 모션 종류 + 상태 전환 룰 영구 SOT > **작성**: 총괄PM (2026-05-07 BT5-Dev Hero1 신규 지시 수령 시점) > **PD 지시 근거**: 2026-05-07 BT5-Dev Hero1 캐릭터 교체 지시 + 리소스 규칙 7종 직접 명세 + 이슈 1·2 결정 (공백 제거·death 8종 확장) > **적용 범위**: 플레이어 캐릭터(C1~) 전 자산 — 신규 캐릭터 추가 시 동일 표준 의무 --- ## 1. 네이밍 표준 ### 1.1 형식 ``` <캐릭터번호>_<모션><프레임>.png ``` ### 1.2 구성 요소 | 요소 | 표기 | 설명 | |------|------|------| | 캐릭터 번호 | `C1`·`C2`·`C3`... | 캐릭터 식별자. 1번부터 순차 증가 | | 구분자 | `_` (언더스코어) | 캐릭터 번호와 모션 사이 단일 구분자 | | 모션 | `` (소문자, 공백 없음) | 본 문서 §2 모션 카탈로그 8종 중 1개 | | 프레임 | `01`·`02`...·`08`... | 2자리 zero-padded 정수. 연속 프레임만큼 | | 확장자 | `.png` | 무손실 압축 + 알파 채널 지원 | ### 1.3 예시 - `C1_attack01.png` — 캐릭터 1번 공격 모션 1프레임 - `C1_combatidle04.png` — 캐릭터 1번 전투 대기 4프레임 (공백 미허용) - `C2_resurrection01.png` — 캐릭터 2번 부활 1프레임 (향후 추가) ### 1.4 금지 사항 - 공백 포함 (예: `C1_combat idle01.png`) — Unity asset 일관성 + 파싱 안정성 - 대문자 모션 (예: `C1_Attack01.png`) — 케이스 정합성 - 0 padding 누락 (예: `C1_attack1.png`) — 정렬 안정성 --- ## 2. 모션 카탈로그 (8종) ### 2.1 모션 정의 | # | 모션 키 | 한글 명 | 발동 조건 | Loop | 재생 시 다음 상태 | |---|--------|--------|---------|------|----------------| | 1 | `attack` | 공격 | 자동 발동 (공격 사이클 도래) | non-loop | 마지막 공격 시간 갱신 → 5초 카운트다운 시작 | | 2 | `combatidle` | 전투 대기 | 공격 후 정지 + 마지막 공격 < 5초 | loop | 마지막 공격 ≥ 5초 → idle 전환 | | 3 | `idle` | 일반 대기 | 정지 + 마지막 공격 ≥ 5초 (또는 attack 미발동) | loop | run·attack·hit·jump·resurrection 트리거 시 전환 | | 4 | `hit` | 피격 | 적 데미지 수신 | non-loop · **인터럽트 보호** | 종료 후 직전 상태 복귀 (idle/combatidle/run/jump) | | 5 | `jump` | 점프 | 점프 입력 + 공중 상태 | static (1 frame) | 착지 시 idle 또는 run 전환 | | 6 | `resurrection` | 부활 | death 종료 후 부활 게임 룰 충족 시 | non-loop | 종료 후 idle 전환 | | 7 | `run` | 이동 | 이동 입력 + 지면 상태 | loop | 정지 시 마지막 공격 시간 기준 idle 또는 combatidle 전환 | | 8 | `death` | 사망 | HP 0 도달 | non-loop | resurrection 가능 시 대기·불가 시 게임 오버 | ### 2.2 모션 매핑 (Hero1 — C1) | 모션 | 프레임 수 | 파일명 범위 | |------|---------|-----------| | attack | 8 | `C1_attack01~08.png` | | combatidle | 4 | `C1_combatidle01~04.png` (rename 후) | | death | 2 | `C1_death01~02.png` | | hit | 2 | `C1_hit01~02.png` | | idle | 4 | `C1_idle01~04.png` | | jump | 1 | `C1_jump01.png` | | resurrection | 8 | `C1_resurrection01~08.png` | | run | 8 | `C1_run01~08.png` | | **합계** | **37** | — | --- ## 3. 상태 전환 룰 ### 3.1 핵심 메커니즘 #### 3.1.1 idle ⇄ combatidle 5초 타이머 ``` [run 또는 attack 종료] → 마지막 공격 시간 t_attack 갱신 [정지 상태 진입] if (현재시각 - t_attack) < 5초: → combatidle (loop) else: → idle (loop) [combatidle loop 중 (현재시각 - t_attack) ≥ 5초 도달] → idle (loop) 전환 ``` #### 3.1.2 hit 인터럽트 보호 (PD 명세 핵심) ``` [hit 발동 중 추가 데미지 수신] if hit.isPlaying == true: → 현 hit 애니메이션 끝까지 재생 (재시작 X) else: → hit 애니메이션 재생 시작 ``` **Unity 구현 영역**: Animator State에서 `m_HasExitTime: 1` + `m_ExitTime: 1` 설정으로 자기 자신으로의 재진입 차단. 또는 Animator Behaviour `StateMachineBehaviour.OnStateEnter`에서 `IsInTransition` 체크. **Health.cs 영역**: 데미지 수신 시 `hit` Trigger 호출 전 `currentState == "hit"` 검증 후 진입. #### 3.1.3 attack 자동 발동 사이클 BT7-Plan 확정안 = VS 순수형 자동 발동 (공격 버튼 제거). `PlayerAttackTicker.cs` 주기 타이머가 attack Trigger 호출. #### 3.1.4 death → resurrection 시퀀스 ``` [HP 0 도달] → death 애니메이션 재생 (non-loop) [death 애니메이션 종료] → 부활 룰 검증 (게임 룰 영역 — BT7-Plan 또는 별건) if 부활 가능: → resurrection 애니메이션 재생 (non-loop) → idle 전환 else: → 게임 오버 (death 마지막 프레임 정지) ``` #### 3.1.5 jump 단일 프레임 정합 ``` [점프 입력] → jump 자세 표시 (1 frame static) [공중 → 지면 착지] → 이동 입력 유무에 따라 idle/run 전환 ``` 낙하·착지 별도 모션 없음. 점프 자세 1프레임 유지. ### 3.2 상태 전환 다이어그램 (요약) ``` [run] ↑↓ (이동 입력) [idle] ⇄ (5초 타이머) ⇄ [combatidle] ↑ ↑ └── (resurrection) ←────┘ ↑ [death] ↑ (HP=0) 전 상태에서 발동 가능: - [hit] (인터럽트 보호 — 재진입 차단) - [attack] (자동 발동 사이클) - [jump] (점프 입력 시) ``` --- ## 4. Unity 자산 구조 표준 ### 4.1 폴더 구조 ``` Assets/Character/ ├── Sprites/ │ ├── Hero1/ ← C1 (현 캐릭터) │ │ └── C1_*.png + .meta │ └── _archive/ ← 폐기 자산 보존 (롤백 안전망) │ └── PlayerTestGirl.png 등 9종 ├── Animations/ │ ├── PlayerIdle.anim ← idle (Hero1 sprite 0~3 loop) │ ├── PlayerRun.anim ← run (Hero1 sprite 0~7 loop) │ ├── PlayerAttack.anim ← attack (Hero1 sprite 0~7 non-loop) │ ├── PlayerCombatIdle.anim ← combatidle (Hero1 sprite 0~3 loop) [신설] │ ├── PlayerHit.anim ← hit (Hero1 sprite 0~1 non-loop) [신설] │ ├── PlayerJump.anim ← jump (Hero1 sprite 0 static) [신설] │ ├── PlayerResurrection.anim ← resurrection (Hero1 sprite 0~7 non-loop) [신설] │ ├── PlayerDeath.anim ← death (Hero1 sprite 0~1 non-loop) [신설] │ └── Player.controller ← Animator Controller (전면 재설계) └── ... ``` ### 4.2 Animator Controller 파라미터 | 파라미터 | 타입 | 용도 | |---------|------|------| | `Speed` | Float | 이동 속도 (idle ⇄ run 전환) | | `Grounded` | Bool | 지면 상태 (jump 진입 차단) | | `attack` | Trigger | 공격 발동 | | `hit` | Trigger | 피격 발동 (인터럽트 보호 — Animator Behaviour 영역) | | `combatidle` | Bool | 5초 타이머 영역 (true = combatidle, false = idle) | | `dead` | Bool | 사망 상태 (death State 진입) | | `resurrect` | Trigger | 부활 발동 (resurrection State 진입) | | `jump` | Trigger | 점프 발동 | --- ## 5. 구현 영역 위임 ### 5.1 본 SOT 적용 의무 영역 - 개발팀: Animator Controller 재설계 · Health.cs 부활 + hit 인터럽트 보호 · PlayerAttackTicker.cs 주기 타이머 · combatidle 5초 타이머 영역 (신규 컴포넌트 또는 PlayerController.cs 확장) - 기획팀: 부활 게임 룰 (BT7-Plan 또는 별건 영역) · 모션 추가 발주 결정 (Land·Spawn·Victory 미사용 확정 = PD 결정 5) ### 5.2 본 SOT 갱신 영역 - 신규 캐릭터 추가 시 (C2·C3...) §2.2 모션 매핑 표 갱신 - 모션 추가·폐기 시 PD 결정 + 본 SOT 개정 (v1 → v1.1 등) - 상태 전환 룰 변경 시 PD 결정 + §3 갱신 --- ## 6. 관련 규칙·자산 - **PD 지시 근거**: 2026-05-07 BT5-Dev Hero1 신규 지시 + 이슈 1·2·3·4·5 A안 일괄 채택 - **C32 결정·근거·기각안**: 본 SOT 신설 자체가 PD 명세 직접 적용 — 별도 기각안 없음. 이슈 5건 기각안은 §7 참조 - **C37 규칙 문서 관리**: 영구 SOT (단일 위치 — 중복 금지) - **C39 작업 전 실측 의무**: Hero1 폴더 37 PNG 실측 완료 (2026-05-07 본 PM) - **연관 SOT**: - `프로젝트/EerieVillage/기획/04_전투_기본_스펙.md` (i-frame 0.6s 등 전투 룰) - `프로젝트/EerieVillage/개발/spec/스킬_시스템_설계_v1.md` (BT12-Dev 보류 영역) - `프로젝트/EerieVillage/개발/05_PlayerTestGirl_아틀라스_적용.md` (폐기 영역 — 본 SOT가 대체) --- ## 7. 기각안 (이슈 5건 PD 결정 후 기각된 옵션) ### 7.1 이슈 1 — 파일명 공백 - **기각안 B** — PD 명세 정정 (공백 허용) → Unity asset 공백 미허용 일반 관행 + 파싱 안정성 저해. PD 결정 A 채택 (rename) ### 7.2 이슈 2 — death 자산 처리 - **기각안 B** — death 폐기 → resurrection만 사용 시 사망→부활 시퀀스 불완전. PD 결정 A 채택 (8종 확장) - **기각안 C** — death = resurrection 첫 2프레임 흡수 → 자산 의도 분리 위배 (death = 사망, resurrection = 부활) ### 7.3 이슈 3 — jump 1프레임 - **기각안 B** — 추가 프레임 발주 (점프 상승·정점·낙하 분리) → 현 자산 정합 + 간소함 우선. PD 결정 A 채택 ### 7.4 이슈 4 — 기존 Player*.png 9종 - **기각안 B** — 즉시 삭제 → 롤백 안전망 상실. PD 결정 A 채택 (`_archive/` 백업) - **기각안 C** — Hero1 미커버 영역(Land·Spawn·Victory)만 보존 → 부분 보존 일관성 저해 ### 7.5 이슈 5 — Land·Spawn·Victory 미사용 - **기각안 B** — resurrection 자산 일부 재활용 (Spawn 매핑) → 의미 혼동 - **기각안 C** — PD 추가 자산 발주 → 현 시점 우선순위 외 --- ## 8. 변경 이력 | 일자 | 버전 | 내용 | |------|------|------| | 2026-05-07 | v1 | 신설 — BT5-Dev Hero1 신규 지시 수령 + 이슈 5건 PD 결정 일괄 채택 + 모션 8종 영구 SOT |