본문 바로가기

UE5(언리얼)

[언리얼5/UE5] 다양한 총 파지하기 -3 (데미지 입히기, 달리기(스프린트), 반동)

반응형

 

데미지 입히기

데미지를 입힐 때 

총은 FPointDamageEvent를 사용하면 된다. 

이 외에도 다른 종류가 있다고하는데 아직 나도 초보이기 때문에 궁금하면 다른 곳을 찾아보길 바란다요... :(

 

1. FPointDamageEvent

FPointDamageEvent 생성자에 필요한 정보는 다행히 이미 다 구해놓았다.

FPointDamageEvent를 적고 control키를 누르고 클릭을 하면 생성자를 볼 수 있다.

영어 단어가 직관적으로 나와있으니 변수를 잘 넣어주자

 

 

2. TakeDamage

TakeDamage는 감사하게도 AActor class 에 존재한다.

우리는 이걸 override해서 재사용하면 된다. 

 

SpawnEmitterAtLoaction 함수를 써서 피격부분 임펙트를 추가했다.  (이전 글을 보면 이해가 될 것이다. 간단한 effect추가니까 그냥 넘어가겠다.)

 

AActor::TakeDamage를 찾아들어가보자

 

이것과 똑같은 인자를 받게 가상함수를 만들어준다. 

(Super::TakeDamge(...) -> 부모의 takeDamage가 중요한 것을 호출할 수 있으니 1번 호출해주자, ActualDamage는 AActor에서 그렇게 쓰길래 가져온 것이다.. :)

 

 

(UELOG라고 적고 tab을 누르면 자동완성이 된다),  가운데 인자를  Warning으로 바꾸면 노랑 글씨 로그가 출력되니 보기 편한다.

 

 

사망처리

UFunction 을 통해서 Blueprint에 C++ 코드를 나타나게 할 수 있다.

  • BlueprintCallable: 이것을 사용해도 괜찮지만 
  • BlueprintPure: Getter함수( 오브젝트의 어떤 것도 수정하지 않고 싶다) 일 때는 이 함수를 사용하므로서 명시해주자

 

 

이렇게 Blueprint에서 확인할 수 있다

근데 BP_MyCharacter (본인 BP_캐릭터 이름) 로 먼저 캐스팅을 해줘야된다.

IsDead 변수를 Setting 하는 건 내가 boolean 변수 1개를 만들어 놓은 것이다.

C++의 IsDead함수로 Blueprint IsDead 변수 값을 세팅한것!

 

 

AnimGraph에서 이렇게

BlendPosesByBool로 죽었을 때를 판별하고

애니메이션을 재생해주면 끝!~

달리기 (스프린트) 

갑자기 달리기라서 이상한데

사실 그 전부터 달리기 만들려고 했으나 실력이슈로 실패하다가 성공해서 추가합니다. 

 

실패 이유

1. IE_Pressed, IE_Released 를 생각못하고 BindAxis로 만들려고 했음

2. MaxSpeed 조절을 BluePrint에서 하려고 하니 C++와 섞이고, 변경 함수도 못찾는 그냥 실력 이슈

 

아래 그림을 차례로 보면 이해가 쉬울 것이다.

 

1. 걷는 속도, 달리는 속도를 변수로 저장한다.

2. Sprint라는 Action에 SprintStart, SprintStop 함수를 바인딩 해준다. ( Edit -> Project Setting -> input 에서 Action에 Sprint 추가 -> 이전에 다룬 적이 있으니 스크린샷은 뺄게요 )

3. 각 함수에서 GetCharacterMovement()->MaxWalkSpeed 를 조정 (  header 파일 추가하는 것을 잊지말자 ) 

 

 

반동

 

이걸 왜 이제 적냐면...? 간단한거여서 중간에 넣고 포스팅하는 것을 깜박했습니다.. ㅎ..ㅎ

 

반동은 정말 간단합니다. 우리가 이전에

마우스에 따라 character의 pitch와 yaw를 조정했었죠?

반동은

공격할 때 character의 piech와 yaw를 조정하면 됩니다.

 

이렇게 추가하면 끝입니다!

 

저는 나중에 함수로 만들어서 함수 호출하는 것으로 대체했습니다! 

헤맸던 부분 

 

1. 헤더 파일을 추가해야지 FPointDamageEvent  생성자레 parameter를 넣어서 만들 수 있더라요.... :(

 

 

반응형