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

Unity中如何修改Canvas内单个RawImage颜色而不影响整个画布

问题原因
  • 直接修改共享材质:Unity UI默认所有元素共用同一份默认材质实例,你修改material.color本质是修改全局共享的材质参数,所有使用该材质的Canvas元素都会同步变色
  • 静态变量全局共享:你定义的fechado变量携带static修饰符,所有挂载该脚本的对象都会共用同一个布尔值,状态会全局同步
  • Color取值不规范:Unity的Color结构参数取值范围为0~1,你传入的255会被自动截断为1,虽然当前效果不受影响但属于不规范写法
修复方案
  • 直接修改RawImage自带的color属性,不要操作材质实例,该属性是每个UI元素独立的参数,修改后不会影响其他元素
  • 移除fechado变量的static修饰符,让每个脚本实例拥有独立的状态控制
  • 提前在Start生命周期中缓存RawImage组件引用,避免每帧调用GetComponent产生不必要的性能开销
  • 如果你确实需要修改材质的特殊效果参数而非基础颜色,可以在初始化时为当前元素单独创建材质实例:targetImage.material = new Material(targetImage.material);,后续修改该材质参数就只会影响当前元素
修复后代码
using UnityEngine;
using UnityEngine.UI;

public class VentCor : MonoBehaviour
{
    // 移除static修饰符,每个脚本实例拥有独立状态
    bool fechado;
    // 缓存当前对象的RawImage组件引用
    RawImage targetImage;

    void Start()
    {
        targetImage = GetComponent<RawImage>();
    }

    void Update()
    {
        if (fechado) 
        {
            targetImage.color = new Color(1f, 0f, 0f); 
        } 
        else 
        { 
            targetImage.color = new Color(0f, 1f, 0f);
        }
    }

    public void fecha()
    {
        fechado = !fechado;
    }
}

内容的提问来源于stack exchange,提问作者Nyxie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:24:02