34.AudioSource音频源代码控制

34.核心系统-音效系统-音频源代码控制


34.1 知识点

代码控制播放停止

Play方法 播放音效

//播放 clip。
audioSource.Play();

PlayDelayed方法 延迟播放

//按照指定的延时(以秒为单位)播放 clip。
//建议用户使用该函数代替旧的 Play(delay) 函数,Play(delay) 函数接受以样本(参考采样率为 44.1 kHz)数为单位指定的延时作为参数。
audioSource.PlayDelayed(5);

Stop方法 停止音效

//停止播放 clip。并将音频播放位置重置到开头。如果再次播放该音频,它将从开头开始播放。
audioSource.Stop();

Pause方法 暂停播放音效

//暂停播放 clip。保留音频播放位置。如果再次播放该音频,它将从暂停的位置继续播放。
audioSource.Pause();

UnPause方法 停止暂停播放音效

和暂停后 Play效果是一样的 都会继续播放现在的音效

//恢复播放该 AudioSource。
audioSource.UnPause();

如何检测音效播放完毕

isPlaying变量 判断当前音效是否在播放

//当前正在播放该 clip 吗?(只读)
//如果你希望某一个音效播放完毕后 想要做什么事情
//那就可以在Update生命周期函数中 不停的去检测 它的 该属性
//如果是false就代表播放完毕了
if (audioSource.isPlaying)
{
    print("播放中");
}
else
{
    print("播放结束");
}

如何动态控制音效播放

直接在要播放音效的对象上挂载脚本 控制播放

实例化挂载了音效源脚本的预制体对象

Instantiate(audioSourceObj);
//这种方法 其实用的比较少

添加一个AudioSource来控制播放不同的音效

AudioSource newAudioSource = this.gameObject.AddComponent<AudioSource>();
newAudioSource.clip = myClip;
newAudioSource.Play();

潜在知识点

  • 一个GameObject可以挂载多个音效源脚本AudioSource
  • 使用时要注意 如果要挂载多个 那一定要自己管理他们 控制他们的播放 停止 不然 我们没有办法准确的获取谁是谁

34.2 知识点代码

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

public class Lesson34_音效系统_代码控制音频源 : MonoBehaviour
{
    AudioSource audioSource;

    public GameObject audioSourceObj;

    public AudioClip myClip;

    void Start()
    {
        //要拿到AudioSource组件
        audioSource = this.GetComponent<AudioSource>();

        #region 知识点三 如何动态控制音效播放

        //1.直接在要播放音效的对象上挂载脚本 控制播放

        //2.实例化挂载了音效源脚本的预制体对象
        Instantiate(audioSourceObj);
        //这种方法 其实用的比较少

        //3.添加一个AudioSource来控制播放不同的音效 设置添加的AudioSource的音频文件再播放
        AudioSource newAudioSource = this.gameObject.AddComponent<AudioSource>();
        newAudioSource.clip = myClip;
        newAudioSource.Play();

        //潜在知识点 
        //一个GameObject可以挂载多个 音效源脚本AudioSource
        //使用时要注意 如果要挂载多个 那一定要自己管理他们 控制他们的播放 停止 不然 我们没有办法准确的获取
        //谁是谁

        #endregion
    }

    void Update()
    {
        #region 知识点一 代码控制播放停止

        if (Input.GetKeyDown(KeyCode.P))
        {
            //Play方法 播放音效
            //播放 myClip。
            audioSource.Play();


            //PlayDelayed方法 延迟播放 填写的是秒数
            //按照指定的延时(以秒为单位)播放 myClip。
            //建议用户使用该函数代替旧的 Play(delay) 函数,Play(delay) 函数接受以样本(参考采样率为 44.1 kHz)数为单位指定的延时作为参数。
            audioSource.PlayDelayed(5);

        }

        if (Input.GetKeyDown(KeyCode.S))
        {
            //Stop方法 停止音效
            //停止播放 myClip。
            audioSource.Stop();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            //Pause方法 暂停播放音效
            //暂停播放 myClip。
            audioSource.Pause();
        }

        if (Input.GetKeyDown(KeyCode.X))
        {
            //UnPause方法 停止暂停播放音效 和暂停后 Play效果是一样的 都会继续播放现在的音效
            //恢复播放该 AudioSource。
            audioSource.UnPause();
        }
        #endregion

        #region 知识点二 如何检测音效播放完毕

        //isPlaying变量 判断当前音效是否在播放
        //当前正在播放该 myClip 吗?(只读)
        //如果你希望某一个音效播放完毕后 想要做什么事情
        //那就可以在Update生命周期函数中 不停的去检测 它的 该属性
        //如果是false就代表播放完毕了
        if (audioSource.isPlaying)
        {
            print("播放中");
        }
        else
        {
            print("播放结束");
        }

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