unity制作警报模式的效果(Light)

最近在开发秘密行动(stealth)
里边的警报系统效果挺有趣的
这篇博客实现一下警报的效果 大致就是让一个灯光闪烁

首先創建一個Light 我們的思路是动态新修改Light中的Intensity来实现修改灯光的闪烁
在这里插入图片描述
这个值越大 灯光越亮(还有可以修改Range(半径)来控制灯光的亮度)
我们只需要让它在一个范围之内动态变化即可

我们创建一个脚本来动态修改

public bool isAlarm ;//控制警报是否开始

    private float AnimSpeed = 3;//警报切换速度

    private float lowIntensity = 0;//最小值
    private float highIntensity = 0.6f;//最大值

    private float TargetIntensity;//用来变化的值

    private Light alarmLight;

    private void Start()
    {
        TargetIntensity = highIntensity;//默认最亮
        isAlarm = false;
        alarmLight = GetComponent<Light>();//脚本赋值
    }
    private void Update()
    {
        if(isAlarm)
        {
            //报警状态
            alarmLight.intensity = Mathf.Lerp(alarmLight.intensity, TargetIntensity,AnimSpeed * Time.deltaTime);
            //随着每帧的变化而变化
            if (Mathf.Abs(alarmLight.intensity - TargetIntensity) < 0.01f)
            {
                //近似相等
                if (highIntensity == TargetIntensity)
                {
                    TargetIntensity = lowIntensity;
                }
                else if (TargetIntensity == lowIntensity)
                {
                    TargetIntensity = highIntensity;
                }
            }

        }
       
    }

脚本不是很难理解
其中有个插值(lerp)
Unity 的mathf.lerp(float a,float b,float t)是线性插值函数

a,b的顺序很重要,

如果a=10,b=0,则说明是从10到0的变化。

如果是a=0,b=10,则说明是从0向10的变化。

t的范围在0,1之间(这很重要)
每一次调用mathf.lerp函数,它根据参数返回一个值。

比如 mathf.lerp(0,10f,0.25f)=2.5

mathf.lerp(10f,0,0.25f)=7.5

(注意上述两者的区别)
最后给大家一个效果图
在这里插入图片描述
如果你也是unity爱好者 欢迎关注我的博客
我在这里会持续更新我的学习过程

©️2020 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值