问题描述
用鼠标单击一个对象会更改被单击对象的颜色
再次选择它时,我将使被单击对象的颜色变回原来的白色。
简单地(更改所选对象的颜色)
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;