You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity脚本修改双材质模型单个材质的实现方法问询

Unity脚本修改模型指定材质的方法

嘿,这事儿好办!当你从Blender把带双材质的模型导入Unity后,模型的Renderer组件里会维护一个materials数组,数组里的元素顺序和你在Blender里设置材质的顺序是对应的。咱们只需要通过脚本定位到目标材质的索引,替换成新材质就行。

具体实现步骤

首先创建一个C#脚本,比如命名为ChangeSpecificMaterial.cs,把下面的代码粘进去:

using UnityEngine;

public class ChangeSpecificMaterial : MonoBehaviour
{
    // 拖入你想替换成的目标材质(在Inspector面板操作)
    public Material targetMaterial;
    // 要替换的材质索引:Blender里第一个材质对应0,第二个对应1,按需调整
    public int materialIndexToReplace = 0;

    void Start()
    {
        // 获取模型身上的Renderer组件
        Renderer modelRenderer = GetComponent<Renderer>();
        if (modelRenderer == null)
        {
            Debug.LogError("没找到Renderer组件!记得把脚本挂在模型对象上哦");
            return;
        }

        // 复制一份当前材质数组(Unity里直接修改原数组不会生效,得先拿副本)
        Material[] currentMaterials = modelRenderer.materials;
        
        // 检查索引是否在合法范围内
        if (materialIndexToReplace >= 0 && materialIndexToReplace < currentMaterials.Length)
        {
            // 替换指定位置的材质
            currentMaterials[materialIndexToReplace] = targetMaterial;
            // 把修改后的数组赋值回Renderer
            modelRenderer.materials = currentMaterials;
            Debug.Log("材质替换成功啦!");
        }
        else
        {
            Debug.LogError($"材质索引不对哦!当前模型一共有{currentMaterials.Length}种材质");
        }
    }
}

怎么用这个脚本

  • 把脚本直接拖到你的模型对象上
  • 在Unity的Inspector面板里,把你准备好的新材质拖到targetMaterial的槽位里
  • 根据你在Blender里的材质顺序,设置materialIndexToReplace的值(比如要改第二种材质,就填1)
  • 运行游戏,脚本会在启动时自动完成替换

额外注意事项

  • 如果你的模型是由多个子物体组成的(比如Blender里拆分了多个Mesh),那你需要遍历所有子物体的Renderer组件。可以把GetComponent<Renderer>()改成GetComponentsInChildren<Renderer>(),然后循环处理每个Renderer。
  • 要是想让所有共享原材质的模型一起改变材质,可以把代码里的materials换成sharedMaterials——不过要注意,这种修改是全局的,会影响所有用到该材质的对象哦!

内容的提问来源于stack exchange,提问作者Алексей Бобрович

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:02:51