유니티 문서
https://docs.unity3d.com/kr/530/ScriptReference/MaterialPropertyBlock.html
캐릭터 피격시 matcap을 교체하여 피격을 표현해주고 있다.
sharedMaterial을 변경하면 공유된 모든 material이 변경되니,
material을 직접 레퍼런스를 잡아서 변경해주고있다.
IEnumerator ActiveMatcapCoroutine()
{
material.SetTexture("_MatCap", hurtMatcap);
yield return new WaitForSeconds(0.6f);
material.SetTexture("_MatCap", normalMatcap);
}
하지만 이렇게 하면 material의 레퍼런스를 변경한 순간 별도의 instance가 생성된다.
원상태로 돌아와도 배칭이 깨지게 되서 최적화적으로 문제가 생긴다고 한다.
그런데 'PropertyBlock' 라는 것이 존재한다!
특정 상황에서 material을 잠시 덮어쓰고, 상황이 종료시 제거하면 다시 배칭이 적용된다고한다.
인스턴스를 생성하지 않음
protected MaterialPropertyBlock materialPropertyBlock;
void Awake()
{
materialPropertyBlock = new MaterialPropertyBlock();
materialPropertyBlock.SetTexture("_MatCap", hurtMatcap);
}
// 잠시 할당했다가, 0.3초뒤 삭제한다.
private IEnumerator ActiveMatcapCoroutine()
{
skinnedMesh.SetPropertyBlock(materialPropertyBlock);
yield return new WaitForSeconds(0.3f);
skinnedMesh.SetPropertyBlock(null);
}
하지만 스킨드 메쉬는.. 배칭이..
'🌍 Unity > 최적화' 카테고리의 다른 글
유니티 최적화 : parameter ID의 Hash value 캐싱 (0) | 2020.08.27 |
---|---|
UI Overlay 오브젝트가 배칭이 안되는경우 확인할 것. (0) | 2020.07.31 |
유니티 Sprite / UI OverDraw 최적화 (0) | 2019.08.11 |
유니티 오디오 세팅 / 사운드 재생 딜레이 현상 ( Unity audio play / sound delay / latency ) (0) | 2019.01.01 |
Unity Postprocessing stack v2 / Camera effect / image Effect (0) | 2018.12.29 |