核心理念: 好的音效不是“听到什么”,而是让大脑“确认什么”。 音效在游戏中承担了三个角色:反馈 (Feedback)、情绪 (Mood) 和 空间 (Space)。
您提到的“吃经验 Do-Re-Mi”效果,学名叫做 动态音高调整。它是解决重复音效枯燥感的神器,同时能提供强烈的连续正反馈。
在 Unity 中,我们通过修改 AudioSource.pitch 来实现。
基础乐理公式:
十二平均律中,半音的频率比是 $2^{(1/12)} \approx 1.05946$。
想要提高 n 个半音,公式为:
targetPitch = originalPitch * Mathf.Pow(1.05946f, n);
代码实现逻辑 (ComboSystem):
public class AudioPitchShifter : MonoBehaviour {
private AudioSource _source;
private int _comboIndex = 0;
private float _resetTimer = 0f;
// 12个半音的音阶 (大调音阶示例: Do Re Mi Fa Sol La Si Do)
// 0=C, 2=D, 4=E, 5=F, 7=G, 9=A, 11=B, 12=High C
private int[] _majorScale = { 0, 2, 4, 5, 7, 9, 11, 12 };
public void PlayComboSound() {
// 1. 计算当前音高
int noteIndex = Mathf.Clamp(_comboIndex, 0, _majorScale.Length - 1);
int semitones = _majorScale[noteIndex];
// 2. 应用公式
_source.pitch = Mathf.Pow(1.05946f, semitones);
// 3. 播放
_source.PlayOneShot(_clip);
// 4. 增加连击,重置计时器
_comboIndex++;
_resetTimer = 1.0f; // 1秒不吃东西,音阶重置
}
void Update() {
if (_resetTimer > 0) {
_resetTimer -= Time.deltaTime;
if (_resetTimer <= 0) {
_comboIndex = 0; // 超时重置
}
}
}
}
除了变调,以下几种效果是现代游戏标配:
当攻速达到 5.0 时,如果没有随机化,听起来像机关枪卡壳。
source.pitch = 1.0f + Random.Range(-0.1f, 0.1f);source.volume = 1.0f + Random.Range(-0.05f, 0.05f);当重要音效(如:升级、BOSS出场、大招)播放时,自动压低次要音效(背景音乐、环境音、普通攻击)的音量。
Send 效果。Duck Volume 效果。当玩家血量低于 20%,或者打开暂停菜单时,声音变得“闷闷的”,好像在水下。
在 Vampirefall 这种塔防+割草游戏,可能同时有 500 只怪在被打。如果同时播放 500 个受击音效,扬声器会爆,玩家耳朵会聋。
Hit_Flesh.wav),同一帧最多播放 3 次。| 类别 | 音效名 | 特性 | 备注 |
|---|---|---|---|
| Feedback | Hit_Normal |
随机化 Pitch | 高频触发,必须随机化防止刺耳。 |
| Reward | Exp_Pickup |
动态音阶 (Do-Re-Mi) | 连续吸入经验球时,音调递增。 |
| Ui | Level_Up |
Ducking (压低BGM) | 升级是荣耀时刻,必须清晰。 |
| Combat | Critical_Hit |
高频提升 | 暴击音效通常含有更多高频(金属音),穿透力强。 |