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()
{
}
}
调用方法
网络同步版
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();
}
}
}