前言 : 這節主要添加游戲中的音效設置
一、下載音效資源
本節使用的音效是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();//敵人死亡音效
}
}
至此,再次運行游戲就能聽到所設置的音效了。