├── .github
├── ISSUE_TEMPLATE
│ ├── bug-template.md
│ └── feature_request.md
└── workflows
│ └── codeql-analysis.yml
├── .gitignore
├── .vscode
└── settings.json
├── .vsconfig
├── Agora.csproj
├── Agora.sln
├── Agora_Unity_WebGL.csproj
├── Agora_Unity_WebGL.sln
├── Assembly-CSharp.csproj
├── Assets
├── API-Example.meta
├── API-Example
│ ├── Demo.meta
│ ├── Demo
│ │ ├── AudioVideoStateControl.cs
│ │ ├── AudioVideoStateControl.cs.meta
│ │ ├── ButtonHandler.cs
│ │ ├── ButtonHandler.cs.meta
│ │ ├── SceneHelloVideo.unity
│ │ ├── SceneHelloVideo.unity.meta
│ │ ├── SceneHome.unity
│ │ ├── SceneHome.unity.meta
│ │ ├── TestHelloUnityVideo.cs
│ │ ├── TestHelloUnityVideo.cs.meta
│ │ ├── TestHome.cs
│ │ ├── TestHome.cs.meta
│ │ ├── UIElementDragger.cs
│ │ ├── UIElementDragger.cs.meta
│ │ ├── agoraDemoUnityWeb.png
│ │ └── agoraDemoUnityWeb.png.meta
│ ├── Editor.meta
│ ├── Editor
│ │ ├── SceneWindow.cs
│ │ ├── SceneWindow.cs.meta
│ │ ├── Welcome.cs
│ │ └── Welcome.cs.meta
│ ├── Home Menu.meta
│ ├── Home Menu
│ │ ├── Drag.cs
│ │ ├── Drag.cs.meta
│ │ ├── RootMenu.cs
│ │ ├── RootMenu.cs.meta
│ │ ├── RootMenuControl.cs
│ │ ├── RootMenuControl.cs.meta
│ │ ├── RootMenuControl.prefab
│ │ ├── RootMenuControl.prefab.meta
│ │ ├── RootMenuPanel.cs
│ │ ├── RootMenuPanel.cs.meta
│ │ ├── RootMenuPanel.prefab
│ │ ├── RootMenuPanel.prefab.meta
│ │ ├── SceneUIGroup.prefab
│ │ └── SceneUIGroup.prefab.meta
│ ├── HomeMenu.unity
│ ├── HomeMenu.unity.meta
│ ├── SpatialAudioNPCDemo.meta
│ ├── SpatialAudioNPCDemo
│ │ ├── AIWaypointMovement.cs
│ │ ├── AIWaypointMovement.cs.meta
│ │ ├── Image.controller
│ │ ├── Image.controller.meta
│ │ ├── NPCInfo.cs
│ │ ├── NPCInfo.cs.meta
│ │ ├── NPCInfoWindow.cs
│ │ ├── NPCInfoWindow.cs.meta
│ │ ├── NPCSettings.cs
│ │ ├── NPCSettings.cs.meta
│ │ ├── NewSpatialAudioDemo.unity
│ │ ├── NewSpatialAudioDemo.unity.meta
│ │ ├── SpatialAudioAssets.meta
│ │ ├── SpatialAudioAssets
│ │ │ ├── 1.png
│ │ │ ├── 1.png.meta
│ │ │ ├── 2.png
│ │ │ ├── 2.png.meta
│ │ │ ├── 3.png
│ │ │ ├── 3.png.meta
│ │ │ ├── 4.png
│ │ │ ├── 4.png.meta
│ │ │ ├── SpatialAudioUIButtonDisabled.anim
│ │ │ ├── SpatialAudioUIButtonDisabled.anim.meta
│ │ │ ├── _1.gif
│ │ │ ├── _1.gif.meta
│ │ │ ├── _2_1.gif
│ │ │ ├── _2_1.gif.meta
│ │ │ ├── __1.gif
│ │ │ ├── __1.gif.meta
│ │ │ ├── __2.gif
│ │ │ ├── __2.gif.meta
│ │ │ ├── __3.gif
│ │ │ ├── __3.gif.meta
│ │ │ ├── alert.png
│ │ │ ├── alert.png.meta
│ │ │ ├── arrows.png
│ │ │ ├── arrows.png.meta
│ │ │ ├── arrows@2x.png
│ │ │ ├── arrows@2x.png.meta
│ │ │ ├── audio.png
│ │ │ ├── audio.png.meta
│ │ │ ├── audio@2x(1).png
│ │ │ ├── audio@2x(1).png.meta
│ │ │ ├── back.png
│ │ │ ├── back.png.meta
│ │ │ ├── dice@2x.png
│ │ │ ├── dice@2x.png.meta
│ │ │ ├── down.png
│ │ │ ├── down.png.meta
│ │ │ ├── logo.png
│ │ │ ├── logo.png.meta
│ │ │ ├── map.png
│ │ │ ├── map.png.meta
│ │ │ ├── person.png
│ │ │ ├── person.png.meta
│ │ │ ├── pin@2x(1).png
│ │ │ ├── pin@2x(1).png.meta
│ │ │ ├── pin@2x.png
│ │ │ ├── pin@2x.png.meta
│ │ │ ├── question.png
│ │ │ ├── question.png.meta
│ │ │ ├── resources.meta
│ │ │ ├── resources
│ │ │ │ ├── Bgm.meta
│ │ │ │ ├── Bgm
│ │ │ │ │ ├── BGM.mp3
│ │ │ │ │ └── BGM.mp3.meta
│ │ │ │ ├── Live.meta
│ │ │ │ ├── Live
│ │ │ │ │ ├── live.mp3
│ │ │ │ │ └── live.mp3.meta
│ │ │ │ ├── Music.meta
│ │ │ │ └── Music
│ │ │ │ │ ├── music.mp3
│ │ │ │ │ └── music.mp3.meta
│ │ │ ├── set_hover@2x.png
│ │ │ ├── set_hover@2x.png.meta
│ │ │ ├── set_normal@2x.png
│ │ │ ├── set_normal@2x.png.meta
│ │ │ ├── three pyramid@2x.png
│ │ │ ├── three pyramid@2x.png.meta
│ │ │ ├── up.png
│ │ │ └── up.png.meta
│ │ ├── SpatialAudioAvatar.cs
│ │ ├── SpatialAudioAvatar.cs.meta
│ │ ├── SpatialAudioDemoCamera.cs
│ │ ├── SpatialAudioDemoCamera.cs.meta
│ │ ├── SpatialAudioDemoManager.cs
│ │ ├── SpatialAudioDemoManager.cs.meta
│ │ ├── SpatialAudioUIButton.anim
│ │ ├── SpatialAudioUIButton.anim.meta
│ │ ├── SpriteLayerHandler.cs
│ │ └── SpriteLayerHandler.cs.meta
│ ├── _AppIDInfo.meta
│ ├── _AppIDInfo
│ │ ├── AppIDInfo.asset
│ │ ├── AppIDInfo.asset.meta
│ │ ├── AppInfoObject.cs
│ │ └── AppInfoObject.cs.meta
│ ├── agoraDemoUnityWeb.png
│ ├── agoraDemoUnityWeb.png.meta
│ ├── datastream-sample.meta
│ ├── datastream-sample
│ │ ├── DataStreamScene.unity
│ │ ├── DataStreamScene.unity.meta
│ │ ├── TestDataStream.cs
│ │ └── TestDataStream.cs.meta
│ ├── device-manager.meta
│ ├── device-manager
│ │ ├── AgoraDeviceManager.cs
│ │ ├── AgoraDeviceManager.cs.meta
│ │ ├── DeviceManager.unity
│ │ └── DeviceManager.unity.meta
│ ├── encryption.meta
│ ├── encryption
│ │ ├── EncryptionSample.cs
│ │ ├── EncryptionSample.cs.meta
│ │ ├── EncryptionScene.unity
│ │ └── EncryptionScene.unity.meta
│ ├── geo-area-sample.meta
│ ├── geo-area-sample
│ │ ├── GeoArea.unity
│ │ ├── GeoArea.unity.meta
│ │ ├── HelloVideoAgora2.cs
│ │ └── HelloVideoAgora2.cs.meta
│ ├── multi-channel.meta
│ ├── multi-channel
│ │ ├── Prefabs.meta
│ │ ├── Prefabs
│ │ │ ├── ChannelPanel.prefab
│ │ │ └── ChannelPanel.prefab.meta
│ │ ├── Scenes.meta
│ │ ├── Scenes
│ │ │ ├── MultipleChannelDemoNew.unity
│ │ │ ├── MultipleChannelDemoNew.unity.meta
│ │ │ ├── MultipleChannelDemoNewSettings.lighting
│ │ │ └── MultipleChannelDemoNewSettings.lighting.meta
│ │ ├── Scripts.meta
│ │ └── Scripts
│ │ │ ├── AgoraChannelPanel.cs
│ │ │ ├── AgoraChannelPanel.cs.meta
│ │ │ ├── AgoraChannelPanelNew.cs
│ │ │ ├── AgoraChannelPanelNew.cs.meta
│ │ │ ├── MultiChannelSceneCtrl.cs
│ │ │ └── MultiChannelSceneCtrl.cs.meta
│ ├── push-video-frame.meta
│ ├── push-video-frame
│ │ ├── AgoraScreenShare.cs
│ │ ├── AgoraScreenShare.cs.meta
│ │ ├── MainSceneSettings.lighting
│ │ ├── MainSceneSettings.lighting.meta
│ │ ├── PushVideoFrame.unity
│ │ └── PushVideoFrame.unity.meta
│ ├── rtmp-streaming.meta
│ ├── rtmp-streaming
│ │ ├── MainScene.unity
│ │ ├── MainScene.unity.meta
│ │ ├── MainSceneSettings.lighting
│ │ ├── MainSceneSettings.lighting.meta
│ │ ├── RtmpStreaming.cs
│ │ └── RtmpStreaming.cs.meta
│ ├── screen-sharing.meta
│ ├── screen-sharing
│ │ ├── AgoraScreenSharingClientManager.cs
│ │ ├── AgoraScreenSharingClientManager.cs.meta
│ │ ├── ClientManagerTest.unity
│ │ ├── ClientManagerTest.unity.meta
│ │ ├── ClientManagerTestSettings.lighting
│ │ └── ClientManagerTestSettings.lighting.meta
│ ├── spatial-audio-effect.meta
│ ├── spatial-audio-effect
│ │ ├── SpatialAudioForClientManager.cs
│ │ ├── SpatialAudioForClientManager.cs.meta
│ │ ├── SpatialAudioScene.unity
│ │ └── SpatialAudioScene.unity.meta
│ ├── spatial-audio-positional.meta
│ ├── spatial-audio-positional
│ │ ├── SpatialAudioPosition.cs
│ │ ├── SpatialAudioPosition.cs.meta
│ │ ├── SpatialAudioPosition.unity
│ │ └── SpatialAudioPosition.unity.meta
│ ├── token-usage.meta
│ ├── token-usage
│ │ ├── ClientManagerTokenUse.cs
│ │ ├── ClientManagerTokenUse.cs.meta
│ │ ├── MainSceneNewSettings.lighting
│ │ ├── MainSceneNewSettings.lighting.meta
│ │ ├── TokenUse.unity
│ │ └── TokenUse.unity.meta
│ ├── tools.meta
│ ├── tools
│ │ ├── Logger.cs
│ │ ├── Logger.cs.meta
│ │ ├── PermissionHelper.cs
│ │ ├── PermissionHelper.cs.meta
│ │ ├── ToggleStateButton.cs
│ │ ├── ToggleStateButton.cs.meta
│ │ ├── TokenClient.cs
│ │ ├── TokenClient.cs.meta
│ │ ├── TokenClient.prefab
│ │ ├── TokenClient.prefab.meta
│ │ ├── TokenRequestHelper.cs
│ │ ├── TokenRequestHelper.cs.meta
│ │ ├── UIElementDragger.cs
│ │ └── UIElementDragger.cs.meta
│ ├── user-audioframe-audiosource.meta
│ ├── user-audioframe-audiosource
│ │ ├── AudioFrameScene.unity
│ │ ├── AudioFrameScene.unity.meta
│ │ ├── IUserAudioFrameDelegate.cs
│ │ ├── IUserAudioFrameDelegate.cs.meta
│ │ ├── RingBuffer.cs
│ │ ├── RingBuffer.cs.meta
│ │ ├── UserAudioFrame2SourceSample.cs
│ │ ├── UserAudioFrame2SourceSample.cs.meta
│ │ ├── UserAudioFrameHandler.cs
│ │ └── UserAudioFrameHandler.cs.meta
│ ├── video-encoder-configuration.meta
│ ├── video-encoder-configuration
│ │ ├── VideoEncodeSize.unity
│ │ ├── VideoEncodeSize.unity.meta
│ │ ├── video_encoder_configuration.cs
│ │ └── video_encoder_configuration.cs.meta
│ ├── virtual-background.meta
│ └── virtual-background
│ │ ├── ClientManagerTestSettings.lighting
│ │ ├── ClientManagerTestSettings.lighting.meta
│ │ ├── VirtualBackground.unity
│ │ ├── VirtualBackground.unity.meta
│ │ ├── VirtualBackgroundClientDemo.cs
│ │ └── VirtualBackgroundClientDemo.cs.meta
├── AgoraEngine.meta
├── AgoraEngine
│ ├── Agora Webgl Build And Run.pdf
│ ├── Agora Webgl Build And Run.pdf.meta
│ ├── Editor.meta
│ ├── Editor
│ │ ├── BL_BuildPostProcess.cs
│ │ └── BL_BuildPostProcess.cs.meta
│ ├── Plugins.meta
│ ├── Plugins
│ │ └── WebGL
│ │ │ ├── AgoraWebGLSDK.jslib
│ │ │ └── AgoraWebGLSDK.jslib.meta
│ ├── Prefabs.meta
│ ├── Prefabs
│ │ ├── AgoraEventHandler.prefab
│ │ └── AgoraEventHandler.prefab.meta
│ ├── Scripts.meta
│ ├── Scripts
│ │ ├── AgoraGamingSDK.meta
│ │ ├── AgoraGamingSDK
│ │ │ ├── AgoraBase.cs
│ │ │ ├── AgoraBase.cs.meta
│ │ │ ├── AgoraCallback.cs
│ │ │ ├── AgoraCallback.cs.meta
│ │ │ ├── AgoraChannel.cs
│ │ │ ├── AgoraChannel.cs.meta
│ │ │ ├── AgoraChannelCallback.cs
│ │ │ ├── AgoraChannelCallback.cs.meta
│ │ │ ├── AgoraGameObject.cs
│ │ │ ├── AgoraGameObject.cs.meta
│ │ │ ├── AgoraGamingRtcEngine.cs
│ │ │ ├── AgoraGamingRtcEngine.cs.meta
│ │ │ ├── AudioEffectManager.cs
│ │ │ ├── AudioEffectManager.cs.meta
│ │ │ ├── PLACEHOLDER
│ │ │ ├── PLACEHOLDER.meta
│ │ │ ├── deviceManager.meta
│ │ │ ├── deviceManager
│ │ │ │ ├── AudioPlaybackDeviceManager.cs
│ │ │ │ ├── AudioPlaybackDeviceManager.cs.meta
│ │ │ │ ├── AudioRecordingDeviceManager.cs
│ │ │ │ ├── AudioRecordingDeviceManager.cs.meta
│ │ │ │ ├── MediaRecorder.cs
│ │ │ │ ├── MediaRecorder.cs.meta
│ │ │ │ ├── ScreenCaptureManager.cs
│ │ │ │ ├── ScreenCaptureManager.cs.meta
│ │ │ │ ├── VideoDeviceManager.cs
│ │ │ │ └── VideoDeviceManager.cs.meta
│ │ │ ├── mainpage.md
│ │ │ ├── mainpage.md.meta
│ │ │ ├── native.meta
│ │ │ ├── native
│ │ │ │ ├── IAgoraGamingRtcEngineNative.cs
│ │ │ │ └── IAgoraGamingRtcEngineNative.cs.meta
│ │ │ ├── observer.meta
│ │ │ ├── observer
│ │ │ │ ├── MetaDataObserver.cs
│ │ │ │ ├── MetaDataObserver.cs.meta
│ │ │ │ ├── PacketObserver.cs
│ │ │ │ └── PacketObserver.cs.meta
│ │ │ ├── rawData.meta
│ │ │ ├── rawData
│ │ │ │ ├── AudioRawDataManager.cs
│ │ │ │ ├── AudioRawDataManager.cs.meta
│ │ │ │ ├── VideoRawDataManager.cs
│ │ │ │ └── VideoRawDataManager.cs.meta
│ │ │ ├── spatialAudio.meta
│ │ │ ├── spatialAudio
│ │ │ │ ├── LocalSpatialAudioEngine.cs
│ │ │ │ └── LocalSpatialAudioEngine.cs.meta
│ │ │ ├── tools.meta
│ │ │ ├── tools
│ │ │ │ ├── AgoraCallbackObject.cs
│ │ │ │ ├── AgoraCallbackObject.cs.meta
│ │ │ │ ├── AgoraCallbackQueue.cs
│ │ │ │ ├── AgoraCallbackQueue.cs.meta
│ │ │ │ ├── AgoraLog.cs
│ │ │ │ └── AgoraLog.cs.meta
│ │ │ ├── videoRender.meta
│ │ │ └── videoRender
│ │ │ │ ├── VideoRender.cs
│ │ │ │ ├── VideoRender.cs.meta
│ │ │ │ ├── VideoSurface.cs
│ │ │ │ └── VideoSurface.cs.meta
│ │ ├── AgoraTools.meta
│ │ ├── AgoraTools
│ │ │ ├── prep_codesign.sh
│ │ │ ├── prep_codesign.sh.meta
│ │ │ ├── signcode.sh
│ │ │ └── signcode.sh.meta
│ │ ├── AgoraWebGLEventHandler.cs
│ │ ├── AgoraWebGLEventHandler.cs.meta
│ │ ├── InSurfaceRenderer.cs
│ │ ├── InSurfaceRenderer.cs.meta
│ │ ├── WebglPreBuildProcessing.meta
│ │ └── WebglPreBuildProcessing
│ │ │ ├── WebglPreBuildProcessing.cs
│ │ │ └── WebglPreBuildProcessing.cs.meta
│ ├── Utils.meta
│ └── Utils
│ │ ├── AgoraUIUtils.cs
│ │ └── AgoraUIUtils.cs.meta
├── FunctionalTest.meta
├── FunctionalTest
│ ├── DevDemo.meta
│ ├── DevDemo
│ │ ├── Api_TestHelper.cs
│ │ ├── Api_TestHelper.cs.meta
│ │ ├── ButtonHandler.cs
│ │ ├── ButtonHandler.cs.meta
│ │ ├── GlobalDebug.cs
│ │ ├── GlobalDebug.cs.meta
│ │ ├── MultiChannel.meta
│ │ ├── MultiChannel.unity
│ │ ├── MultiChannel.unity.meta
│ │ ├── MultiChannel
│ │ │ ├── MC_Main.cs
│ │ │ └── MC_Main.cs.meta
│ │ ├── SceneFuncTests.unity
│ │ ├── SceneFuncTests.unity.meta
│ │ ├── SceneHome2.unity
│ │ ├── SceneHome2.unity.meta
│ │ ├── Test.meta
│ │ ├── Test
│ │ │ ├── AMT_Item.cs
│ │ │ ├── AMT_Item.cs.meta
│ │ │ ├── DVC_ShareAudio.cs
│ │ │ ├── DVC_ShareAudio.cs.meta
│ │ │ ├── DVC_ShareScreen.cs
│ │ │ ├── DVC_ShareScreen.cs.meta
│ │ │ ├── FetchErrorDescription.cs
│ │ │ ├── FetchErrorDescription.cs.meta
│ │ │ ├── FrameHandlers.cs
│ │ │ ├── FrameHandlers.cs.meta
│ │ │ ├── Test_ADM.cs
│ │ │ ├── Test_ADM.cs.meta
│ │ │ ├── Test_AudioEffects.cs
│ │ │ ├── Test_AudioEffects.cs.meta
│ │ │ ├── Test_AudioMixing.cs
│ │ │ ├── Test_AudioMixing.cs.meta
│ │ │ ├── Test_Misc.cs
│ │ │ ├── Test_Misc.cs.meta
│ │ │ ├── Test_MuteStreams.cs
│ │ │ ├── Test_MuteStreams.cs.meta
│ │ │ ├── Test_OldScreenShare.cs
│ │ │ ├── Test_OldScreenShare.cs.meta
│ │ │ ├── Test_PlaybackDeviceManager.cs
│ │ │ ├── Test_PlaybackDeviceManager.cs.meta
│ │ │ ├── Test_RecordingDeviceManager.cs
│ │ │ ├── Test_RecordingDeviceManager.cs.meta
│ │ │ ├── Test_VideoDeviceManager.cs
│ │ │ ├── Test_VideoDeviceManager.cs.meta
│ │ │ ├── Test_Watermark.cs
│ │ │ └── Test_Watermark.cs.meta
│ │ ├── TestFinder.cs
│ │ ├── TestFinder.cs.meta
│ │ ├── TestHelloUnityVideo.cs
│ │ ├── TestHelloUnityVideo.cs.meta
│ │ ├── TestHome.cs
│ │ ├── TestHome.cs.meta
│ │ ├── TestInits.cs
│ │ ├── TestInits.cs.meta
│ │ ├── TestUI.cs
│ │ ├── TestUI.cs.meta
│ │ ├── Web.meta
│ │ └── Web
│ │ │ ├── ImplTester.cs
│ │ │ ├── ImplTester.cs.meta
│ │ │ ├── ImplTesterBeforeJoin.cs
│ │ │ ├── ImplTesterBeforeJoin.cs.meta
│ │ │ ├── TestApiImplementor.cs
│ │ │ └── TestApiImplementor.cs.meta
│ ├── JoinMultipleChannel.meta
│ ├── JoinMultipleChannel
│ │ ├── AgoraMultiChannel.cs
│ │ ├── AgoraMultiChannel.cs.meta
│ │ ├── MainScene.unity
│ │ └── MainScene.unity.meta
│ ├── NewScreenShareMChannel.meta
│ ├── NewScreenShareMChannel
│ │ ├── AgoraMultiChannel2.cs
│ │ ├── AgoraMultiChannel2.cs.meta
│ │ ├── MainSceneNew.unity
│ │ └── MainSceneNew.unity.meta
│ ├── Respawn.meta
│ ├── Respawn
│ │ ├── RespawnScene.unity
│ │ ├── RespawnScene.unity.meta
│ │ ├── TestVideoRespawn.cs
│ │ └── TestVideoRespawn.cs.meta
│ ├── SpatialAudioForMultichannel.meta
│ ├── SpatialAudioForMultichannel
│ │ ├── SpatialAudioScene.unity
│ │ ├── SpatialAudioScene.unity.meta
│ │ ├── SpatialAudioSceneSettings.lighting
│ │ ├── SpatialAudioSceneSettings.lighting.meta
│ │ ├── SpatialAudioforMultichannel.cs
│ │ └── SpatialAudioforMultichannel.cs.meta
│ ├── VirtualBackgroundMultichannel.meta
│ ├── VirtualBackgroundMultichannel
│ │ ├── MultichannelTest.unity
│ │ ├── MultichannelTest.unity.meta
│ │ ├── MultichannelTestSettings.lighting
│ │ ├── MultichannelTestSettings.lighting.meta
│ │ ├── VirtualBackgroundMultichannelDemo.cs
│ │ └── VirtualBackgroundMultichannelDemo.cs.meta
│ ├── VoiceChannel.meta
│ └── VoiceChannel
│ │ ├── AgoraVoiceChannel.cs
│ │ ├── AgoraVoiceChannel.cs.meta
│ │ ├── MainSceneNew.unity
│ │ └── MainSceneNew.unity.meta
├── WebGLSupport.meta
├── WebGLSupport
│ ├── WebGLInput.meta
│ ├── WebGLInput
│ │ ├── Detail.meta
│ │ ├── Detail
│ │ │ ├── RebuildChecker.cs
│ │ │ └── RebuildChecker.cs.meta
│ │ ├── Mobile.meta
│ │ ├── Mobile
│ │ │ ├── WebGLInputMobile.cs
│ │ │ ├── WebGLInputMobile.cs.meta
│ │ │ ├── WebGLInputMobile.jslib
│ │ │ └── WebGLInputMobile.jslib.meta
│ │ ├── WebGLInput.cs
│ │ ├── WebGLInput.cs.meta
│ │ ├── WebGLInput.jslib
│ │ ├── WebGLInput.jslib.meta
│ │ ├── Wrapper.meta
│ │ └── Wrapper
│ │ │ ├── IInputField.cs
│ │ │ ├── IInputField.cs.meta
│ │ │ ├── WrappedInputField.cs
│ │ │ ├── WrappedInputField.cs.meta
│ │ │ ├── WrappedTMPInputField.cs
│ │ │ └── WrappedTMPInputField.cs.meta
│ ├── WebGLWindow.meta
│ └── WebGLWindow
│ │ ├── WebGLWindow.cs
│ │ ├── WebGLWindow.cs.meta
│ │ ├── WebGLWindow.jslib
│ │ └── WebGLWindow.jslib.meta
├── WebGLTemplates.meta
└── WebGLTemplates
│ ├── AgoraTemplate.meta
│ ├── AgoraTemplate
│ ├── AgoraRTC_N.js
│ ├── AgoraRTC_N.js.meta
│ ├── AgoraWebSDK.meta
│ ├── AgoraWebSDK
│ │ ├── agorartcenginev2.js
│ │ ├── agorartcenginev2.js.meta
│ │ ├── assets.meta
│ │ ├── assets
│ │ │ ├── agora-wasm.wasm
│ │ │ ├── agora-wasm.wasm.meta
│ │ │ ├── audio.meta
│ │ │ ├── audio
│ │ │ │ ├── Sample_GoG_Theme.mp3
│ │ │ │ └── Sample_GoG_Theme.mp3.meta
│ │ │ ├── common.css
│ │ │ ├── common.css.meta
│ │ │ ├── images.meta
│ │ │ ├── images
│ │ │ │ ├── bedroom.jpg
│ │ │ │ └── bedroom.jpg.meta
│ │ │ ├── videos.meta
│ │ │ └── videos
│ │ │ │ ├── jellyfish.mp4
│ │ │ │ └── jellyfish.mp4.meta
│ │ ├── libs.meta
│ │ ├── libs
│ │ │ ├── agora-extension-virtual-background.js
│ │ │ ├── agora-extension-virtual-background.js.meta
│ │ │ ├── agorachannel.js
│ │ │ ├── agorachannel.js.meta
│ │ │ ├── agorautils.js
│ │ │ ├── agorautils.js.meta
│ │ │ ├── audioeffects.js
│ │ │ ├── audioeffects.js.meta
│ │ │ ├── audiomixing.js
│ │ │ ├── audiomixing.js.meta
│ │ │ ├── audiosystem.js
│ │ │ ├── audiosystem.js.meta
│ │ │ ├── clientmanager.js
│ │ │ ├── clientmanager.js.meta
│ │ │ ├── customvideo.js
│ │ │ ├── customvideo.js.meta
│ │ │ ├── databuilder.js
│ │ │ ├── databuilder.js.meta
│ │ │ ├── engineglobals.js
│ │ │ ├── engineglobals.js.meta
│ │ │ ├── eventmanager.js
│ │ │ ├── eventmanager.js.meta
│ │ │ ├── index.esm.js
│ │ │ ├── index.esm.js.meta
│ │ │ ├── multichannel.js
│ │ │ ├── multichannel.js.meta
│ │ │ ├── resources.meta
│ │ │ ├── resources
│ │ │ │ ├── 2.mp3
│ │ │ │ ├── 2.mp3.meta
│ │ │ │ ├── 3.mp3
│ │ │ │ ├── 3.mp3.meta
│ │ │ │ ├── DemoResources.meta
│ │ │ │ └── DemoResources
│ │ │ │ │ ├── Bgm.meta
│ │ │ │ │ ├── Bgm
│ │ │ │ │ ├── BGM.mp3
│ │ │ │ │ └── BGM.mp3.meta
│ │ │ │ │ ├── Live.meta
│ │ │ │ │ ├── Live
│ │ │ │ │ ├── live.mp3
│ │ │ │ │ └── live.mp3.meta
│ │ │ │ │ ├── Music.meta
│ │ │ │ │ ├── Music
│ │ │ │ │ ├── music.mp3
│ │ │ │ │ └── music.mp3.meta
│ │ │ │ │ ├── paul.meta
│ │ │ │ │ └── paul
│ │ │ │ │ ├── ToddEmbleyDemo.mp3
│ │ │ │ │ └── ToddEmbleyDemo.mp3.meta
│ │ │ ├── spatial-audio-main.js
│ │ │ ├── spatial-audio-main.js.meta
│ │ │ ├── spatial.meta
│ │ │ ├── spatial
│ │ │ │ ├── audio_spatializer.wasm
│ │ │ │ ├── audio_spatializer.wasm.meta
│ │ │ │ ├── spatial-audio-worker.js
│ │ │ │ └── spatial-audio-worker.js.meta
│ │ │ ├── testing.js
│ │ │ ├── testing.js.meta
│ │ │ ├── virtualbackground.js
│ │ │ ├── virtualbackground.js.meta
│ │ │ ├── watermark.js
│ │ │ ├── watermark.js.meta
│ │ │ ├── wglwrapper.js
│ │ │ └── wglwrapper.js.meta
│ │ ├── style.css
│ │ ├── style.css.meta
│ │ └── vendor.meta
│ ├── index.css
│ ├── index.css.meta
│ ├── index.html
│ ├── index.html.meta
│ ├── thumbnail.png
│ └── thumbnail.png.meta
│ ├── AgoraTemplate2020.meta
│ └── AgoraTemplate2020
│ ├── AgoraRTC_N.js
│ ├── AgoraRTC_N.js.meta
│ ├── AgoraWebSDK
│ ├── AgoraWebSDK.meta
│ ├── TemplateData.meta
│ ├── TemplateData
│ ├── favicon.ico
│ ├── favicon.ico.meta
│ ├── fullscreen-button.png
│ ├── fullscreen-button.png.meta
│ ├── progress-bar-empty-dark.png
│ ├── progress-bar-empty-dark.png.meta
│ ├── progress-bar-empty-light.png
│ ├── progress-bar-empty-light.png.meta
│ ├── progress-bar-full-dark.png
│ ├── progress-bar-full-dark.png.meta
│ ├── progress-bar-full-light.png
│ ├── progress-bar-full-light.png.meta
│ ├── style.css
│ ├── style.css.meta
│ ├── unity-logo-dark.png
│ ├── unity-logo-dark.png.meta
│ ├── unity-logo-light.png
│ ├── unity-logo-light.png.meta
│ ├── webgl-logo.png
│ └── webgl-logo.png.meta
│ ├── index.html
│ ├── index.html.meta
│ ├── thumbnail.png
│ └── thumbnail.png.meta
├── LICENSE
├── ProjectSettings
├── EditorBuildSettings.asset
└── ProjectSettings.asset
├── README.md
├── README.zh.md
└── UserSettings
├── EditorUserSettings.asset
└── Layouts
└── default-2021.dwlt
/.github/ISSUE_TEMPLATE/bug-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug template
3 | about: Use this template to report bugs / issues
4 | title: "[BUG]"
5 | labels: bug
6 | assignees: icywind
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Use this template to suggest an idea for this project
4 | title: "[Feature]"
5 | labels: enhancement
6 | assignees: icywind
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # This .gitignore file should be placed at the root of your Unity project directory
2 | #
3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore
4 | #
5 | .DS_Store
6 | Thumbs.db
7 | # Never ignore Asset meta data
8 | !/[Aa]ssets/**/*.meta
9 |
10 | #/Assets/AgoraEngine/
11 | /[Ll]ibrary/
12 | /[Tt]emp/
13 | /[Oo]bj/
14 | /[Bb]uild/
15 | /[Bb]uilds/
16 | /[Ll]ogs/
17 | /[Mm]emoryCaptures/
18 | /Assets/AgoraEngine/Plugins/*
19 | !/Assets/AgoraEngine/Plugins/WebGL
20 | #/Assets/Plugins/*/*[Aa]gora*.*
21 | #/Assets/Plugins/*/*[Aa]gora*.*/
22 | #/Assets/Plugins/*/*[Aa]gora*.*.*
23 | /Assets/Scenes
24 | /Assets/Scenes.*
25 | /Packages/
26 | /ProjectSettings/*
27 | !/ProjectSettings/EditorBuildSettings.asset
28 | !/ProjectSettings/ProjectSettings.asset
29 |
30 |
31 | *.app
32 |
33 | # Uncomment this line if you wish to ignore the asset store tools plugin
34 | # /[Aa]ssets/AssetStoreTools*
35 |
36 | # Autogenerated Jetbrains Rider plugin
37 | [Aa]ssets/Plugins/Editor/JetBrains*
38 |
39 | # Visual Studio cache directory
40 | .vs/
41 |
42 | # Gradle cache directory
43 | .gradle/
44 |
45 | # idea/
46 | .idea/
47 |
48 | # Autogenerated VS/MD/Consulo solution and project files
49 | ExportedObj/
50 | .consulo/
51 | #*.csproj
52 | *.unityproj
53 | #*.sln
54 | *.suo
55 | *.tmp
56 | *.swp
57 | *.user
58 | *.userprefs
59 | *.pidb
60 | *.booproj
61 | *.svd
62 | *.pdb
63 | *.mdb
64 | *.opendb
65 | *.VC.db
66 |
67 | # Unity3D generated meta files
68 | *.pidb.meta
69 | *.pdb.meta
70 | *.mdb.meta
71 |
72 | # Unity3D generated file on crash reports
73 | sysinfo.txt
74 |
75 | # Builds
76 | *.apk
77 | *.unitypackage
78 |
79 | # Crashlytics generated file
80 | crashlytics-build.properties
81 |
82 | # Plugin files
83 | Assets/Plugins
84 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.exclude":
3 | {
4 | "**/.DS_Store":true,
5 | "**/.git":true,
6 | "**/.gitignore":true,
7 | "**/.gitmodules":true,
8 | "**/*.booproj":true,
9 | "**/*.pidb":true,
10 | "**/*.suo":true,
11 | "**/*.user":true,
12 | "**/*.userprefs":true,
13 | "**/*.unityproj":true,
14 | "**/*.dll":true,
15 | "**/*.exe":true,
16 | "**/*.pdf":true,
17 | "**/*.mid":true,
18 | "**/*.midi":true,
19 | "**/*.wav":true,
20 | "**/*.gif":true,
21 | "**/*.ico":true,
22 | "**/*.jpg":true,
23 | "**/*.jpeg":true,
24 | "**/*.png":true,
25 | "**/*.psd":true,
26 | "**/*.tga":true,
27 | "**/*.tif":true,
28 | "**/*.tiff":true,
29 | "**/*.3ds":true,
30 | "**/*.3DS":true,
31 | "**/*.fbx":true,
32 | "**/*.FBX":true,
33 | "**/*.lxo":true,
34 | "**/*.LXO":true,
35 | "**/*.ma":true,
36 | "**/*.MA":true,
37 | "**/*.obj":true,
38 | "**/*.OBJ":true,
39 | "**/*.asset":true,
40 | "**/*.cubemap":true,
41 | "**/*.flare":true,
42 | "**/*.mat":true,
43 | "**/*.meta":true,
44 | "**/*.prefab":true,
45 | "**/*.unity":true,
46 | "build/":true,
47 | "Build/":true,
48 | "Library/":true,
49 | "library/":true,
50 | "obj/":true,
51 | "Obj/":true,
52 | "ProjectSettings/":true,
53 | "temp/":true,
54 | "Temp/":true
55 | }
56 | }
--------------------------------------------------------------------------------
/.vsconfig:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0",
3 | "components": [
4 | "Microsoft.VisualStudio.Workload.ManagedGame"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/Agora.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Agora", "Agora.csproj", "{E3FC28CC-B051-1751-20A1-EC25AFF313F4}"
5 | EndProject
6 | Global
7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
8 | Debug|Any CPU = Debug|Any CPU
9 | Release|Any CPU = Release|Any CPU
10 | EndGlobalSection
11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
12 | {E3FC28CC-B051-1751-20A1-EC25AFF313F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
13 | {E3FC28CC-B051-1751-20A1-EC25AFF313F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
14 | {E3FC28CC-B051-1751-20A1-EC25AFF313F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
15 | {E3FC28CC-B051-1751-20A1-EC25AFF313F4}.Release|Any CPU.Build.0 = Release|Any CPU
16 | EndGlobalSection
17 | GlobalSection(SolutionProperties) = preSolution
18 | HideSolutionNode = FALSE
19 | EndGlobalSection
20 | EndGlobal
21 |
--------------------------------------------------------------------------------
/Agora_Unity_WebGL.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 11.00
3 | # Visual Studio 2010
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp.csproj", "{885A3DAA-1E51-87A4-E4C6-DD4176626251}"
5 | EndProject
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{2D047345-BB11-A0E4-F155-37D0037590C6}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {885A3DAA-1E51-87A4-E4C6-DD4176626251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {885A3DAA-1E51-87A4-E4C6-DD4176626251}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {885A3DAA-1E51-87A4-E4C6-DD4176626251}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {885A3DAA-1E51-87A4-E4C6-DD4176626251}.Release|Any CPU.Build.0 = Release|Any CPU
18 | {2D047345-BB11-A0E4-F155-37D0037590C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {2D047345-BB11-A0E4-F155-37D0037590C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {2D047345-BB11-A0E4-F155-37D0037590C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {2D047345-BB11-A0E4-F155-37D0037590C6}.Release|Any CPU.Build.0 = Release|Any CPU
22 | EndGlobalSection
23 | GlobalSection(SolutionProperties) = preSolution
24 | HideSolutionNode = FALSE
25 | EndGlobalSection
26 | EndGlobal
27 |
--------------------------------------------------------------------------------
/Assets/API-Example.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: f3a304df56c614d54afe0f6d3ff7919c
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 2b16622ab9488bd4c965f99fe877132f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/AudioVideoStateControl.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.UI;
3 |
4 | public class AudioVideoStates
5 | {
6 | public bool subAudio;
7 | public bool subVideo;
8 | public bool pubAudio;
9 | public bool pubVideo;
10 | }
11 |
12 | public class AudioVideoStateControl : MonoBehaviour
13 | {
14 | public Toggle toggleSubAudio;
15 | public Toggle toggleSubVideo;
16 | public Toggle togglePubAudio;
17 | public Toggle togglePubVideo;
18 | }
19 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/AudioVideoStateControl.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: ca8e075111e944e17aea16e9e054133d
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/ButtonHandler.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.UI;
3 |
4 | public class ButtonHandler : MonoBehaviour
5 | {
6 |
7 | ///
8 | /// React to a button click event. Used in the UI Button action definition.
9 | ///
10 | ///
11 | public void onButtonClicked(Button button)
12 | {
13 | // which GameObject?
14 | GameObject go = GameObject.Find("GameController");
15 | if (go != null)
16 | {
17 | TestHome gameController = go.GetComponent();
18 | if (gameController == null)
19 | {
20 | Debug.LogError("Missing game controller...");
21 | return;
22 | }
23 | if (button.name == "JoinButton")
24 | {
25 | gameController.onJoinButtonClicked(true);
26 | }
27 | else if (button.name == "JoinButton2")
28 | {
29 | gameController.onJoinButtonClicked(false);
30 | }
31 | else if (button.name == "LeaveButton")
32 | {
33 | gameController.onLeaveButtonClicked();
34 | }
35 | else if (button.name == "JoinButton4")
36 | {
37 | gameController.onJoinAudience();
38 | }
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/ButtonHandler.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5fa7611fdea6e4647b30307169284680
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/SceneHelloVideo.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 5a4d72265ca2c1b4393e31ef58d0988d
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/SceneHome.unity.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 04457f7085d109e45b51dd81bae1a412
3 | DefaultImporter:
4 | externalObjects: {}
5 | userData:
6 | assetBundleName:
7 | assetBundleVariant:
8 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/TestHelloUnityVideo.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1a94a4cec58b09a4bba50f8be5da050c
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/TestHome.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: a7d379303221dd7459c4b31d1b17fe18
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/UIElementDragger.cs:
--------------------------------------------------------------------------------
1 | using UnityEngine;
2 | using UnityEngine.EventSystems;
3 |
4 | namespace agora_utilities
5 | {
6 | public class UIElementDragger : EventTrigger
7 | {
8 | float lastClick = 0f;
9 | float interval = 0.4f;
10 | public override void OnPointerClick(PointerEventData eventData)
11 | {
12 | if ((lastClick + interval) > Time.time)
13 | { //is a double click
14 |
15 | transform.localScale = new Vector3(-transform.localScale.x, transform.localScale.y, transform.localScale.z);
16 | }
17 | else
18 | {//is a single click
19 | lastClick = Time.time;
20 | }
21 | }
22 |
23 | public override void OnDrag(PointerEventData eventData)
24 | {
25 | transform.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
26 | base.OnDrag(eventData);
27 | }
28 | }
29 | }
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/UIElementDragger.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 22f70ee313c9227409d938bbb5316ef9
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/agoraDemoUnityWeb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AgoraIO-Community/Agora_Unity_WebGL/df0488a17c46d4f227d140d323ed91d54fcfc1c7/Assets/API-Example/Demo/agoraDemoUnityWeb.png
--------------------------------------------------------------------------------
/Assets/API-Example/Demo/agoraDemoUnityWeb.png.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: d155acdd06a2241b28c4ec528c54ddf3
3 | TextureImporter:
4 | fileIDToRecycleName: {}
5 | externalObjects: {}
6 | serializedVersion: 4
7 | mipmaps:
8 | mipMapMode: 0
9 | enableMipMap: 1
10 | sRGBTexture: 1
11 | linearTexture: 0
12 | fadeOut: 0
13 | borderMipMap: 0
14 | mipMapsPreserveCoverage: 0
15 | alphaTestReferenceValue: 0.5
16 | mipMapFadeDistanceStart: 1
17 | mipMapFadeDistanceEnd: 3
18 | bumpmap:
19 | convertToNormalMap: 0
20 | externalNormalMap: 0
21 | heightScale: 0.25
22 | normalMapFilter: 0
23 | isReadable: 0
24 | grayScaleToAlpha: 0
25 | generateCubemap: 6
26 | cubemapConvolution: 0
27 | seamlessCubemap: 0
28 | textureFormat: 1
29 | maxTextureSize: 2048
30 | textureSettings:
31 | serializedVersion: 2
32 | filterMode: -1
33 | aniso: -1
34 | mipBias: -1
35 | wrapU: -1
36 | wrapV: -1
37 | wrapW: -1
38 | nPOTScale: 1
39 | lightmap: 0
40 | compressionQuality: 50
41 | spriteMode: 0
42 | spriteExtrude: 1
43 | spriteMeshType: 1
44 | alignment: 0
45 | spritePivot: {x: 0.5, y: 0.5}
46 | spritePixelsToUnits: 100
47 | spriteBorder: {x: 0, y: 0, z: 0, w: 0}
48 | spriteGenerateFallbackPhysicsShape: 1
49 | alphaUsage: 1
50 | alphaIsTransparency: 0
51 | spriteTessellationDetail: -1
52 | textureType: 0
53 | textureShape: 1
54 | maxTextureSizeSet: 0
55 | compressionQualitySet: 0
56 | textureFormatSet: 0
57 | platformSettings:
58 | - buildTarget: DefaultTexturePlatform
59 | maxTextureSize: 2048
60 | resizeAlgorithm: 0
61 | textureFormat: -1
62 | textureCompression: 1
63 | compressionQuality: 50
64 | crunchedCompression: 0
65 | allowsAlphaSplitting: 0
66 | overridden: 0
67 | androidETC2FallbackOverride: 0
68 | spriteSheet:
69 | serializedVersion: 2
70 | sprites: []
71 | outline: []
72 | physicsShape: []
73 | spritePackingTag:
74 | userData:
75 | assetBundleName:
76 | assetBundleVariant:
77 |
--------------------------------------------------------------------------------
/Assets/API-Example/Editor.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 57929709d82224bd6acade43763abef8
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/API-Example/Editor/SceneWindow.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using UnityEditor;
3 | using UnityEngine;
4 | namespace Agora_RTC_Plugin.API_Example.Editor
5 | {
6 | public class SceneEditorWindow : EditorWindow
7 | {
8 | List m_SceneAssets = new List();
9 |
10 | // Add menu item named "Example Window" to the Window menu
11 | [MenuItem("Agora/Build/List Scenes", false, 1)]
12 | public static void ShowWindow()
13 | {
14 | //Show existing window instance. If one doesn't exist, make one.
15 | EditorWindow.GetWindow(typeof(SceneEditorWindow));
16 | }
17 |
18 | void OnGUI()
19 | {
20 | GUILayout.Space(8);
21 | if (GUILayout.Button("Search and Add Scene files"))
22 | {
23 | List editorBuildSettingsScenes = new List();
24 | foreach (var file in System.IO.Directory.EnumerateFiles(".", "*.unity", System.IO.SearchOption.AllDirectories))
25 | {
26 | string scenePath = file.Remove(0, 2);
27 | UnityEngine.Debug.Log(scenePath);
28 | if (!scenePath.Contains("FunctionalTest"))
29 | {
30 | editorBuildSettingsScenes.Add(new EditorBuildSettingsScene(scenePath, true));
31 | }
32 | }
33 | EditorBuildSettings.scenes = editorBuildSettingsScenes.ToArray();
34 | }
35 |
36 | GUILayout.Space(8);
37 | if (GUILayout.Button("Clear Scene files"))
38 | {
39 | EditorBuildSettings.scenes = null;
40 | }
41 | }
42 |
43 |
44 | }
45 | }
--------------------------------------------------------------------------------
/Assets/API-Example/Editor/SceneWindow.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 595dc33222672413da78131934127b62
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Editor/Welcome.cs:
--------------------------------------------------------------------------------
1 | // Shows either a welcome message, only once per session.
2 | //#if UNITY_EDITOR
3 | using UnityEditor;
4 | using UnityEngine;
5 |
6 | namespace agora_gaming_rtc
7 | {
8 | static class Welcome
9 | {
10 | [InitializeOnLoadMethod]
11 | static void OnInitializeOnLoad()
12 | {
13 | // InitializeOnLoad is called on start and after each rebuild,
14 | // but we only want to show this once per editor session.
15 | if (!SessionState.GetBool("AGORA_WELCOME", false))
16 | {
17 | SessionState.SetBool("AGORA_WELCOME", true);
18 | Debug.Log("Agora IO | webgl.agoraguru.net | See Wiki On GibHub");
19 | }
20 | }
21 | }
22 | }
23 | //#endif
24 |
--------------------------------------------------------------------------------
/Assets/API-Example/Editor/Welcome.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 892f81106d1834360b2301a0e157e7cd
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Home Menu.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 19ea57903dcbf416d88c93b810c75e4f
3 | folderAsset: yes
4 | DefaultImporter:
5 | externalObjects: {}
6 | userData:
7 | assetBundleName:
8 | assetBundleVariant:
9 |
--------------------------------------------------------------------------------
/Assets/API-Example/Home Menu/Drag.cs:
--------------------------------------------------------------------------------
1 | using System.Collections;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 | using UnityEngine.UI;
5 | using UnityEngine.EventSystems;
6 | using UnityEngine.SceneManagement;
7 |
8 | public class Drag : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
9 | {
10 | public Image thisImage;
11 |
12 | // Start is called before the first frame update
13 | void Start()
14 | {
15 | thisImage = GetComponent();
16 | }
17 |
18 | public void OnBeginDrag(PointerEventData eventData)
19 | {
20 | thisImage.raycastTarget = false;
21 | }
22 |
23 | public void OnDrag(PointerEventData eventData)
24 | {
25 | transform.position = eventData.position;
26 | }
27 |
28 | public void OnEndDrag(PointerEventData eventData)
29 | {
30 | thisImage.raycastTarget = true;
31 | }
32 |
33 | // Update is called once per frame
34 | void Update()
35 | {
36 |
37 | }
38 | public void backToMenu()
39 | {
40 | SceneManager.LoadScene("RootMenuScene");
41 | }
42 |
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/Assets/API-Example/Home Menu/Drag.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: e88e4f816bc5f4cce9a423c567a33b8e
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Home Menu/RootMenu.cs.meta:
--------------------------------------------------------------------------------
1 | fileFormatVersion: 2
2 | guid: 1fb4013b9a4d844748bc9f7c6c36386f
3 | MonoImporter:
4 | externalObjects: {}
5 | serializedVersion: 2
6 | defaultReferences: []
7 | executionOrder: 0
8 | icon: {instanceID: 0}
9 | userData:
10 | assetBundleName:
11 | assetBundleVariant:
12 |
--------------------------------------------------------------------------------
/Assets/API-Example/Home Menu/RootMenuControl.cs:
--------------------------------------------------------------------------------
1 | using System.Collections;
2 | using System.Collections.Generic;
3 | using UnityEngine;
4 | using UnityEngine.SceneManagement;
5 | using UnityEngine.UI;
6 |
7 | public class RootMenuControl : MonoBehaviour
8 | {
9 | public static bool rootMenuOn;
10 | public GameObject controlPrefab;
11 | public static RootMenuControl instance;
12 | public string channel;
13 | public delegate void exitMenuFunction();
14 | public exitMenuFunction exit;
15 |
16 | // Start is called before the first frame update
17 | void Start()
18 | {
19 | // Ensure singleton
20 | if (instance)
21 | {
22 | Destroy(gameObject);
23 | }
24 | else
25 | {
26 | instance = this;
27 | }
28 |
29 | DontDestroyOnLoad(gameObject);
30 | SceneManager.sceneLoaded += OnSceneLoaded;
31 | }
32 |
33 | private void OnDestroy()
34 | {
35 | SceneManager.sceneLoaded -= OnSceneLoaded;
36 | }
37 |
38 | void OnSceneLoaded(Scene scene, LoadSceneMode mode)
39 | {
40 | GameObject prefab;
41 | if (scene.name != "HomeMenu" && !GameObject.Find("RootMenuControl"))
42 | {
43 | prefab = (GameObject)Instantiate(controlPrefab, FindObjectOfType