使用脚本从球体更改材质图像/纹理

本文关键字:图像 纹理 脚本 | 更新日期: 2023-09-27 18:20:02

我正在尝试用代码从"材质"的"球体"更改"图像/纹理"。

使用脚本从球体更改材质图像/纹理

在新脚本中尝试此操作,并将其作为组件添加到对象中:

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);
    }
}

现在,如果要按名称设置材质,则材质需要位于文件夹Assets/Resources中。您通过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 Standard Shader),则必须通过引用或从资源中获取纹理(如果要通过名称获取):

C#:

public void SetTexture(string textureName)
{
    Texture tex = Resources.Load(textureName, typeof(Texture)) as Texture;
    Renderer renderer = GetComponent<Renderer>();
    renderer.material.SetTexture("_MainTex", tex);
}