//マイク許可チェッククラス component MicrophonePermissionChecker { bool m_IsFirstCheck; public MicrophonePermissionChecker() { m_IsFirstCheck = true; } private void CheckMicrophone(int state){ hsCanvasResetToggleDefault("mic_disabled"); hsCanvasResetToggleDefault("mic_enabled"); if(state==HSMicPermissionState_Prompt){ if(!(hel_isVRDevice()||hsSystemIsVRMode())){//VR機器、VRモードの時は表示しない hsCanvasSetLayerShow("mic_permission_click_layer",true); } m_IsFirstCheck = false; }else if(state==HSMicPermissionState_Granted){ hsCanvasSetLayerShow("mic_permission_click_layer",false); hsCanvasSetLayerShow("mic_block_info_layer",false); hel_net_get_mic_device_list(_GetMicDeviceListCallback); }else if(state==HSMicPermissionState_Denied){ hsCanvasSetLayerShow("mic_permission_click_layer",false); if(!(hel_isVRDevice()||hsSystemIsVRMode())){//VRモードの時は表示しない hsCanvasSetLayerShow("mic_block_info_layer",true); } m_IsFirstCheck = false; } } void _GetMicDeviceListCallback(JsVal micDeviceList) { if (micDeviceList.GetPropertyCount() == 0) { // マイクデバイスが1つも存在しなければ return; } hsCanvasResetToggleDefault("mic_disabled"); hsCanvasResetToggleDefault("mic_enabled"); hsCanvasToggleChange("mic_disabled"); hsCanvasToggleChange("mic_enabled"); // 初回Check時は再入室しない if(!m_IsFirstCheck) { // hsNetFirstEnterRoomは座標・音声関係なく再接続してしまい、1対NのRTCの時に座標チャンネルだけ入っていて音声チャンネルからは抜けている状態に戻ってしまうので // VCCクラスの音声チャンネル再接続関数を呼ぶ LayerBundle layer = hsLayerGet("vcc_icon_only_base"); if(layer !== null) { layer.CallComponentMethod("VCCModel", "ReConnectVoiceChannel", ""); } } m_IsFirstCheck = false; } public void OnLoaded() { } public void OnChangedMicPermissionState(int state) { //hsSystemOutput("change permissionstate = %d\n" % state); CheckMicrophone(state); } public void OnClickedButton(string layerName,string buttonName){ //左上のマイク不可ボタンを押したときに「確認が必要」状態ならダイアログを出す if(layerName=="HUD" && buttonName=="hud_usermic_disabled"){ switch (hsNetGetMicPermissionState()) { case HSMicPermissionState_Prompt: if((hel_isVRDevice()||hsSystemIsVRMode())){ return; } hsCanvasSetLayerShow("mic_permission_click_layer",true); break; case HSMicPermissionState_Granted: if((hel_isVRDevice()||hsSystemIsVRMode())){ return; } // マイクデバイスが存在しない場合 LayerBundle micProperty = hsLayerGet(MICPROPERTY_LAYER_NAME); micProperty.CallComponentMethod("MicPropertyViewModel", "SetShowLayer", "true"); micProperty.CallComponentMethod("MicPropertyView", "MicNotFoundView", ""); break; case HSMicPermissionState_Denied: if((hel_isVRDevice()||hsSystemIsVRMode())){ return; } hsCanvasSetLayerShow("mic_block_info_layer",true); // Stateはマイクの許可状態を変更したとしても内部的にはIHeliNetworkのcheckMicPermissionStateを呼ばない限り変更されないのでここで再チェックする hel_net_check_mic_permission_state(DummyCallback); break; } } } void DummyCallback() { } }