C++와 Unreal Engine으로 3D 게임 개발 과제 8
1. WAHT
부정 아이템 2가지 추가
2. HOW
- 시야 제한 아이템 + 데미지
먹으면 5초 시야 흐려짐
먼저 BaseItem을 상속받아 Poison 아이템 클래스를 생성한다.
#include "PoisonItem.h"
#include "SpartaCharacter.h"
APoisonItem::APoisonItem()
{
PoisonDuration = 5.0f;
ItemType = "Poison";
}
void APoisonItem::ActivateItem(AActor* Activator)
{
Super::ActivateItem(Activator);
if (Activator && Activator->ActorHasTag("Player"))
{
if (ASpartaCharacter* PlayerCharacter = Cast<ASpartaCharacter>(Activator))
{
PlayerCharacter->DrinkPoison(PoisonDuration);
}
DestroyItem();
}
}
이제 캐릭터에 PostProcess로 흐림 효과를 주려고 한다.

흐린 효과를 위해 머터리얼을 생성한다. 독이라서 초록빛으로 흐리게 했다.
PostProcessComp = CreateDefaultSubobject<UPostProcessComponent>(TEXT("PostProcess"));
PostProcessComp->SetupAttachment(CameraComp);
PostProcessComp->bUnbound = true;
PostProcessComp->BlendWeight = 0.f;


Post Process 컴포넌트에 머터리얼 설정을 해준다.
테스트를 위해 BP아이템을 배치하고 확인했다.


시야 제한을 위해 5초간 흐려지게 한건데 체력도 같이 1초당 닳으면 좋을 것 같아서 로직을 추가해야겠다.
void ASpartaCharacter::DrinkPoison(float Duration)
{
UE_LOG(LogTemp, Warning, TEXT("Poison"));
if (!PostProcessComp) return;
PostProcessComp->BlendWeight = 1.0f;
GetWorldTimerManager().SetTimer(
PoisonTimerHandle,
[this]()
{
UGameplayStatics::ApplyDamage(
this,
2.0f,
nullptr,
this,
UDamageType::StaticClass()
);
},
1.0f,
true
);
GetWorldTimerManager().SetTimer(
BlurTimerHandle,
[this]()
{
PostProcessComp->BlendWeight = 0.f;
GetWorldTimerManager().ClearTimer(PoisonTimerHandle);
UE_LOG(LogTemp, Warning, TEXT("Poison Effect Ended."));
},
Duration,
false
);
}
데미지 부분이 하드코딩 되어있는데 매개변수로 데미지값도 받아서 수정해주면 될 것 같다.
테스트

- 이동 속도 감소 아이템
아이템을 먹으면 캐릭터에서 속도 디버프
void ASpartaCharacter::StartSprint(const FInputActionValue& value)
{
if (GetCharacterMovement() && !bIsSlowed)
{
GetCharacterMovement()->MaxWalkSpeed = SprintSpeed;
}
}
void ASpartaCharacter::Slowed(float Duration, float SpeedMultiplier)
{
UE_LOG(LogTemp, Warning, TEXT("Slowed."));
GetCharacterMovement()->MaxWalkSpeed *=SpeedMultiplier;
bIsSlowed = true;
GetWorldTimerManager().SetTimer(
SlowedTimerHandle,
[this]()
{
bIsSlowed = false;
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
UE_LOG(LogTemp, Warning, TEXT("Slowed Potion Ended."));
},
Duration,
false
);
}
효과 적용 시 bool 체크해서 Sprint 기능은 막도록 했다.

파티클이랑 효과음도 넣어줬다 ㅎㅎ 😁

데이터테이블에 새로 만든 아이템 두개 추가해주면 이제 랜덤으로 스폰한다.
3. FIX
- 타이머 람다 함수 에러
레벨 종료 시 캐릭터가 파괴돼서 this가 빈포인터값이된다.
람다 함수 대신에 따로 함수를 빼줬다.
void ASpartaCharacter::Slowed(float Duration, float SpeedMultiplier)
{
UE_LOG(LogTemp, Warning, TEXT("Slowed."));
GetCharacterMovement()->MaxWalkSpeed *=SpeedMultiplier;
bIsSlowed = true;
GetWorldTimerManager().SetTimer(
SlowedTimerHandle,
this,
&ASpartaCharacter::SlowedEnd,
Duration,
false
);
}
void ASpartaCharacter::SlowedEnd()
{
bIsSlowed = false;
GetCharacterMovement()->MaxWalkSpeed = NormalSpeed;
UE_LOG(LogTemp, Warning, TEXT("Slowed Potion Ended."));
}
이런식으로 전부 함수 주소를 넘기도록 했다.
- 메뉴 화면에 오래 머물 때

HUDWidgetInstance 예외 체크를 안했다.
위젯 부분 다 널 체크를 진행했다.
if (HUDWidgetInstance == nullptr) return;
- 빌드 에러

임시 파일 및 솔루션 파일까지 다 지우고 Generate Visual Studio project files 해주면 된다! (휴
4. RESULT
https://github.com/yoonseo4343/NBC_UE_P8
GitHub - yoonseo4343/NBC_UE_P8: 내일배움캠프 언리얼7기 과제 8
내일배움캠프 언리얼7기 과제 8. Contribute to yoonseo4343/NBC_UE_P8 development by creating an account on GitHub.
github.com
📽️시연 영상
Wave 3 지뢰 파티가 정말 어렵다...
5. 참고
Reddit의 unrealengine 커뮤니티
unrealengine 커뮤니티에서 이 게시물을 비롯한 다양한 콘텐츠를 살펴보세요
www.reddit.com
https://imgur.com/a/cheap-depth-fog-example-h9FBzii
Cheap Depth-Fog Example
Discover the magic of the internet at Imgur, a community powered entertainment destination. Lift your spirits with funny jokes, trending memes, entertaining gifs, inspiring stories, viral videos, and so much more from users.
imgur.com
언리얼(Unreal) 포스트 프로세싱(Post Processing)
포스트 프로세싱(Post Processing)
velog.io
△ 포스트 프로세싱 추가 공부
'내배캠Unreal_TIL > UE' 카테고리의 다른 글
| [TIL] 2026-02-04 | Gameplay Effect, AnimMontage (2) | 2026.02.04 |
|---|---|
| [TIL] 2026-02-03 | 머티리얼 실습 PBR 재질 만들기 (2) | 2026.02.03 |
| [TIL] 2026-01-29 | 아이템 스폰 이벤트, UI 디자인 (2) | 2026.01.29 |
| [TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기 (1) | 2026.01.28 |
| [TIL] 2026-01-27 | UE UI 애니메이션 및 3D 위젯 구현, 파티클과 사운드 게임 효과 연출 (0) | 2026.01.27 |