icon안동민 개발노트

기본적인 프로젝트 설정 및 관리


 나이아가라 시스템을 효율적으로 활용하기 위해서는 체계적인 프로젝트 설정과 관리가 필수적입니다.

 이 절에서는 나이아가라 프로젝트의 기본적인 설정 및 관리 방법을 살펴보겠습니다.

프로젝트 구조 설계

 효율적인 프로젝트 구조는 개발 속도와 유지보수성을 크게 향상시킵니다.

 기본 폴더 구조

Content/
├── Effects/
│   ├── Characters/
│   ├── Environment/
│   ├── Weapons/
│   └── Common/
├── Modules/
│   ├── Emitters/
│   ├── Renderers/
│   └── Functions/
├── Data/
│   ├── Curves/
│   └── Tables/
└── Materials/
    ├── Particles/
    └── Environments/

 네이밍 컨벤션

  • 프리픽스 사용 : NS_ (Niagara System), NE_ (Niagara Emitter), NM_ (Niagara Module)
  • 명확하고 설명적인 이름 사용 : NS_CharacterDashEffect, NE_SmokeEmitter

파일 및 폴더 구조화

 효과별 구조화

  • 각 효과에 대해 다음과 같은 구조를 사용합니다.
Effects/Characters/Dash/
├── NS_CharacterDash
├── NE_DashTrail
├── NE_DashDust
└── M_DashParticle

 공통 요소 관리

  • 자주 사용되는 모듈과 함수는 Common 폴더에 저장합니다.
Common/
├── NM_BasicMovement
├── NM_ColorOverLife
└── NF_RandomVector

대규모 프로젝트 관리 전략

 모듈화 및 계층 구조

  • 복잡한 효과를 여러 개의 작은 시스템으로 분할합니다.
NS_ComplexExplosion/
├── NS_CoreExplosion
├── NS_DebrisScatter
└── NS_ShockWave

 매개변수화

  • 다양한 상황에 적용 가능한 유연한 시스템을 만듭니다.
UPROPERTY(EditAnywhere, Category = "Effect Settings")
float ExplosionIntensity = 1.0f;
 
UPROPERTY(EditAnywhere, Category = "Effect Settings")
UNiagaraSystem* ExplosionEffect;
 
void AGameplayActor::TriggerExplosion()
{
    FNiagaraSystemSpawnParameters SpawnParams;
    SpawnParams.SpawnSettings.bAutoDestroy = true;
    
    UNiagaraComponent* NiagaraComp = UNiagaraFunctionLibrary::SpawnSystemAtLocation(
        this, ExplosionEffect, GetActorLocation(), FRotator::ZeroRotator, FVector::OneVector, 
        SpawnParams, true, true);
    
    if (NiagaraComp)
    {
        NiagaraComp->SetFloatParameter("ExplosionIntensity", ExplosionIntensity);
    }
}

재사용 가능한 컴포넌트 설계

 모듈화된 이미터 생성

NE_GenericSmoke
Parameters:
- SmokeColor
- SmokeSize
- EmissionRate

 파라미터 컬렉션 활용

  • 공통 매개변수를 중앙에서 관리합니다.
NPC_GlobalEffectSettings
- WindSpeed
- GlobalTimeOfDay
- EnvironmentType

팀 협업을 위한 프로젝트 설정

 버전 관리 시스템 (예 : Git) 설정

 .gitignore 파일 예시

# Unreal Engine files
*.uasset
*.umap
*.locres
Saved/
Intermediate/
Build/
 
# Niagara specific
*.udn

 문서화

 각 주요 시스템과 모듈에 대한 설명을 README 파일로 작성

# NS_CharacterDash
 
## 개요
캐릭터의 대시 동작을 시각화하는 나이아가라 시스템
 
## 파라미터
- DashSpeed: 대시 속도 (기본값: 1000)
- DashColor: 대시 효과의 색상 (기본값: 파란색)
 
## 사용 방법
1. 캐릭터 블루프린트에 NiagaraComponent 추가
2. 해당 컴포넌트에 이 시스템 할당
3. 대시 동작 시 ActivateSystem() 호출

프로젝트 설정이 개발에 미치는 영향

 에디터 성능 최적화

 Project Settings에서 Niagara 관련 설정 조정

  • Niagara Editor 섹션에서 Default Preview Enabled 옵션을 필요한 경우에만 활성화
  • CPU Budget 및 GPU Budget 설정을 프로젝트 요구사항에 맞게 조정

 런타임 성능 고려

  • 프로파일링 도구 설정 : 프로젝트에 NiagaraProfiler 모듈 추가
#include "NiagaraProfiler.h"
 
void FYourGameModule::StartupModule()
{
    FNiagaraProfiler::RegisterProfileHandler();
}

장기적인 프로젝트 유지보수 전략

 1. 일관된 스타일 가이드 유지

  • 프로젝트 전반에 걸쳐 동일한 네이밍 규칙과 구조 사용

 2. 정기적인 리팩토링

  • 분기별로 공통 패턴을 식별하고 재사용 가능한 모듈로 추출

 3. 성능 모니터링

  • 정기적으로 프로파일링을 실시하여 성능 저하 요인 식별 및 개선

 4. 문서화 습관

  • 복잡한 시스템에 대해 설명 주석 및 별도 문서 작성

 5. 테스트 시나리오 구축

  • 주요 효과에 대한 자동화된 테스트 케이스 작성
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraExplosionTest, "NiagaraTests.ExplosionEffect", EAutomationTestFlags::ApplicationContextMask | EAutomationTestFlags::ProductFilter)
 
bool FNiagaraExplosionTest::RunTest(const FString& Parameters)
{
      UNiagaraSystem* ExplosionSystem = LoadObject<UNiagaraSystem>(nullptr, TEXT("/Game/Effects/NS_Explosion"));
      TestNotNull("Explosion system loaded", ExplosionSystem);
 
      // 추가 테스트 로직...
 
      return true;
}

 6. 에셋 관리

  • 사용하지 않는 에셋 정기적으로 정리
  • 대용량 텍스처 및 복잡한 머티리얼 최적화

 7. 확장성 고려

  • 향후 기능 추가를 고려한 유연한 시스템 설계
  • 매개변수화를 통해 다양한 상황에 대응 가능한 시스템 구축

 이러한 프로젝트 설정 및 관리 방법을 적용하면 나이아가라 시스템을 활용한 효과 개발의 효율성과 품질을 크게 향상시킬 수 있습니다.

 체계적인 구조와 일관된 규칙은 팀 협업을 원활하게 하고, 장기적인 프로젝트 유지보수를 용이하게 합니다.

 또한 성능과 확장성을 고려한 설계는 프로젝트의 안정성과 미래 경쟁력을 보장합니다.

 프로젝트의 규모와 요구사항에 맞춰 이러한 방법들을 적절히 조정하고 적용하세요.