Unity personal tool class 01 - audio enumeration tool class (supports Photon network synchronization)

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

public enum AudioState 
{
    NONE = -1,
    LOTTERY ,  //抽奖
    SIGNUP ,  //签约
    APPLAUSE ,  //鼓掌
}

[RequireComponent(typeof(AudioSource))]
public class AudioManager : MonoBehaviour
{
    private static AudioManager instance;
    public static AudioManager Instance 
    {
        get { return instance; }
    }

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

    AudioSource audioSource;
    public List<AudioClip> clips; 

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    public void PlayAudio(AudioState audioState) 
    {
        if (audioSource.isPlaying) return;
        audioSource.PlayOneShot(clips[(int)audioState]);
    }

    void Update()
    {
        
    }
}

call method

Network synchronization version

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public enum AudioState 
{
    NONE = -1,
    LOTTERY ,  //抽奖
    SIGNUP ,  //签约
    APPLAUSE ,  //鼓掌
}

[RequireComponent(typeof(AudioSource))]
[RequireComponent(typeof(PhotonView))]
public class AudioManager : MonoBehaviourPunCallbacks,IPunObservable
{
    private static AudioManager instance;
    public static AudioManager Instance
    {
        get { return instance; }
    }

    int mAudioSourceIndex = -1; //记录当前播放音频序号
    bool IsPlayAudio = false;
    bool IsLocalAudio = false;


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

    AudioSource audioSource;
    public List<AudioClip> clips; 

    void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }

    //播放音频
    public void PlayAudio(AudioState audioState) 
    {
        if (audioSource.isPlaying) return;
        audioSource.PlayOneShot(clips[(int)audioState]);
        //记录当前播放的音频
        mAudioSourceIndex = (int)audioState;
        IsLocalAudio = true;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space)) 
        {
            PlayAudio(AudioState.LOTTERY);
        }
        //if (!photonView.IsMine && PhotonNetwork.IsConnected) return;
        if (IsPlayAudio)
        {
            //print(audioSource.clip.name);
            audioSource.PlayOneShot(clips[mAudioSourceIndex]);
            IsPlayAudio = false;
        }
    }

    //自定义同步音频
    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            stream.SendNext(IsLocalAudio);
            stream.SendNext(mAudioSourceIndex);
            IsLocalAudio = false;
        }
        else 
        {
            IsPlayAudio = (bool)stream.ReceiveNext();
            mAudioSourceIndex = (int)stream.ReceiveNext();
        }
    }
}

Guess you like

Origin blog.csdn.net/weixin_46711336/article/details/128236975