Files
tiny_tackle_heroes/Assets/_Project/Scripts/Constants/EnemyConstants.cs
T

61 lines
4.4 KiB
C#

using BumpCombat.Enemies;
using UnityEngine;
namespace BumpCombat.Constants
{
[CreateAssetMenu(menuName = "BumpCombat/Constants/Enemies")]
public sealed class EnemyConstants : ScriptableObject
{
[Header("행동 판정")]
[Tooltip("원뿔 공격 판정의 방향 내적 기준"), Range(0f, 1f)] public float ConeDirectionThreshold = 0.5f;
[Tooltip("원형 범위 공격의 최소 경고시간 (초)"), Min(0f)] public float MinimumTargetCircleWarningDuration = 1.8f;
[Tooltip("적 분리 방향을 다시 계산하는 간격 (초)"), Min(0f)] public float SeparationRefreshInterval = 0.1f;
[Min(0f)] public float DefaultSeparationRadius = 0.55f;
[Min(0f)] public float DefaultSeparationStrength = 0.6f;
[Tooltip("Animator에 사망 클립이 없을 때의 대체 사망시간 (초)"), Min(0f)] public float DefaultDeathDuration = 0.5f;
[Tooltip("사망 클립 종료 뒤 오브젝트를 정리하기 전 여유시간 (초)"), Min(0f)] public float DeathRemovalPadding = 0.05f;
[Tooltip("몸 공격 상태에서 적이 전진하는 속도 (유닛/초)"), Min(0f)] public float BodyContactSpeed = 3f;
[Tooltip("적 넉백 속도가 줄어드는 비율 (유닛/초)"), Min(0f)] public float KnockbackDeceleration = 8f;
[Tooltip("군중형이 플레이어를 둘러싸며 접근하는 기준점 개수"), Min(1)] public int CrowdApproachSlotCount = 24;
[Tooltip("군중형이 접근 기준점에 배치되는 동심원 개수"), Min(1)] public int CrowdApproachRingCount = 3;
[Tooltip("군중형 접근 기준점의 가장 안쪽 반경 (유닛)"), Min(0f)] public float CrowdApproachBaseRadius = 0.75f;
[Tooltip("군중형 접근 기준점 동심원 간 간격 (유닛)"), Min(0f)] public float CrowdApproachRingSpacing = 0.15f;
[Min(0f)] public float SummonedEnemyNoAnimationLockDuration = 0.15f;
[Header("적과 플레이어 사이 거리")]
[Tooltip("일반 적이 주는 플레이어 넉백 거리 (유닛)"), Min(0f)] public float NormalPlayerKnockbackDistance = 0.75f;
[Tooltip("대형 무기 적이 주는 플레이어 넉백 거리 (유닛)"), Min(0f)] public float HeavyPlayerKnockbackDistance = 1.1f;
[Tooltip("원거리 적 공격 허용 범위 안쪽 여백 (유닛)"), Min(0f)] public float RangedAttackArenaInset = 0.75f;
[Tooltip("화면 안쪽에서 원거리 공격을 시작하기 위한 여백 (유닛)"), Min(0f)] public float RangedAttackCameraInset = 0.5f;
[Tooltip("원거리 적 접근 목표의 전장 가장자리 여백 (유닛)"), Min(0f)] public float RangedApproachArenaInset = 0.8f;
[Tooltip("원거리 적 접근 목표의 화면 여백 (유닛)"), Min(0f)] public float RangedApproachCameraInset = 0.55f;
[Header("엘리트 이상 그로기")]
[Min(0f)] public float EliteGroggyDuration = 5f;
[Min(0f)] public float MidBossGroggyDuration = 7f;
[Min(0f)] public float FinalBossGroggyDuration = 10f;
[Tooltip("엘리트 실드를 깰 때 필요한 일치색 적중 횟수"), Min(1)] public int EliteGroggyRequiredMatchingHits = 1;
[Tooltip("중간보스 실드를 깰 때 필요한 일치색 적중 횟수"), Min(1)] public int MidBossGroggyRequiredMatchingHits = 2;
[Tooltip("최종보스 실드를 깰 때 필요한 일치색 적중 횟수"), Min(1)] public int FinalBossGroggyRequiredMatchingHits = 4;
[Header("네크로맨서")]
[Min(0.5f)] public float GeneralSummonCooldown = 8f;
[Min(0.5f)] public float CrowdSummonCooldown = 12f;
[Min(0.5f)] public float MultiAoeCooldown = 4f;
[Tooltip("소환 예고와 소환 중 행동 잠금시간 (초)"), Min(0.5f)] public float SummonVisualDuration = 0.875f;
[Range(0.01f, 0.2f)] public float DesperationHealthFraction = 0.05f;
[Header("공격 토큰")]
[Min(1)] public int MaxMeleeAttackers = 4;
[Min(1)] public int MaxRangedAttackers = 3;
[Min(1)] public int MaxEarlyCrowdAttackers = 1;
[Min(1)] public int MaxLateCrowdAttackers = 2;
[Min(0f)] public float CrowdAttackExpansionTime = 180f;
[Min(0f)] public float CrowdAttackGrantInterval = 0.9f;
[Header("적 정의")]
[Tooltip("각 적의 능력치·공격 패턴 정의. 적 프리팹은 여기에 있는 에셋을 참조합니다.")]
public EnemyDefinition[] Definitions = System.Array.Empty<EnemyDefinition>();
}
}