본문 바로가기
언리얼 블루프린트/컴포넌트

[언리얼5 블루프린트] 캐릭터의 체력 컴포넌트 만들기

by 디버그러 2024. 8. 9.

플레이어나 적한테 체력을 부여하는 컴포넌트를 만들겠습니다.

체력이 줄어드는 것을 확인하기 위해 액터 파괴 컴포넌트도 필요합니다.

 

 

 

블루프린트 액터 컴포넌트를 추가합니다.

이름은 Die라고 변경했습니다.

 

 

 

+ 버튼을 눌러 함수를 추가했습니다.

이름은 Die 라고 변경했습니다.

 

 

 

입력에 + 버튼을 3번 눌러서 추가했습니다.

이름은 Damage, Instigator, Victim으로 변경했습니다.

Instigator는 때린 액터, Victim은 맞은 액터입니다.

 

 

 

Damage는 플로트 타입, Instigator와 Victim은 액터 레퍼런스로 지정했습니다.

 

 

 

Die 블루프린트에서 우클릭하여 자손 블루프린트 클래스를 생성했습니다.

이름은 Die_파괴 라고 변경했습니다.

 

 

 

이제 부모 클래스인 Die 컴포넌트에 있는 함수를 가져올 수 있게 됩니다.

함수에서 오버라이드를 눌러 Die 함수를 가져옵니다.

 

 

 

Victim(맞은 액터)에 Destroy Actor 노드를 연결합니다.

컴파일, 저장하고 나옵니다.

 

 

 

이제 진짜 체력 컴포넌트를 만들어야 합니다.

블루프린트 액터 컴포넌트를 추가합니다.

이름은 Health로 변경했습니다.

 

 

 

Event Begin Play 노드Bind Event to On take Any Damage 노드를 추가하고

Target에 Get Owner, Event에 Custom Event 노드를 연결했습니다.

Custom Event 노드의 이름은 피격시로 변경했습니다.

 

 

 

변수를 2개 추가합니다.

플로트 타입으로 지정하고 현재, 최대로 이름 변경했습니다.

 

 

 

Set 현재를 가져와 피격시 이벤트 노드와 연결합니다.

Get 현재- 노드의 위쪽과 연결하고 아래쪽은 이벤트 노드의 Damage와 연결합니다.

 

 

 

<= 노드Branch 노드를 추가했습니다.

 

 

 

Get ownerGet Component by Class 노드를 이용해 Die 컴포넌트를 가져왔습니다.

Die 컴포넌트 안에 Die 함수를 쓸 수 있게 됩니다.

현재 체력이 <= 0 일 경우 Die 함수가 나오게 됩니다.

 

Victim(맞은 액터)은 Get Owner노드와 연결합니다.

Die 함수에 Victim을 컴포넌트를 가지고 있는 액터로 지정했으니 Die_파괴의 Destroy Actor와 연결됩니다.

 

 

 

원하는 액터에 Die_파괴와 Health를 넣어줍니다.

 

 

 

기본으로 주어지는 BP_Pickup_Rifle을 통해 테스트 해보았습니다.

여러 대 때려도 체력이 줄어들지 않는 걸 볼 수 있습니다.

 

 

 

기본으로 주어지는 FirstPerson 폴더의 Blueprints → BP_FirstPersonProjectile로 들어갑니다.

여기서 FirstPersonProjectile은 총에서 나오는 공에 대한 블루프린트입니다.

 

 

 

Rifle에 데미지를 주는 노드가 없어서 체력이 깎이지 않습니다.

 

Apply Damage 노드를 추가합니다.

Event Hit의 Other은 Damage Actor와 연결하고 Base Damage를 50으로 수정합니다.

나머지 노드는 뒤로 밀어서 선을 정리해 둡니다.

 

이 상태에서 실행하면 체력이 0이 됐을 경우 파괴되지만 런타임 오류가 발생합니다.

액터가 파괴된 상태에서 Add Impulse at Location을 수행하려 해서 그렇습니다.

 

액터가 파괴돼서 없는데 멀리 날아가라고 했기에 런타임 오류가 발생

(Add Impulse at Location: 피직스 시뮬레이트가 켜져 있는 액터에 힘을 주는 역할)

 

 

 

Is Valid 노드와 Branch 노드를 이용해서 Other Comp가 존재할 경우 Impulse(힘)을 주라고 수정했습니다.

 

게임을 플레이하여 Rifle을 통해 데미지를 주었을 때 체력이 0이 되면 액터가 파괴됩니다.

 

 

 

사용한 언리얼 버전: 5.4.1