unity 渐变颜色小彩灯

本文由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] 时,光强度大大增加,场景过曝

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值