초보 코린이의 성장 일지

UE4 적과 충돌시 적 모션 변화 본문

언리얼

UE4 적과 충돌시 적 모션 변화

코오린이 2023. 1. 9. 15:08

상대방에게 무기로 공격했을때 데미지를 판별해 줄 수 있는 방법을 생각해야한다.

 

Apply Damage를 선언해준다. 검색해보면 다른 3가지 Apply가 나오는데 지금은 무기를 사용해여 때릴것이기 때문에 다른건 사용하지 않는다.

Base Damage = 0이면 동작하지 않는다. 최소한 0.1이나 음수도 좋으니 숫자를 바꿔줘야한다.

Event Instigator = 플레이어가 칼을 휘두르기 때문에 플레이어가 된다.

Damage Causer = 칼 자체가 된다.

 

전에 올린 Sword에서 노드 몇개만 추가된 상태이다.

Sword의 소유자 Get Owner을 사용하여 불러주고 Get Instigator Controller으로 노드를 연결해준다.

Damage Causer은 위에 정리해놓은 것처럼 Sword를 불러야하기 때문에 자기자신인 Self를 선언하고 연결해준다.

 

MaxHp와 Hp 선언 후 노드를 연결

데미지를 받는것도 체크해야하기 때문에 AnyDamage를 선언 이것도 위와 같이 Get Controlled Pawn을 통해 받아오고

Character로 캐스팅해서 플레이어를 가져오게되는 구조다. 그리고 변수 MaxHealth(MaxHp), Health(Hp)를 선언

이제 Damage를 받게 되면 Hp가 감소해야하니 Health를 - 으로 받아 Clamp(float)로 값을 제한해준다.

그리고 제한된 값을 Health에 연결해준다. 공격을할 Character에 Attacker로 데미지를 얼마나 받을지 넣어준다.

 

처리된 동작을 보기 편하게 노드를 접어주고 이름을 입력해준다.

 

위에 다시 들어가서 이제 적이 맞았을때와 죽을때 동작을 위해 <=를 사용하여 노드를 연결해준다.

 

이제 피격시 색변화를 하게 만들어 볼 것이다.

For Each Loop를 사용해 Materials를 받아준다 일시적으로 색을 변경해야 하기 때문 그다음 시간 지연을 해줄때 Delay를 사용, 그리고 For을 다돌고 색이 바뀌면 일어나게끔 만들어준다. Delay는 일시적으로만 가능하지 반복적인 동작에는 불가능하다 그다음 원래대로 피격이 끝나면 하얀색으로 만들어 복구를 해줘야한다.

주의사항 - for문이 한번 끝나고 돌리게끔 만들어야 한다. 그렇지 않으면 For Each를 사용해 for문을 2번 돌리는 불상사가 생긴다.

 

보기 편하게 노드를 접은 안에 내부 모습 주의사항처럼 출력 부분을 for이 끝나고 돌리게끔 연결

 

이제 맞으면 때린 누군가를 바라보게 만들어 줄 것이다.

그렇다면 방향을 구해야한다는 의미와 자기자신을 회전시켜야한다.

예전에 위치-위치를 하고 방향 백터를 구해서 바라보도록 만들었지만 지금은 한번에 해주는 함수 Find Look at Rotation을 사용해서 방향을 알아낼 것이다. Attacker는 때리는 객체이기 때문에 알아 낼 수 있다. 

핀분활을 해주고 여기서도 주의해야 하는건 방향을 잘 못 회전 시키거나 여러개를 잘못 건드린다면 이상하게 동작이 진행되게 될 것이다. Yaw회전만 시킬 것이다.

 

이제 피격시 조금씩 밀리게해서 자연스러운 동작을 연출할 것이다 이래야 콤보를 넣을때 수월하다.

 

자신의 전방방향인 Actor Forward Vector를 선언하고 vector * float로 방향을 구해주고 연결해준다 그리고 값을 -100을 넣어줘 뒤로 100만큼 밀리게 해준다. 밑에 오버라이드들은 뒤로 밀리는 중에 다시 값이 들어온다면 *해서 앞에 수치를 제거하고 다른 수치로 더 밀리게끔 만들어 주는 원리이다.

 

이제는 적이 피가 다 깎인다면 죽는 모션을 넣어 볼 것이다.

죽는 모션의 애니메이션을 가져와 -> 오른쪽 마우스를 누른 후 -> 앞부분을 어느정도 자른다 -> 그리고 뒤쪽에 프레임을 삽입 시켜줘서 -> 완성

이 과정을 거처야 하는 이유는 애니메이션 죽는 모션이 너무 짧으면 이상하게 보일 경우도 있기 때문에 길게 프레임을 늘려준다.

 

그리고 몽타주로 만들어 준다.

몸 전체가 움직이는 동작이기 때문에 Body로 설정해줘야 한다.

 

몽타주에 연결을 해주게 되는데 여기서 이대로 끝나면 문제가 발생한다.

죽은 상태에 적 캐릭터를 공격하면 넘어져 있는 상태로 뒤로 -100씩 밀리면서 튕겨져 나갈것이다. 모션 또한 계속 반복되게 될 것이고, 이 원인은 죽은 후에도 충돌 처리가 되어있기 때문이다. 충돌을 off 시켜줘야 한다.

충돌 체크를 해줘서 이제 죽은 다음에 충돌이 되지 않게 만들어줬다. 근데 여기서도 문제가 발생하는데 몽타주가 죽은 후 시간이 다 끝나면 다시 재실행 되기 때문에 또 일어서게 된다. 이 동작을 노티파이로 없애보겠다

 

노티파이 만들어 주고 End Dead를 콜해주면 셋팅이 끝난다. 그후에 

몽타주 애니메이션을 들어가 범위를 FullBody로 체크해주고 노티파이 범위를 넣어준다.

그리고 커스텀 이벤트를 생성해 End_Dead를 연결해주면 끝이난다.

 

https://youtu.be/zUoYBho-b28

 

- 이제부터 진짜 동작을 구현하는 느낌이 든다

Comments