언리얼 엔진/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에서 추가 설정했던 부분은 필요가 없다
테스트 시 정상 작동한다