PUBGゲーム | PUBGゲーム、生存射撃モバイルゲーム特有の「チームのみ」または「全員」のボイスモードを提供します。ゲームの設定で、プレイヤーが次の項目を選択できます:
1.「チームのみ」モードを使用すると、チーム内のチームメイトが話している声だけが聞こえます。
2.「すべての人」モードを使用すると、チーム内のチームメイトの声や、ある範囲内で他の対局者が話している声を聞くことができます。 |
没入型バーチャルシーン | 例えばゲームのコンサートなどのバーチャルシーンでは、レンジボイスを使ってボーカリストがバーチャルルーム内で歌い、聴衆全員が歌声を聞きながら、自分の一定範囲内の他の聴衆とコミュニケーションをとるようになっています。最高で同ルーム内の1万人以上が同時にマイクをオンにすることができます。 |
ボイスモード | パラメータ名 | 機能 |
すべての人 | RANGE_AUDIO_MODE_WORLD | 設定されると、プレイヤーの近くにいる一定範囲の人がプレイヤーの話を聞くことができます。その範囲内にこのモードが設定されているプレイヤーがいれば、お互いに話をすることもできます。 チームメンバーがお互いに聞こえます |
チームのみ | RANGE_AUDIO_MODE_TEAM | チームメンバーだけがお互いに聞こえます |
プレーヤー座標 | 音声受信範囲 | 他のプレイヤーとの音声到達可能状況 | チームメンバーとの音声到達可能状況 |
A(0,0,0) | 10メートル | プレイヤーBはプレイヤーAから10メートル以内にいるため、プレイヤーBの声を聞くことができます | 同じチームのメンバー同士の通話には影響しません |
B(0,8,0) | 5メートル | プレイヤーAとプレイヤーBは5メートル以上離れているため、プレイヤーAの声は聞こえません。 | 同じチームのメンバー同士の通話には影響しません |
TeamIDの状況 | ボイスモード | 範囲 | 音声到達可能状況 |
TeamID != 0で、仮にTeamID=1とします | RANGE_AUDIO_MODE_TEAM | 10メートル | TeamID=1のメンバーと通話できます |
| RANGE_AUDIO_MODE_WORLD | 10メートル | TeamID=1のメンバーと、音声モードがRANGE_AUDIO_MODE_WORLDに設定されている同室10メートル以内のメンバーと通話できます |
TeamIDの状況 | TeamIDの変更タイミング | 範囲 | 音声到達可能状況 |
TeamID = 0 | ルームに入る前にTeamID!=0、ルームに入ったらTeamID=0に変更します | 10メートル | 話し声はルーム内のすべての人に聞こえます(音声モードがすべての人かチームのみかを問わない) TeamID=0のメンバーとコミュニケーションが取れます RANGE_AUDIO_MODE_WORLDに設定された同ルーム、10メートルの範囲内でメンバーの声が聞こえます |
| ルームに入る前にTeamID=0であり、TeamID=0でルームに入ります | 10メートル | 話し声はルーム内のすべての人に聞こえます(音声モードがすべての人かチームのみかを問わない) TeamID=0のメンバーとコミュニケーションが取れます ルーム内の他の人の声が聞こえません |
ITMGContext SetRangeAudioTeamID(int teamID)
パラメータ | タイプ | 意味 |
teamID | int | チームナンバーであり、レンジボイスモードの利用中に使われています。TeamIDが0の場合は、通話モードは一般チームボイスで、デフォルトは0です。 |
ITMGRoom int SetRangeAudioMode(RANGE_AUDIO_MODE rangeAudioMode)
パラメータ | タイプ | 意味 |
rangeAudioMode | int | 0(MODE_WORLD)が「全ての人」を表し、1(MODE_TEAM)が「チームのみ」を表します |
ITMGContext.GetInstance(this).EnterRoom(roomId,ITMG_ROOM_TYPE_FLUENCY, authBuffer);
public void OnEvent(ITMGContext.ITMG_MAIN_EVENT_TYPE type, Intent data) {if (ITMGContext.ITMG_MAIN_EVENT_TYPE.ITMG_MAIN_EVENT_TYPE_ENTER_ROOM == type){//イベントから返されたデータの分析int nErrCode = data.getIntExtra("result" , -1);String strErrMsg = data.getStringExtra("error_info");if (nErrCode == AVError.AV_OK){///入室シグナリングを受信し、入室が成功し、機器を操作できますScrollView_ShowLog("EnterRoom success");Log.i(TAG,"EnterRoom success!");}else{//入室に失敗し、返されたエラーメッセージを分析する必要がありますScrollView_ShowLog("EnterRoom fail :" + strErrMsg);Log.i(TAG,"EnterRoom fail!");}}}
ITMGRoom int UpdateAudioRecvRange(int range)
パラメータ | タイプ | 意味 |
range | int | 音声を受信できる最大範囲(エンジン距離単位) |
ITMGContext.GetInstance().GetRoom().UpdateAudioRecvRange(300);
public abstract int UpdateSelfPosition(int position[3], float axisForward[3], float axisRight[3], float axisUp[3])
パラメータ | タイプ | 意味 |
position | int[] | ワールド座標系中の座標で、前、右、上の順序で表示されます |
axisForward | float[] | この製品では無視してください |
axisRight | float[] | この製品では無視してください |
axisUp | float[] | この製品では無視してください |
public abstract int InitSpatializer(string modelPath)
パラメータ | タイプ | 意味 |
modelPath | string | 空欄を埋めてください |
public abstract int EnableSpatializer(bool enable, bool applyToTeam)
パラメータ | タイプ | 意味 |
enable | bool | オンにすると3D効果音が聞こえます |
applyToTeam | bool | 3D音声はチーム内で機能するかどうかを示します。enbleがtrueである場合にのみ有効です。 |
ITMGRoom int UpdateAudioRecvRange(int range)
パラメータ | タイプ | 意味 |
range | int | 音声を受信できる最大範囲(エンジン距離単位) |
ITMGContext.GetInstance().GetRoom().UpdateAudioRecvRange(300);
public abstract int UpdateSelfPosition(int position[3], float axisForward[3], float axisRight[3], float axisUp[3])
パラメータ | タイプ | 意味 |
position | int[] | ワールド座標系中の座標で、前、右、上の順序で表示されます |
axisForward | float[] | ローカル座標系前軸の単位ベクトル |
axisRight | float[] | ローカル座標系右軸の単位ベクトル |
axisUp | float[] | ローカル座標系上軸の単位ベクトル |
FVector cameraLocation = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0)->GetCameraLocation();FRotator cameraRotation = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0)->GetCameraRotation();int position[] = {(int)cameraLocation.X,(int)cameraLocation.Y,(int)cameraLocation.Z };FMatrix matrix = ((FRotationMatrix)cameraRotation);float forward[] = {matrix.GetColumn(0).X,matrix.GetColumn(1).X,matrix.GetColumn(2).X };float right[] = {matrix.GetColumn(0).Y,matrix.GetColumn(1).Y,matrix.GetColumn(2).Y };float up[] = {matrix.GetColumn(0).Z,matrix.GetColumn(1).Z,matrix.GetColumn(2).Z};ITMGContextGetInstance()->GetRoom()->UpdateSelfPosition(position, forward, right, up);
Transform selftrans = currentPlayer.gameObject.transform;Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, selftrans.rotation, Vector3.one);int[] position = new int[3] {selftrans.position.z,selftrans.position.x,selftrans.position.y};float[] axisForward = new float[3] {matrix.m22,matrix.m02,matrix.m12 };float[] axisRight = new float[3] {matrix.m20,matrix.m00,matrix.m10 };float[] axisUp = new float[3] {matrix.m21,matrix.m01,matrix.m11 };ITMGContext.GetInstance().GetRoom().UpdateSelfPosition(position, axisForward, axisRight, axisUp);
ホストAPIタイミング | 視聴者APIタイミング |
| |
同じチームかどうか | 範囲内かどうか | ボイスモード | AとBがお互いの声を聞いているかどうか |
同じチーム | はい | MODE_WORLD | はい |
| | MODE_TEAM | はい |
| いいえ | MODE_WORLD | はい |
| | MODE_TEAM | はい |
異なるチーム | はい | MODE_WORLD | はい |
| | MODE_TEAM | いいえ |
| いいえ | MODE_WORLD | いいえ |
| | MODE_TEAM | いいえ |
同じチームかどうか | 範囲内かどうか | 音声状態 | AとBがお互いの声を聞いているかどうか |
同じチーム | はい | MODE_WORLD | はい |
| | MODE_TEAM | はい |
| いいえ | MODE_WORLD | はい |
| | MODE_TEAM | はい |
異なるチーム | はい | MODE_WORLD | いいえ |
| | MODE_TEAM | いいえ |
| いいえ | MODE_WORLD | いいえ |
| | MODE_TEAM | いいえ |
距離範囲(エンジン単位) | 減衰公式 |
0 < N < range/10 | 減衰係数:1.0(音量が減衰しない) |
N ≥ range/10 | 減衰係数:range/10/N |
この記事はお役に立ちましたか?