본문 바로가기

언리얼C++게임개발/08.애니메이션 시스템 활용

(4)          글쓰기    
콤보공격 입력추가 이렇게 좌클릭을 눌렀을 시 동작을 하게끔 만들어 줄 것임. static ConstructorHelpers::FObjectFinder INPUT_ATTACK(TEXT("'/Game/ThirdPerson/Input/Actions/IA_Attack.IA_Attack'")); if (INPUT_ATTACK.Object) { AttackAction = INPUT_ATTACK.Object; }; 일단은 다음과 같이 어택에 관한 InputAction을 받아주고 이에 상응하는 함수를 만들어 주었다. 그 이후에 바인딩을 해주는데, 문제는 지금 이 캐릭터만 해당 몽타주를 사용할 것이 아니라, 다른 캐릭터도 이를 사용하기 위해서 기본 플레이어 아래 (ABCharacterBase)에 생성을 진행해주기로 한다. 그래서..
애니메이션 노티파이 애니메이션 노티파이 애니메이션 노티파이는 애니메이션을 재생하는 동안 특정 타이밍에 애님 인스턴스에게 신호를 보낼 수 있는 기능이다. 애니메이션 노티파이는 일반 애니메이션과 몽타주 모두 사용 가능한데, 여기서는 노티파이를 이용해 콤포 공격을 구현해 보자. 먼저, 위와 같이 NextAttackCheck 노티파이를 만든다. 공격 중, NextAttackCheck 노티파이가 있는 영역에서 공격 버튼이 눌릴 경우, 다음 섹션으로 넘어가 콤보 공격을 가능하도록 만드는 것이 목표이다. AttackHitCheck 노티파이는 그냥 노티파이가 작동했는지 로그를 찍어주는 기능으로 구현할 것이다. 컴파일후 플레이를 통해 공격을 해보면 몽타주 재생에 따라 네번의 노티파이가 발생함을 확인할 수 있다. 노티파이가 호출되면 언리얼은..
델리게이트 UPROPERTY() class UABAnimInstance* ABAnim; 앞서 같은 애니메이션을 중복플레이를 방지하기 위해 플레이중임을 체크했는데 이보다는 애니메이션이 끝나면 자동으로 폰에게 알려주는 편이 더 효과적이다. 언리얼이 제공하는 델리게이션기능을 사용해서 구현할 수 있다. 델리게이션이란 보편적으로 특정 객체가 해야할 로직을 다른 객체가 대신 처리할 수 있도록 만드는 보편적인 개념이다. A가 B에게 작업명령을 내리고 자신을 등록후 끝나면 A에게 알려주는 설계방식이다. 애님 인스턴스에는 애니메이션 몽타주 재생이 끝나면 발동하는 OnMontageEnded라는 델리게이트를 제공한다. 어떤 언리얼오브젝트라도 UAnimMontage * 인자와 bool 인자를 가진 멤버함수를 가지고 있다면, 이를 OnM..
애니메이션 시스템 활용 - 애니메이션 몽타주 캐릭터가 공격 입력을 누를때 마다 연속된 모션으로 공격하도록 애니메이션 기능을 구현해 본다. 스테이트 모신을 사용해 구현 가능하지만 설계가 복잡해 진다. 언리얼엔진은 스테이트 머신의 확장없이 특정 상황에서 원하는 애니메이션을 발동시키는 애니메이션 몽타주라는 기능을 제공한다. 이를 이용해 콤보공격을 구현하겠다. 애니메이션 폴더위를 우클릭하고 Animation Montage를 선택하고 원하는 스켈레톤을 선택하거나 만들고 싶은 스켈레톤을 열어 Create Asset 에서 선택해도 된다. 에디터가 열리면 기본으로 Default라는 이름의 섹션이 있다. Detail에서 이름을 Attack1으로 변경하 오른쪽 Asset Browser에서 WarriorAttack1 2 3 4를 끌어다 놓는다. 자동으로 엇갈리면서 배..