언리얼 엔진 5 19

[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게임 개발일지 (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게임 개발일지 (40) - 장전 애니메이션 구현 1

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

[UE5] 블루아카이브 TPS게임 개발일지 (39) - 탄약 UI 구현 2

KannaTPSOverlay의 탄약 개수가 실제로 업데이트되도록 할 것이다. 우선, KannaTPSOverlay 클래스 안에 탄약 개수를 설정하는 함수를 만들어주었다.void UKannaTPSOverlay::SetCurrentAmmoText(int32 Amount){ if (CurrentAmmoText) { FString String = FString::FromInt(Amount); CurrentAmmoText->SetText(FText::FromString(String)); }}void UKannaTPSOverlay::SetTotalAmmoText(int32 Amount){ if (TotalAmmoText) { FString String = FString::FromInt(Amount); Tota..

[UE5] 블루아카이브 TPS게임 개발일지 (32) - 엄폐 시스템 구현 2

이제 플레이어가 Cover 인풋 액션을 입력하면, 그에 맞는 함수가 실행될 것이다. 현재 인풋에 대한 바인딩은 이렇게 되어있다. //KannaCharacter.cppEnhancedInputComponent->BindAction(CoverAction, ETriggerEvent::Triggered, this, &AKannaCharacter::TakeCover); 콜백함수인 TakeCover은 다음과 같은 기능을 해야한다.엄폐 중일 시 엄폐물에서 빠져나옴엄폐 중이 아니었을 시, 앞에 적절한 엄폐물이 있을 때에만 엄폐 수행 TakeCover 함수는 다음과 같다.void AKannaCharacter::TakeCover(){ if (IsInCover) { StopCover(); } else { WallTrace..

[언리얼 엔진 5] 언리얼 엔진에서의 OnTriggerEnter (OnComponentBeginOverlap)

유니티로 게임을 개발해본 사람은, OnTriggerEnter 혹은 OnCollisionEnter를 사용하여 무언가 이벤트가 발생하도록 해본 경우가 많을 것이다. 언리얼 엔진에서는 비슷한 것으로 OnComponentBeginOverlap 델리게이트가 있다. 여기서 Component는 Box/Capsule/Sphere Collision이 될 수 있겠다. 델리게이트라는 단어가 생소하다면, 이벤트라고 이해하면 된다. https://docs.unrealengine.com/5.3/ko/delegates-and-lamba-functions-in-unreal-engine/ 델리게이트 C++ 오브젝트 상의 멤버 함수를 가리키고 실행시키는 데이터 유형입니다. docs.unrealengine.com UnityEvent를 사..

[UE5] 블루아카이브 TPS게임 개발일지 (5) - Mixamo Converter 사용, 구르기 구현

지난 포스트 마지막에서, 코드를 통해 직접 구르기의 움직임을 구현하기가 곤란했었다.  이 경우 루트 모션(Root Motion)을 사용할 수 있다. https://docs.unrealengine.com/5.3/ko/root-motion-in-unreal-engine/ 루트 모션언리얼 엔진의 루트 모션 애니메이션을 살펴봅니다.docs.unrealengine.com  루트 모션 애니메이션을 사용하면 애니메이션 데이터로 캐릭터 무브먼트를 제어하여 레벨에서 보다 사실적인 무브먼트를 연출할 수 있습니다. ← 공식 문서의 루트 모션에 대한 설명이다.   간단히 말해서, 캐릭터의 움직임이 애니메이션 자체에 의해 결정되도록 하는 것이다.  그런데 구르기 애니메이션에 루트 모션을 적용하려고 하니 문제점이 있었다.    ..

[UE5] 블루아카이브 TPS게임 개발일지 (3) - 툰 쉐이딩

원작의 느낌을 살리기 위해 툰 쉐이딩을 적용해보았다.툰 쉐이딩의 기본 원리는, 한 마디로 라이팅을 단순화하는 것이다. 유튜브에 좋은 튜토리얼이 있어 그대로 따라가보았다. https://www.youtube.com/watch?v=mzydOmgN7mc&t=1555s&pp=ygUPdWU1IHRvb24gc2hhZGVy    밑에 따로 빼둔 것은 특정 액터에만 툰 쉐이더를 적용할 수 있게 해주는 그래프 파츠인데, 본 게임에서는 모든 사물이 툰 쉐이딩 되기를 바라므로 사용하지 않는다. 포스트 프로세스 머티리얼의 내용물은 화면의 각 픽셀에 대해서 병렬처리된다는 점을 기억하고, 아래 내용을 보면 좋을 것 같다.영상의 아저씨가 한 것을 하나씩 살펴보자면, 먼저 SceneTexture를 2개 가져와서 Desaturatio..

[UE5] 블루아카이브 TPS게임 개발일지 (2) - 캐릭터 state 추가, 애니메이션 개선

캐릭터의 현재 상태를 나타내는 enum을 새로 만들었다. 우선 비무장 상태, 권총 무장 상태, 소총 무장 상태 3가지를 만들었다.  캐릭터의 state는 다른 여러 클래스에서 쓰일 경우가 많다. State만을 쓰기 위해서 KannaCharacter 전체를 include하는 것은 피하고 싶으므로, 별도의 헤더 파일에 state를 정의한다. 이후 KannaCharacter.h에 ECharacterState 타입 변수를 만들어주었다.UPROPERTY(BlueprintReadWrite, meta = (AllowPrivateAccess = "true"))ECharacterState CharacterState = ECharacterState::ECS_Unarmed; 이제 기존의 애니메이션 블루프린트를 state에 ..