Files
DS-Combat_analy/분석참고자료/DS-전투시스템-데이터수집.md
2025-11-05 19:23:33 +09:00

6.0 KiB

DS-전투시스템-데이터수집

분석 대상 스토커 11명

  • Hilda (힐다)
  • Urud (우르드)
  • Nave (네이브)
  • Baran (바란)
  • Rio (리오)
  • Clad (클라드)
  • Rene (레네)
  • Sinobu (시노부)
  • Lian (리옌)
  • Cazimord (카지모르드)
  • Blackmaria (블랙마리아)

1. Asset Export to JSON 소개

언리얼 엔진 에셋은 기본적으로 바이너리 형식으로 저장되어 LLM이나 외부 분석 도구가 직접 접근할 수 없습니다. 이를 해결하기 위해 Asset Export to JSON 에디터 확장 기능을 개발하였습니다.

참고 문서: DS-전투분석_저장소\분석참고자료\DS-Asset_Export_to_JSON.md

1.1 주요 내용

  • 지원 에셋 타입: DataTable, Blueprint, AnimMontage, CurveTable
  • 프로젝트 설정 통합: 편집 → 프로젝트 설정 → 플러그인 → Asset Export to JSON
  • 타임스탬프 익스포트: 익스포트 히스토리 보관을 위한 타임스탬프 폴더 생성
  • 완전한 데이터 추출:
    • DataTable: 모든 행/열 데이터
    • Blueprint: 변수, 함수, 컴포넌트, 이벤트 그래프 노드 구조
    • AnimMontage: 섹션, 노티파이, 커스텀 프로퍼티, 슬롯 애니메이션
    • CurveTable: RichCurves 및 SimpleCurves 키 데이터

1.2 JSON 참조 규칙

중요: JSON 파일은 에디터에서 익스포트한 결과물로, 소스 코드처럼 고정된 라인 번호가 없습니다.

올바른 참조 방법

Asset 이름으로 참조

DT_CharacterStat 어셋의 "hilda" 행
AM_PC_Hilda_B_Skill_SwordStrike 몽타주
GA_Skill_Hilda_SwordStrike_C 블루프린트

라인 번호로 참조하지 않음

DataTable.json:358143-358192  (X)

JSON 구조 예시

DataTable.json:

{
  "AssetName": "DT_CharacterStat",
  "RowStructure": "CharacterStatData",
  "Rows": [
    {
      "RowName": "hilda",
      "Data": {
        "name": "힐다",
        "defaultSkills": ["SK100201", "SK100202", "SK100204"],
        "subSkill": "SK100101",
        "ultimateSkill": "SK100301"
      }
    }
  ]
}

AnimMontage.json:

{
  "AssetName": "AM_PC_Hilda_B_Skill_SwordStrike",
  "SequenceLength": 1.8,
  "AnimNotifies": [
    {
      "NotifyStateClass": "ANS_SkillCancel_C",
      "TriggerTime": 1.3,
      "Duration": 0.5
    }
  ]
}

2. JSON 전투 데이터 수집

익스포트된 JSON 데이터에서 어떤 정보를 수집하는지 설명.

2.1 DataTable 어셋

언리얼의 데이터 테이블 어셋이 DataTable.json 형태로 익스포트 되어 있으며 주로 스토커의 밸런스 데이터가 있다.

  • DT_CharacterStat 필드 정보
    • 기본 스탯 값: Str, Dex, Int, Con, Wis, HP, MP, Mana Regen, Stamina, criticalPer // 소수점 2째자리 까지만 수집
    • 전체 스탯 합계는 75로써 모든 스토커가 동일하다
    • 스킬 ID 목록
      • 기본 스킬 ID 정보: defaultSkills
      • 보조 스킬 ID 정보: subSkill
      • 궁극기 스킬 ID 정보: ultimateSkill
      • 장착 가능 장비 타입: equipableTypes
      • 궁극기 발동 필요 포인트: ultimatePoint
  • DT_CharacterAbility 필드 정보
    • 기본 공격(평타) 몽타주 정보: attackMontageMap > {무기정보} > montageArray
  • DT_Skill 필드 정보
    • 스킬 ID: RowName
    • 스킬 이름: name
    • 스킬 설명: desc // {} 안의 정보는 변수
    • 스킬 설명에 포함된 변수 값: descValues // 유저에게 텍스트로 전달하기 위한 정보일 뿐 실제 데이터 값은 아니다
    • 스킬의 공격 타입: skillAttackType
    • 스킬의 원소 타입: skillElementType
    • 스킬의 피해 배율: skillDamageRate
    • 스킬 시전 중 걸음 속도 배율: walkSpeedMultiplier // 0이면 원래 속도로 걸어감
    • 스킬 시전 시간: castingTime // 0이면 시전시간 없음
    • 스킬의 마나 비용: manaCost
    • 스킬 재사용 대기시간(초): coolTime
    • 스킬에 지정된 몽타주 정보: useMontages
      • 지정된 몽타주가 2개 이상일 경우 제외할 몽타주: ready, Equip, Equipment, _E, // 몽타주 이름에 해당 키워드가 있다면 수집, 분석에서 제외
    • 스킬 스택 여부: bIsStackable
    • 스킬의 최대 스택 수: maxStackCount // 0이면 스택 기능 없음
    • 스킬의 궁극기 여부: bIsUltimate
    • 스킬 시전(캐스팅포함) 결과에 따른 BP 정보: abilityClass
    • 스킬의 캐스팅 결과에 따른 BP: activeAbilityClass // 즉, 캐스팅 로직을 탄 스킬은 이 BP까지 실행 된다
    • 스킬 효과 유지 시간(초): activeDuration // 발동 효과가 특정 시간 동안 유지되는 경우에 사용
    • 스킬에 적용할 GameplayEffect 목록: gameplayEffectSet

2.2 AnimMontage 어셋

언리얼의 애니메이션 몽타주 어셋이 AnimMontage.json 형태로 익스포트 되어 있으며, 스토커의 실질적인 모션 타이밍 데이터가 있다.

  • 기본 공격 몽타주: DT_CharacterAbility 데이터 테이블에서 지정 된다.
  • 스킬 공격 몽타주: DT_Skill 데이터 테이블에서 지정 된다.

2.2.1 공통 수집 필드

  • 어셋 이름: AssetName
  • 시퀀스 길이(초): SequenceLength
  • 재생 속도: RateScale
  • 섹션 목록: Sections
    • 섹션 이름: SectionName
    • 섹션 시작 시간: StartTime
  • 주요 AnimNotifies 정보: 모든 AnimNotifies를 수집하는 것이 아니라 지정한 AnimNotifies에 대해서만 정보를 수집 한다.

2.2.2 수집 할 주요 AnimNotifies 및 CustomProperties

해당 AnimNotifies가 AnimMontage 내에 있을 경우 정보를 수집한다.

  • ANS_AttackState_C: 공격 상태 및 피해 배율
    • TriggerTime: 시작 시간 (초)
    • Duration: 지속 시간 (초)
    • AddNormalAttackPer: 피해 배율 증감 (%)
  • AnimNotifyState_AttackWithEquip: 히트 판정 타이밍
    • TriggerTime: 시작 시간 (초)
    • Duration: 지속 시간 (초)
    • AttackTag: 공격 타입 태그
  • ANS_SkillCancel_C: 스킬 캔슬 윈도우
    • TriggerTime: 시작 시간 (초)
    • Duration: 지속 시간 (초)
  • AN_Trigger_Projectile_Shot_C: 발사체 발사
    • TriggerTime: 시작 시간 (초)
    • EventTag