欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Unity3D实现警报灯

程序员文章站 2022-11-21 17:47:56
本文实例为大家分享了unity3d实现警报灯的具体代码,供大家参考,具体内容如下 功能介绍:角色进入危险状态,触发警报灯。灯光开启,逐渐变亮,亮度达到最大值,逐渐变暗。 角色脱离危险...

本文实例为大家分享了unity3d实现警报灯的具体代码,供大家参考,具体内容如下

功能介绍:角色进入危险状态,触发警报灯。灯光开启,逐渐变亮,亮度达到最大值,逐渐变暗。 角色脱离危险,警报灯关闭。同时触发报警音乐的开启和关闭。

1.首先在场景中添加一盏警报灯。(alarm light)
2.设置好其transfrom,tag等。
3.默认不开启,intensity值为0. 颜色一般为暗红色rgb(70,0,0)。
4.culling mask为everying,不参与烘培,mode为realtime。

添加脚本:

public float fadespeed=2f; //灯光亮度渐变速度
public float highintensity=4f; //亮度最大值
public float highintensity=0f; //亮度最小值
public float changemargin=0.2f; //改变目标亮度的标志
public bool alarmon; //是否开启警报灯
private float targetintensity; //目标亮度,朝着改变的亮度
private light alarmlight; //警报灯对象
 
void awake(){
 alarmlight=getcomponent<light>();
 alarmlight.intensity=0; //初始量度为0
 targetintensity=highintensity; //目标为最大亮度
}
 
//切换目标亮度
void changetargetintensity(){
 if(mathf.abs(targetintensity-alarmlight.intensity)<changemargin){
 if(targetintensity==hightensity)
  targetintensity=lowtensity;
 else 
  targetintensity=hightensity;
 }
}
 
//控制警报灯开启逻辑代码
void update(){
 if(alarmlight){
 alarmlight.intensity=mathf.lerp(alarmlight.intensity,targetintensity,fadespeed*time.deltatime);
 changdetargetintensity();
 }else{
 alarmlight.intensity=mathf.lerp(alarmlight.intensity,0f,fadespeed*time.deltatime);
 changdetargetintensity();
 }
}

changetargetintensity():警报灯亮度朝着目标亮度变化,当前警报灯亮度达到接近最大值时,目标亮度变为最小值,反之,当前亮度接近最小值时,目标亮度变为最大值。

update():如果开启警报,警报灯亮度就开始朝着目标亮度变化。

static function lerp ( from : float , to : float , t : float ) ;  float  在t时间内,由浮点数a均匀变化到b的插值。

可以在unity视图中,勾选alarmon来检验。在别的脚本中,调用该脚本alarmon,来实现警报灯开关。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。