Photon Voice1은 Photon Voice의 첫 버전입니다.        현재는 리팩터링/확장을 거친 Photon Voice 2이 준비되어 있으므로 새로운 프로젝트를 시작할 경우에는 Photon Voice 2를 사용하시는 것을 권장합니다.

PUN Voice Push To Talk Demo

푸시 투 토크 (Push To Talk) 데모 씬에서는 다음을 달성하는 방법을 보여줍니다:

  • Push-to-Talk 기능.
  • 비밀 Voice 채팅.

이 문서에서는 각 기능과 사용 방법을 설명합니다.

PUN Voice PTT Demo Screenshot
PUN Voice Push-To-Talk 데모 실행 화면

Push-to-Talk 모드

필요시 음성 전송을 하기 위해서는:

  • PhotonVoiceSettings.AutoTransmitfalse 로 설정합니다.
  • 전송 시작을 원할 때 PhotonVoiceRecorder.Transmittrue 로 설정합니다.
  • 전송 중지를 하기 위해서는 다시 false 로 설정합니다.

데모에서는 키보드의 키로 바인드 했습니다 ('v' 는 브로드캐스팅이며 숫자 키는 참여한 액터들의 번호 입니다) 그리고 그룹으로 Push-to-Talk 할 UI 버튼들(브로드캐스트용 "TalkToAll" , 참여한 액터 번호 'X' 용 "TalkToX")과 PushToTalkOnPushToTalkOff 메소드입니다.

Back To Top

Audio Groups Demystified

Photon Voice는 오디오 그룹을 사용하여 상호 배타적인 "음성 채널" 또는 "음성 대상"을 분리합니다. 오디오 그룹은 Photon 로드밸런싱의 "관심 그룹"을 기반으로 합니다. 다음은 이러한 음성그룹을 사용하는 방법입니다:

Back To Top

"수신 대상"을 선택합니다

각 액터는 관심있는 음성 그룹에 가입해야합니다. 기본적으로 모든 액터는 음성 브로드캐스팅를 위한 글로벌 오디오 그룹으로 볼 수 있는 오디오 그룹 0을 리슨합니다. 다른 그룹으로 보내는 음성을 듣고 싶다면 그 그룹에 가입해야합니다. 또한 이전에 구독했던 구독을 취소할 수 있습니다. 이 모든 작업은 다음과 같습니다:

PhotonVoiceNetwork.Client.ChangeAudioGroups(byte[] groupsToRemove, byte[] groupsToAdd);

Back To Top

"말하는 대상"을 선택합니다

각 액터는 오디오를 전송할 음성 그룹을 결정해야합니다. 대상 오디오 그룹은 다음을 사용하여 설정할 수 있습니다:

photonVoiceRecorder.AudioGroup = targetAudioGroup;

Back To Top

유즈케이스

모든 경우에 기본 오디오 그룹 0을 항상 리슨하고 한번에 단일 오디오 그룹에 음성을 전송할 수 있습니다. 유즈케이스는 세 가지 다른 카테고리로 분류 될 수 있습니다:

Back To Top

1. 기본 그룹만 리슨하기

A. 기본 그룹에게만 말하기

이것은 기본 동작입니다. 다른 설정에서 다시 원래대로 전환하려면:

PhotonVoiceNetwork.Client.GlobalAudioGroup = 0;

이 경우에서는 내부적으로 자동 수행되기 때문에 PhotonVoiceNetwork.Client.ChangeAudioGroups 호출 또는 PhotonVoiceRecorder.AudioGroup 을 설정할 필요가 없습니다.

Back To Top

B. 커스텀 그룹으로 말하기

// unsubscribe from all groups
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], null);

// set target AudioGroup
photonVoiceRecorder.AudioGroup = targetAudioGroup;

Back To Top

2. 내가 말한 동일한 오디오 그룹 리슨

이러한 특정 유즈케이스에 대해서는, 단일 입/출력 그룹간에 전환할 수 있는 바로 가기가 있습니다:

PhotonVoiceNetwork.Client.GlobalAudioGroup = targetAudioGroup;

