unity 渐变颜色小彩灯
程序员文章站
2022-06-01 08:43:49
...
本文由RoadLun原创,转载请注明
效果:
先认识一下颜色:unity支持的颜色模式为RGB(A),即红绿蓝(透明)四个颜色通道,Color是一个结构体,内含r,g,b三个float型参数。取值范围 [0,1],超过这个值也可以,不过可能会报错,或者意想不到的结果(详情见结尾小彩蛋)
Color和Vector3很像,都是包含三个float数值的结构体,所以Color可以看作一个空间坐标点,下图:
所以控制颜色渐变,相当于一由一个三维空间的点,修改其位置,此点位置如何改变,颜色就会发生相应的变化,尽量让这个点走过更多的位置,颜色就会有更丰富的变化,但是r ,g,b的范围不要超过[0,1]。此处我用sin函数来使r,g,b在区域内周期变化。让这三个函数变化的速率有差别,即sin函数的波动频率有差别,如下图:
实现原理就是如此,有点抽象,但是代码很简单:
解释起来就是:用Sin函数实时改变灯光颜色的 r,g,b。
添加完脚本后,请确保游戏对象有Light组件,请自行修改r,g,b的值,不同的值会使呈现不同变化,如果三个值相等,则颜色会从黑到白循环往复。
源码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LightColorCon : MonoBehaviour {
//获取灯光组件,并修改Color
public float r;
public float g;
public float b;
Light light;
Color color;
private void Start()
{
light = GetComponent<Light>();
// color = new Color();
}
private void Update()
{
color.r = Mathf.Sin(r * Time.time);
color.g = Mathf.Sin(g * Time.time);
color.b = Mathf.Sin(b * Time.time);
light.color = color;
}
}
篇尾小彩蛋~~
当RGB取值范围超过 [0,1] 时,光强度大大增加,场景过曝
上一篇: Android动态设置纯色图标的颜色
下一篇: IE浏览器js兼容性问题