Unreal Engine/게임클래스 - 언리얼엔진 기초

[23강] Damaged Enemy - 1

whereareyoung 2024. 5. 15. 23:27

"Damaged Enemy" 강의를 통해서 다음과 같이 데미지 처리에 대해 익힐 예정이다. 

- 데미지를 전달하고 받는것 

- HP를 경감시키고 경감시킨 HP를 출력

 

첫 단계로서 오늘은 적에게 칼을 쥐고, 피격 처리를 진행할 예정이다. 

적인 Enemy "Skel_Mannequin" 에 칼을 쥐게 할 건데, Enemy 의 경우 칼을 계속 쥐고 있을 것이기 때문에 Right hand에 다음과 같은 방법으로 에셋을 추가할 것이다. 

 

1. Sword 에 붙어있는 asset을 제거 (Player 작업을 하며 생성됨)

 

2. Hand 아래에서 소켓 추가  > "GreatSword" 로 이름 변경  

 

플레이어보다 칼 크기를 크게 진행 할 예정이므로 다음과 같이 설정하여 준다. 

 

 

미리 보기를 위해 아까 제작한 GreatSword 에 프리뷰에셋 추가 > "SK_Straight_Sword" 까지 설정해 준다. 

저장 후 "Animations" 폴더에서 Great_Sword_Idle 파일을 열어보면 다음과 같이 칼을 자연스럽게 쥐고 있는 것이 확인된다.

 

이제 위치 등 설정은 마쳤으니 "BP_Enemy" 의 이벤트 그래프에서 칼을 생성하게 끔 설정하는 작업을 진행한다. 

 

1. 블루프린트 설정 

- BeginPlay Event > SpawnActor

- Class 는 BP Sword

- Transform 은 아까 손에 쥐고 있던대로(0, 0, 0)

- Owner 는 자기자신 

 

2. 변수 생성 및 설정 

 

3. 이어서 블루프린트 설정 

- 생성된 변수 "Sword"를 블루프린트에 가져와 Set

- Sword 에 붙이는 것이기 때문에 Sword에 AttachToComponent

- Mesh 와 Parent

- 붙일 Socket Name 은 아까 설정하였던 GreatSword   

 

* 소켓이름이 다르게 설정되면 액터의 기본위치에 붙어버리는 오류가 발생하니 이름 적을때 주의 

 

여기까지 설정을 마친후 플레이하면 Enemy에 칼이 생성되어 잘 붙어있는 것을 확인할 수 있다.  

 

- Sword에도 충돌체가 있어서 가끔 충돌이 발생하는 경우가 있는데, 이경우를 골라내는 작업을 진행할 것이다. 

 

1. BP_Sword 로 가서, 두가지를 삭제하여 준다. (테스트로서 생성했던 것들)

 

2. 현재 설정으로는 Other Actor 가 BP_Sword 가 나올경우가 있어서, 이러한 오류를 방지하기 위하여 Character 에 형변환을 해 줄 예정이다. (Character 상속받은 애들만 충돌 될 수 있게 설정)

Apply Damage : 다른 액터에 데미지를 전달하기 위해 사용 

 

Apply Damage : 칼일경우 일반적인 데미지 처리

Apply Point Damage : 총알, 화살 등 꽃히는 지점이 점일때의 데미지 처리

Apply Radial Damage : 슈류탄처럼 원형으로 퍼지는 데미지 처리

 

3. 다음과 같이 블루프린트를 재 설정하여 준다. 

"서버기호" - 서버랑 통신할때만 쓰는 명령

원래 서버로 데미지를 넘기고, 데미지를 받을 아이들한테 중계

없을 경우 클라이언트 자체적으로 들어감 

 

Damaged Actor : 데미지를 받을 액터 

Base Damage : 전달할 데미지(0값이 아니여야 함, 0일경우 데미지가 들어가지 않음)

Event Instigator : 이벤트 전달 컨트롤러

Damage Causer : 데미지를 발생시킨 객체 

 

4. Float 변수 "Power"를 생성하고, Base Damage에 연결하여 준다. 

* Power 에 기본값 30을 준다

 

* 데이터 테이블 활용 관련 

기획 파트에서 무기 등 데이터 테이블 (데이터 시트)를 작성하는데 이것을 엑셀 작성에서 메크로를 사용해 서버에 업로드 하거나 개발 팀에서 툴을 만들어서 엑셀에서 원하는 데이터로 바로 불러올 수 있게 해 제작에 활용한다. 

그 중간단계가 CSV 라는 파일이 있는데 엑셀 값을 조정하여 파워같은거 바로 조정 할 수 있도록 하는 방식도 있음 

 

콤보, 공속 증가, 아이템 줍기 등 처리에 데이터 테이블을 사용하게 된다. 

 

 

