상세 컨텐츠

본문 제목

[Unity]renderer.material 과 renderer.sharedMaterial의 차이점

Unity

by 메타샤워 2023. 7. 19. 15:30

본문

renderer.material은 renderer에 소속된 재질이다. 특정 렌더러의 전용 재질로 사용된다.

 
sharedMaterial은 여러 renderer들이 공유해서 사용하는 재질이다. 여러 렌더럴들이 공유해서 사용하도록 설계되있다.
 
이들의 구분을 위해 재질에는 소유자(owner)정보가 들어있으며, 이를 통해 재질이 특정 렌더러에 전용인지, 공유인지 판단한다.
 
renderer.sharedMaterial은 renderer에 할당된 재질의 레퍼런스를 그대로 돌려준다.
하지만 renderer.material은 가져올 재질의 소유자 정보를 먼저 검사하고, 소유자가 renderer가 아니면 원래 할당된 재질의 레퍼런스를 주는것이 아닌 재질을 동일하게 복사해서 생상한 후 돌려준다.
 
아래와 같은 경우 material이 호출될 때마다 리소스가 증가된다.
Material myMaterial = Resource.Load(새로운 재질);
renderer.sharedMaterial = myMaterial;
renderer.material.SetTextureOffset(재질 변경);

 

아래의 경우는 리소스가 증가 하지 않는다.

Material myMaterial = Resource.Load(새로운 재질);
renderer.material = myMaterial;
renderer.material.SetTextureOffset(재질 변경);

아래도 증가하지 않는다.

Material myMaterial = Resource.Load(새로운 재질);
renderer.sharedMaterial = myMaterial;
renderer.sharedMaterial.SetTextureOffset(재질 변경);
 
 
 
특히 재질의 애니메이션 시키고자 할때는, 이를 주의해서 사용하자 안그러면 리소스 릭이 발생한다.

 

관련글 더보기