Unity渐变色实现

项目场景:

在Unity中实现给物体赋予渐变色。


问题描述:

在Unity中要实现给物体赋予渐变色,实现类似于应力云图分布的效果。

for (int j = 0; j < Num; j++)
{
    float Scale_y = _Heighter[j];

    GapInfos[j] = new GapInfo(i, 0, j, _Sphere);
    GapInfos[j]._Sphere.transform.localPosition = new Vector3(0, 0.5f, i * 0.01f);
    GapInfos[j]._Sphere.transform.RotateAround(new Vector3(0, 0, i), new Vector3(0, 0, 1), j - 90);

    // 颜色赋值
    Vector3 color = GetRGB((Scale_y - _MinHeight) / (_MaxHeight - _MinHeight)) / 255.0f;
    GapInfos[j]._Sphere.GetComponent<MeshRenderer>().material.color = new Color(color.x, color.y, color.z);
}

如下图实现给每个小球赋予颜色,最终实现云图效果(Red->Blue):
R-B

但是现在想将渐变色的实现实现反转,即Blue->Red,首先想到在代码中,将Color对应的rgb值分别取反,如下,但是效果与设想不一致:

Vector3 color = GetRGB((Scale_y - _MinHeight) / (_MaxHeight - _MinHeight)) / 255.0f;
GapInfos[j]._Sphere.GetComponent<MeshRenderer>().material.color = new Color(1 - color.x, 1 - color.y, 1- color.z);

在这里插入图片描述


原因分析:

这里对于云图颜色的取反与传统图像的取反并非同样的概念,正确做法是对归一化后获取颜色的Value值取反,这样才能实现云图颜色范围的正确“取反”效果。

Vector3 color = GetRGB(1 - (Scale_y - _MinHeight) / (_MaxHeight - _MinHeight)) / 255.0f;
GapInfos[j]._Sphere.GetComponent<MeshRenderer>().material.color = new Color(color.x, color.y, color.z);

正确效果如下:
在这里插入图片描述


总结:

如题,特此记录。

慕天有脂人消醉,白首偕老皆莫悔 .HDarker

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值