Event Instigator : 휘두르는 자체(캐릭터) 의 컨트롤러를 넣어주게 되어있음

칼을 휘두르는 주체는 플레이어이기, Ctrl 을 통해서 입력이 들어가고 휘두르게 되기에 다음과 같이 설정하여 준다. 

 

Damage Cause : Damage 발생이유 

현재는 칼이니까 Self, 자기 자신을 넣어주면 된다. 

Damage Type Class : 칼에 불이 붙어 있고 하면 불에 의해 얼음이 붙어있으면 얼음에 의해 데미지 타입 클래스에 따라 구현 한 것을 넣어주는데 현재는 의미가 없음 

 

여기까지 기본적인 BP_Sword를 설정한 후 저장한다.

 

TakeDamage 를 Call하면 AnyDamage 로 들어오게 된다. AnyDamage 도 서버에서 되기 때문에 붙어있긴 한데, 현재 서버가 없기 때문에 클라이언트로 진행될 것이다. 

 

<AnyDamage 설정>

1. BP_Enemy 에 AnyDamage 이벤트를 추가한다. 

2. Damage > to string (문자열로 변경) > Append 후 잘 들어오는지 Print String 으로 출력해 본다. 

 

3. 검사 가 끝났으면, 테스트용 코드를 다 삭제하고 본격적으로 피격 처리를 시작한다. 

Character형 변수 "Attacker", Float 형 변수 "Health", "Damage" 를 설정한다. 

Health 에는 값을 100을 준다. 

 

4. 다음과 같이 블루프린트를 설정한다 .

- Instigated 를 통해서 피격한 캐릭터를 불러올 수 있는데, 이것을 변수에 저장하기 위해 다음과 같이 Character 형 변수를 생성한다(동료, 플레이어에게 피격당할 수 있으니)

- Damage 값도 저장한다.

- Health 값을 기본값 100으로 Damage 만큼을 또 빼서 Health 에 Set 한다. 

(Health등은 게임에서는 정수인 것 처럼 보이나 실제로는 강화비율이나 여러요소들을 편리하게 처리하기 위해 Float 사용, 플레이어들에게 보여줄 때는 편하게 정수로 표기)

이제 플레이를 하여 보면 다음과 같이 가서 때릴 때마다 점점 줄어드는 것을 확인 할 수 있다 

 

여기까지하면 출력에서 프로그래밍이 잘 처리된 것을 알 수 있는데, 적에게 HP바를 생성하여 설정하여주면 더욱 가시성이 높아질 것이다. 

 

* UMG (Unreal Motion Graphics) : 게임내에서의 UI를 처리하기 위해 사용하는 시스템 (HP바, 입력바, 클릭버튼 등)

슬레이트 : 언리얼 엔진 상 UI 

위젯 블루프린트 : 게임에서 플레이되는 UI, 입력이나 HP바 등등을 처리할 수 있는 블루프린트

 

<Enemy에 HP 바 생성>

1. 위젯 블루프린트 "WB_HealthBar" 생성 

2. 기본 캔버스 지워주고, Size Bar 200 * 20으로 생성 

* 기본 제공되는 캔버스는 16:9 으로 게임 실행화면이랑 똑같음, 하지만 이번작업에서는 머리 위에 HP바를 출력하는것이 목표이기 때문에 Canvas 를 Size Box를 생성한다.  

 

3. Border 외곽에 선 그려주는 것, Apperence Alpha 0.3 하여 반투명으로 만들어 주기, Padding 4, 20

* Padding : 자신에 대한 여백,

(숫자하나 쓰면 전체, 두개쓰면 가로세로, 네개 쓰면 왼쪽 탑 오른쪽 아래)

 

4. Progress 바 설정 (HP의경우 ProgressBar 로 이용)

 

Style > BackGround Image > Tine : 배경색, 검정으로 변경, alpha 0.8 

Apperence > Fill Color and Oppacity : 전경색, 붉은 색으로 변경 

Progress 의 Percent 를 조정하며 컬러 감 등 확인 가능 

 

다음시간에는 변수 조정해서 HP 진행하는 것 계속 진행할 예정이며  

미래에 적이 피격되었을때 색이 바뀌고 HP가 0이하로 떨어지면 사망처리되는 것까지 진행할 예정이다. 

 

'Unreal Engine > 게임클래스 - 언리얼엔진 기초' 카테고리의 다른 글

[25강] Damaged Enemy - 3  (1) 2024.06.06
[24강] Damaged Enemy - 2  (1) 2024.06.06
[22강] Enemy  (1) 2023.10.13
[21강] Animation Blending  (0) 2023.10.12
[20강] Animation Montage  (2) 2023.10.12