[TIL_250411] 프로젝트 진행 상황 점검

2025. 4. 11. 21:47·Dev./UE 언리얼 엔진

💭회고

오늘은 프로젝트 캐릭터 구현과 함께 팀원 분이 만들어주신 C++ 코드 리팩토링과 블루프린트 디버깅에 집중한 하루였다.

📒학습 내용

⛵ 판옥선 맵의 배 블루프린트 ― 끝없이 상승하던 이유 찾기

1️⃣ 현상

Tick 노드에서 Set Actor Location 실행 시, 배가 점점 Z+ 방향으로 밀려 올라감.

2️⃣ 재현 코드 (문제 버전)

// Tick
DeltaZ = Sin(GameTime * Speed) * Amplitude
Current = GetActorLocation
SetActorLocation(Current + (0,0,DeltaZ))
  • Current 값에 증분을 계속 더해 무한 상승.

🔵 최종 블루프린트 요약

BeginPlay
  → InitialLocation = GetActorLocation
  → StartTimeline(FloatCurve)

Timeline(Update)
  → OffsetZ = CurveValue * Amplitude
  → SetActorLocation(InitialLocation + (0,0,OffsetZ))
  • Tip: CurveTime을 TotalTime % CurveLength 로 래핑하면 무한 루프 구현 가능.

🐯 호랑이 기사 ― W 스킬 로직 전면 점검


🎆 나이아가라(Niagara) 이펙트 설정 및 활용법

🔗참고링크

 

1. NiagaraSystem 준비 및 블루프린트 설정

  • 헤더 파일에 나이아가라 시스템 선언:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = WeaponVars)
UNiagaraSystem* TracerNS;
  • 블루프린트에서 TracerNS를 원하는 나이아가라 시스템으로 설정한다.

2. NiagaraComponent 생성 및 부착

  • 특정 메시의 소켓에 부착하여 이펙트를 발생시킨다.
UNiagaraComponent* tempTracer = UNiagaraFunctionLibrary::SpawnSystemAttached(
    TracerNS, weaponMeshComp, TEXT("Muzzle"), 
    FVector(0, 0, 0), FRotator(0, 0, 0), 
    EAttachLocation::KeepWorldPosition, true);
  • weaponMeshComp의 "Muzzle" 소켓에 부착된다.

3. 나이아가라 User 파라미터 설정

  • 동적으로 나이아가라의 파라미터를 설정하여 이펙트를 제어할 수 있다.
  • bool 파라미터 설정 예시:
tempTracer->SetNiagaraVariableBool(FString("User.Trigger"), true);

4. Array(Vector) 파라미터 설정

  • 충돌 지점의 배열을 전달하여 이펙트를 다수 지점에서 표현할 수 있다.
TArray<FVector> TraceImpactPosArr;
TraceImpactPosArr.Add(pHitResult.bBlockingHit ? pHitResult.ImpactPoint : pHitResult.TraceEnd);

UNiagaraDataInterfaceArrayFunctionLibrary::SetNiagaraArrayVector(
    tempTracer, TEXT("User.ImpactPositions"), TraceImpactPosArr);

5. 위치(Position) 파라미터 설정

  • 이펙트의 특정 위치를 동적으로 전달하여 더 정확한 효과를 구현한다.
tempTracer->SetNiagaraVariablePosition(
    FString("User.MuzzlePostion"), weaponMeshComp->GetSocketLocation("Muzzle"));
더보기

이펙트가 타겟을 따라다니게 하려면,

UNiagaraFunctionLibrary::SpawnSystemAtLocation() 대신,

타겟의 컴포넌트(예: RootComponent)에 부착할 수 있는 SpawnSystemAttached() 함수를 사용해야 한다.

 

🔹 수정 전 (현재 코드)

if (TigerBleedNiagaraEffect)
{
    UNiagaraFunctionLibrary::SpawnSystemAtLocation(
        GetWorld(),
        TigerBleedNiagaraEffect,
        Target->GetActorLocation(),
        Target->GetActorRotation()
    );
}

🔹수정 후 (타겟에 부착하여 따라다니게)

⬇️TigerKnight의 Ultimate 함수 내에서 독(또는 출혈) 이펙트를 타겟에 부착하여 타겟을 따라다니도록 수정한 예시.

