"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 |