Unity3D——警报灯

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wang_lvril/article/details/80626903

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

  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,来实现警报灯开关。

猜你喜欢

转载自blog.csdn.net/wang_lvril/article/details/80626903
今日推荐