Unity3D

Unity Shader.Find의 리턴값이 Null 일 경우 해결

DragonTory 2022. 10. 14. 21:26
반응형

Unity Shader.Find의 리턴값이 Null 일 경우 해결 ( Unity Shader.Find return NULL error )

 

문제:

윈도우 Unity Editor에서는

Shader.Find를 사용 하여 원하는 쉐이더를 얻어서

머티리얼을 정상적으로 생성 할 수가 있는데 

모바일에 빌드해서 올린후 실행 하면

에러: shader Value는 null이 될 수 없습니다.(Value cannot be null)

shader value null error

string shaderName = "Unlit/Texture";

Shader shader Shader.Find(shaderName);
mr.material = new Material(shader);

위의 구문에서 Shader.Find에서 해당 쉐이더를 찾지 못 해서  null 값을 리턴 해서 생기는 에러 입니다.

유니티 에디터의 Hierarchy 상이나 에셋에서 해당 쉐이더를 이용 하여 할당 한 경우에

해당 쉐이더가 빌드시에 포함 되기 때문에 문제가 없지만 

전혀 할당 하여 사용한 적이 없다면 빌드시에 해당 쉐이더가 포함 되어 빌드 되지 않기 때문에

쉐이더를 찾지 못하는 일이 발생 합니다.

 

해결:

1. 설정 변경.

Unity -> Edit -> Project Settings -> Graphics -> Always Included Shaders 

항목에 원하는 쉐이더를 추가 하여 빌드 합니다.

(size를 원하는 숫자만큼 증가시키면 Element 창이 추가 됩니다. 추가된 Element 내용을 변경 하면 됨. )

 

2. Resources 폴더에 Material를 생성.

Asset->Resources 폴더안에 ( 폴더가 없으면 Resources 이름으로 만들기)

Material을 하나 생성 하고( 마우스 우버튼 클릭 -> Create -> Material )

Shader 항목을 원하는 쉐이더로 설정 해주면 빌드 할 때 해당 머티리얼과 쉐이더가 함께 빌드 됩니다. 

 

 

반응형