본문 바로가기
유니티3D[Unity3D]

유니티(Unity) Materials 일부 변경하기

by 은유지니 2021. 6. 23.

위 사진 같이 Mesh Renderer의 Materials에 요소가 1개밖에 없는걸

다음 같이 materials length를 늘려주고 materials[0]에 다른 material을 추가해야하는 일이 생겼다.

애초에 materials length를 2로 만들고 materials[0]만 바꿔주려고 해봤는데 아무런 변화가 없어서 당황했다.


방법1(출처 : https://forum.unity.com/threads/cant-change-material-at-runtime.226138/ 의 답변)

다음 같이 새 Material 배열을 만들어서 materials에 넣어준다.


방법2 - materials size가 변하지 않을때(출처 : https://jeahnote.tistory.com/155)


방법3 - materials[0]만 바꾸면 될 때

GetComponent<MeshRenderer>().material이 의미하는 바가 materials가 여러 개더라도 항상 첫 material element를 의미하기에 이 코드가 가능하다. material[1],material[2], ...를 바꾸고 싶을때는 방법1, 방법2의 방법을 사용해야 한다.


이 내용에 관한 자세한 내용은 유니티 공식 메뉴얼인 https://docs.unity3d.com/ScriptReference/Renderer-materials.html. 에 가면 알 수 있다.

Renderer.materials은 materials array의 복사본이기에 materials중 일부를 변경하고 싶다면

일부만 변경하지말고 1) 전체 값을 따로 가져오고,

2) 가져온 값에서 일부를 변환한 다음에,

3) 변환한 값으로 다시 설정해주라고 한다. 

공식 메뉴얼에서 알려주는건 방법2와 가장 유사할 듯 싶다.


나는 start함수에서 방법1을 응용하여 material size를 2로 바꾸어 주고

방법3으로 material[0]을 바꿔주었다(애초에 첫번째 material만 바꿔주면 되었기에..)