Если вам нужно изменить свойство шейдера, но вы не знаете, что использовать для правильного имени, выберите материал, нажмите на значок его настроек, затем нажмите «Выбрать шейдер» .Оттуда вы увидите все имена свойств шейдера и их типы, а также узнаете, какую функцию и имя использовать для изменения свойств шейдера.

При использовании стандартного шейдера по умолчанию это выглядит примерно так:

Вам нужно знать это, в противном случае вам нужно будет задать новый вопрос для каждого свойства, которое выхочу изменить.
Ваш справочник по Renderer:
public Renderer rend;
Чтобы установить его, используется функция SetXXX
:
rend.material.SetFloat("_Metallic", 1); //Metallic is a float
Toполучить его * используется функция GetXXX
:
float metallic = rend.material.GetFloat("_Metallic"); //Metallic is a float
Чтобы изменить или получить цвет Альбедо на 255,0,0255.
rend.material.SetColor("_Color", new Color32(255, 0, 0, 255));
Color color = rend.material.GetColor("_Color");
Обратите внимание, что я использовал Color32
вместо Color
, поскольку Color32
принимает значения от 0
до 255
, а Color
ожидает значения от 0
до 1
.
Чтобы изменить шейдер материала на "Unlit / Color" , просто найдите его, а затем назначьте его на материал:
Shader shader = Shader.Find("Unlit/Color");
rend.material.shader = shader;
Обратите внимание, что "Unlit/ Color " шейдер не имеет свойства _Metallic
.У него есть одно свойство: "_ Color" .Вы можете использовать первый метод, который я описал, чтобы определить, какими свойствами он обладает, прежде чем пытаться их изменить.
Что если шейдер используется на многих различных объектах.Я хочу, чтобы все объекты изменялись при изменении свойства одного из них.
Чтобы изменить все объекты с использованием того же материала, используйте Renderer.sharedMaterial
вместо Renderer.material
.Разделяемый материал изменяет исходный материал, и все остальные объекты должны подбирать этот новый материал, если вы не вызвали Renderer.material
для материала, который фактически делает новую копию для указанного материала и отсоединяет материал визуализации от исходного материала.