Unity3D--场景报警灯光(差值运算)和声音控制(单例模式)
程序员文章站
2022-03-31 20:48:04
...
Unity3D–场景灯光渐变(差值运算)和声音(单例模式)
1:报警灯光
在游戏的开发中,灯光的控制是通过差值运算来达到一个渐变的,
在场景中,添加一个灯光,对它进行赋值
成员变量
public static AlermLight _intance;//单例模式
public bool alermOn = false;//灯光状态
public float animationSpeed=1;//速度
public Light light;//灯光
private float lowIntentsity = 0; //灯光变化起始状态
private float highIntensity = 0.5f;//灯光变化结束状态
private float targeIntensity;
初始化
private void Awake()
{
targeIntensity = highIntensity;
alermOn = false;
_intance = this;//单例模式初始化
}
void Start()
{
light = GetComponent<Light>();
}
在update中每一帧调用,控制颜色渐变
void Update()
{
//差值运算
//float res = Mathf.Lerp(10, 20, t);//t:(0~1)是指差值的比例,比如0.1返回11,0.2返回12,1返回20 ,返回值=(20-10)*t+10
//启动警报装置
if(alermOn)
{
light.intensity = Mathf.Lerp(light.intensity, targeIntensity, Time.deltaTime * animationSpeed);//通过值来控制灯的光强度
if(Mathf.Abs(light.intensity-targeIntensity)<0.05f)//根据绝对值判断是否接近了目标值
{
if(targeIntensity==highIntensity)
{
targeIntensity = lowIntentsity;
}
else if(targeIntensity==lowIntentsity)
{
targeIntensity = highIntensity;
}
}
}
else
{
light.intensity = Mathf.Lerp(light.intensity, 0, Time.deltaTime * animationSpeed);//关闭状态的时候,渐变到0
}
}
2:声音控制(游戏报警声)
成员变量
public bool alermOn = false;//警报是否响起
private GameObject[] sirens;//警报声游戏物体
初始化
alermOn = false;
sirens = GameObject.FindGameObjectsWithTag("Siren");//获取所有Tag为"Sire"的物体
updata中进行触发
void Update()
{
//获取单例模式
AlermLight._intance.alermOn = this.alermOn;
if(alermOn)
{
PlaySiren();//开启声音
}
else
{
StopSiren();//停止声音
}
}
播放声音
//播放声音
private void PlaySiren()
{
//遍历得到的所有播放声音的物体
foreach(GameObject go in sirens)
{
if(!go.GetComponent<AudioSource>().isPlaying)//判断声音是否在播放
{
go.GetComponent<AudioSource>().Play();//播放声音
}
}
}
停止播放声音
//停止声音
private void StopSiren()
{
foreach (GameObject go in sirens)
{
go.GetComponent<AudioSource>().Stop();//停止声音
}
}
上一篇: bboss persistent事务管理介绍 (七)
下一篇: unity在项目中退出游戏功能