【unity2D】Light2D-学习记录3-代码控制光照颜色的分段连续渐变

目标

Light2D-学习记录2中的颜色渐变存在局限,它不能分段变化。现在着手解决颜色不能分段变化的问题

前言

Light2D-学习记录2中的颜色变化是一段式的,如下图箭头所示
image

而当我们需要颜色分2段连续变化时,它应当这样变化
image

现在来解决“颜色分N段连续变化”的问题。

代码相关

using System.Collections.Generic; using UnityEngine; using UnityEngine.Experimental.Rendering.Universal; public class GlobalLightTest : MonoBehaviour { private Light2D light2D; private float timer = 0f; private List<Color> colors = new List<Color>();//定义一个泛型集合,存储端点的rgb值 int i = 0;//用于获取泛型集合中的元素 void Start() { light2D = GetComponent<Light2D>(); AddPoint(); } void Update() { if(Input.GetKeyDown(KeyCode.L)) { i = 0; timer = 0f; Debug.Log(light2D.color); } if(Input.GetKeyUp(KeyCode.L)) { i = colors.Count - 1; timer = 0f; Debug.Log(light2D.color); } if(Input.GetKey(KeyCode.L)) ChangeColorStraightly(); else ChangeColorReversely(); } private float Timer(float _seconds) { float _multiple = 1f / _seconds; if(timer <= 1f) { timer += Time.deltaTime * _multiple; } return timer; } private void AddPoint()//可应用于N段连续渐变,在集合里加元素即可 { colors.Add(new Color(1f , 1f , 1f)); colors.Add(new Color(1f , 170f/255 , 70f/255)); colors.Add(new Color(70f/255 , 50f/255 , 20f/255)); } private void ChangeColorStraightly()//顺着变化 { if(timer <= 1f && i < colors.Count - 1 ) { light2D.color = Color.Lerp(colors[i] ,colors[i+1] , Timer(1f)); } else if(i < colors.Count - 1)//如果还有得变 { i++;//继续往后变 timer = 0f;//重置计时器 Debug.Log(light2D.color); } } private void ChangeColorReversely()//反着变化 { if(timer <= 1f && i > 0) { light2D.color = Color.Lerp(colors[i] ,colors[i-1] , Timer(1f)); } else if(i > 0)//如果还有得变 { i--;//继续往前变 timer = 0f;//重置计时器 Debug.Log(light2D.color); } } }

简单验证变化过程的正确性

1.计算代码中,泛型集合中所设颜色的rgb值(精确到小数点后四位)

r g b
第一个端点 1 1 1
第二个端点 1 170/255 = 0.6667 70/255 = 0.2745
第三个端点 70/255 = 0.2745 50/255 = 0.1960 20/255 = 0.0784

2.把计算结果与输出的颜色rgb值相比对
image

结果和预期符合得很好。

最终效果

image


__EOF__

本文作者OtusScops
本文链接https://www.cnblogs.com/OtusScops/p/14719085.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   AshScops  阅读(282)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示