언리얼 엔진 5 81

[UE5] 블루아카이브 TPS게임 개발일지 (49) - 스크린 데미지 효과 적용

현재 만들어져있는 포스트프로세스는 인게임에서 사용하려면 Material Instance로써 들어가야한다. 만든 포스트 프로세스에 우클릭을 하여 Create Material Instnace를 눌러 인스턴스를 만들어, 이름을 PPI_ScreenDamage로 지었다. 그리고 그 인스턴스가 들어갈 곳은 PostProcessVolume의 Post Process Materials 배열 내부이다. C++ 코드에서 머티리얼 인스턴스를 저기에 집어넣고, 플레이어 체력에 따라 Radius를 조정하는 것까지 수행할 것이다. KannaCharacter.h에 다음과 같은 변수를 추가하였다.UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, meta = (AllowPrivateAccess = "..

[UE5] 블루아카이브 TPS게임 개발일지 (48) - 스크린 데미지 효과 (Radial Gradient Exponent)

이번엔 화면 가장자리가 붉어지는 효과를 만들 것이다. 구현하기 위한 방법으로 생각해본 것은 2가지이다.위젯을 이용한다.포스트 프로세스를 이용한다.위젯을 사용하는 쪽이 구현하기에 간편하지만, 데미지의 양에 따라 붉은 면적이 늘어나는 것을 구현하기가 더 어려울 것 같다는 생각이 들었다. 따라서 포스트 프로세스를 이용하기로 하였다.  우선 머티리얼을 생성하고, 좌측 하단 디테일 패널에서 Material Domain을 PostProcess로 지정해주었다. 그리고 SceneTexture 노드와 마스크를 통해 원본 씬의 RGB를 가져온다. 화면의 가장자리만이 붉어야 하므로 RadialGradientExponent 노드를 사용할 것이다.https://docs.unrealengine.com/4.27/ko/Renderi..

[UE5] 블루아카이브 TPS게임 개발일지 (47) - HP 자동회복 구현

할게 많아서 최대한 간단하고 빠르게 자동회복을 구현해 볼 것이다. 현재 KannaCharacter에 달려있는 AttributeComponent에 다음과 같은 멤버를 추가하였다. 변수: IsRecovering, RecoverRate함수: EnableHealthRegen(), DisableHealthRegen()// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "Components/ActorComponent.h"#include "AttributeComponent.generated.h"UCLASS( ClassGroup=(Custom), met..

[UE5] 블루아카이브 TPS게임 개발일지 (46) - 피격 방향 표시기 구현 3

Projectile가 생성되는 타이밍은 BP_Enemy의 OneShot 함수에서이다.따라서 Projectile의 Instigator를 설정해주는 것도 OneShot 안에서 해줄 것이다. 매우 간단히, SpawnActor시 Instigator를 this로 설정해주면 된다.  이제 DamageIndicator 위젯이 적의 방향에 따라 돌아가도록 할 것이다.현재 KannaCharacter와 Causer가 모두 설정되도록 했으므로, 두 액터의 위치 값에 따라 UI의 방향을 잘 바꿔주면 된다. 플레이어가 적을 바라보는 방향에 해당하는 Rotator를 Find Look at Rotation 노드로 찾는다.그리고 플레이어의 Control Rotation 값을 빼준다.Control Rotation을 사용해주는 이유는,..

[UE5] 블루아카이브 TPS게임 개발일지 (45) - 피격 방향 표시기 구현 2

이제 이 표시기가 피격 시 화면에 떠야 한다. 맞을 때마다 일일히 화면에 띄워주고, 없애주기 귀찮아 약간의 꼼수를 썼다. 사실은 항상 화면에 떠있는 채로 투명도를 0으로 하고, 피격당했을 시에만 투명도를 1로 바꿔주는 것이다. 우선 KannaCharacter의 헤더에 다음과 같은 변수를 추가하였다. UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, meta = (AllowPrivateAccess = "true")) TSubclassOf DamageIndicatorClass; UPROPERTY(BlueprintReadWrite, meta = (AllowPrivateAccess = "true")) UDamageIndicator* DamageIndicator;  TSubcl..

[UE5] 블루아카이브 TPS게임 개발일지 (44) - 피격 방향 표시기 구현 1

