feat: 드로그 페이즈별 아이들 모션 전환 추가
- EnemyAnimationController가 보스 런타임 페이즈를 Animator Phase 파라미터로 동기화\n- AC_Boss_Drog에 1/2페이즈 공용 Idle과 3페이즈 전용 Idle 상태 및 전이 추가\n- 정지 중 페이즈 변경과 이동/피격 후 복귀가 현재 페이즈 Idle로 이어지도록 정리
This commit is contained in:
@@ -11,6 +11,7 @@ namespace Colosseum.Enemy
|
||||
{
|
||||
[Header("Animation Parameters")]
|
||||
[SerializeField] private string speedParam = "Speed";
|
||||
[SerializeField] private string phaseParam = "Phase";
|
||||
[SerializeField] private string attackTriggerParam = "Attack";
|
||||
[SerializeField] private string skillTriggerParam = "Skill";
|
||||
|
||||
@@ -21,6 +22,7 @@ namespace Colosseum.Enemy
|
||||
private Animator animator;
|
||||
private UnityEngine.AI.NavMeshAgent navMeshAgent;
|
||||
private EnemyBase enemyBase;
|
||||
private BossBehaviorRuntimeState runtimeState;
|
||||
private float currentSpeed;
|
||||
private float speedVelocity;
|
||||
|
||||
@@ -29,6 +31,7 @@ namespace Colosseum.Enemy
|
||||
animator = GetComponent<Animator>();
|
||||
navMeshAgent = GetComponent<UnityEngine.AI.NavMeshAgent>();
|
||||
enemyBase = GetComponent<EnemyBase>();
|
||||
runtimeState = GetComponent<BossBehaviorRuntimeState>();
|
||||
}
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
@@ -70,6 +73,12 @@ namespace Colosseum.Enemy
|
||||
|
||||
// 애니메이터 파라미터 설정
|
||||
animator.SetFloat(speedParam, currentSpeed);
|
||||
|
||||
if (HasAnimatorParameter(animator, phaseParam, AnimatorControllerParameterType.Int))
|
||||
{
|
||||
int currentPhase = runtimeState != null ? runtimeState.CurrentPatternPhase : 1;
|
||||
animator.SetInteger(phaseParam, Mathf.Max(1, currentPhase));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -122,5 +131,21 @@ namespace Colosseum.Enemy
|
||||
/// 현재 애니메이션 속도
|
||||
/// </summary>
|
||||
public float CurrentSpeed => currentSpeed;
|
||||
|
||||
private static bool HasAnimatorParameter(Animator targetAnimator, string parameterName, AnimatorControllerParameterType parameterType)
|
||||
{
|
||||
if (targetAnimator == null || string.IsNullOrEmpty(parameterName))
|
||||
return false;
|
||||
|
||||
AnimatorControllerParameter[] parameters = targetAnimator.parameters;
|
||||
for (int i = 0; i < parameters.Length; i++)
|
||||
{
|
||||
AnimatorControllerParameter parameter = parameters[i];
|
||||
if (parameter.type == parameterType && parameter.name == parameterName)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user