이 경우에서는 내부적으로 자동 수행되기 때문에 PhotonVoiceNetwork.Client.ChangeAudioGroups 호출 또는 PhotonVoiceRecorder.AudioGroup 을 설정할 필요가 없습니다.

Back To Top

3. 여러 그룹 리슨

A. 사용가능한 모든 그룹 리슨

// subscribe to all groups
PhotonVoiceNetwork.Client.ChangeAudioGroups(null, new byte[0]);

// set target AudioGroup
photonVoiceRecorder.AudioGroup = targetAudioGroup;

나중에, 이 호출 이후에 청취를 원하는 그룹을 구독할 필요도 있을 것 입니다.

Back To Top

B. 그룹의 목록을 리슨

// subscribe to 'groupsToListenTo' only
PhotonVoiceNetwork.Client.ChangeAudioGroups(new byte[0], groupsToListenTo);

// set target AudioGroup
photonVoiceRecorder.AudioGroup = targetAudioGroup;

리슨하고 있는 이외의 그룹으로 말할 수 있습니다. 예, groupsToListenTo 에는 targetAudioGroup 이 포함되지 않을 수 있습니다.

Back To Top

데모에서 오디오 그룹 사용 방법

Photon Voice Push-to-Talk 데모에서는 음성 채팅에 대한 두가지 옵션을 제공합니다:

  • "MuteOthers" 사용: 케이스 n°3.A (상단)에 해당. PushToTalkScript.MuteOthersWhileTalkingtrue 와 같을 때, PushToTalkScript.KeepOnlyOneGroup((byte)CurrentTargetGroup); 호출합니다.
  • "MuteOthers" 사용불가: 케이스 n°2 (above)에 해당. PushToTalkScript.MuteOthersWhileTalkingfalse 와 같을 때 PushToTalkScript.SubscribeToAllPrivateGroups(); 호출합니다.

"MuteOthers" 모드는 UI 토글을 사용하여 언제든지 변경할 수 있습니다.

데모내의 오디오 그룹들은 아래의 방식으로 설계합니다:

  • 4명의 액터의 룸이 있습니다.
  • 브로드캐스팅 대상 오디오 그룹으로 기본 그룹 0을 사용합니다..
  • 6개의 custom private 오디오 그룹이 필요합니다: 액터 쌍마다 유일한 그룹 코드를 계산 합니다.
  • 로컬 액터가 룸에 참여할 때, 이전에 참가한 액터의 오디오 그룹을 구독합니다.
  • 새로운 원격 액터가 룸에 참여하면 로컬 액터는 해당 오디오 그룹에 가입합니다. PushToTalkScript.OnPhotonPlayerConnected 참조.
  • 원격 액터가 방을 나갈 때 로컬 액터는 해당 오디오 그룹에서 탈퇴합니다. PushToTalkScript.OnPhotonPlayerDisonnected 참조.
  • 다음은 두 플레이어(로컬 및 원격)간의 비밀 음성 채팅 오디오 그룹을 얻는 방법입니다:
// 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입니다.

Back To Top

또 다른 변수

개인 음성 그룹을 "계산"하는 또 다른 가능한 방법은 음성 그룹으로 액터 번호를 사용하는 것입니다:

  • 각 액터는 액터 번호와 동일한 코드를 가진 단일 오디오 그룹에 가입합니다.
  • 원격 액터와 대화하고 싶을 때마다 타겟 오디오 그룹 (PhotonVoiceRecorder.AudioGroup 만 사용)을 대상 액터 번호로 설정합니다.

Back To Top

고급 내용

  • 적은 오디오 그룹: 액터들 만큼 많은 오디오 그룹이 필요합니다.
  • 적은 오디오 그룹 전환: 구독할 단일 오디오 그룹 및 가입 취소 없음.

Back To Top

단점

  • 다른 액터의 음소거를 할 수 없습니다. 당신과 비밀로 이야기하고 싶은 사람은 누구나 들을 수 있습니다.

기술문서 TOP으로 돌아가기