我要在设置新材质后更改并设置3件事:
首先将着色器类型更改为“不亮/彩色”
第二个反照率颜色,例如将其更改为:255,0,0,255
第三金属值从0到1
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DoorsLockManager : MonoBehaviour
{
public bool locked;
public Color lockedColor = Color.red;
public Color unlockedColor = Color.green;
public Renderer rend;
private GameObject[] doorPlanes;
private void Start()
{
doorPlanes = GameObject.FindGameObjectsWithTag("DoorPlane");
for (int i = 0; i < doorPlanes.Length; i++)
{
rend = doorPlanes[i].GetComponent<Renderer>();
if (locked)
{
rend.material.SetFloat("Metallic", 1);
rend.material.color = lockedColor;
}
else
{
rend.material.color = unlockedColor;
}
}
}
// Update is called once per frame
void Update ()
{
}
}
此行不执行任何操作:
rend.material.SetFloat("Metallic", 1);
这是我要更改的内容:
答案 0 :(得分:4)
当您需要更改着色器属性,但不知道要使用什么名称来命名时,请选择材质,单击其设置图标,然后单击“选择着色器” 。从那里,您将看到所有着色器属性名称及其类型,并且您将知道用于更改着色器属性的函数和名称。
使用默认的标准着色器,它看起来像这样:
您需要知道这一点,否则您将需要为每个要更改的属性询问新问题。
您的渲染器参考:
public Renderer rend;
要进行设置,请使用SetXXX
函数:
rend.material.SetFloat("_Metallic", 1); //Metallic is a float
要使用GetXXX
函数来获取它:
float metallic = rend.material.GetFloat("_Metallic"); //Metallic is a float
将反照率颜色更改为255,0,0,255。
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;
请注意,“不亮/彩色” 着色器不具有_Metallic
属性。它具有一个属性,即“ _ Color” 。您可以使用我描述的第一种方法来确定它具有的属性,然后再尝试更改它们。
如果将着色器用于许多不同的对象,该怎么办。我想要所有 当其中一个属性更改时,对象也会更改。
要使用相同的材质更改所有对象,请使用Renderer.sharedMaterial
而不是Renderer.material
。共享材质会更改原始材质,并且只要您尚未在材质上调用Renderer.material
(实际上是为该材质创建新副本并断开渲染器材质与原始材质的连接),其他所有对象都应拾取该新材质。材料。