ふりかえり
前回はキャラクター画像にアニメーションを加えて、ゲームの表現力が一気にアップしました!
バトルの効果音(SE)を実装!
今回は、バトル中に再生されるSE(効果音)を実装していきます!
対象のアクションは以下の5つ:
- 攻撃
- ダメージを受けたとき
- 倒されたとき
- リスポーンしたとき
- レベルアップ時
使用素材について
今回は効果音ラボ様のフリー素材を使用させていただきました。
高品質な効果音が多数あり、ゲーム制作にぴったりです!
今回は4種類のSEをダウンロードし、
Assets > Materials > SE フォルダに格納しました。

スクリプトの追加:AudioManager.cs
効果音(そして将来のBGM)をまとめて管理するためのスクリプトを作成します。
using UnityEngine; public class AudioManager : MonoBehaviour { [Header("SE Audio Sources")] public AudioSource attackAudioSource; // 攻撃SE用 public AudioSource damageAudioSource; // ダメージSE用 public AudioSource levelUpAudioSource; // レベルアップSE用 public AudioSource deathAudioSource; // 死亡SE用 public AudioSource respawnAudioSource; // リスポーンSE用 [Header("SE Audio Clips")] public AudioClip attackSE; // 攻撃SE public AudioClip damageSE; // ダメージSE public AudioClip levelUpSE; // レベルアップSE public AudioClip deathSE; // 死亡SE public AudioClip respawnSE; // リスポーンSE [Header("Audio Settings")] public float volume = 1.0f; // 音量 public float pitch = 1.0f; // ピッチ // 攻撃SEを再生 public void PlayAttackSE() { if (attackSE != null && attackAudioSource != null) { attackAudioSource.clip = attackSE; attackAudioSource.Play(); Debug.Log("攻撃SEを再生しました"); } } // ダメージSEを再生 public void PlayDamageSE() { if (damageSE != null && damageAudioSource != null) { damageAudioSource.clip = damageSE; damageAudioSource.Play(); Debug.Log("ダメージSEを再生しました"); } } // レベルアップSEを再生 public void PlayLevelUpSE() { if (levelUpSE != null && levelUpAudioSource != null) { levelUpAudioSource.clip = levelUpSE; levelUpAudioSource.Play(); Debug.Log("レベルアップSEを再生しました"); } } // 死亡SEを再生 public void PlayDeathSE() { if (deathSE != null && deathAudioSource != null) { deathAudioSource.clip = deathSE; deathAudioSource.Play(); Debug.Log("死亡SEを再生しました"); } } // リスポーンSEを再生 public void PlayRespawnSE() { if (respawnSE != null && respawnAudioSource != null) { respawnAudioSource.clip = respawnSE; respawnAudioSource.Play(); Debug.Log("リスポーンSEを再生しました"); } } // 音量を設定 public void SetVolume(float newVolume) { volume = Mathf.Clamp01(newVolume); UpdateAllAudioSourcesVolume(); } // ピッチを設定 public void SetPitch(float newPitch) { pitch = Mathf.Clamp(newPitch, 0.1f, 3.0f); UpdateAllAudioSourcesPitch(); } // 全てのAudioSourceの音量を更新 private void UpdateAllAudioSourcesVolume() { if (attackAudioSource != null) attackAudioSource.volume = volume; if (damageAudioSource != null) damageAudioSource.volume = volume; if (levelUpAudioSource != null) levelUpAudioSource.volume = volume; if (deathAudioSource != null) deathAudioSource.volume = volume; if (respawnAudioSource != null) respawnAudioSource.volume = volume; } // 全てのAudioSourceのピッチを更新 private void UpdateAllAudioSourcesPitch() { if (attackAudioSource != null) attackAudioSource.pitch = pitch; if (damageAudioSource != null) damageAudioSource.pitch = pitch; if (levelUpAudioSource != null) levelUpAudioSource.pitch = pitch; if (deathAudioSource != null) deathAudioSource.pitch = pitch; if (respawnAudioSource != null) respawnAudioSource.pitch = pitch; } // Update is called once per frame void Update() { } }
AnimationManager.csへの統合
次に、AnimationManager.cs に AudioManager を参照するフィールドを追加し、
それぞれのアニメーション再生時にSEを鳴らす処理を加えます。
例:PlayerAttackAnimation() の修正
// プレイヤーの攻撃アニメーション public void PlayerAttackAnimation() { if (playerTransform != null) { // 攻撃SEを再生 if (audioManager != null) { audioManager.PlayAttackSE(); } // プレイヤーを敵の方向に少し移動させる playerTransform.DOMove(playerTransform.position + Vector3.right * attackDistance, attackDuration / 2) .SetEase(Ease.OutQuad) .OnComplete(() => { // 元の位置に戻る playerTransform.DOMove(playerTransform.position - Vector3.right * attackDistance, attackDuration / 2) .SetEase(Ease.InQuad); }); } }
Unityでの設定
- 新しいGameObjectを作成し「AudioManager」と命名
- AudioManager.cs をアタッチ
- [Add Component] > Audio Source を追加(1つでOK)
- Audio Sources に同じ Audio Source を全ての欄にアタッチ
- SE Audio Clips に効果音ラボ様からダウンロードしたSEをそれぞれ設定
- AnimationManager の Inspector に AudioManager をアタッチ

動作確認
ゲームを開始して攻撃すると、SEが再生されるのを確認できます!
アニメーション+音で、バトルの臨場感が一気にアップしました!
(※今回の動画では音が鳴らない不具合があります。原因が判明し次第、差し替え予定です)
まとめ
今回は、バトル中のSE(効果音)を実装しました!
音があるだけで、バトルの迫力が大きく変わりますね!
次回予告
次回は、ステージを実装していきます!お楽しみに!
コメント