如何在保持原始材质统一的同时更改对象的颜色

问题描述

用鼠标单击一个对象会更改被单击对象的颜色

再次选择它时,我将使被单击对象的颜色变回原来的白色。

简单地(更改所选对象的颜色)

Material mat = objectManager.ReturnMat(obj);
mat.color=color.white

最初,如果您为每个对象制作了一个uv贴图,则即使您重复更改mat.color也没有问题。

这一次,单独使用没有uv贴图的对象,因此,如果应用mat.color,则原始颜色为

例如,在uv贴图中,指定的颜色是用uv绘制的,因此这并不奇怪,因为即使更改了颜色,它也会被覆盖。

没有uv贴图的对象会更改颜色,因此原始颜色会被吹掉。

我不完全了解着色器或纹理材料

我问你一个问题。

有没有办法改变颜色而又不丢失对象的原始颜色?

我不知道可以单击多少个对象,但是如果您为每次单击保存材料,则可以输入大约一个。

发射不自然是颜色是重叠的原始颜色

解决方法

以下@ 4RZG4答案:

如果是性能问题,则可以制作Dictionary<int,Color>的颜色,并且每次更改对象的Color时,将其与相应的GameObject保存在列表中ID。

GameObject使用保存的Color时,将其从词典中删除。这样,您将仅拥有当前更改的颜色的引用,而不是所有可能更改的引用。

,

您的帖子有点不清楚,我不太了解您想要什么,但是我想您要在将颜色更改为其他颜色之后保留对象的原始颜色。

实现这一点相当容易;只需将材料保存在Start函数中,如下所示:

void Start()
{
    Material Temp = mat;
}

现在,原始材料存储在名为Temp的变量中。

如果您想将mat返回其原始值,可以执行以下操作:

mat = temp;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...