Color.Lerp的使用

本文介绍如何在Unity中使用Color.Lerp函数来实现从一种颜色到另一种颜色的平滑过渡。通过在Update函数中不断更新颜色值,可以创建出色彩渐变的视觉效果。文中提供了一个具体的示例,展示如何给材质设置颜色渐变。

当我们需要颜色渐变的时候就需要用到Color.Lerp

Color.Lerp(a,b,t);
Color.Lerp返回一个Color,当t为0时返回a,t为1时返回b。当t从0到1时,效果便是从颜色a到颜色b的渐变。

我们把需要改变颜色的地方放在Update函数里。
这里我用给材质设置颜色举例。
colorTime初始值为零
Time.deltaTime为一帧的时间
colorTime不断加大,颜色就会从ColorA到ColorB。

 private void Update()
        {
				colorTime += Time.deltaTime;
				mat.SetColor("_Color", Color.Lerp(ColorA,ColorB, colorTime));
		}
using System; using UnityEngine; using UnityEngine.EventSystems; using BDFrame; using EventSystem = BDFrame.EventSystem; public class ColorPicker : MonoBehaviour { private float customH = 0; private float customS = 0; private float customV = 0; public RectTransform marker; public RectTransform picker; public Color color1; public Color color2; public Color color3; public Color color4; public Color color5; public Color color6; public Color color7; public Color color8; public Color color9; public Color color10; public Color color11; public Color color12; public Color color13; public Color color14; public Color color15; public Color color16; public Color color17; public Color color18; public Color color19; public Color color20; public Color color21; public float curPos; public ColorTypes colorTypes = ColorTypes.WHITE_COLOR; public void OnHide() { gameObject.SetActive(false); } public void OnShow() { gameObject.SetActive(true); UICarCustomizePresenter presenter = UIManager.Instance.GetUIPresenter("UICarCustomize") as UICarCustomizePresenter; curPos = presenter.GetCustomPos(); UpdateMarker(curPos); colorTypes = ColorTypes.WHITE_COLOR; //ChangeColor(); } public void OnClickColored(int index) { EventSystem.EventTrigger<int>(EventDefine.ColorTypes, index); } private void UpdateMarker(float pos) { Vector2 parentSize = picker.rect.size; Vector2 localPos = marker.localPosition; localPos.x = (pos - picker.pivot.x) * parentSize.x; marker.localPosition = localPos; } public void PointerUpdate(BaseEventData e) { Vector2 v = GetNormalizedPointerPosition(picker,e); if (v.x <= 0.04f) { v.x = 0.04f; } else if (v.x >= 0.96f) { v.x = 0.96f; } curPos = v.x; UpdateMarker(v.x); ChangeColor(); } public void ChangeColor() { Color color; if (curPos > 0.04f && curPos <= 0.086f) { color = Color.Lerp(color1, color2, (curPos - 0.04f) / 0.046f); } else if (curPos > 0.086f && curPos <= 0.132f) { color = Color.Lerp(color2, color3, (curPos - 0.086f) / 0.046f); } else if (curPos > 0.132f && curPos <= 0.178f) { color = Color.Lerp(color3, color4, (curPos - 0.132f) / 0.046f); } else if (curPos > 0.178f && curPos <= 0.224f) { color = Color.Lerp(color4, color5, (curPos - 0.178f) / 0.046f); } else if (curPos > 0.224f && curPos <= 0.27f) { color = Color.Lerp(color5, color6, (curPos - 0.224f) / 0.046f); } else if (curPos > 0.27f && curPos <= 0.316f) { color = Color.Lerp(color6, color7, (curPos - 0.27f) / 0.046f); } else if (curPos > 0.316f && curPos <= 0.362f) { color = Color.Lerp(color7, color8, (curPos - 0.316f) / 0.046f); } else if (curPos > 0.362f && curPos <= 0.408f) { color = Color.Lerp(color8, color9, (curPos - 0.362f) / 0.046f); } else if (curPos > 0.408f && curPos <= 0.454f) { color = Color.Lerp(color9, color10, (curPos - 0.408f) / 0.046f); } else if (curPos > 0.454f && curPos <= 0.5f) { color = Color.Lerp(color10, color11, (curPos - 0.454f) / 0.046f); } else if (curPos > 0.5f && curPos <= 0.546f) { color = Color.Lerp(color11, color12, (curPos - 0.5f) / 0.046f); } else if (curPos > 0.546f && curPos <= 0.592f) { color = Color.Lerp(color12, color13, (curPos - 0.546f) / 0.046f); } else if (curPos > 0.592f && curPos <= 0.638f) { color = Color.Lerp(color13, color14, (curPos - 0.592f) / 0.046f); } else if (curPos > 0.638f && curPos <= 0.684f) { color = Color.Lerp(color14, color15, (curPos - 0.638f) / 0.046f); } else if (curPos > 0.684f && curPos <= 0.73f) { color = Color.Lerp(color15, color16, (curPos - 0.684f) / 0.046f); } else if (curPos > 0.73f && curPos <= 0.776f) { color = Color.Lerp(color16, color17, (curPos - 0.73f) / 0.046f); } else if (curPos > 0.776f && curPos <= 0.822f) { color = Color.Lerp(color17, color18, (curPos - 0.776f) / 0.046f); } else if (curPos > 0.822f && curPos <= 0.868f) { color = Color.Lerp(color18, color19, (curPos - 0.822f) / 0.046f); } else if (curPos > 0.868f && curPos <= 0.914f) { color = Color.Lerp(color19, color20, (curPos - 0.868f) / 0.046f); } else if (curPos > 0.914f && curPos <= 0.96f) { color = Color.Lerp(color20, color21, (curPos - 0.914f) / 0.046f); } else { color = color1; } //Debug.Log(" !!!!!! Color : " + color); //Color.RGBToHSV(color, out float h, out float s, out float v); //Debug.Log($" !!!!!! : HSV({h},{s},{v})"); // 转换后的默认数值 //Debug.Log($" !!!!!! : HSV({Convert.ToInt32(h * 360)},{Convert.ToInt32(s * 100)},{Convert.ToInt32(v * 100)})"); // shader上现实的数值 //customH = h; customS = s; customV = v; //color = Color.HSVToRGB(h, s - 0.01f, v - 0.16f); EventSystem.EventTrigger<float>(EventDefine.CarMetallic, 0.7f); EventSystem.EventTrigger<Color>(EventDefine.CustomColor, color); EventSystem.EventTrigger<float>(EventDefine.CustomPos, curPos); if (colorTypes != ColorTypes.CUSTOM_COLOR) { OnClickColored(7); } } private Vector2 GetNormalizedPointerPosition(RectTransform rect, BaseEventData e) { return GetNormScreenSpace(rect, e); } private Vector2 GetNormScreenSpace(RectTransform rect, BaseEventData e) { Vector2 screenPoint = ((PointerEventData)e).position; Vector2 localPos = rect.worldToLocalMatrix.MultiplyPoint(screenPoint); float x = Mathf.Clamp01((localPos.x / rect.rect.size.x) + rect.pivot.x); float y = Mathf.Clamp01((localPos.y / rect.rect.size.y) + rect.pivot.y); return new Vector2(x, y); } } 将此代码方案简化
07-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值