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

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();//停止声音
        }
    }