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

Unity中UI按钮切换立方体透明度时颜色丢失问题求助

解决立方体透明度切换时颜色丢失的问题

我来帮你分析下问题根源,然后给出针对性的修复方案:

问题出在哪?

你的代码里有两个核心错误:

  1. 错误获取颜色模板:你在OnOpacityButton里调用GetComponent<Renderer>().material.color,但空GameObject本身没有Renderer组件,所以这里拿到的是默认的白色(Color.white),第二次切换时自然就把所有立方体的材质改成了白色。
  2. 未保留原始RGB颜色:你直接用新的Color对象覆盖材质颜色,完全没保留每个立方体原本的红、绿、蓝通道值,导致颜色直接丢失。

修复后的完整脚本

我们需要提前保存每个立方体材质的初始颜色(包含RGB和原始Alpha),切换时只修改Alpha通道,同时用更清晰的布尔变量控制切换状态:

using UnityEngine;

public class OpacityController : MonoBehaviour
{
    // 定义两个透明度状态常量
    private const float FullOpacity = 1f;
    private const float HalfOpacity = 0.5f;
    // 存储每个Renderer对应的初始颜色(保留原始RGB)
    private Color[] _initialColors;
    // 控制当前透明度状态的开关
    private bool _isHalfOpacity = false;
    // 存储所有子物体的Renderer组件
    private Renderer[] _renderers;

    void Start()
    {
        // 获取空对象下所有子物体的Renderer
        _renderers = GetComponentsInChildren<Renderer>();
        // 初始化颜色数组,保存每个立方体的原始颜色
        _initialColors = new Color[_renderers.Length];
        for (int i = 0; i < _renderers.Length; i++)
        {
            _initialColors[i] = _renderers[i].material.color;
        }
    }

    public void OnOpacityButton()
    {
        // 切换透明度状态
        _isHalfOpacity = !_isHalfOpacity;
        // 遍历所有立方体修改透明度
        for (int i = 0; i < _renderers.Length; i++)
        {
            // 取出对应立方体的原始颜色,只修改Alpha通道
            Color targetColor = _initialColors[i];
            targetColor.a = _isHalfOpacity ? HalfOpacity : FullOpacity;
            // 应用到材质(用material而非sharedMaterial,避免修改原始材质资源)
            _renderers[i].material.color = targetColor;
        }
    }
}

关键优化说明

  • 保存初始颜色:在Start阶段就把每个立方体的原始颜色存起来,确保切换时不会丢失RGB信息。
  • 仅修改Alpha通道:每次只改变Color的a值,完全保留原始的r/g/b值,完美维持立方体原本的颜色。
  • 布尔变量控状态:比用i计数取模更直观,也避免了计数溢出的潜在问题。
  • 正确使用material:用material而不是sharedMaterial,只会修改当前物体的材质实例,不会影响项目里的原始材质资源(如果多个物体共用同一材质,可按需调整,但这里每个立方体有独立材质,用material更安全)。

额外注意

记得把你的三个透明材质(red_mat、blue_mat、green_mat)的Rendering Mode设置为Transparent或Fade,否则修改Alpha通道可能不会生效哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:52:41