[英]How to talk from all players to one player in Photon Voice in Unity?
我試圖在光子聲音統一中進行私人聊天,但到目前為止還不能。 我讀了音頻組的概念https://doc.photonengine.com/en-us/voice/current/getting-started/voice-for-pun在項目中首先,player1加入是創建房間的主客戶端將默認音頻組設置為零。 我正在使用demo pushtotalk,我希望加入的玩家能夠在一對一的談話中與player1交談。 我嘗試在主客戶端播放器1之后加入其他玩家不同的音頻組,並讓主客戶端按下按鈕或事件來訂閱它們以使其工作但未能這樣做。 只是希望player1能夠在私人談話中聽取所有其他玩家的意見。 請使用光子語音腳本中的演示場景給出解釋示例。 這是代碼 -
using Client.Photon.LoadBalancing;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Button))]
public class PushToTalkPrivateButton : MonoBehaviour
{
[SerializeField]
private Button pushToTalkPrivateButton;
[SerializeField]
private Text buttonText;
private PushToTalkScript pttScript;
public byte AudioGroup;
public bool Subscribed;
private void Start()
{
pttScript = FindObjectOfType<PushToTalkScript>();
PhotonVoiceNetwork.Client.OnStateChangeAction += OnVoiceClientStateChanged;
}
private void OnVoiceClientStateChanged(ClientState state)
{
Debug.LogFormat("VoiceClientState={0}", state);
if (pushToTalkPrivateButton != null)
{
switch (state)
{
case ClientState.Joined:
pushToTalkPrivateButton.gameObject.SetActive(true);
Subscribed = Subscribed || PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup });
break;
default:
pushToTalkPrivateButton.gameObject.SetActive(false);
break;
}
}
}
public void SetAudioGroup(PhotonPlayer player)
{
if (!Subscribed)
{
buttonText.text = string.Format("Talk-To-Player{0}", player.ID);
int targetActorNr = player.ID;
if (PhotonNetwork.player.ID < targetActorNr)
{
AudioGroup = (byte) (targetActorNr + PhotonNetwork.player.ID*10);
}
else if (PhotonNetwork.player.ID > targetActorNr)
{
AudioGroup = (byte) (PhotonNetwork.player.ID + targetActorNr*10);
}
else
{
return;
}
if (PhotonVoiceNetwork.ClientState == ClientState.Joined)
{
Subscribed = PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup });
}
}
}
public void PushToTalkOn()
{
if (Subscribed)
{
PhotonVoiceNetwork.Client.GlobalAudioGroup = AudioGroup;
pttScript.PushToTalk(true);
}
}
public void PushToTalkOff()
{
pttScript.PushToTalkOff();
}
}
我剛剛修改了OnVoiceClientStateChanged()
和SetAudioGroup()
。 AudioGroup
打電話之前需要設置ChangeAudioGroups()
private void OnVoiceClientStateChanged(ClientState state)
{
Debug.LogFormat("VoiceClientState={0}", state);
if (pushToTalkPrivateButton != null)
{
switch (state)
{
case ClientState.Joined:
//Subscribed = Subscribed || PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup });
break;
default:
pushToTalkPrivateButton.gameObject.SetActive(false);
PhotonVoiceNetwork.Client.ChangeAudioGroups(byte[0], null);
break;
}
}
}
public void SetAudioGroup(PhotonPlayer player)
{
if (!Subscribed)
{
buttonText.text = string.Format("Talk-To-Player{0}", player.ID);
int targetActorNr = player.ID;
if (PhotonNetwork.player.ID < targetActorNr)
{
AudioGroup = (byte) (targetActorNr + PhotonNetwork.player.ID*10);
}
else if (PhotonNetwork.player.ID > targetActorNr)
{
AudioGroup = (byte) (PhotonNetwork.player.ID + targetActorNr*10);
}
else
{
return;
}
if (PhotonVoiceNetwork.ClientState == ClientState.Joined)
{
pushToTalkPrivateButton.gameObject.SetActive(true);
Subscribed = PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[1] { AudioGroup });
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.