feat: 보스 점프 스킬 - 타겟 위치로 이동 구현

- SkillData에 jumpToTarget, animationSpeed 필드 추가
- 점프 중 XZ를 타겟 위치로 lerp, 착지 시 스냅
- endClip 재생 중 점프 이동 비활성화 (IsInEndAnimation)
- 보스/플레이어 겹침 시 플레이어를 밀어내는 방식으로 분리 처리
- 점프준비/점프/착지 3단계 스킬 & 패턴 구성
- UsePatternAction에 Target 블랙보드 변수 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-18 18:05:41 +09:00
parent a9aa3a3091
commit 290d59e665
15 changed files with 711 additions and 391 deletions

View File

@@ -42,6 +42,7 @@ namespace Colosseum.Skills
public bool IsExecutingSkill => currentSkill != null && !skillEndRequested;
public bool IsPlayingAnimation => currentSkill != null;
public bool IsInEndAnimation => waitingForEndAnimation;
public bool UsesRootMotion => currentSkill != null && currentSkill.UseRootMotion;
public bool IgnoreRootMotionY => currentSkill != null && currentSkill.IgnoreRootMotionY;
public SkillData CurrentSkill => currentSkill;
@@ -143,6 +144,7 @@ namespace Colosseum.Skills
// 스킬 애니메이션 재생
if (skill.SkillClip != null && animator != null)
{
animator.speed = skill.AnimationSpeed;
PlaySkillClip(skill.SkillClip);
}
@@ -212,6 +214,7 @@ namespace Colosseum.Skills
if (animator != null && baseController != null)
{
animator.runtimeAnimatorController = baseController;
animator.speed = 1f;
}
// 클라이언트에 복원 동기화

View File

@@ -20,12 +20,16 @@ namespace Colosseum.Skills
[SerializeField] private AnimationClip skillClip;
[Tooltip("종료 애니메이션 (선택)")]
[SerializeField] private AnimationClip endClip;
[Tooltip("애니메이션 재생 속도 (1 = 기본, 2 = 2배속)")]
[Min(0.1f)] [SerializeField] private float animationSpeed = 1f;
[Header("루트 모션")]
[Tooltip("애니메이션의 이동/회전 데이터를 캐릭터에 적용")]
[SerializeField] private bool useRootMotion = false;
[Tooltip("루트 모션 적용 시 Y축 이동 무시 (중력과 충돌)")]
[SerializeField] private bool ignoreRootMotionY = true;
[Tooltip("스킬 시전 시 대상 위치로 점프 이동 (UseRootMotion + IgnoreRootMotionY=false 필요)")]
[SerializeField] private bool jumpToTarget = false;
[Header("쿨타임 & 비용")]
[Min(0f)] [SerializeField] private float cooldown = 1f;
@@ -41,10 +45,12 @@ namespace Colosseum.Skills
public Sprite Icon => icon;
public AnimationClip SkillClip => skillClip;
public AnimationClip EndClip => endClip;
public float AnimationSpeed => animationSpeed;
public float Cooldown => cooldown;
public float ManaCost => manaCost;
public bool UseRootMotion => useRootMotion;
public bool IgnoreRootMotionY => ignoreRootMotionY;
public bool JumpToTarget => jumpToTarget;
public IReadOnlyList<SkillEffect> Effects => effects;
}
}