【Unity】Audio Source组件——用代码动态控制音效的播放、暂停

1.代码控制播放、暂停、停止

给游戏物体添加Audio Source组件
把音频文件拖入Audio Source组件的AudioCilp中
在这里插入图片描述
创建一个脚本并挂载

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson20 : MonoBehaviour
{
    
    
    //声明一个AudioSource类型变量
    AudioSource audioSource;

    void Start()
    {
    
    
        //获取AudioSource组件
        audioSource = this.GetComponent<AudioSource>();
    }
    void Update()
    {
    
    
        //1.播放
        //  按下P键播放
        if (Input.GetKeyDown(KeyCode.P))
        {
    
    
            audioSource.Play();

            //补充:延迟播放(参数1 延迟几秒)
            //audioSource.PlayDelayed(3);
        }

        //2.暂停
        //  按下空格暂停播放
        if (Input.GetKeyDown(KeyCode.Space))
        {
    
    
            audioSource.Pause();

            //补充:停止暂停,和暂停后再Play效果一样
            //audioSource.UnPause();
        }

        //3.停止播放
        //  按S键停止播放
        if (Input.GetKeyDown(KeyCode.S))
        {
    
    
            audioSource.Stop();
        }
    }
}

2.如何检测音效播放完毕

如果我们希望音乐播放完毕后 做一些事情
就需要检测音乐是否播放完毕

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson20 : MonoBehaviour
{
    
    
    //声明一个AudioSource类型变量
    AudioSource audioSource;

    void Start()
    {
    
    
        //获取AudioSource组件
        audioSource = this.GetComponent<AudioSource>();
    }
    void Update()
    {
    
    
        //使用.isPlaying来检测(返回值是bool)
        if (audioSource.isPlaying)
        {
    
    
            print("播放中");
        }
        else
        {
    
    
            print("播放结束了");
        }
    }
}

3.如何动态控制音效播放

方式一:直接在要播放音乐的对象上挂载脚本 来控制播放
1.在对象身上的脚本声明一个AudioSource类型的变量,
2.再通过.GetComponent获取挂载的AudioSource音效源脚本
3.控制此音效源脚本,实现动态控制播放
上面的知识点一就是用的这种方法

方式二:实例化挂载了音效源脚本的对象
(此方式用的较少,因为还要管理音效预制体的销毁)
1.把要播放的音效制作成预制体 且 勾选Play On Awake参数
在这里插入图片描述
2.给场景中一个对象挂载脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson20 : MonoBehaviour
{
    
    
    //外部拖入音效预制体
    public GameObject obj;

    void Start()
    {
    
    
        //实例化外部拖入的音效预制体
        GameObject.Instantiate(obj);
    }
}

4.如此以来 只要这个预制体一被实例化,就会立刻播放预制体音效
在这里插入图片描述
方式三:用一个AudioSource来控制播放不同的音效
AudioSource组件的AudioClip参数是可以通过代码编辑的
在这里插入图片描述
并且 还可以声明AudioClip类型的变量,从而从面板拖入音效源:
在这里插入图片描述
面板拖入拖入:
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson20 : MonoBehaviour
{
    
    
    //从外部面板拖入的音频
    public AudioClip clip;

    void Start()
    {
    
    
        //获取一个AudioSource组件
        //  获取了自己挂载的对象的AudioSource组件
        AudioSource audio = this.gameObject.GetComponent<AudioSource>();
        //让获取到的这个AudioSource组件的AudioClip参数 = 我从外部拖入的音频文件
        audio.clip = clip;
        //播放
        audio.Play();
    }
}

猜你喜欢

转载自blog.csdn.net/SEA_0825/article/details/127115125