74 lines
3.3 KiB
C#
74 lines
3.3 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;// 전진 동작 시간
|
|
}
|
|
|
|
// 공격 방향. 방향키 입력에 따라 같은 노드라도 다른 액션을 낼 수 있다.
|
|
// Neutral = 방향키 없음(제자리) / Up = 위 입력 / Down = 아래 입력
|
|
// Forward = 좌우 입력 — 누른 쪽으로 페이싱을 돌린 뒤 공격하므로 항상 Forward.
|
|
// Back = 현재 입력 방식(좌우=전환)에서는 발생하지 않음. 직렬화 호환 위해 값 유지.
|
|
// 대각선 입력은 위/아래를 우선한다 (PlayerController.GetAttackDirection 참고).
|
|
public enum AttackDirection
|
|
{
|
|
Neutral,
|
|
Forward,
|
|
Back,
|
|
Up,
|
|
Down,
|
|
}
|
|
|
|
// 한 노드의 방향별 액션 변형. ComboNode.DirectionalVariants 배열의 항목.
|
|
// 예: 같은 펀치 노드라도 Forward면 전진 펀치, Up이면 어퍼컷.
|
|
[Serializable]
|
|
public class DirectionalAction
|
|
{
|
|
public AttackDirection Direction; // 이 변형이 발동할 입력 방향
|
|
public ActionData Action; // 해당 방향일 때 수행할 액션
|
|
}
|
|
|
|
// 콤보 트리의 노드. .asset 파일로 관리.
|
|
[CreateAssetMenu(fileName = "ComboNode", menuName = "Combat/ComboNode")]
|
|
public class ComboNode : ScriptableObject
|
|
{
|
|
public string NodeName; // Inspector 식별용
|
|
[FormerlySerializedAs("Attack")]
|
|
public ActionData Action; // 기본(Neutral) 액션 — 방향키 입력이 없을 때 수행
|
|
// 방향키를 누른 채 공격하면 이 목록에서 일치하는 방향의 액션으로 대체된다.
|
|
// 비어 있거나 일치하는 방향이 없으면 Action(기본)으로 폴백.
|
|
public DirectionalAction[] DirectionalVariants;
|
|
public float ComboWindow = 0.8f; // 이 노드에서 다음 입력 받을 수 있는 시간
|
|
public ComboTransition[] Transitions; // 다음 노드들 (입력별로 분기)
|
|
}
|