Но у камеры и шейдера нет материала.Понятие материала даже не относится к шейдеру по умолчанию.
Да, но материалы просто предоставляют все свойства шейдера, поэтому это актуально, поскольку вы хотите изменить свойства шейдера.
У вас есть пользовательский шейдер, но он используется не для рендеринга GameObject, а для камеры. Для изменения шейдера по-прежнему необходим материал. Если вы не хотите использовать материал, вы можете использовать функции Shader.SetGlobalXXX
, такие как Shader.SetGlobalFloat("_x", 3)
, но это изменит все свойства шейдера.Это нереально.
Правильный способ сделать это - создать временный материал, который вы будете использовать для изменения шейдера, изменить свойства шейдера, а затем обновить шейдер, используемый камерой.Для этого вам необходимо:
Найти шейдер или получить ссылку на шейдер с общедоступной переменной:
Shader camShader = Shader.Find("Hidden/XShader");
Создать материал из шейдера
Material camMat = new Material(camShader);
Измените свойство по своему желанию
camMat.SetFloat("_x", 3);
Примените к измененному свойству шейдера к камере
Camera.main.SetReplacementShader(camShader, "RenderType");
Если вы вручную визуализируете камеру, тогда используйте Camera.main.RenderWithShader(camShader, "RenderType")
вместоCamera.main.SetReplacementShader(camShader, "RenderType")
.