PUN Voice Push To Talk Demo
푸시 투 토크 (Push To Talk) 데모 씬에서는 다음을 달성하는 방법을 보여줍니다:
- Push-to-Talk 기능.
- 비밀 Voice 채팅.
이 문서에서는 각 기능과 사용 방법을 설명합니다.
Push-to-Talk 모드
필요시 음성 전송을 하기 위해서는:
PhotonVoiceSettings.AutoTransmit
을false
로 설정합니다.- 전송 시작을 원할 때
PhotonVoiceRecorder.Transmit
을true
로 설정합니다. - 전송 중지를 하기 위해서는 다시
false
로 설정합니다.
데모에서는 키보드의 키로 바인드 했습니다 ('v' 는 브로드캐스팅이며 숫자 키는 참여한 액터들의 번호 입니다)
그리고 그룹으로 Push-to-Talk 할 UI 버튼들(브로드캐스트용 "TalkToAll" , 참여한 액터 번호 'X' 용 "TalkToX")과 PushToTalkOn
와 PushToTalkOff
메소드입니다.
Audio Groups Demystified
Photon Voice는 오디오 그룹을 사용하여 상호 배타적인 "음성 채널" 또는 "음성 대상"을 분리합니다.
오디오 그룹은 Photon 로드밸런싱의 "관심 그룹"을 기반으로 합니다.
다음은 이러한 음성그룹을 사용하는 방법입니다:
"수신 대상"을 선택합니다
각 액터는 관심있는 음성 그룹에 가입해야합니다.
기본적으로 모든 액터는 음성 브로드캐스팅를 위한 글로벌 오디오 그룹으로 볼 수 있는 오디오 그룹 0을 리슨합니다.
다른 그룹으로 보내는 음성을 듣고 싶다면 그 그룹에 가입해야합니다.
또한 이전에 구독했던 구독을 취소할 수 있습니다.
이 모든 작업은 다음과 같습니다:
C#
PhotonVoiceNetwork.Client.ChangeAudioGroups(byte[] groupsToRemove, byte[] groupsToAdd);
"말하는 대상"을 선택합니다
각 액터는 오디오를 전송할 음성 그룹을 결정해야합니다.
대상 오디오 그룹은 다음을 사용하여 설정할 수 있습니다:
C#
photonVoiceRecorder.AudioGroup = targetAudioGroup;
유즈케이스
모든 경우에 기본 오디오 그룹 0을 항상 리슨하고 한번에 단일 오디오 그룹에 음성을 전송할 수 있습니다.
유즈케이스는 세 가지 다른 카테고리로 분류 될 수 있습니다:
1. 기본 그룹만 리슨하기
A. 기본 그룹에게만 말하기
이것은 기본 동작입니다.
다른 설정에서 다시 원래대로 전환하려면:
C#
PhotonVoiceNetwork.Client.GlobalAudioGroup = 0;
이 경우에서는 내부적으로 자동 수행되기 때문에 PhotonVoiceNetwork.Client.ChangeAudioGroups
호출 또는 PhotonVoiceRecorder.AudioGroup
을 설정할 필요가 없습니다.
B. 커스텀 그룹으로 말하기
C#
// unsubscribe from all groups
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], null);
// set target AudioGroup
photonVoiceRecorder.AudioGroup = targetAudioGroup;
2. 내가 말한 동일한 오디오 그룹 리슨
이러한 특정 유즈케이스에 대해서는, 단일 입/출력 그룹간에 전환할 수 있는 바로 가기가 있습니다:
C#
PhotonVoiceNetwork.Client.GlobalAudioGroup = targetAudioGroup;
이 경우에서는 내부적으로 자동 수행되기 때문에 PhotonVoiceNetwork.Client.ChangeAudioGroups
호출 또는 PhotonVoiceRecorder.AudioGroup
을 설정할 필요가 없습니다.
3. 여러 그룹 리슨
A. 사용가능한 모든 그룹 리슨
C#
// subscribe to all groups
PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[0]);
// set target AudioGroup
photonVoiceRecorder.AudioGroup = targetAudioGroup;
나중에, 이 호출 이후에 청취를 원하는 그룹을 구독할 필요도 있을 것 입니다.
B. 그룹의 목록을 리슨
C#
// subscribe to 'groupsToListenTo' only
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], groupsToListenTo);
// set target AudioGroup
photonVoiceRecorder.AudioGroup = targetAudioGroup;
리슨하고 있는 이외의 그룹으로 말할 수 있습니다.
예, groupsToListenTo
에는 targetAudioGroup
이 포함되지 않을 수 있습니다.
데모에서 오디오 그룹 사용 방법
Photon Voice Push-to-Talk 데모에서는 음성 채팅에 대한 두가지 옵션을 제공합니다:
- "MuteOthers" 사용: 케이스 n°3.A (상단)에 해당.
PushToTalkScript.MuteOthersWhileTalking
이true
와 같을 때,PushToTalkScript.KeepOnlyOneGroup((byte)CurrentTargetGroup);
호출합니다. - "MuteOthers" 사용불가: 케이스 n°2 (above)에 해당.
PushToTalkScript.MuteOthersWhileTalking
이false
와 같을 때PushToTalkScript.SubscribeToAllPrivateGroups();
호출합니다.
"MuteOthers" 모드는 UI 토글을 사용하여 언제든지 변경할 수 있습니다.
데모내의 오디오 그룹들은 아래의 방식으로 설계합니다:
- 4명의 액터의 룸이 있습니다.
- 브로드캐스팅 대상 오디오 그룹으로 기본 그룹 0을 사용합니다..
- 6개의 custom private 오디오 그룹이 필요합니다: 액터 쌍마다 유일한 그룹 코드를 계산 합니다.
- 로컬 액터가 룸에 참여할 때, 이전에 참가한 액터의 오디오 그룹을 구독합니다.
- 새로운 원격 액터가 룸에 참여하면 로컬 액터는 해당 오디오 그룹에 가입합니다.
PushToTalkScript.OnPhotonPlayerConnected
참조. - 원격 액터가 방을 나갈 때 로컬 액터는 해당 오디오 그룹에서 탈퇴합니다.
PushToTalkScript.OnPhotonPlayerDisonnected
참조. - 다음은 두 플레이어(로컬 및 원격)간의 비밀 음성 채팅 오디오 그룹을 얻는 방법입니다:
C#
// snippet from PushToTalkPrivateButton.SetAudioGroup
if (PhotonNetwork.player.ID < TargetActorNr)
{
// note: actor numbers should not reach 25
AudioGroup = (byte) (TargetActorNr + PhotonNetwork.player.ID * 10);
}
else if (PhotonNetwork.player.ID > TargetActorNr)
{
AudioGroup = (byte) (PhotonNetwork.player.ID + TargetActorNr * 10);
}
else
{
return;
}
예제: 액터 1과 2에 대한 오디오 그룹은 12입니다.
또 다른 변수
개인 음성 그룹을 "계산"하는 또 다른 가능한 방법은 음성 그룹으로 액터 번호를 사용하는 것입니다:
- 각 액터는 액터 번호와 동일한 코드를 가진 단일 오디오 그룹에 가입합니다.
- 원격 액터와 대화하고 싶을 때마다 타겟 오디오 그룹 (
PhotonVoiceRecorder.AudioGroup
만 사용)을 대상 액터 번호로 설정합니다.
고급 내용
- 적은 오디오 그룹: 액터들 만큼 많은 오디오 그룹이 필요합니다.
- 적은 오디오 그룹 전환: 구독할 단일 오디오 그룹 및 가입 취소 없음.
단점
- 다른 액터의 음소거를 할 수 없습니다.
당신과 비밀로 이야기하고 싶은 사람은 누구나 들을 수 있습니다.