TPS/FPS 게임에는 일반적으로 플레이어가 피격당했을 때, 어느 방향에서 맞았는지 표시해주는 UI가 있다영어로는 Damage Indicator라고 부른다. 이번엔 이를 구현하는 과정을 담을 것이다.UserWidget을 부모로 하는 블루프린트를 만들어 WBP_DamageIndicator라 짓고, 구글링으로 찾은 적절한 이미지를 가져와 다음과 같이 배치하였다.이미지는 화면 중앙을 피봇으로 하여, 빙글빙글 돌아갈 것이다. 이번에도 용이한 관리를 위해서, 블루프린트의 부모를 C++클래스로 설정해주려고 한다.  코드를 살펴보기 전에, 위젯이 페이드아웃되는 애니메이션을 만들어놓을 것이다.피격을 받고 3초정도 피격을 받지 않으면, 위젯이 천천히 사라지도록 할 것이다. 에디터 상단의 Window탭을 열어 Animat..

[UE5] 블루아카이브 TPS게임 개발일지 (43) - 피격 구현

지금까지 칸나가 총을 맞아도 딱히 반응이 없었다.이제부터는 실제로 체력이 깎이고, 피격 애니메이션도 재생하도록 할 것이다.  KannaCharacter 클래스에도 적에게 달아주었던 UAttributeComponent를 달아주고, 피격 애니메이션에 해당하는 HitMontage와 StunMontage를 추가하였다. // KannaCharacter.h 중 일부 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, meta = (AllowPrivateAccess = "true")) UAttributeComponent* Attributes; UPROPERTY(EditDefaultsOnly, Category = Montages) UAnimMontage* Hi..

[UE5] 블루아카이브 TPS게임 개발일지 (42) - 장전 애니메이션 구현 3

장전 애니메이션 시퀀스에 만들어두었던 노티파이를 검토해보자면 다음과 같다.DropMag - 탄창을 분리하여 바닥에 떨군다.GrabMag - 품에서 새로운 탄창을 꺼낸다.InsertMag - 총에 새로운 탄창을 삽입한다.마지막의 PistolSlideAnim은 권총의 슬라이드가 당겨지게 하기 위한 것이다. 포스팅 마지막에서 서술할 것이다. DropMag의 구현은 다음과 같다.Detach From Component 노드를 통해 권총의 Old Mag를 분리한다.탄창이 중력에 의해 바닥으로 떨어지도록 한다.구현 결과는 다음과 같다.Detach from Component 노드를 통해 Old Mag를 분리하고, Set Simulate Physics 노드를 통해 탄창이 바닥으로 떨어지도록 한다.  GrabMag의 구현..

[UE5] 블루아카이브 TPS게임 개발일지 (41) - 장전 애니메이션 구현 2

장전 사운드는 Pixabay에서 구했다.탄창을 빼는 소리, 꼽는 소리, 슬라이드를 당기는 소리 이렇게 3개를 준비하였다.  그리고 장전 애니메이션에 Play Sound 노티파이를 추가해 각 상황에 맞는 소리를 재생하도록 하였다. 이렇게 사운드 추가도 완료되었다. 그런데 이미지를 보면 Sound 트랙 외에도 MagInOut 트랙이 있다.실제로 탄창이 빠지고 꼽히는 것을 구현하기 위해 만들어둔 노티파이들이다.  (이하의 내용은 다음 동영상의 도움을 받음https://www.youtube.com/watch?v=w-ouuDBSIao&ab_channel=UnrealDystopia)    현재 탄창은 Pistol 스켈레탈 메시의 일부로 박혀있다.탄창의 분리를 구현하기 위해서는, 총에 박혀있던 탄창은 없애고 단독 탄..

[UE5] 블루아카이브 TPS게임 개발일지 (40) - 장전 애니메이션 구현 1

이제 실제로 장전 애니메이션을 재생할 차례이다. Mixamo에서 받은 장전 애니메이션은 탄창을 넣는 것까지만 있고, 슬라이드를 당기는 것은 없었다. 개인적으로 꼭 넣고싶던 부분이기에, 애니메이션 시퀀스 편집창에서 수작업으로 추가해주었다.마지막에 ReloadEnd 애니메이션 Notify가 들어가있는데, 재장전을 끝내는 이벤트로써 활용할 것이다.    우선 CharacterStates.h의 ActionState에 재장전 스테이트를 추가해주었다.애니메이션 블루프린트가 현재 ActionState에 따라 애니메이션을 재생하고 있기 때문에, Reloading 스테이트도 추가해주는 것이다.UENUM(BlueprintType)enum class EActionState : uint8{ EAS_Neutral UMETA(D..