Unity横版2D游戏学习实例(08)- 音效设置Audio&音效管理

前言 : 这节主要添加游戏中的音效设置

 

一、下载音效资源

本节使用的音效是Unity商店免费音频资源,具体为下图两个。下载导入后放在Audio文件夹,则准备工作完成。

 

二、如何使用音效

1. 当我们要给角色添加一个音效时,比如:跳跃。把跳跃音效拖拽到Player的Inspector窗口,则会自动添加一个Audio Source组件。
(当然,通过Add Component -> Audio -> Audio Source 手动添加Audio Clip也可以)

(注意,这个跳跃音效是在角色跳跃时才播放,所以需要去掉图中 Play On Awake:游戏启动时播放)


2. 在Player逻辑代码中获取该组件,在跳跃部分调用Play方法。

public class PlayerControl : MonoBehaviour
{
    public AudioSource jumpAudio;
    
    void Start()
    {
        jumpAudio = GetComponent<AudioSource>();
    }
    
    private void MidAirMovement()
    {  
        /**
        此次为跳跃逻辑代码
        */
        
        jumpAudio.Play();
    }
}

此时运行游戏,在角色跳跃时就会有跳跃音效了。如果没有声音,可以注意以下Game窗口右上角的 Mute Audio(静音)

 

三、音效管理SoundManager

在游戏中很小音效很少的情况下,上述简单设置就能满足需求。但是,如果游戏稍微复杂一下,这样的设置方式就会在角色、敌人、场景等等挂上各种Audio Source,显得杂乱无章,而且也不便于之后在菜单中统一管理。所以我们需要建立一个可以统一管理音效的部分。这个部分我们可以给它命名为SoundManager或者AudioManager。

1. 在Hierarchy窗口中创建一个空对象,命名为SoundManager。

2. 在Scripts文件夹中创建一个C#脚本SoundManager,挂载到SoundManager对象上。(为了方便管理,可以在Scripts中建立类如System这种名字的文件夹归集这种Manager脚本)

3. 在脚本中设置需要的音频的字段,设置播放方法

using UnityEngine;
using UnityEngine.Audio;

public class SoundManager : MonoBehaviour
{
    private static SoundManager instance;
    public static SoundManager Instance { get => instance; }

    [Header("环境音效")]
    [SerializeField]
    private AudioClip bgmAudio;

    [Header("角色音效")]
    [SerializeField]
    private AudioClip jumpAudio, hurtAudio;

    [Header("收集音效")]
    [SerializeField]
    private AudioClip cherryAudio;

    [Header("敌人音效")]
    [SerializeField]
    private AudioClip enemyDeathAudio;

    //划分音源(播放音效),便于扩展
    private AudioSource bgmSource, playerSource, enemySource, fxSource;

    private void Awake()
    {
        if (instance == null)
            instance = this;
    }

    void Start()
    {
        //初始化(添加)音源
        initSource();
        //在开始时播放背景音乐
        initBGM();
    }

    private void initBGM()
    {
        bgmSource.clip = bgmAudio;
        bgmSource.loop = true;
        bgmSource.Play();
    }

    private void initSource()
    {
        bgmSource = gameObject.AddComponent<AudioSource>();
        playerSource = gameObject.AddComponent<AudioSource>();
        enemySource = gameObject.AddComponent<AudioSource>();
        fxSource = gameObject.AddComponent<AudioSource>();
    }

    public void PlayJumpAudio()
    {
        playerSource.clip = jumpAudio;
        playerSource.Play();
    }

    public void PlayHurtAudio()
    {
        playerSource.clip = hurtAudio;
        playerSource.Play();
    }

    public void PlayCherryAudio()
    {
        fxSource.clip = cherryAudio;
        fxSource.Play();
    }

    public void PlayEnemyDeathAudio()
    {
        enemySource.clip = enemyDeathAudio;
        enemySource.Play();
    }
}

 4. 添加需要的音频(以下是我觉得合适的音效,可自行听一遍音效资源添加)

5.  在需要的地方调用PlayXXX方法播放(“其他代码”详见前面的章节)

public class PlayerControl : MonoBehaviour{

    private void MidAirMovement()
    {
        if (isJumpPressed && jumpCount > 0)
        {
            /**
            * 其他代码
            */
            SoundManager.Instance.PlayJumpAudio();//跳跃音效
        }
    }
    
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Enemy")
        {
            if (transform.position.y > enemyObj.transform.position.y
                && player_Rbody.velocity.y < 0)
            {
                /**
                * 其他代码
                */
            }
            else
            {
                /**
                * 其他代码
                */

                //受伤音效
                SoundManager.Instance.PlayHurtAudio();
            }
        }
    }
}
public class Cheery : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.layer == playerLayerID)
        {
            /**
            * 其他代码
            */
            SoundManager.Instance.PlayCherryAudio();//cherry被收集音效
        }
    }
}
public class Enemy : MonoBehaviour
{
    public void Damaged()
    {
        /**
        * 其他代码
        */
        SoundManager.Instance.PlayEnemyDeathAudio();//敌人死亡音效
    }
}

至此,再次运行游戏就能听到所设置的音效了。

posted @   rkmao  阅读(1395)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示