課題5: サウンド再生の最適化とパフォーマンス向上

目的: 多くのアイテムが一度に出現しても、パフォーマンスに影響を与えないようにサウンド再生の最適化を行い、効率的なサウンド管理方法を学ぶ。

ステップ:

1. サウンド再生数の制限:

一度に再生できるサウンドの数を制限し、過剰なサウンド再生が発生しないようにする。

2. サウンド管理スクリプトの作成:

サウンドの再生を管理する専用のスクリプトを作成し、再生数をカウントする。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SoundManager : MonoBehaviour
{
    public static SoundManager instance;
    public int maxSimultaneousSounds = 10; // 最大同時サウンド数
    private int currentSoundCount = 0;

    void Awake()
    {
        if(instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }

    public void PlaySound(AudioClip clip, Vector3 position)
    {
        if(currentSoundCount >= maxSimultaneousSounds)
            return;

        currentSoundCount++;
        AudioSource.PlayClipAtPoint(clip, position);
        StartCoroutine(DecreaseSoundCount(clip.length));
    }

    IEnumerator DecreaseSoundCount(float delay)
    {
        yield return new WaitForSeconds(delay);
        currentSoundCount--;
    }
}

3. ItemControllerでSoundManagerを使用するように変更:

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.tag == "Basket")
    {
        // SoundManagerを使用してサウンドを再生
        SoundManager.instance.PlaySound(this.itemSE, transform.position);
        Destroy(gameObject);
    }
}

4. SoundManagerをシーンに追加:

  • 新しい空のGameObjectを作成し、SoundManagerスクリプトをアタッチする。

5. テストと確認:

  • 多数のアイテムを短時間で取得し、サウンド再生が制限されていること、かつパフォーマンスが維持されていることを確認する。

学習ポイント:

  • サウンド再生の最適化方法。
  • シングルトンパターンを使用したマネージャークラスの作成。
  • コルーチンの基本的な使用方法。

Unity

Posted by hidepon