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();//敌人死亡音效
}
}
至此,再次运行游戏就能听到所设置的音效了。
本文来自博客园,作者:rkmao,转载请注明原文链接:https://www.cnblogs.com/rkmao/p/15820591.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下