我试图从Sphere更改图像/纹理,这是带有代码的材质。
答案 0 :(得分:0)
在新脚本中尝试此操作,并将其作为组件添加到对象中:
C#:
class MaterialSetter : MonoBehaviour{
public void SetMaterial(Material newMaterial)
{
Renderer renderer = GetComponent<Renderer>();
renderer.material = newMaterial;
}
}
如果您具有对目标对象的引用,则可以从任何其他脚本调用SetMaterial。例如,您可以在游戏开始时设置材质,为MaterialSetter类添加一个Start()函数:
C#:
class MaterialSetter : MonoBehaviour{
public Material StartMaterial;
// ...
void Start()
{
SetMaterial(StartMaterial);
}
}
现在,如果要按名称设置材料,则材料需要位于资产/资源文件夹中。您通过Resources.Load获得的所有内容都必须位于该文件夹中。然后代码看起来像这样:
C#:
class MaterialSetter : MonoBehaviour{
public void SetMaterial(string materialName)
{
Material mat = Resources.Load(materialName, typeof(Material)) as Material;
Renderer renderer = GetComponent<Renderer>();
renderer.material = newMaterial;
}
}
如果您想更改材质中使用的纹理(假设您使用Unity标准着色器),则必须通过引用或资源获取纹理,如果您想通过名称获取纹理:< / p>
C#:
public void SetTexture(string textureName)
{
Texture tex = Resources.Load(textureName, typeof(Texture)) as Texture;
Renderer renderer = GetComponent<Renderer>();
renderer.material.SetTexture("_MainTex", tex);
}