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

Unity中如何用单个颜色选择器独立修改多个物体颜色?

解决方案

不用更换核心实现思路,只需要给现有逻辑加上目标物体选择机制,就能用一个颜色轮控制所有子物体的独立颜色修改,具体步骤如下:

1. 全局颜色管理脚本

创建一个ColorPickerManager脚本,挂在你的颜色轮UI对象上,用来保存当前选中的目标物体,并统一处理颜色修改逻辑:

using UnityEngine;

public class ColorPickerManager : MonoBehaviour
{
    // 你预设的材质数组(保留原来的BodyColorMat)
    public Material[] BodyColorMat;
    // 当前选中的目标渲染器
    private Renderer _targetRenderer;

    // 供子物体的颜色按钮调用,传入要修改的物体渲染器
    public void SetTarget(Renderer target)
    {
        _targetRenderer = target;
        // 可选:如果需要让颜色轮同步显示当前物体的颜色,在这里添加逻辑
    }

    // 你的蓝色材质切换方法(修改为针对目标物体)
    public void BlueColor()
    {
        if (_targetRenderer != null)
        {
            _targetRenderer.material = BodyColorMat[0];
        }
    }

    // 如果是颜色轮自定义选色,添加这个方法(选色完成后调用)
    public void ApplyCustomColor(Color selectedColor)
    {
        if (_targetRenderer != null)
        {
            // 使用material会创建材质实例,保证每个物体颜色独立;用sharedMaterial会修改原始材质,按需选择
            _targetRenderer.material.color = selectedColor;
        }
    }
}

2. 给子物体按钮绑定事件

给每个子物体的颜色按钮设置点击事件:

  • 在按钮的OnClick()列表中,添加ColorPickerManager的SetTarget方法
  • 将当前子物体的Renderer(或SkinnedMeshRenderer,根据你的物体类型)拖到方法的参数栏中

这样点击某个子物体的颜色按钮时,就会把该物体设为颜色轮的当前操作目标。

3. 颜色轮逻辑对接

如果你的颜色轮是自定义实现或用插件,只需要在选色完成后,调用ColorPickerManager的ApplyCustomColor方法,传入选中的颜色即可;如果是用预设材质切换(比如你的BlueColor),直接调用对应的方法就行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:35:02