unity中音效管理器

文章介绍了如何在Unity3D中实现Singleton模式,通过泛型限制为Component类型。接着创建了一个AudioManager类,用于管理音频播放,包括播放单个音频和随机音调的音频。此外,还提供了一个持久化的Singleton实现,确保对象在场景切换时不会被销毁。
摘要由CSDN通过智能技术生成

先创建单列模式

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

public class Singleton<T> : MonoBehaviour where T:Component //泛型写法 where 限制 为 component
{
    //作为泛型变量 单列模式
    public static T instance { get; private set; }

    protected virtual void Awake()//pritected 只能继承的使用 virtual可以重写 
    {
        instance=this as T;//将本身转为 泛型
    }
}

再创建音乐管理类,继承单列

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

public class AudioManager : Singleton<AudioManager>
{
    
    [SerializeField] AudioSource SFXplayer;//AudioSource播放器
    [SerializeField] float Min_PITH=0.9f;
    [SerializeField] float Max_PITH=1.1f;

    public void PlaySFXaudio(AudioData audioData)
    {
     //   SFXplayer.clip= audioClip;
     //   SFXplayer.volume= volume;
       // SFXplayer.Play();//无法播放复数音乐 会重重之前播放的音乐
        SFXplayer.PlayOneShot(audioData.audioClip,audioData.volume);
    }
    //播放随机音调
    public void PlayRandomSFXaudio(AudioData audioData)
    {
        SFXplayer.pitch=Random.Range(Min_PITH,Max_PITH);
        PlaySFXaudio(audioData);
    }
    //播放随机音乐
    public void PlayRandomSFXaudio(AudioData[] audioData)
    {
        PlayRandomSFXaudio(audioData[Random.Range(0,audioData.Length)]);   
    }
}
 [System.Serializable] public class AudioData// [System.Serializable]  序列化到编辑器中
{
    public AudioClip audioClip;
    public float volume;
}

使用方法

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

public class GamePlayUIController : MonoBehaviour
{
    [Header("---Audio---")]
    [SerializeField] AudioData pauseSFX;

     public  void Pause()
    {
        AudioManager.instance.PlaySFXaudio(pauseSFX);
    }

}

再创建一个持久化单列

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

public class presisterSingleton<T>: MonoBehaviour where T : Component
{
    public static T instance
    {
        get;
        private set;
    }//可以被其他类访问 只能被本类赋值
    protected virtual void Awake()
    {
        //避免加载多个 持续性脚本
        if(instance == null)
        {
            instance=this as T;//as运算符:转换不成功得到一个null值,不会抛出异常 转换类型
        }
        else
        {
            Destroy(instance);
        }
        DontDestroyOnLoad(gameObject);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity音频管理器是一个用于在游戏项目管理音频资源的工具。它的作用是加载、播放、暂停、调节音量等一系列与音频相关的操作。在项目,我们可以将不同类型的音效资源拖拽到管理器,然后通过代码调用管理器的接口来对音效进行控制。对于常规的音效操作,管理器已经提供了一些常用的功能,可以满足大部分需求。但对于一些特殊功能,比如在线剪切音频片段、动态调整音乐元素等,可能需要我们自行实现。 Unity有两个重要的音频组件:AudioListener和AudioSource。通过AudioListener进行监听,通过AudioSource进行音频的播放。因此,使用音频管理器可以统一管理音频的相关操作,提高代码的模块化程度,方便维护和管理音频资源。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Unity开发小技巧】AudioManager声音管理器](https://blog.csdn.net/qq_37310110/article/details/103311193)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Unity实现音频播放管理器](https://download.csdn.net/download/weixin_38735887/14840003)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [U3D游戏开发框架(四)——音频管理器](https://blog.csdn.net/LLLLL__/article/details/115150281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值