if (TigerBleedNiagaraEffect && Target)
{
    // 타겟의 RootComponent에 효과를 부착합니다.
    UNiagaraFunctionLibrary::SpawnSystemAttached(
        TigerBleedNiagaraEffect,            // 스폰할 Niagara 시스템
        Target->GetRootComponent(),         // 부착 대상 컴포넌트 (예: RootComponent)
        NAME_None,                          // 소켓 이름 (필요하면 지정)
        FVector::ZeroVector,                // 상대적 위치 오프셋 (필요에 따라 조정)
        FRotator::ZeroRotator,              // 상대적 회전 오프셋 (필요에 따라 조정)
        EAttachLocation::KeepRelativeOffset,// 부착 위치 규칙
        true                                // auto destroy (효과가 끝나면 자동 삭제 여부)
    );
}
  • SpawnSystemAttached() 사용:
    이 함수는 Niagara 시스템을 특정 컴포넌트에 부착시키므로, 부착된 컴포넌트(여기서는 타겟의 RootComponent)가 이동하면 이펙트도 함께 이동.
  • 부착 대상:
    Target->GetRootComponent()를 사용하여 타겟 전체에 부착하지만, 만약 타겟 캐릭터의 특정 소켓(예: "EffectSocket")에 부착하고 싶다면, 해당 소켓 이름을 지정.
  • 오프셋 및 회전:
    FVector::ZeroVector와 FRotator::ZeroRotator를 지정하면 부착 대상의 기본 위치와 회전에 따라 이펙트가 설정됩니다. 필요에 따라 원하는 오프셋으로 조정할 수 있다.
  • Auto Destroy:
    마지막 인자인 true는 이펙트가 끝나면 자동으로 삭제되도록 하는 옵션.

🛠️ UE_LOG 매크로 깊이 파기

타겟의 값을 확인하는 디버깅 함수 ::

// .h

public:
	UFUNCTION(BlueprintCallable, Category = "Debug")
	void DebugPrintBuffs(APlayerCharacter* Target) const;
    
// .cpp
void ARatKnight::DebugPrintBuffs(APlayerCharacter* Target) const
{
	if (Target)
	{
		if (UBuffComponent* TargetBuffComp = Target->FindComponentByClass<UBuffComponent>())
		{
			float MoveSpeedMult = TargetBuffComp->GetMoveSpeedMultiplier();
			if (GEngine)
			{
				FString DebugMsg = FString::Printf(TEXT("Target %s MoveSpeed: %.2f"), *Target->GetName(), MoveSpeedMult);
				GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Green, DebugMsg);
			}
		}
		else
		{
			UE_LOG(LogTemp, Warning, TEXT("Target %s has no BuffComponent"), *Target->GetName());
		}
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("Target is nullptr"));
	}
}

자신의 값을 확인하는 디버깅 함수 ::

//.h
public:
	UFUNCTION(BlueprintCallable, Category = "Debug")
	void DebugPrintBuffs() const;

//.cpp
void ATigerKnight::DebugPrintBuffs() const
{
	if (UBuffComponent* BuffComp = const_cast<ATigerKnight*>(this)->FindComponentByClass<UBuffComponent>())
	{
		float CurrentAttackMult = BuffComp->GetAttackMultiplier();
		float CurrentMoveSpeedMult = BuffComp->GetMoveSpeedMultiplier();

		if (GEngine)
		{
			FString DebugMsg = FString::Printf(TEXT("Attack: %.2f, MoveSpeed: %.2f"), CurrentAttackMult, CurrentMoveSpeedMult);
			GEngine->AddOnScreenDebugMessage(-1, 3.0f, FColor::Blue, DebugMsg);
		}
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("BuffComponent not found on %s"), *GetName());
	}
}

 

 

'Dev. > UE 언리얼 엔진' 카테고리의 다른 글

[TIL_250421] UE5 AI 시스템 : Behavior Tree ~ Navigation Invoker  (1) 2025.04.21
[TIL_250417] 액터 이동 블루프린트 로직  (0) 2025.04.17
[TIL_250410] 프로젝트 진행 상황 정리  (0) 2025.04.10
캐릭터 스킬, 스텟 로직 컴포넌트 구조로 만들기 (응용)  (0) 2025.04.09
[ActorComponent] 캐릭터 스킬, 스텟 로직 컴포넌트 구조로 만들기  (0) 2025.04.08
'Dev./UE 언리얼 엔진' 카테고리의 다른 글
  • [TIL_250421] UE5 AI 시스템 : Behavior Tree ~ Navigation Invoker
  • [TIL_250417] 액터 이동 블루프린트 로직
  • [TIL_250410] 프로젝트 진행 상황 정리
  • 캐릭터 스킬, 스텟 로직 컴포넌트 구조로 만들기 (응용)
raindrovvv
raindrovvv
raindrovvv 님의 블로그 입니다.
  • raindrovvv
    raindrovvv 님의 블로그
    raindrovvv
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • Dev. (94)
        • UE 언리얼 엔진 (49)
        • Unity 유니티 (0)
        • Wwise 와이즈 (7)
        • 게임 네트워크 (8)
        • 그래픽스 Graphics (22)
        • 프로젝트 (4)
        • 기타 개발 관련 (4)
      • Computer Science (0)
        • 하드웨어 HW (0)
        • 소프트웨어 SW (0)
        • 통신 (0)
        • 데이터 (0)
      • 블로그 (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    깃
    UE
    Wwise
    게임사운드
    AI
    Unreal
    언리얼
    unrealengine
    언리얼엔진
    셰이더
    게임음향
    TA
    Git
    게임
    게임네트워크
    고라니
    네트워크
    게임개발
    그래픽스
    머티리얼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
raindrovvv
[TIL_250411] 프로젝트 진행 상황 점검
상단으로

티스토리툴바