▣ 이전 Animation 과정에서는
Enemy에게
Idle
Walk
Attack
Death
Animation을 적용했습니다.
이번에는
총을 맞았을 때
Hit Reaction
을 추가하고
Health가 0이 되면
Death Animation이
실제로 실행되도록 만들겠습니다.
1. Hit Animation 준비
VARCO에서
Hit Reaction Animation이 있다면
Unity로 가져옵니다.
Animation 이름은
예를 들어
Enemy_Hit
로 하겠습니다.
Humanoid Rig과
Avatar 설정은
앞의 Enemy Animation 과정과
같이 설정합니다.
2. Animator에 Hit State 추가
AC_Enemy
Animator Controller를 엽니다.
Enemy_Hit Clip을
Animator로 Drag합니다.
State 이름은
Hit
로 합니다.
3. Hit Trigger 만들기
Parameters에서
새 Trigger를 만듭니다.
Hit
→ Trigger
입니다.
4. Any State → Hit
다음 Transition을 만듭니다.
Any State
→ Hit
Condition은
Hit
Trigger입니다.
Has Exit Time
→ OFF
로 설정합니다.
5. Hit → Idle
Hit Animation이 끝나면
기본 상태로 돌아갑니다.
Hit
→ Idle
Transition을 만들고
Has Exit Time
→ ON
으로 설정합니다.
6. Death는 기존 구조 사용
앞에서 이미
Any State
→ Death
Condition
Dead = true
를 만들었습니다.
따라서 Script에서
Dead만 true로 만들면 됩니다.
7. EnemyAnimationController 수정
기존 Script에
Hit Method를 추가합니다.
public void PlayHit()
{
animator.SetTrigger(
"Hit"
);
}
기존에는
PlayAttack()
PlayDeath()
가 있었습니다.
이제
PlayHit()
PlayDeath()
도 사용할 수 있습니다.
8. FPSWeapon에서 Animation 찾기
Enemy를 맞혔다면
Health와 함께
EnemyAnimationController도
찾습니다.
EnemyAnimationController
enemyAnimation =
hit.collider
.GetComponentInParent<
EnemyAnimationController
>();
9. Damage 결과 확인
Health의
TakeDamage는
이번 Damage로 죽었다면
true를 반환하도록 만들었습니다.
bool died =
health.TakeDamage(
damage
);
10. 살아 있다면 Hit
if (
!died
)
{
enemyAnimation.PlayHit();
}
를 실행합니다.
11. 죽었다면 Death
else
{
enemyAnimation.PlayDeath();
}
를 실행합니다.
12. 안전하게 Null 확인
if (
enemyAnimation != null
)
{
if (died)
{
enemyAnimation.PlayDeath();
}
else
{
enemyAnimation.PlayHit();
}
}
13. Damage 처리 전체
Health health =
hit.collider
.GetComponentInParent<Health>();
if (
health != null &&
!health.IsDead
)
{
bool died =
health.TakeDamage(
damage
);
EnemyAnimationController
enemyAnimation =
hit.collider
.GetComponentInParent<
EnemyAnimationController
>();
if (
enemyAnimation != null
)
{
if (died)
{
enemyAnimation.PlayDeath();
}
else
{
enemyAnimation.PlayHit();
}
}
}
14. Enemy가 맞으면
예를 들어
HP가
100일 때
Damage 25를 받으면
100
↓
75
↓
Hit Animation
입니다.
15. 마지막 총알
HP가
25일 때
25 Damage를 받으면
25
↓
0
↓
TakeDamage = true
↓
Death Animation
입니다.
16. 죽은 Enemy는 다시 Hit하지 않는다
Health 안에서
if (isDead)
{
return false;
}
처리를 했습니다.
Weapon 쪽에서도
!health.IsDead
를 확인했습니다.
그래서 죽은 Enemy에게
계속 Hit Reaction이
실행되지 않습니다.
17. Death 이후 이동 정지
앞으로 Enemy AI를
연결했다면
Death 시점에는
Enemy Movement도
멈춰야 합니다.
예를 들어
Death
↓
AI 비활성화
↓
이동 정지
↓
공격 정지
가 필요합니다.
이 부분은
Enemy AI Script를 만들 때
연결할 수 있습니다.
마무리
이번 글에서는
Enemy가 Damage를 받을 때
상태에 따라
Animation을 다르게 실행했습니다.
Damage 받음
↓
HP > 0
↓
Hit Reaction
그리고
Damage 받음
↓
HP = 0
↓
Death
입니다.
기존
EnemyAnimationController에
PlayHit()
을 추가하고
Health의
TakeDamage 결과를 이용해
Hit와 Death를
구분했습니다.
이제 Enemy가
단순히 숫자만 감소하는 것이 아니라
Player의 공격에
눈에 보이게 반응합니다.
'[ UNITY ] > - UNITY6 AI FPS 프로젝트' 카테고리의 다른 글
| Unity6 FPS 총격과 전투 Sound 적용하기 (0) | 2026.10.01 |
|---|---|
| Unity6 FPS 총구 Flash와 Hit Effect 만들기 (0) | 2026.10.01 |
| Unity6 FPS Crosshair와 총기 Recoil 만들기 (0) | 2026.10.01 |
| Unity6 FPS 탄약과 Reload 시스템 만들기 (0) | 2026.10.01 |
| Unity6 FPS Weapon으로 Enemy에게 Damage 주기 (0) | 2026.10.01 |
댓글