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();//敵人死亡音效
    }
}

至此,再次運行游戲就能聽到所設置的音效了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM