[Unreal Engine] 런타임 머티리얼 파라미터 값 변경하기
런타임에서 머티리얼의 파라미터 값을 변경해 보자.
(ex. 투명도(Opacity) 값을 0에서 1로 변경하여 보이게 하는 등)
이는 머티리얼이 어디에 적용되어 있느냐에 따라 방법이 나뉜다.
캐릭터 같은 스켈레탈 메쉬에 적용된 머티리얼의 파라미터인가?
일반 머티리얼이나 포스트 프로세스에 적용된 머티리얼의 파라미터인가? 등등
캐릭터 머티리얼
캐릭터의 머티리얼 파라미터를 수정하는 방법을 알아보자.
이는 캐릭터가 피격당할 때, 혹은 분노, 변신 같은 특정 효과들이 적용되는 경우 유용하다.
캐릭터는 일반적으로 SkeletalMeshComponent를 사용한다.
여기에는 Set Scalar Parameter Value on Materials 함수가 있다.
이를 통해, 변경하고자 하는 파라미터의 이름과, 변경할 값을 쉽게 변경할 수 있다.
즉각적인 파라미터 변경 (ex. 0에서 1로 즉시 변경)
타임라인을 통한 선형 변경 (ex. 0에서 1로 n초에 걸쳐 변경)
일반 머티리얼
스켈레탈 메쉬에 적용되지 않은 일반 머티리얼들의 파라미터를 수정하는 방법을 알아보자.
먼저, Material Parameter Collection 에셋을 추가한다.이는, 머티리얼에 사용할 스칼라 값들을 외부 변수로 저장해서, 이를 수정하게 되면 이를 사용하는 머티리얼 내부 값도 변경되도록 할 수 있다.
다음과 같이, Scalar Parameters에 새 값을 추가하고, 파라미터 이름과 기본값을 설정한다.
머티리얼에서 외부에서 값을 수정할 수 있도록 하는 스칼라를 앞서 만든 Material Parameter Collection의 스칼라로 설정한다.
이제 외부에서 이 스칼라 값을 수정하면, 이 스칼라를 사용하는 모든 머티리얼에 해당 값이 적용된다.
이제 머티리얼 파라미터를 변경하고자 하는 블루프린트로 가서, 파라미터 값을 변경하면 된다.
Set Scalar Parameter Value 노드를 통해, Material Parameter Collection를 넣고, 변경할 파라미터와 값을 지정하면 된다.
사용했던 예시
새 타임라인을 만든다. 0초에는 0값, 1초에는 0.3 값이 되도록
- 입력 액션을 하나 만든다.
- 파라미터 변경에 고려할 요소는 두 가지이다.
- 파라미터를 변경할 수 있는 상태인가?
- 이미 파라미터를 변경했는가?
- 파라미터를 변경할 수 있으면,
- 파라미터를 변경하지 않았으면,
- 타임라인을 통해 Set Scalar Parameter Value 노드로 파라미터 값을 업데이트 한다.
- 파라미터 값 변경을 시도했으므로, 중복이 되지 않도록 파라미터 값 변경을 false로 초기화한다.
- 이미 파라미터를 변경했으면,
- 타임라인을 반대(Reverse)로 수행한다.
- 파라미터를 변경하지 않았으면,
- 타임라인이 완료되면, 바로 또 시작하지 못하도록 2초 정도 딜레이를 준다.
- 파라미터를 변경 여부를 확인하고, 반대로 초기화한다.
- 2조 후, 다시 파라미터를 변경할 수 있도록 true로 초기화한다.