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爱好者 欢迎关注我的博客
我在这里会持续更新我的学习过程

发布了55 篇原创文章 · 获赞 51 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44302602/article/details/104033983