[TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성

2026. 1. 30. 18:53·내배캠Unreal_TIL/UE
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로 흐림 효과를 주려고 한다.

 

Domain: Post Process / Clamp - Max 를 통해 흐림 조절

흐린 효과를 위해 머터리얼을 생성한다. 독이라서 초록빛으로 흐리게 했다.

PostProcessComp = CreateDefaultSubobject<UPostProcessComponent>(TEXT("PostProcess"));
PostProcessComp->SetupAttachment(CameraComp);
PostProcessComp->bUnbound = true;
PostProcessComp->BlendWeight = 0.f;

Infinite Extent (Unbound) 체크박스 활성화 / Blend Weight를 통해 효과 적용 컨트롤

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

 

📽️시연 영상

https://youtu.be/U0QwlFW0Pkk

 

Wave 3 지뢰 파티가 정말 어렵다...

5. 참고

https://www.reddit.com/r/unrealengine/comments/jrpsnd/how_to_make_first_person_fog_of_war_limit_player/?tl=ko

 

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

https://velog.io/@keunho86/%EC%96%B8%EB%A6%AC%EC%96%BCUnreal-%ED%8F%AC%EC%8A%A4%ED%8A%B8-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8B%B1Post-Processing

 

언리얼(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
'내배캠Unreal_TIL/UE' 카테고리의 다른 글
  • [TIL] 2026-02-04 | Gameplay Effect, AnimMontage
  • [TIL] 2026-02-03 | 머티리얼 실습 PBR 재질 만들기
  • [TIL] 2026-01-29 | 아이템 스폰 이벤트, UI 디자인
  • [TIL] 2026-01-28 | UE 게임 루프 및 UI 재설계 과제, 화면 뒤집기
윤윤씨
윤윤씨
🎮 내일배움캠프 Unreal 7기
  • 윤윤씨
    컴퓨터온열맛사지
    윤윤씨
  • 전체
    오늘
    어제
    • 분류 전체보기 (62) N
      • 내배캠Unreal_TIL (62) N
        • C++ (23)
        • UE (31) N
        • 팀프로젝트 (7)
      • etc (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
    • Solved.ac
    • YouTube
  • 태그

    프로그래머스
    gas
    머티리얼
    스테이트머신
    챌린지
    언리얼과제
    ta
    디자인패턴
    코드카타
    STL
    오토마타
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
윤윤씨
[TIL] 2026-01-30 | Post Process로 흐림 효과 구현, 감속, 최종 완성
상단으로

티스토리툴바