警报模式的效果(Light)"/>
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爱好者 欢迎关注我的博客
我在这里会持续更新我的学习过程
更多推荐
unity制作警报模式的效果(Light)
发布评论