BurningTimesAi/프로젝트/EerieVillage/개발/spec/캐릭터_리소스_규칙_v1.md

10 KiB

캐릭터 리소스 규칙 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번부터 순차 증가
구분자 _ (언더스코어) 캐릭터 번호와 모션 사이 단일 구분자
모션 <motion> (소문자, 공백 없음) 본 문서 §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