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

通过漫反射着色器设置随机颜色:物体未变色的问题排查求助

问题分析与修复方案

嘿,我一眼就看出问题所在了——你确实创建了一个带随机颜色的Material,但完全没把它绑定到物体的渲染组件上啊!Unity里物体的颜色是由Renderer组件(比如MeshRenderer)的材质控制的,光创建材质不关联到物体,当然看不到颜色变化啦。

给你整理了修复步骤和改进后的代码:

核心修改点

  • 先获取物体上的Renderer组件(没有的话记得给物体加上)
  • 将你创建好的随机颜色材质赋值给Renderer的material属性(别用sharedMaterial,那会修改共享材质,影响所有用这个材质的物体)

修复后的完整代码

using UnityEngine;

public class ColorManager : MonoBehaviour {
    private void Start() {
        // 获取当前挂载脚本物体的MeshRenderer组件
        MeshRenderer meshRenderer = GetComponent<MeshRenderer>();
        
        // 先检查组件是否存在,避免空引用报错
        if (meshRenderer == null) {
            Debug.LogError("这个物体上没有MeshRenderer组件!先给物体加上这个组件再试~");
            return;
        }

        // 查找Shader,新版本Unity里"Diffuse"可能过时了,试试"Standard"或者对应管线的Shader
        Shader targetShader = Shader.Find("Diffuse");
        if (targetShader == null) {
            Debug.LogError("找不到指定的Shader!如果是新版本Unity,建议换成\"Standard\"或者URP/HDRP对应的Shader");
            return;
        }

        // 创建新材质并设置随机颜色
        Material randomColorMat = new Material(targetShader) {hideFlags = HideFlags.HideAndDontSave};
        randomColorMat.color = new Color(Random.value, Random.value, Random.value);
        
        // 关键一步:把材质赋值给渲染组件
        meshRenderer.material = randomColorMat;
    }
}

额外注意事项

  • 如果你的物体是带动画的模型,需要把MeshRenderer换成SkinnedMeshRenderer
  • 新版本Unity(2018+)默认用的是Standard Shader,Diffuse已经被标记为过时了,建议替换成对应渲染管线的Shader(比如URP的Universal Render Pipeline/Lit)
  • 如果你想修改多个物体的颜色,可以用FindObjectsOfType<MeshRenderer>()遍历所有目标物体再赋值

内容的提问来源于stack exchange,提问作者Reem Al-Assaf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:20:21