[Unreal]#24_Deactivate와 DeactivateImmediate함수

2023. 4. 16. 14:05· 게임개발/Unreal C++
목차
  1.  
  2. [Unreal]#24_Deactivate와 DeactivateImmediate

 

[Unreal]#24_Deactivate와 DeactivateImmediate

 

Unreal 개발 중 Niagara Component 클래스의 Deactivate 관련 함수에 대해 알아보겠습니다.

 


 

Overview

 

  1. 개요
  2. 코드
  3. 정리

 

#0. 개요

1. 마법 발사체의 이펙트

  • Proejctile 클래스를 상속하는 Projectile_Magic(마법 발사체) 유형의 객체는 기본적으로 세 가지 이펙트를 컴포넌트로 갖습니다-Muzzle Effect(발사 효과), Projectile Effect(발사체 효과), Hit Effect(충돌 효과).
  • 이때, 각 이펙트는 Niagara Component 클래스를 상속하여 Niagara Component 클래스의 함수들을 활용하는데, 활성화 시점과 비 활성화 시점에 각각 Activate 함수와 Deactivate 함수를 호출합니다.
  • 이펙트의 생명 주기가 끝나는 시점에 호출할 함수로  Deactivate 함수와 DeactivateImmediate 함수를 고려할 수 있습니다. 

 

2. Deactivate

#include "Components/ActorComponent.h"
virtual void Deactivate()

 

Details

 

  • UActorComponent 클래스에서 정의한 Deactivate 함수는 Scene Compnent를 비활성화시킵니다.

 

2. Deactivate

#include "Particles/ParticleSystemComponent.h"
virtual void DeactivateImmediate()

 

Details

 

  • UFXSystemComponent 클래스에서 정의한 Deactivate 함수는 Component의 비활성화를 강제합니다.

 

3. Deactivate vs DeactivateImmediate

  • 두 함수의 차이점은 강제성입니다.
  • Deactivate 함수는 컴포넌트의 비 활성화를 자연스럽게 수행합니다. 컴포넌트는 생명 주기 동안에 수행해야 할 동작들을 모두 완료한 뒤에  비활성화됩니다. 따라서, Deactivate 함수는 컴포넌트가 본인이 수행해야할 동작들을 모두 완료한 뒤에 비활성화될 수 있도록 합니다. 
  • DeactivateImmediate 함수는 컴포넌트의 비 활성화를 호출 시점에 즉시 수행합니다. 이 함수를 호출하면 그 즉시 컴포넌트는 수행하던 동작들을 모두 중지하고 최종적으로 비활성화됩니다. 
  • 정리하자면, Deactivate는 Niagara Component가 모든 동작을 완료할 때까지 기다렸다가 비활성화시키는 반면에, DeactivateImmediate는 Niagara Component가 모든 동작을 완료할 때까지 기다리지 않고 호출 시점에 그 즉시 해당 컴포넌트를 비활성화시킵니다.

 

#1. 코드

1. 발사 함수

void AProjectile_Magic::StartLaunched()
{

	Super::StartLaunched();

	// #0. Projectile Movement
	CheckTrue(ProjectileMovement == nullptr);
	ProjectileMovement->SetVelocityInLocalSpace(FVector(-1.f, 0.f, 0.f) * ProjectileMovement->InitialSpeed);

	// #1. Muzzle Timer On
	if (!!MuzzleEffect && OffMuzzleEffectRate >= 0.f)
	{
		GetWorld()->GetTimerManager().SetTimer(OffMuzzleEffectHandler, FTimerDelegate::CreateLambda([&]() {
			MuzzleEffect->DeactivateImmediate();
			}), OffMuzzleEffectRate, false);
	}

}

 

Details

 

  1. 마법 발사체 클래스의 StartLaunched 함수는 발사체의 발사 시점에 호출되는 함수로 Velocity 설정과 함께 Muzzle Effect의 비활성화를 구현합니다.
  2. Muzzle Effect는 Niagara Component로 활성화되었다가, 비활성화되는 동작을 반복적으로 수행합니다.
  3. 따라서, 해당 이펙트는 생명 주기를 Deactivate 혹은 Deactivate Immediate 함수를 통해 관리해주지 않으면, 발사체가 발사되어 한참을 날아가는 중에도 사라지지 않고 지속적으로 활성화&비활성화 동작을 수행합니다.
  4. 이때, Deactivate 함수 대신에 정확한 Niagara Component의 생명 주기를 정해 주어 DeactivateImmediate 함수를 호출해야 Niagara Component는 지속적으로 활성화 + 비활성화 동작을 반복 수행하지 않고, 한 번만 수행하고 비활성화되로록 구현할 수 있습니다.

 

2. 발사 완료 함수

void AProjectile_Magic::EndLaunched()
{
	
	Super::EndLaunched();

	// #1. Hit Timer On
	if (!!HitEffect && OffHitEffectRate >= 0.f)
	{
		GetWorld()->GetTimerManager().SetTimer(OffHitEffectHandler, FTimerDelegate::CreateLambda([&]() {
			HitEffect->DeactivateImmediate();
			}), OffHitEffectRate, false);
	}

}

 

Details

 

  • 마법 발사체 클래스의 발사 완료 함수는 Timer를 통해 Hit Effect의 비활성화를 구현합니다. 
  • Hit Effect도 마찬가지로 DeactivateImmediate 함수를 호출하여, 생명 주기가 끝난 시점에 그 즉시 비활성화되로록 구현할 수 있습니다!

 

#2. 정리

 

  1. Deactivate 함수는 컴포넌트가 모든 동작을 수행하고 비활성화되도록 기다려 자연스러운 비활성화를 구현합니다.
  2. DeactivateImmediate 함수는 컴포넌트가 수행하던 모든 동작을 중지하고 비활성화 되도록 강제합니다. 

 

 

 

'게임개발 > Unreal C++' 카테고리의 다른 글

[Unreal]#26_Game Ability System(GAS)  (0) 2024.02.23
[Unreal]#25_Collision Data  (1) 2023.12.02
[Unreal]#23_FString, FText, FName 변환  (0) 2023.02.05
[Unreal]#22_TTuple  (0) 2023.02.05
[Unreal]#21_Custom Delegate  (0) 2022.11.02
  1.  
  2. [Unreal]#24_Deactivate와 DeactivateImmediate
'게임개발/Unreal C++' 카테고리의 다른 글
  • [Unreal]#26_Game Ability System(GAS)
  • [Unreal]#25_Collision Data
  • [Unreal]#23_FString, FText, FName 변환
  • [Unreal]#22_TTuple
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • dfs
  • 알고리즘
  • 디자인 패턴
  • Effective C++
  • DP
  • 정렬
  • programmers
  • unreal
  • stl
  • 트리
  • set
  • BFS
  • C++
  • 그래프
  • Unreal Blueprint
  • 우선순위 큐
  • 최단 경로
  • BOJ
  • 개발
  • 기술 질문

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Unreal]#24_Deactivate와 DeactivateImmediate함수
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.