• 【Unity3D】AudioSource组件


    1 简介

            1)AudioSource 与 AudioListener 简介

            AudioSource音频源)组件用于控制播放 AudioClip(音频片段),能够控制 2D 和 3D(距离越远,声音越小)声音播放,它一般挂在产生声源的游戏对象上。

            AudioListener (音频监听器)组件用于监听 AudioSource 播放的音频,它一般挂在 Camera 或游戏角色上,每个场景中最多只有一个 AudioListener。AudioSource 播放音频时,会产生一个音频场,只有在音频场范围内的 AudioListener 才能监听到声音。

            AudioClip 是音频片段,AudioSource 在播放音频时,必须绑定一个 AudioClip。

            2)AudioSource 面板属性

    • AudioClip:音频片段
    • Mute:静音
    • Play On Awake:游戏开始时播放声音
    • Loop:是否循环播放
    • Volume:音量
    • Spatial Blend:2D、3D 声音调节
    • Min Distance:3D 声音最小距离
    • Max Distance:3D 声音最大距离

            补充:Unity3D 官方提供了一些音频资源,如下:

            3)代码控制音频播放

    1. // 加载音频片段
    2. AudioClip audioClip = (AudioClip) Resources.Load("Audio/Footstep01");
    3. // 获取AudioSource组件
    4. AudioSource audioSource = GetComponent();
    5. // 绑定音频片段
    6. audioSource.clip = audioClip;
    7. // 播放音频(选其中一种方式)
    8. audioSource.Play();
    9. // 此方式播放音频, Unity3D会在transform.position处创建一个空游戏对象, 播放完音频后自动销毁该游戏对象
    10. AudioSource.PlayClipAtPoint(audioClip, transform.position);

    2 应用

            本节将通过一个案例展示 Unity3D 播放立体声效果。

            1)游戏界面

             2)游戏对象层级结构

             说明:AudioSourceSphere 游戏对象添加了 AudioSource 组件,并且将 Unity3D 官方提供的 Footstep01.wav 音频片段拖拽到 AudioSource 组件中;Player 游戏对象添加了 AudioListener,并移除 MainCamera 中默认添加的 AudioListener。

            3)AudioSource 组件

            4)脚本组件

            AudioController.cs

    1. using UnityEngine;
    2. public class AudioController : MonoBehaviour {
    3. private PlayerController player;
    4. private AudioSource audioSource;
    5. private float audioInternal = 0.3f;
    6. private float waitTime = 0;
    7. private void Awake() {
    8. audioSource = GetComponent();
    9. player = GameObject.Find("Player").GetComponent();
    10. }
    11. private void Update() {
    12. waitTime += Time.deltaTime;
    13. if (player.isMoving) {
    14. PlayAudio();
    15. }
    16. }
    17. private void PlayAudio() {
    18. if (waitTime > audioInternal) {
    19. audioSource.Play();
    20. waitTime = 0;
    21. }
    22. }
    23. }

            说明: AudioController 脚本组件挂在 AudioSourceSphere 游戏对象上。

            PlayerController.cs

    1. using UnityEngine;
    2. public class PlayerController : MonoBehaviour {
    3. public bool isMoving = false;
    4. private void Update() {
    5. isMoving = Move();
    6. }
    7. private bool Move() {
    8. float hor = Input.GetAxis("Horizontal");
    9. float ver = Input.GetAxis("Vertical");
    10. if (Mathf.Abs(hor) > 0.1f || Mathf.Abs(ver) > 0.1f) {
    11. Vector3 dire = new Vector3(hor, 0, ver) * Time.deltaTime * 10;
    12. transform.position += dire;
    13. return true;
    14. }
    15. return false;
    16. }
    17. }

            说明: PlayerController 脚本组件挂在 Player 游戏对象上。 

            5)运行效果

            按 ↑ ↓ ← → 键控制胶囊体移动,在不同位置可以听到不同音量大小的脚步声。

  • 相关阅读:
    易观分析联合中小银行联盟发布海南数字经济指数,敬请期待!
    SpringIoc容器之Aware
    集群性能优化:压缩和扩容策略
    flink 基于flink-sql-connector-elasticsearch6二次开发思路
    NIFI关于Parameter Contexts的使用
    ubuntu18.4(后改为20.4)部署chatglm2并进行基于 P-Tuning v2 的微调
    Flutter快速入门一:Dart语言
    SEACALL海外呼叫中心系统的优势包括
    无人驾驶: 对多传感器融合的一些思考(雷达与相机)
    SpringCloud基础知识
  • 原文地址:https://blog.csdn.net/m0_37602827/article/details/126334284