쉐이더 변수에 접근하는 방법
오브젝트가 있다면, 스크립트에서
obj.GetComponent<Renderer>().material.SetFloat("변수이름", 값);
을 통해 접근할 수 있다.
물론 SetFloat말고도 변수의 종류마다 함수들이 있다.
GetFloat해서 변수의 값을 받아오는 것도 가능하다.
유니티 메뉴얼에서 함수의 종류를 참고하면 된다.
https://docs.unity3d.com/ScriptReference/Material.html
주의점
여기서 material 대신 sharedMaterial을 사용해서 접근할 수도 있다.
서로 차이점이 있다.
material
sharedMaterial의 값을 복사해서 인스턴스화 시킨다.
다른 오브젝트는 신경쓰지 않고 독립된 material을 가질 수 있다.
그래서 같은 머터리얼을 사용하지만, 각각 다른 설정값을 줄 수 있다.
사용할 때마다 인스턴스화 시키기 때문에, 배칭이 되지 않는다. ( =드로우콜이 줄지 않는다. 최적화랑 연관)
sharedMaterial
이름 그대로 공유 머터리얼.
하나의 오브젝트에서 값을 바꾸면 이 머터리얼을 가지고 있는 오브젝트들을 한번에 바꿀 수 있다.
예시
예시를 들어보겠다.
적에게 모두 A라는 머터리얼을 달았을 때,
HP가 모두 닳은 적만 투명화되면서 사라진다고 생각해보자.
material을 사용해서 접근했을 때,
접근한 오브젝트만 투명화가 된다.
sharedMaterial을 사용해서 접근했을 때,
접근한 오브젝트의 material과 같은 material을 사용하고 있는 적 모두가 투명화가 된다.
이걸로 하루정도 고민했다. ㅠㅠ
'기타 > Unity' 카테고리의 다른 글
[Unity Shader] 눈 쌓이는 쉐이더 (0) | 2019.02.14 |
---|---|
[Unity] 유니티 그래픽스 최적화 스타트업 (0) | 2019.01.02 |
[Unity Effect] Hit 이펙트 (0) | 2018.12.10 |
[Unity Effect] 나루토 스타일 이펙트 (0) | 2018.12.09 |
[Unity Shader] 쉐이더 인터페이스, Properties (0) | 2018.11.30 |