【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

posted @ 2021-04-29 18:37  AshScops  阅读(276)  评论(0编辑  收藏  举报