Replicated

[ChronoSpace] Weaken Gravity / Material Saturation Setting 본문

언리얼 엔진/ChronoSpace

[ChronoSpace] Weaken Gravity / Material Saturation Setting

라구넹 2025. 1. 26. 06:35

중력 반전과 다른 건 몇가지 안된다

 

1. 중력 변수 조정

타겟 액터에서 이벤트 발생 시 GravityCoef를 곱하거나 나눠주는 방식으로 작동한다

 

 

2. GravityCoef의 에디터 상 조절

타겟 액터와 어빌리티 태스크에 SetGravityCoef 존재

=> 게임 어빌리티에서 GravityCoef 조정하면 타겟 액터까지 전달됨

상속받아서 블루프린트 만들고

블루프린트 들어가서 값 조정

 

캐릭터에서 해당 블루프린트 어빌리티 설정

 

그밖의 인풋 설정 등등까지 해주면 된다

 

 

3. 매테리얼 채도(Saturation) 조정

void ACSTA_WeakenGravityBox::BeginPlay()
{
    SaturationSetting();
}

void ACSTA_WeakenGravityBox::SaturationSetting()
{
    UMaterialInstanceDynamic* DynMaterial = Cast<UMaterialInstanceDynamic>(StaticMeshComp->GetMaterial(0));
    FLinearColor OrgColor;
    DynMaterial->GetVectorParameterValue(FName(TEXT("Color")), OrgColor);

    // r:h g:s b:v a:a
    FLinearColor HSVColor = OrgColor.LinearRGBToHSV();
    HSVColor.G *= GravityCoef;

    DynMaterial->SetVectorParameterValue(FName(TEXT("Color")), HSVColor.HSVToLinearRGB());
}

GravityCoef에 따라 매테리얼의 채도를 조정하고 싶었다

 

메테리얼에 컬러가 있긴 한데, 저거 들고 와도 RGB라 그냥은 못쓴다

그래서 HSV 포맷으로 바꾸고 S 조정(G가 S에 대응)

다시 RGB로 바꾸고 Set 해준다

 

생성자가 아니라 BeginPlay에서 세팅해주는 이유:

생성자가 에디터 설정 반영되기 이전에(엔진 켜질 때) 실행되어

생성자에서 설정하면 에디터에서 변경한 GravityCoef 값이 적용이 안됨

그래서 BeginPlay에서 설정

 

 

테스트하면서 착각했던 부분은, 액터 사라질 때 EndOverlapEvent를 발생시키고 사라진다는 점이다

기존 중력 반전 코드에서 EndPlay에서 추가 설정했던 부분은 필요가 없다

테스트 시 정상 작동한다