Files
WhiteMan_Unity2D/Assets/02_Scripts/Combat/ComboNode.cs
2026-05-19 10:51:56 +09:00

48 lines
2.0 KiB
C#

using System;
using UnityEngine;
using UnityEngine.Serialization;
// ============================================================================
// ComboNode + ComboTransition
// ----------------------------------------------------------------------------
// 콤보 트리 구조를 표현하는 ScriptableObject + Serializable 클래스.
// 각 노드는 "어떤 액션을 수행할지" + "다음에 어떤 입력으로 어디로 갈지"를 정의.
//
// 예시 트리:
// Punch_Root → [Punch] → Punch_Hit2 → [Punch] → Punch_Finisher
// → [Kick] → Kick_Spin
// → [Grab] → Grab_Smash
//
// 각 트랜지션마다 ForwardStep을 다르게 줘서 콤보 흐름에 맞춰 전진 거리 조절.
// ============================================================================
// 콤보 입력 타입. PlayerController.HandleComboInput에 매핑됨.
public enum ComboInputType
{
Punch,
Kick,
Grab,
Motion // 모션 액션 트리거 (현재는 사용 안 함, 확장 여지로 남겨둠)
}
// 한 노드에서 다음 노드로 가는 "간선" 정보.
[Serializable]
public class ComboTransition
{
public ComboInputType Trigger; // 어떤 입력이 들어와야 이 transition을 탈지
public ComboNode Next; // 이동할 다음 노드
public float ForwardStep = 0f; // 이 transition을 탈 때 전진할 거리 (적과 거리 좁히기)
public float ForwardStepDuration = 0.1f;// 전진 동작 시간
}
// 콤보 트리의 노드. .asset 파일로 관리.
[CreateAssetMenu(fileName = "ComboNode", menuName = "Combat/ComboNode")]
public class ComboNode : ScriptableObject
{
public string NodeName; // Inspector 식별용
[FormerlySerializedAs("Attack")]
public ActionData Action; // 이 노드에 진입했을 때 수행할 액션
public float ComboWindow = 0.8f; // 이 노드에서 다음 입력 받을 수 있는 시간
public ComboTransition[] Transitions; // 다음 노드들 (입력별로 분기)
}