GameObject segment = GameObject.Find("DisplayArea_" + i);
MeshRenderer renderer = segment.GetComponent<MeshRenderer>();
Material mat = new Material(Shader.Find("Custom/MyShader"));
mat.mainTexture = option.Image360;
上面这份代码,在Unity Editor中可以使用,但是编译到Quest 2之后,却没有反应。这可能是由于多种原因引起的,可以按照下面的步骤修改。
设置Graphics API
The Oculus Quest 2 primarily uses OpenGL ES and Vulkan.
确保shader compatible with the Graphics API
设置Graphics
如果使用Visual Studio联调的话,可能会看到这个报错:
System.ArgumentNullException: Value cannot be null.
Parameter name: shader
解决方案:
Go to the graphics settings in Unity (Edit > Project Settings > Graphics) and make sure your custom shader is included in the list of always included shaders. This ensures the shader is compiled into the build.
除了自己的custom shader需要拖进来之外,一些内置的shaders,例如Unlit/Texture 也需要拖进来。这可能是由于将Graphics API修改了,这些内置的shaders也不能被找到了。
其他
如果还不行,那可能是其他代码逻辑的问题,或者是shader的问题。那可以先写一个简单的shader,例如简单变成红色,赋值到一个default cube or sphere上,一步一步地看是哪里出了问题。例如在我的代码中,就发现全部360图片呈现白色,是因为另外一个球遮挡住了其他球。