UE4 Chapter 5-3. 보스 AI : 보스 스킬 애니메이션 작업
카테고리: UE4 Lesson 1
태그: UE4 Game Engine
인프런에 있는 황대희님의 언리얼 엔진4 3D 횡스크롤 게임 만들기 강의를 듣고 정리한 필기입니다. 😀
언리얼 엔진 공식 문서 https://docs.unrealengine.com/ko/index.html
보스 스킬 애니메이션
- 스킬 발동 조건
- 보스가 플레이어를 쫓다가 사정 거리내에 들어왔을 때를 기점으로 10초가 지나면 스킬 발동
- 상태가
AttackChar
가 되기 직전부터 스킬 발동 타임을 카운트.SkillTime
이라는 float 변수 추가
스킬 공격 상태 추가
스킬 공격 상태인 Skill1AttackChar
상태를 추가해 주었다.
스킬 공격 노드들 추가
🚩 “Boss1MonsterBP” 블루프린트 이벤트 그래프
SkillTime
이 10 이상이면 상태는SkillAttackCHar
스킬 공격 상태가 된다.- 보스의 스킬 준비 애니메이션인 “mutant_flexing_Mucles_Montage” 애님 몽타주를 재생한다.
- 애니메이션 재생 시간동안 지연시간을 가진 후
- Play Anim Montage 노드는 해당 몽타주의 재생 길이를 초단위로 리턴한다. Delay 노드에서 이를 Input으로 받아 몽타주 재생 시간 동안 기다리게 해주면 된다!
- 보스의 스킬 공격 애니메이션인 “mutant_swiping_Montage” 애님 몽타주를 재생한다.
IsAttacking
을 True 로 설정한다.
SkillTime
이 10 미만이면 상태는AttackCHar
일반 공격 상태가 된다.- 보스의 일반 공격 애니메이션인 “mutant_punch_Montage” 애님 몽타주를 재생한다.
IsAttacking
을 True 로 설정한다.
🚩 “mutant_flexing_Mucles_Montage” 애님 몽타주 (스킬 준비 애니메이션)
스킬 준비 애니메이션이 너무 길어서 Start
, End
섹션을 만들고 이 부분만 재생하게 하려고 한다. 대략 이 구간은 2 초다.
🚩 “Boss1MonsterBP” 블루프린트 이벤트 그래프
Play Anim Montage 노드의 Start Section Name을 Start
로 바꿔서 방금 추가했던 섹션인 Start
부터 재생하게끔 한다. 또한 지연 시간은 몽타주 재생 시간동안 가지는 것이 아닌 2 초동안 지연 시간을 가지도록 수정했다.
🚩 “mutant_swiping_Montage” 애님 몽타주 (스킬 공격 애니메이션)
스킬 공격 애니메이션이 끝나갈 즈음에 OnAnimEnd_Attack 노티파이를 발생시켜 주어야, 스킬 공격이 끝난 후 플레이어를 쫓아 갈지 아니면 이어서 공격 애니메이션 몽타주를 다시 반복해서 재생할지 결정할 수 있게 된다. 이 노티파이의 발생은 “Boss1MonsterAnimBP” 애니메이션 블루프린트에서 감지하고 “Boss1MonsterBP” 블루프린트에서 이어 받을 수 있도록 동명의 커스텀 이벤트를 발생시킨다. 이전에 몬스터 블루프린트로부터 복사해서 OnAnimEnd_Attack 노티파이를 감지하는 부분은 Boss1MonsterAnimBP” 애니메이션 블루프린트안에 구현되어 있는 상태다.
🚩 “Boss1MonsterBP” 블루프린트 이벤트 그래프
스킬 공격 애니메이션이 끝나갈 즈음에 OnAnimEnd_Attack 이벤트가 발생한다면, 플레이어를 쫓아 갈지 아니면 이어서 공격 애니메이션 몽타주를 다시 반복해서 재생할지 결정해야 하는데, 이 때 다시 반복해서 공격을 한다면 스킬 공격을 할지 일반 공격을 할지 또 선택해야 한다.
우선 첫 공격을 실행하는 과정을 StartAttack
이라는 커스텀 이벤트를 만들어서 따로 빼두었다.
이렇게! 일단 깔끔하게 만들었다. 공격 애니메이션이 끝날 때 (OnAnimEnd_Attack) 이제 일반 공격을 할지 스킬 공격을 할지의 분기점을 이렇게 연결해 줘서 해결이 되었다. Start Attack 호출
스킬 시작 타임
- 이벤트 발동시키고 또 이벤트를 호출하게 하면 무한 반복 할 수 있다.
- 커스텀 이벤트
SkillTimeLoop
발동 - 1 초 기다린 후
SkillTime
변수 값을 1 증가시킨 값으로 세팅한다.- 1 초 기다린 후 1 씩 증가시키니 시간을 초단위로 카운팅해 덮어씌우는 것과 같다.
- 다시
SkillTimeLoop
이벤트를 호출시켜 무한 반복한다.
SkillTimeLoop
이벤트 호출- Idle 👉 FollowChar 상태로 바뀔 때
SkillTime
카운팅을 시작한다.
- Idle 👉 FollowChar 상태로 바뀔 때
- 스킬 공격을 시작하면 다시
SkillTime
값을 0 으로 만들어준다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글남기기