├── .github └── workflows │ ├── activation.yaml │ ├── changelog-check.yml │ └── create-release.yaml ├── .gitignore ├── .vs └── airconsole-unity-plugin │ └── xs │ ├── UserPrefs.xml │ ├── project-cache │ ├── Assembly-CSharp-Debug.json │ └── Assembly-CSharp-Editor-Debug.json │ └── sqlite3 │ ├── db.lock │ ├── storage.ide │ ├── storage.ide-shm │ └── storage.ide-wal ├── .vsconfig ├── Assets ├── AirConsole.meta ├── AirConsole │ ├── Documentation for AndroidTV.pdf │ ├── Documentation for AndroidTV.pdf.meta │ ├── Documentation_1.7.pdf │ ├── Documentation_1.7.pdf.meta │ ├── ProjectCodeUpdater.cs │ ├── ProjectCodeUpdater.cs.meta │ ├── README.txt │ ├── README.txt.meta │ ├── Royaltyfreemusicclips.com Licence.txt │ ├── Royaltyfreemusicclips.com Licence.txt.meta │ ├── Third-Party Notices.txt │ ├── Third-Party Notices.txt.meta │ ├── Upgrade_Plugin_Version.md │ ├── Upgrade_Plugin_Version.md.meta │ ├── examples.meta │ ├── examples │ │ ├── AirConsole.Examples.asmdef │ │ ├── AirConsole.Examples.asmdef.meta │ │ ├── basic.meta │ │ ├── basic │ │ │ ├── ExampleBasicLogic.cs │ │ │ ├── ExampleBasicLogic.cs.meta │ │ │ ├── basic.unity │ │ │ ├── basic.unity.meta │ │ │ ├── controller.html │ │ │ └── controller.html.meta │ │ ├── game-states.meta │ │ ├── game-states │ │ │ ├── GameStatesExampleLogic.cs │ │ │ ├── GameStatesExampleLogic.cs.meta │ │ │ ├── controller-game-states.html │ │ │ ├── controller-game-states.html.meta │ │ │ ├── game-states.unity │ │ │ └── game-states.unity.meta │ │ ├── platformer.meta │ │ ├── platformer │ │ │ ├── PlatformerExampleLogic.cs │ │ │ ├── PlatformerExampleLogic.cs.meta │ │ │ ├── Player_Platformer.cs │ │ │ ├── Player_Platformer.cs.meta │ │ │ ├── platformer-controller.html │ │ │ ├── platformer-controller.html.meta │ │ │ ├── platformer.unity │ │ │ └── platformer.unity.meta │ │ ├── pong.meta │ │ ├── pong │ │ │ ├── ExamplePongLogic.cs │ │ │ ├── ExamplePongLogic.cs.meta │ │ │ ├── Racket.cs │ │ │ ├── Racket.cs.meta │ │ │ ├── controller.html │ │ │ ├── controller.html.meta │ │ │ ├── pong.unity │ │ │ └── pong.unity.meta │ │ ├── safe-area.meta │ │ ├── safe-area │ │ │ ├── FullscreenSafeAreaHandler.cs │ │ │ ├── FullscreenSafeAreaHandler.cs.meta │ │ │ ├── README.md │ │ │ ├── README.md.meta │ │ │ ├── SingleCameraExample.unity │ │ │ ├── SingleCameraExample.unity.meta │ │ │ ├── SplitScreenCameraExample.unity │ │ │ ├── SplitScreenCameraExample.unity.meta │ │ │ ├── SplitScreenSafeAreaHandler.cs │ │ │ ├── SplitScreenSafeAreaHandler.cs.meta │ │ │ ├── UISafeAreaHandler.cs │ │ │ ├── UISafeAreaHandler.cs.meta │ │ │ ├── safearea-controller.html │ │ │ └── safearea-controller.html.meta │ │ ├── swipe.meta │ │ ├── swipe │ │ │ ├── Player_Swipe.cs │ │ │ ├── Player_Swipe.cs.meta │ │ │ ├── swipe-controller.html │ │ │ ├── swipe-controller.html.meta │ │ │ ├── swipe.unity │ │ │ └── swipe.unity.meta │ │ ├── translations.meta │ │ └── translations │ │ │ ├── TranslationExampleLogic.cs │ │ │ ├── TranslationExampleLogic.cs.meta │ │ │ ├── translations-controller.html │ │ │ ├── translations-controller.html.meta │ │ │ ├── translations.unity │ │ │ └── translations.unity.meta │ ├── extras.meta │ ├── extras │ │ ├── HighScoreHelper.cs │ │ ├── HighScoreHelper.cs.meta │ │ ├── controller-template.html │ │ └── controller-template.html.meta │ ├── plugins.meta │ ├── plugins │ │ ├── Android.meta │ │ ├── Android │ │ │ ├── unityandroidlibrary.aar │ │ │ └── unityandroidlibrary.aar.meta │ │ ├── Newtonsoft.Json.dll │ │ ├── Newtonsoft.Json.dll.meta │ │ ├── websocket-sharp.dll │ │ └── websocket-sharp.dll.meta │ ├── resources.meta │ ├── resources │ │ ├── AirConsoleBg.png │ │ ├── AirConsoleBg.png.meta │ │ ├── AirConsoleLogoSmall.png │ │ ├── AirConsoleLogoSmall.png.meta │ │ ├── AirConsoleLogoText.png │ │ ├── AirConsoleLogoText.png.meta │ │ ├── Art.meta │ │ ├── Art │ │ │ ├── Materials.meta │ │ │ ├── Materials │ │ │ │ ├── Cube1.mat │ │ │ │ ├── Cube1.mat.meta │ │ │ │ ├── Cube2.mat │ │ │ │ ├── Cube2.mat.meta │ │ │ │ ├── Green.mat │ │ │ │ ├── Green.mat.meta │ │ │ │ ├── ProfilePicturePlane.mat │ │ │ │ ├── ProfilePicturePlane.mat.meta │ │ │ │ ├── Sphere 1.mat │ │ │ │ ├── Sphere 1.mat.meta │ │ │ │ ├── Sphere.mat │ │ │ │ ├── Sphere.mat.meta │ │ │ │ ├── bouncy.physicsMaterial2D │ │ │ │ ├── bouncy.physicsMaterial2D.meta │ │ │ │ ├── transparent.mat │ │ │ │ └── transparent.mat.meta │ │ │ ├── Meshes.meta │ │ │ ├── Meshes │ │ │ │ ├── LogoAirConsole.fbx │ │ │ │ └── LogoAirConsole.fbx.meta │ │ │ ├── Sprites.meta │ │ │ └── Sprites │ │ │ │ ├── ball.png │ │ │ │ ├── ball.png.meta │ │ │ │ ├── player.png │ │ │ │ └── player.png.meta │ │ ├── Audio.meta │ │ ├── Audio │ │ │ ├── Music.meta │ │ │ └── Music │ │ │ │ ├── Happy_1.wav │ │ │ │ └── Happy_1.wav.meta │ │ ├── Prefabs.meta │ │ ├── Prefabs │ │ │ ├── PlayerCapsule.prefab │ │ │ └── PlayerCapsule.prefab.meta │ │ ├── android banner placeholder.jpg │ │ ├── android banner placeholder.jpg.meta │ │ ├── androidtv-loadingscreen.png │ │ └── androidtv-loadingscreen.png.meta │ ├── scripts.meta │ └── scripts │ │ ├── Editor.meta │ │ ├── Editor │ │ ├── AirConsole.Editor.asmdef │ │ ├── AirConsole.Editor.asmdef.meta │ │ ├── AssemblyInfo.cs │ │ ├── AssemblyInfo.cs.meta │ │ ├── Assets.meta │ │ ├── Assets │ │ │ ├── AirConsoleIcon.png │ │ │ └── AirConsoleIcon.png.meta │ │ ├── BuildAutomation.meta │ │ ├── BuildAutomation │ │ │ ├── AndroidGradleProcessor.cs │ │ │ ├── AndroidGradleProcessor.cs.meta │ │ │ ├── AndroidManifest.cs │ │ │ ├── AndroidManifest.cs.meta │ │ │ ├── AndroidManifestProcessor.cs │ │ │ ├── AndroidManifestProcessor.cs.meta │ │ │ ├── AndroidProjectProcessor.cs │ │ │ ├── AndroidProjectProcessor.cs.meta │ │ │ ├── AndroidXMLDocument.cs │ │ │ ├── AndroidXMLDocument.cs.meta │ │ │ ├── PostBuildProcess.cs │ │ │ ├── PostBuildProcess.cs.meta │ │ │ ├── PreBuildProcessing.cs │ │ │ └── PreBuildProcessing.cs.meta │ │ ├── Extentions.cs │ │ ├── Extentions.cs.meta │ │ ├── Inspector.cs │ │ ├── Inspector.cs.meta │ │ ├── PlayMode.cs │ │ ├── PlayMode.cs.meta │ │ ├── PluginDevelopment.meta │ │ ├── PluginDevelopment │ │ │ ├── BuildHelper.cs │ │ │ ├── BuildHelper.cs.meta │ │ │ ├── DevelopmentTools.cs │ │ │ └── DevelopmentTools.cs.meta │ │ ├── ProjectMaintenance.meta │ │ ├── ProjectMaintenance │ │ │ ├── ProjectConfigurationCheck.cs │ │ │ ├── ProjectConfigurationCheck.cs.meta │ │ │ ├── ProjectDependencyCheck.cs │ │ │ ├── ProjectDependencyCheck.cs.meta │ │ │ ├── ProjectPreferenceManager.cs │ │ │ ├── ProjectPreferenceManager.cs.meta │ │ │ ├── ProjectPreferences.cs │ │ │ ├── ProjectPreferences.cs.meta │ │ │ ├── ProjectUpgradeEditor.cs │ │ │ ├── ProjectUpgradeEditor.cs.meta │ │ │ ├── SemVerCheck.cs │ │ │ └── SemVerCheck.cs.meta │ │ ├── SafeAreaTester.cs │ │ ├── SafeAreaTester.cs.meta │ │ ├── SettingWindow.cs │ │ ├── SettingWindow.cs.meta │ │ ├── WebListener.cs │ │ └── WebListener.cs.meta │ │ ├── Runtime.meta │ │ ├── Runtime │ │ ├── AirConsole.Runtime.asmdef │ │ ├── AirConsole.Runtime.asmdef.meta │ │ ├── AirConsole.cs │ │ ├── AirConsole.cs.meta │ │ ├── AirConsoleLogger.cs │ │ ├── AirConsoleLogger.cs.meta │ │ ├── AssemblyInfo.cs │ │ ├── AssemblyInfo.cs.meta │ │ ├── DebugLevel.cs │ │ ├── DebugLevel.cs.meta │ │ ├── Plugin.meta │ │ ├── Plugin │ │ │ ├── Android.meta │ │ │ └── Android │ │ │ │ ├── AndroidUnityUtils.cs │ │ │ │ ├── AndroidUnityUtils.cs.meta │ │ │ │ ├── GenericUnityPluginCallback.cs │ │ │ │ ├── GenericUnityPluginCallback.cs.meta │ │ │ │ ├── PluginManager.cs │ │ │ │ ├── PluginManager.cs.meta │ │ │ │ ├── UnityAndroidObjectProvider.cs │ │ │ │ ├── UnityAndroidObjectProvider.cs.meta │ │ │ │ ├── UnityPluginExecutionCallback.cs │ │ │ │ ├── UnityPluginExecutionCallback.cs.meta │ │ │ │ ├── UnityPluginStringCallback.cs │ │ │ │ └── UnityPluginStringCallback.cs.meta │ │ ├── RuntimeConfiguration.meta │ │ ├── RuntimeConfiguration │ │ │ ├── AndroidRuntimeConfigurator.cs │ │ │ ├── AndroidRuntimeConfigurator.cs.meta │ │ │ ├── EditorRuntimeConfigurator.cs │ │ │ ├── EditorRuntimeConfigurator.cs.meta │ │ │ ├── IRuntimeConfigurator.cs │ │ │ ├── IRuntimeConfigurator.cs.meta │ │ │ ├── WebGLRuntimeConfigurator.cs │ │ │ └── WebGLRuntimeConfigurator.cs.meta │ │ ├── Settings.cs │ │ ├── Settings.cs.meta │ │ ├── WebViewManager.cs │ │ ├── WebViewManager.cs.meta │ │ ├── WebsocketListener.cs │ │ └── WebsocketListener.cs.meta │ │ ├── SupportCheck.meta │ │ ├── SupportCheck │ │ ├── AirConsole.SupportCheck.asmdef │ │ ├── AirConsole.SupportCheck.asmdef.meta │ │ ├── UnityVersionNotSupported.cs │ │ └── UnityVersionNotSupported.cs.meta │ │ ├── Tests.meta │ │ └── Tests │ │ ├── EditMode.meta │ │ ├── EditMode │ │ ├── AirConsole.EditMode.Tests.asmdef │ │ ├── AirConsole.EditMode.Tests.asmdef.meta │ │ ├── AirConsoleTests.cs │ │ └── AirConsoleTests.cs.meta │ │ ├── Editor.meta │ │ ├── Editor │ │ ├── AirConsole.Editor.Tests.asmdef │ │ ├── AirConsole.Editor.Tests.asmdef.meta │ │ ├── ProjectDependencyCheckTests.cs │ │ └── ProjectDependencyCheckTests.cs.meta │ │ ├── PlayMode.meta │ │ └── PlayMode │ │ ├── AirConsole.PlayMode.Tests.asmdef │ │ └── AirConsole.PlayMode.Tests.asmdef.meta ├── Packager.meta ├── Packager │ ├── Editor.meta │ └── Editor │ │ ├── Packager.cs │ │ └── Packager.cs.meta ├── WebGLTemplates.meta └── WebGLTemplates │ ├── AirConsole-2020.meta │ ├── AirConsole-2020 │ ├── TemplateData.meta │ ├── TemplateData │ │ ├── loading-screen.png │ │ └── loading-screen.png.meta │ ├── airconsole-settings.js.meta │ ├── airconsole-unity-plugin.js │ ├── airconsole-unity-plugin.js.meta │ ├── index.html │ ├── index.html.meta │ ├── thumbnail.png │ └── thumbnail.png.meta │ ├── AirConsole-U6.meta │ └── AirConsole-U6 │ ├── TemplateData.meta │ ├── TemplateData │ ├── loading-screen.png │ └── loading-screen.png.meta │ ├── airconsole-settings.js.meta │ ├── airconsole-unity-plugin.js │ ├── airconsole-unity-plugin.js.meta │ ├── index.html │ ├── index.html.meta │ ├── thumbnail.png │ └── thumbnail.png.meta ├── Builds └── airconsole-unity-plugin-v2.6.1.unitypackage ├── CHANGELOG.md ├── LICENSE ├── Packages ├── manifest.json └── packages-lock.json ├── ProjectSettings ├── AudioManager.asset ├── ClusterInputManager.asset ├── DynamicsManager.asset ├── EditorBuildSettings.asset ├── EditorSettings.asset ├── GraphicsSettings.asset ├── InputManager.asset ├── MemorySettings.asset ├── NavMeshAreas.asset ├── NetworkManager.asset ├── PackageManagerSettings.asset ├── Physics2DSettings.asset ├── PresetManager.asset ├── ProjectSettings.asset ├── ProjectVersion.txt ├── QualitySettings.asset ├── SceneTemplateSettings.json ├── TagManager.asset ├── TimeManager.asset ├── UnityConnectSettings.asset ├── VFXManager.asset ├── VersionControlSettings.asset └── XRSettings.asset └── README.md /.github/workflows/activation.yaml: -------------------------------------------------------------------------------- 1 | name: Acquire activation file 2 | on: 3 | workflow_dispatch: {} 4 | jobs: 5 | activation: 6 | name: Request manual activation file 🔑 7 | runs-on: ubuntu-latest 8 | steps: 9 | # Request manual activation file 10 | - name: Request manual activation file 11 | id: getManualLicenseFile 12 | uses: game-ci/unity-request-activation-file@v2 13 | # Upload artifact (Unity_v20XX.X.XXXX.alf) 14 | - name: Expose as artifact 15 | uses: actions/upload-artifact@v2 16 | with: 17 | name: ${{ steps.getManualLicenseFile.outputs.filePath }} 18 | path: ${{ steps.getManualLicenseFile.outputs.filePath }} -------------------------------------------------------------------------------- /.github/workflows/changelog-check.yml: -------------------------------------------------------------------------------- 1 | name: CHANGELOG.md updated 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, reopened] 6 | 7 | jobs: 8 | changelog: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - name: Checkout code 12 | uses: actions/checkout@v4 13 | with: 14 | ref: ${{ github.event.pull_request.head.sha }} 15 | fetch-depth: 0 16 | 17 | - name: Check for changelog skip intention 18 | id: asset_check 19 | run: | 20 | git fetch origin ${{ github.base_ref }} 21 | SKIP=0 22 | LAST_COMMIT_MESSAGE=$(git log -1 --format=%B HEAD) 23 | echo "Last commit message: $LAST_COMMIT_MESSAGE" 24 | if printf '%s\n' "$LAST_COMMIT_MESSAGE" | grep -qi '#skip-changelog'; then 25 | SKIP=1 26 | fi 27 | MATCHED=0 28 | if [ "$SKIP" -ne 1 ]; then 29 | CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }} HEAD) 30 | echo "Changed files: $CHANGED_FILES" 31 | for f in $CHANGED_FILES; do 32 | if [[ "$f" == Assets/AirConsole/* ]] || [[ "$f" == Assets/WebGLTemplates/* ]]; then 33 | MATCHED=1 34 | break 35 | fi 36 | done 37 | fi 38 | echo "matched=$MATCHED" >> $GITHUB_OUTPUT 39 | echo "skip=$SKIP" >> $GITHUB_OUTPUT 40 | shell: bash 41 | 42 | - name: Check if CHANGELOG.md was updated 43 | if: steps.asset_check.outputs.matched == '1' && steps.asset_check.outputs.skip != '1' 44 | run: | 45 | git fetch origin ${{ github.base_ref }} 46 | CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }} HEAD) 47 | if ! echo "$CHANGED_FILES" | grep -q '^CHANGELOG.md$'; then 48 | echo "ERROR: CHANGELOG.md was not updated in this PR. Please update it to reflect your changes." 49 | exit 1 50 | fi 51 | shell: bash 52 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # =============== # 2 | # Unity generated # 3 | # =============== # 4 | Temp/ 5 | /Library/ 6 | Logs/ 7 | Temp/ 8 | UserSettings/ 9 | AssetStoreTools/ 10 | AssetStoreTools.* 11 | 12 | # ===================================== # 13 | # Visual Studio / MonoDevelop generated # 14 | # ===================================== # 15 | ExportedObj/ 16 | obj/ 17 | *.svd 18 | *.userprefs 19 | *.csproj 20 | *.pidb 21 | *.suo 22 | *.sln 23 | *.user 24 | *.unityproj 25 | *.booproj 26 | 27 | # ============ # 28 | # OS generated # 29 | # ============ # 30 | .DS_Store 31 | .DS_Store? 32 | ._* 33 | .Spotlight-V100 34 | .Trashes 35 | ehthumbs.db 36 | Thumbs.db 37 | 38 | # ============ # 39 | # IDEA generated # 40 | # ============ # 41 | /.idea 42 | 43 | 44 | # ============ # 45 | # Visual Studio Code generated # 46 | # ============ # 47 | /.vs 48 | .utmp 49 | TestBuilds/ 50 | Assets/AirConsole/airconsole.prefs* 51 | 52 | Assets/WebGLTemplates/**/airconsole-settings.js 53 | -------------------------------------------------------------------------------- /.vs/airconsole-unity-plugin/xs/UserPrefs.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /.vs/airconsole-unity-plugin/xs/sqlite3/db.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/.vs/airconsole-unity-plugin/xs/sqlite3/db.lock -------------------------------------------------------------------------------- /.vs/airconsole-unity-plugin/xs/sqlite3/storage.ide: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/.vs/airconsole-unity-plugin/xs/sqlite3/storage.ide -------------------------------------------------------------------------------- /.vs/airconsole-unity-plugin/xs/sqlite3/storage.ide-shm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/.vs/airconsole-unity-plugin/xs/sqlite3/storage.ide-shm -------------------------------------------------------------------------------- /.vs/airconsole-unity-plugin/xs/sqlite3/storage.ide-wal: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/.vs/airconsole-unity-plugin/xs/sqlite3/storage.ide-wal -------------------------------------------------------------------------------- /.vsconfig: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "components": [ 4 | "Microsoft.VisualStudio.Workload.ManagedGame" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /Assets/AirConsole.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 07cefb6a9868344dbb6ccfb556f1117e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/Documentation for AndroidTV.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/Documentation for AndroidTV.pdf -------------------------------------------------------------------------------- /Assets/AirConsole/Documentation for AndroidTV.pdf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 98c91a57543cf43e9a4f31d3d1f16abc 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/Documentation_1.7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/Documentation_1.7.pdf -------------------------------------------------------------------------------- /Assets/AirConsole/Documentation_1.7.pdf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6952db28ad1934cb59d4f40e6f874ac0 3 | timeCreated: 1464704989 4 | licenseType: Pro 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/ProjectCodeUpdater.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE && UNITY_EDITOR && UNITY_2022_3_OR_NEWER 2 | namespace NDream.Unity { 3 | using System.IO; 4 | using UnityEditor; 5 | using UnityEditor.Build; 6 | using UnityEngine; 7 | 8 | /// 9 | /// This is responsible to guide developers through the possible steps for a project upgrade to 2.6.0. 10 | /// 11 | public abstract class ProjectCodeUpdater { 12 | public static string CodePackagePath { 13 | get => Path.GetFullPath(Path.Combine(Application.dataPath, "AirConsole", "airconsole-code.unitypackage")); 14 | } 15 | 16 | [InitializeOnLoadMethod] 17 | public static void ValidateProjectForImport() { 18 | bool isInPluginProject = 19 | File.Exists(Path.GetFullPath(Path.Combine(Application.dataPath, "Packager", "Editor", "Packager.cs"))); 20 | if (isInPluginProject) { 21 | return; 22 | } 23 | 24 | ImportCodePackage(); 25 | EditorUtility.DisplayDialog("Success", "The AirConsole Plugin has been successfully imported", "ok"); 26 | } 27 | 28 | private static void ImportCodePackage() { 29 | if (File.Exists(CodePackagePath)) { 30 | // In 2.6.0, this was moved to Assets/AirConsole/scripts/Editor/Assets/AirConsoleIcon.png with editor icon focused import settings. 31 | AssetDatabase.DeleteAsset("Assets/AirConsole/resources/AirConsoleLogo.png"); 32 | 33 | AssetDatabase.DeleteAsset("Assets/AirConsole/examples"); 34 | AssetDatabase.DeleteAsset("Assets/AirConsole/scripts"); 35 | AssetDatabase.DeleteAsset("Assets/AirConsole/unity-webview"); 36 | AssetDatabase.Refresh(); 37 | 38 | // Because the AssetDatabase refresh happens asynchronously at the end of the editor loop, we must use delayedCall to 39 | // execute the package import. Otherwise, files like AirConsole.cs that must be imported in the 'scripts/Runtime' directory 40 | // would be located outside and break compilation. 41 | // Without this, AirConsole.cs would be imported in Assets/AirConsole/scripts instead of Assets/AirConsole/scripts/Runtime. 42 | EditorApplication.delayCall += () => ExecuteCodePackageImport(); 43 | } else { 44 | AssetDatabase.DeleteAsset($"Assets/AirConsole/{nameof(ProjectCodeUpdater)}.cs"); 45 | } 46 | } 47 | 48 | private static void ExecuteCodePackageImport() { 49 | AssetDatabase.ImportPackage(CodePackagePath, false); 50 | AssetDatabase.DeleteAsset($"Assets/AirConsole/{nameof(ProjectCodeUpdater)}.cs"); 51 | AssetDatabase.DeleteAsset(CodePackagePath.Replace(Application.dataPath, "Assets")); 52 | } 53 | } 54 | } 55 | #endif 56 | -------------------------------------------------------------------------------- /Assets/AirConsole/ProjectCodeUpdater.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fa1b8baa7e9d643089a8f449ec0db946 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/README.txt: -------------------------------------------------------------------------------- 1 | # Info 2 | ------------------------ 3 | The AirConsole-Unity-Plugin is a C# wrapper for the AirConsole Javascript API. 4 | AirConsole provides a simple to use Javascript API for game developers to build 5 | their own local multiplayer realtime browser games. 6 | You can find the Javascript API documentation here: http://developers.airconsole.com/#/api 7 | 8 | IMPORTANT: The plugin comes with an embedded webserver / websocket-server for the communication between the AirConsole backend and the Unity-Editor. 9 | You don't need to install any other webserver or services. 10 | 11 | # Documentation 12 | ------------------------ 13 | All install instructions and examples are documented in the file "Documentation_1.7.0.pdf" inside this folder. 14 | There are more examples on the website: http://developers.airconsole.com/#/guides 15 | 16 | # Platforms 17 | ------------------------ 18 | Since the AirConsole is working with HTML5 and Javascript, you can only make use of this 19 | plugin when you switch your target build to WebGL. 20 | 21 | # Support 22 | ------------------------ 23 | If you need support, please visit: http://developers.airconsole.com/#/help -------------------------------------------------------------------------------- /Assets/AirConsole/README.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d6c3b78438bdca145a9b6283728943bb 3 | timeCreated: 1439513343 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/Royaltyfreemusicclips.com Licence.txt: -------------------------------------------------------------------------------- 1 | You can download and use these free music loops and full length music clips in any commercial multimedia project but you cannot: 2 | • re-sell individually or as a collection or as a ringtone 3 | • post on a website for download as we are doing here 4 | • mix into your own music and then redistribute it as your own. 5 | 6 | You may use these music loops in a Youtube video, Flash animation or in any other commercial multimedia presentation including TV and Film. 7 | 8 | In return for the use of these free royalty free music loops we only ask that you please give Partners In Rhyme a link on your website or blog, a credit in your Youtube video, or just a nice email saying "Thanks!". -------------------------------------------------------------------------------- /Assets/AirConsole/Royaltyfreemusicclips.com Licence.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c81da0fad3643477195ce29f20b2bdaa 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/Third-Party Notices.txt: -------------------------------------------------------------------------------- 1 | Happy_1.wav is under the Royaltyfreemusicclips.com Licence.txt licence. -------------------------------------------------------------------------------- /Assets/AirConsole/Third-Party Notices.txt.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a5582f43d978843619f1ea79d7f7b451 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/Upgrade_Plugin_Version.md: -------------------------------------------------------------------------------- 1 | 2 | # Upgrade the Unity Plugin to the current version 3 | 4 | ## Upgrading from v2.14- to v2.5.0 5 | 6 | 1. The content of airconsole-unity-plugin.js has changed. 7 | You need to copy the correct version from `WebGLTemplates/AirConsole` for Unity 2019 and below or `WebGLTemplates/AirConsole-2020` for Unity 2020+ to the WebGLTemplate folder you use. 8 | 9 | 2. The content of the index.html / screen.html has changed. 10 | Open your controller's html file as well as the index.html in your WebGL template and search for `` and replace it with ``, otherwise neither Translations nor Player Silencing will work. 11 | 12 | 3. The version of the airconsole api has changed. 13 | Search for a script usage like `` and replace it with `` 14 | 15 | 4. Ensure that obsolete API devices, device_id and server_time_offset are updated: 16 | 1. Replace AirConsole.instance.devices with AirConsole.instance.Devices 17 | 2. Replace AirConsole.instance.device_id with AirConsole.instance.GetDeviceId() 18 | 3. Replace AirConsole.instance.server_time_offset with AirConsole.instance.GetServerTime() 19 | 20 | ## Upgrading from v2.11 to v2.12+ 21 | 22 | The location of the Webview has changed in this release. 23 | 24 | When upgrading from v2.11 and before, you need manually remove the old Webview plugin parts: 25 | 26 | - `Assets/AirConsole/plugins/WebViewObject.cs` 27 | - `Assets/AirConsole/plugins/Editor/UnityWebViewPostprocessBuild.cs` 28 | - `Assets/AirConsole/plugins/WebView.bundle` 29 | - `Assets/AirConsole/plugins/WebViewSeparated.bundle` 30 | - `Assets/AirConsole/plugins/Anrdoid/WebViewPlugin.jar` 31 | - `Assets/AirConsole/plugins/iOS/WebView.mm` 32 | - `Assets/AirConsole/plugins/X86_64/WebView.bundle` 33 | 34 | ## Upgrading from older versions to v2.11+ 35 | 36 | With v2.11, the `AirConsole.instance.OnMute` event was removed and the AirConsole platform stopped invoking it for older projects in July 2023. 37 | When upgrading you need to update your event handlers for `AirConsole.instance.OnAdShow` and `AirConsole.instance.OnAdComplete` to take care of muting the game. -------------------------------------------------------------------------------- /Assets/AirConsole/Upgrade_Plugin_Version.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9ab037fe1fbc49358d2aea7a298cf242 3 | timeCreated: 1716970974 -------------------------------------------------------------------------------- /Assets/AirConsole/examples.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4d7ef0dc61a8514469de3fac63d0283c 3 | folderAsset: yes 4 | timeCreated: 1435580098 5 | licenseType: Store 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/AirConsole.Examples.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.Examples", 3 | "rootNamespace": "NDream.AirConsole.Examples", 4 | "references": [ 5 | "AirConsole.Runtime" 6 | ], 7 | "includePlatforms": [ 8 | "Android", 9 | "Editor", 10 | "WebGL" 11 | ], 12 | "excludePlatforms": [], 13 | "allowUnsafeCode": false, 14 | "overrideReferences": true, 15 | "precompiledReferences": [ 16 | "Newtonsoft.Json.dll" 17 | ], 18 | "autoReferenced": true, 19 | "defineConstraints": [ 20 | "UNITY_2022_3_OR_NEWER" 21 | ], 22 | "versionDefines": [], 23 | "noEngineReferences": false 24 | } -------------------------------------------------------------------------------- /Assets/AirConsole/examples/AirConsole.Examples.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b55c9766b0114488ebd1267077bb0e86 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/basic.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bba32ebfce3c2b84b85c2e975fc45151 3 | folderAsset: yes 4 | timeCreated: 1437829405 5 | licenseType: Store 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/basic/ExampleBasicLogic.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a09fc15aab397884e853f9d135e4f2c8 3 | timeCreated: 1435585733 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/basic/basic.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be2892f0848650f4fa6714ec6d9100bf 3 | timeCreated: 1435580098 4 | licenseType: Store 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/basic/controller.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24d0ea9f52a200b479f21be5710f94ac 3 | timeCreated: 1437829347 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/game-states.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 44bbbb8bdaad946e3907352b007a2073 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/game-states/GameStatesExampleLogic.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 158e35e407c154484841b256d8915cc7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/game-states/controller-game-states.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c4a33a98dbad440d98fc8f9e7062d62c 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/game-states/game-states.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e5f4cea225b44e8290563cbebbb6a5c 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0db6b1d7257f64bf3a9202ed90ae8d92 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/PlatformerExampleLogic.cs: -------------------------------------------------------------------------------- 1 | namespace NDream.AirConsole.Examples { 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using Newtonsoft.Json.Linq; 5 | 6 | public class PlatformerExampleLogic : MonoBehaviour { 7 | public GameObject playerPrefab; 8 | 9 | #if !DISABLE_AIRCONSOLE 10 | private Dictionary players = new(); 11 | 12 | private void Awake() { 13 | AirConsole.instance.onMessage += OnMessage; 14 | AirConsole.instance.onReady += OnReady; 15 | AirConsole.instance.onConnect += OnConnect; 16 | } 17 | 18 | private void OnReady(string code) { 19 | //Since people might be coming to the game from the AirConsole store once the game is live, 20 | //I have to check for already connected devices here and cannot rely only on the OnConnect event 21 | List connectedDevices = AirConsole.instance.GetControllerDeviceIds(); 22 | foreach (int deviceID in connectedDevices) { 23 | AddNewPlayer(deviceID); 24 | } 25 | } 26 | 27 | private void OnConnect(int device) { 28 | AddNewPlayer(device); 29 | } 30 | 31 | private void AddNewPlayer(int deviceID) { 32 | if (players.ContainsKey(deviceID)) { 33 | return; 34 | } 35 | 36 | //Instantiate player prefab, store device id + player script in a dictionary 37 | GameObject newPlayer = Instantiate(playerPrefab, transform.position, transform.rotation) as GameObject; 38 | players.Add(deviceID, newPlayer.GetComponent()); 39 | } 40 | 41 | private void OnMessage(int from, JToken data) { 42 | Debug.Log("message: " + data); 43 | 44 | //When I get a message, I check if it's from any of the devices stored in my device Id dictionary 45 | if (players.ContainsKey(from) && data["action"] != null) { 46 | //I forward the command to the relevant player script, assigned by device ID 47 | players[from].ButtonInput(data["action"].ToString()); 48 | } 49 | } 50 | 51 | private void OnDestroy() { 52 | if (AirConsole.instance != null) { 53 | AirConsole.instance.onMessage -= OnMessage; 54 | AirConsole.instance.onReady -= OnReady; 55 | AirConsole.instance.onConnect -= OnConnect; 56 | } 57 | } 58 | #endif 59 | } 60 | } -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/PlatformerExampleLogic.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca421917d12344192a0e312fbfdfecf9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/Player_Platformer.cs: -------------------------------------------------------------------------------- 1 | namespace NDream.AirConsole.Examples { 2 | using UnityEngine; 3 | 4 | public class Player_Platformer : MonoBehaviour { 5 | private Rigidbody rigidBody; 6 | 7 | private bool movingLeft; 8 | private bool movingRight; 9 | 10 | private float playerSpeed = 0.1f; 11 | private float jumpForce = 350f; 12 | 13 | private bool isInSphere; 14 | #if !DISABLE_AIRCONSOLE 15 | private void Start() { 16 | rigidBody = GetComponent(); 17 | } 18 | 19 | public void ButtonInput(string input) { 20 | switch (input) { 21 | case "right": 22 | movingRight = true; 23 | break; 24 | case "left": 25 | movingLeft = true; 26 | break; 27 | case "right-up": 28 | movingRight = false; 29 | break; 30 | case "left-up": 31 | movingLeft = false; 32 | break; 33 | case "jump": 34 | rigidBody.AddForce(transform.up * jumpForce); 35 | break; 36 | case "interact": 37 | if (isInSphere) { 38 | if (Camera.main.backgroundColor == Color.yellow) { 39 | Camera.main.backgroundColor = Color.blue; 40 | } else { 41 | Camera.main.backgroundColor = Color.yellow; 42 | } 43 | } 44 | 45 | break; 46 | } 47 | } 48 | 49 | private void FixedUpdate() { 50 | if (movingLeft && !movingRight) { 51 | rigidBody.MovePosition(rigidBody.position + new Vector3(-playerSpeed, 0, 0)); 52 | } else if (!movingLeft && movingRight) { 53 | rigidBody.MovePosition(rigidBody.position + new Vector3(playerSpeed, 0, 0)); 54 | } 55 | } 56 | 57 | //Track if the player capsule is currently inside the transparent sphere or not 58 | private void OnTriggerEnter(Collider trigger) { 59 | if (trigger.tag == "PlatformSphere") { 60 | isInSphere = true; 61 | } 62 | } 63 | 64 | private void OnTriggerExit(Collider trigger) { 65 | if (trigger.tag == "PlatformSphere") { 66 | isInSphere = false; 67 | } 68 | } 69 | #endif 70 | } 71 | } -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/Player_Platformer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc5d0864cc8934039b036f722f168be7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/platformer-controller.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 61 | 62 | 104 | 105 | 106 | 107 |
108 |
109 |
110 |
111 |
112 | 113 | 114 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/platformer-controller.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ab5a57d187e074ea3b7285d1c90e187d 3 | timeCreated: 1437829347 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/platformer/platformer.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d1c6c76d1e441496eb198de3564ddb56 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/pong.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d992ee17fabc2214c9048fa291018566 3 | folderAsset: yes 4 | timeCreated: 1437829423 5 | licenseType: Store 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/pong/ExamplePongLogic.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dd5f195900113e741b6db1dcbe563753 3 | timeCreated: 1437923339 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/pong/Racket.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace NDream.AirConsole.Examples { 4 | public class Racket : MonoBehaviour { 5 | 6 | public ExamplePongLogic logic; 7 | 8 | // Use this for initialization 9 | void Start() { } 10 | 11 | void OnCollisionEnter2D(Collision2D col) { 12 | 13 | if (col.gameObject.GetComponent() != null) { 14 | 15 | float hitPos = (col.transform.position.y - transform.position.y) / (GetComponent().bounds.size.y / 2); 16 | float hitDir = 1f; 17 | 18 | if (col.relativeVelocity.x > 0) { 19 | hitDir = -1f; 20 | } 21 | 22 | Vector2 dir = new Vector2(hitDir, hitPos).normalized; 23 | col.gameObject.GetComponent().velocity = dir * logic.ballSpeed; 24 | 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/pong/Racket.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e32b9a5d4a7fdf94a9b04655ee10491e 3 | timeCreated: 1437927115 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/pong/controller.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8fc8a37abcbfc124e97a1c0e445d061f 3 | timeCreated: 1437923238 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/pong/pong.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 008d7c2791f9bf44cb399bc2ec4b3f84 3 | timeCreated: 1437923230 4 | licenseType: Store 5 | DefaultImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f08e6e6ff5a1ba3498fbc3d11bf4bcae 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/FullscreenSafeAreaHandler.cs: -------------------------------------------------------------------------------- 1 | namespace NDream.AirConsole.Examples { 2 | using UnityEngine; 3 | using NDream.AirConsole; 4 | 5 | /// 6 | /// Example script for handling SafeArea changes with a single fullscreen camera. 7 | /// This is the simplest implementation that adjusts the main camera to fit within the safe area. 8 | /// 9 | [RequireComponent(typeof(Camera))] 10 | public class FullscreenSafeAreaHandler : MonoBehaviour { 11 | [Tooltip("Reference to the camera that should be adjusted to the safe area. Will use the attached camera if not assigned.")] 12 | [SerializeField] 13 | private Camera targetCamera; 14 | 15 | #if !DISABLE_AIRCONSOLE 16 | private void Awake() { 17 | if (!targetCamera) { 18 | targetCamera = GetComponent(); 19 | } 20 | 21 | HandleSafeAreaChanged(AirConsole.instance.SafeArea); 22 | AirConsole.instance.onReady += Setup; 23 | } 24 | 25 | private void Setup(string code) { 26 | if (AirConsole.instance && AirConsole.instance.IsAirConsoleUnityPluginReady()) { 27 | if (AirConsole.instance.SafeArea.width > 0) { 28 | HandleSafeAreaChanged(AirConsole.instance.SafeArea); 29 | } 30 | 31 | AirConsole.instance.OnSafeAreaChanged += HandleSafeAreaChanged; 32 | 33 | Debug.Log("FullscreenSafeAreaHandler: Subscribed to OnSafeAreaChanged events"); 34 | } else { 35 | Debug.LogWarning("AirConsole is not ready. Safe area handling won't work correctly."); 36 | } 37 | } 38 | 39 | /// 40 | /// Handles changes to the safe area by adjusting the camera's pixel rect. 41 | /// 42 | /// The new safe area rectangle in pixel coordinates 43 | private void HandleSafeAreaChanged(Rect newSafeArea) { 44 | if (targetCamera) { 45 | targetCamera.pixelRect = newSafeArea; 46 | Debug.Log($"Camera adjusted to safe area: {newSafeArea}"); 47 | } 48 | } 49 | 50 | private void OnEnable() { 51 | if (AirConsole.instance) { 52 | AirConsole.instance.OnSafeAreaChanged -= HandleSafeAreaChanged; 53 | AirConsole.instance.OnSafeAreaChanged += HandleSafeAreaChanged; 54 | } 55 | } 56 | 57 | private void OnDisable() { 58 | if (AirConsole.instance) { 59 | AirConsole.instance.OnSafeAreaChanged -= HandleSafeAreaChanged; 60 | } 61 | } 62 | #endif 63 | } 64 | } -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/FullscreenSafeAreaHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a1b5c6dd8de3e4b4fafb3c384af7e1d2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/README.md: -------------------------------------------------------------------------------- 1 | # Safe Area Examples 2 | 3 | This directory contains example implementations for the AirConsole SafeArea feature. The SafeArea feature allows your game to adapt to different screen configurations by providing a safe rectangle where content should be displayed. 4 | 5 | ## Overview 6 | 7 | The examples demonstrate how to handle the `OnSafeAreaChanged` event and use the `SafeArea` property from the AirConsole instance to properly adjust cameras and UI elements for optimal display across different platforms. 8 | 9 | ## Prerequisites 10 | 11 | To use these examples: 12 | 13 | 1. Enable the `Native Game Sizing` checkbox in the AirConsole component inspector 14 | 2. Make sure your game is using AirConsole version 2.6.0 or newer 15 | 3. For proper testing in the editor, use the SafeArea Tester tool (Window > AirConsole > SafeArea Tester) 16 | 17 | ## Example Scenes 18 | 19 | ### 1. Fullscreen Example 20 | 21 | The `FullscreenSafeAreaHandler.cs` script demonstrates how to adapt a single camera to fit within the safe area. This is the simplest implementation and works well for most single-player games. 22 | 23 | Key features: 24 | 25 | - Automatic adjustment of the main camera's pixel rect 26 | - Optional visual debug representation of the safe area bounds 27 | - Proper event subscription and cleanup 28 | 29 | ### 2. UI Example 30 | 31 | The `UISafeAreaHandler.cs` script shows how to handle safe area changes with UI cameras and canvas scaling. This approach ensures UI elements stay within visible bounds and are properly scaled. 32 | 33 | Key features: 34 | 35 | - Adjusts both the camera and canvas scaler 36 | - Maintains proper UI scaling regardless of safe area changes 37 | - Provides options for different scaling approaches (width, height, or mixed priority) 38 | 39 | ### 3. Split Screen Example 40 | 41 | The `SplitScreenSafeAreaHandler.cs` script demonstrates how to handle complex split-screen setups with multiple players. It supports several configurations: 42 | 43 | Key features: 44 | 45 | - Two players horizontal layout (side by side) 46 | - Two players vertical layout (top and bottom) 47 | - Three players layout (top left, top right, bottom left) with the option to use a 4th camera for an overview camera 48 | - Four players layout (2x2 grid) 49 | - Customizable border width between screens 50 | 51 | ## How to Use 52 | 53 | 1. Add one of the example scripts to a GameObject in your scene (usually the one with your camera) 54 | 2. Configure the script's properties in the inspector 55 | 3. Ensure the AirConsole object in your scene has `Native Game Sizing` enabled 56 | 4. Run your game and test with different safe area sizes using the SafeArea Tester 57 | 58 | ## Additional Information 59 | 60 | For more comprehensive documentation on the SafeArea feature, refer to: 61 | 62 | - [Safe Area Documentation](../../../docs/safe-area.md) 63 | - [AirConsole Developer Documentation](https://developers.airconsole.com/) 64 | 65 | ## Important Notes 66 | 67 | - Always unsubscribe from the `OnSafeAreaChanged` event when your component is destroyed 68 | - The safe area can change at runtime, so your implementation should be prepared to handle changes dynamically 69 | - When using `Native Game Sizing`, the legacy `AndroidUIResizeMode.ResizeCameraAndReferenceResolution` is no longer supported 70 | 71 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d4e8f9a01b67544b98bd5d7a9cef8f95 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/SingleCameraExample.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0fdbf616877a947a3b45cc8f2713512d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/SplitScreenCameraExample.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8a1f2d61a4e7349f391dac1a3d582497 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/SplitScreenSafeAreaHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c3d7e8ff0a5634c6ba9a4d6a7be8f3e4 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/UISafeAreaHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b2c6d7ee9f4524b5fa8a3d495af8e2e3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/safearea-controller.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/safe-area/safearea-controller.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a27fed75b0874f8dbd92eb32a7709e95 3 | timeCreated: 1748866607 -------------------------------------------------------------------------------- /Assets/AirConsole/examples/swipe.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 03b44b45de6374b4bbf4498bd448c5e5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/swipe/Player_Swipe.cs: -------------------------------------------------------------------------------- 1 |  2 | namespace NDream.AirConsole.Examples { 3 | using System.Collections; 4 | using UnityEngine; 5 | using Newtonsoft.Json.Linq; 6 | 7 | public class Player_Swipe : MonoBehaviour { 8 | #if !DISABLE_AIRCONSOLE 9 | private bool materialToggle; 10 | 11 | private float distance = 3f; 12 | private float step = 0.2f; 13 | 14 | private Coroutine movementCoroutine; 15 | 16 | private void Awake() { 17 | AirConsole.instance.onMessage += OnMessage; 18 | } 19 | 20 | private void OnMessage(int from, JToken message) { 21 | //We check if the message I receive has an "action" parameter and if it's a swipe 22 | if (message["action"] != null) { 23 | if (message["action"].ToString() == "swipe") { 24 | //We log the whole vector to see its values 25 | Debug.Log("swipe: " + message["vector"]); 26 | 27 | //if there is already movement going on, we cancel it 28 | if (movementCoroutine != null) { 29 | StopCoroutine(movementCoroutine); 30 | } 31 | 32 | //we convert the x and y values we received to float values and make a new direction vector to pass to our movement function 33 | movementCoroutine = 34 | StartCoroutine(MoveSphere(new Vector3((float)message["vector"]["x"], -(float)message["vector"]["y"], 0))); 35 | } 36 | } 37 | } 38 | 39 | //we make the movement a Coroutine so the sphere moves over time instead of instantly 40 | private IEnumerator MoveSphere(Vector3 direction) { 41 | //calculate the target position 42 | Vector3 targetPosition = transform.position + direction * distance; 43 | 44 | //while the sphere has not reached its target position, move it closer 45 | while (Vector3.Distance(targetPosition, transform.position) > 0.1f) { 46 | transform.position = Vector3.MoveTowards(transform.position, targetPosition, step); 47 | yield return new WaitForFixedUpdate(); 48 | } 49 | } 50 | 51 | private void OnDestroy() { 52 | //unregister events 53 | if (AirConsole.instance != null) { 54 | AirConsole.instance.onMessage -= OnMessage; 55 | } 56 | } 57 | #endif 58 | } 59 | } -------------------------------------------------------------------------------- /Assets/AirConsole/examples/swipe/Player_Swipe.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4e9e02288add1452fb157ba715e7c799 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/swipe/swipe-controller.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 84378337121324cb0b715f2e576e0dfc 3 | timeCreated: 1437829347 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/swipe/swipe.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a8e8f0a8b5a9741c683915ad339b7dd7 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/translations.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1d4661c190c2b4a93b7067eec99970e3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/translations/TranslationExampleLogic.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole.Examples { 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.UI; 6 | using Newtonsoft.Json.Linq; 7 | 8 | public class TranslationExampleLogic : MonoBehaviour { 9 | public Text translationExample; 10 | public Text[] bulkTranslationExamples; 11 | 12 | private void Awake() { 13 | AirConsole.instance.onMessage += OnMessage; 14 | AirConsole.instance.onReady += OnReady; 15 | } 16 | 17 | private void OnReady(string code) { 18 | //Translations are requested in OnReady so that the translated strings can be stored locally and retrieved quickly afterwards 19 | InitializeTranslations(); 20 | } 21 | 22 | private void OnMessage(int from, JToken data) { 23 | //Debug.Log ("message from device " + from + ", data: " + data); 24 | } 25 | 26 | private void InitializeTranslations() { 27 | //simple translations can be called in bulk by passing an array of Unity Text components, or Text Meshes 28 | AirConsole.instance.TranslateUIElements(bulkTranslationExamples); 29 | 30 | //if a translatable text includes a replaceable value, you have to translate it individually and pass along the values 31 | //in this case, we are translating a greeting message that includes the master controller's nickname 32 | //'welcome_nickname' has an English language value of "Welcome %nickname%, glad you're here!" 33 | translationExample.text = AirConsole.instance.GetTranslation("welcome_nickname", 34 | new Dictionary 35 | { { "nickname", AirConsole.instance.GetNickname(AirConsole.instance.GetMasterControllerDeviceId()) } }); 36 | 37 | /* Note: to really understand how translations work, we recommend creating your own project in the AirConsole Developer Console. 38 | * in this example, we show how to retrieve translations, but you will not be able to view or edit translatable phrases for the 39 | * example project. Documentation: https://developers.airconsole.com/#!/guides/translations 40 | * */ 41 | } 42 | 43 | private void OnDestroy() { 44 | if (AirConsole.instance != null) { 45 | AirConsole.instance.onMessage -= OnMessage; 46 | AirConsole.instance.onReady -= OnReady; 47 | } 48 | } 49 | } 50 | } 51 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/examples/translations/TranslationExampleLogic.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 06ed25181fa994159af2bba512317a6b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/translations/translations-controller.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 31 | 32 | 73 | 74 | 75 | 76 |

text

77 | 78 |

text

79 |

text

80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/translations/translations-controller.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d304e4744020045ffa86d603747bbeb9 3 | timeCreated: 1437829347 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/examples/translations/translations.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7d28a38601c2f4547b1ecac64cf96761 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/extras.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 578c692f056674c5aad0c3560a2f1b97 3 | folderAsset: yes 4 | timeCreated: 1478250626 5 | licenseType: Pro 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/extras/HighScoreHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 627c37fd2703a4e51bb7c6f17da8d20a 3 | timeCreated: 1478250614 4 | licenseType: Pro 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/extras/controller-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Assets/AirConsole/extras/controller-template.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 898f8131596954b47a4dd4ba0110edca 3 | timeCreated: 1437829347 4 | licenseType: Store 5 | TextScriptImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/plugins.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ac86ea184f38f1d4ca6692142f7ae865 3 | folderAsset: yes 4 | timeCreated: 1435571321 5 | licenseType: Store 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1013605d0d08b491ea2c4f17f5a1eda0 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/Android/unityandroidlibrary.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/plugins/Android/unityandroidlibrary.aar -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/Android/unityandroidlibrary.aar.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a532f548e85644012847473cd6910086 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Any 16 | second: 17 | enabled: 0 18 | settings: 19 | Exclude Android: 0 20 | Exclude Editor: 1 21 | Exclude Linux64: 1 22 | Exclude OSXUniversal: 1 23 | Exclude WebGL: 1 24 | Exclude Win: 1 25 | Exclude Win64: 1 26 | - first: 27 | Android: Android 28 | second: 29 | enabled: 1 30 | settings: 31 | AndroidSharedLibraryType: Executable 32 | CPU: ARMv7 33 | - first: 34 | Any: 35 | second: 36 | enabled: 0 37 | settings: {} 38 | - first: 39 | Editor: Editor 40 | second: 41 | enabled: 0 42 | settings: 43 | CPU: AnyCPU 44 | DefaultValueInitialized: true 45 | OS: AnyOS 46 | - first: 47 | Standalone: Linux64 48 | second: 49 | enabled: 0 50 | settings: 51 | CPU: x86_64 52 | - first: 53 | Standalone: OSXUniversal 54 | second: 55 | enabled: 0 56 | settings: 57 | CPU: None 58 | - first: 59 | Standalone: Win 60 | second: 61 | enabled: 0 62 | settings: 63 | CPU: x86 64 | - first: 65 | Standalone: Win64 66 | second: 67 | enabled: 0 68 | settings: 69 | CPU: x86_64 70 | userData: 71 | assetBundleName: 72 | assetBundleVariant: 73 | -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/plugins/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/Newtonsoft.Json.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66183dd759e7e4110bf343dffda198a0 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | Any: 16 | second: 17 | enabled: 1 18 | settings: {} 19 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | Windows Store Apps: WindowsStoreApps 27 | second: 28 | enabled: 0 29 | settings: 30 | CPU: AnyCPU 31 | userData: 32 | assetBundleName: 33 | assetBundleVariant: 34 | -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/websocket-sharp.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/plugins/websocket-sharp.dll -------------------------------------------------------------------------------- /Assets/AirConsole/plugins/websocket-sharp.dll.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 72843e8dd1ed8d54c8dbfa4df310a5dd 3 | PluginImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | iconMap: {} 7 | executionOrder: {} 8 | defineConstraints: [] 9 | isPreloaded: 0 10 | isOverridable: 0 11 | isExplicitlyReferenced: 0 12 | validateReferences: 1 13 | platformData: 14 | - first: 15 | : Linux 16 | second: 17 | enabled: 1 18 | settings: 19 | CPU: x86 20 | - first: 21 | : LinuxUniversal 22 | second: 23 | enabled: 1 24 | settings: 25 | CPU: AnyCPU 26 | - first: 27 | : OSXIntel 28 | second: 29 | enabled: 1 30 | settings: 31 | CPU: AnyCPU 32 | - first: 33 | : OSXIntel64 34 | second: 35 | enabled: 1 36 | settings: 37 | CPU: AnyCPU 38 | - first: 39 | : SamsungTV 40 | second: 41 | enabled: 0 42 | settings: 43 | STV_MODEL: STANDARD_13 44 | - first: 45 | : WP8 46 | second: 47 | enabled: 0 48 | settings: 49 | CPU: AnyCPU 50 | DontProcess: False 51 | PlaceholderPath: 52 | - first: 53 | Android: Android 54 | second: 55 | enabled: 1 56 | settings: 57 | CPU: AnyCPU 58 | - first: 59 | Any: 60 | second: 61 | enabled: 0 62 | settings: {} 63 | - first: 64 | Editor: Editor 65 | second: 66 | enabled: 1 67 | settings: 68 | CPU: AnyCPU 69 | DefaultValueInitialized: true 70 | OS: AnyOS 71 | - first: 72 | Facebook: WebGL 73 | second: 74 | enabled: 1 75 | settings: {} 76 | - first: 77 | Facebook: Win 78 | second: 79 | enabled: 1 80 | settings: 81 | CPU: AnyCPU 82 | - first: 83 | Facebook: Win64 84 | second: 85 | enabled: 1 86 | settings: 87 | CPU: AnyCPU 88 | - first: 89 | Standalone: Linux64 90 | second: 91 | enabled: 1 92 | settings: 93 | CPU: AnyCPU 94 | - first: 95 | Standalone: OSXUniversal 96 | second: 97 | enabled: 1 98 | settings: 99 | CPU: AnyCPU 100 | - first: 101 | Standalone: Win 102 | second: 103 | enabled: 1 104 | settings: 105 | CPU: AnyCPU 106 | - first: 107 | Standalone: Win64 108 | second: 109 | enabled: 1 110 | settings: 111 | CPU: AnyCPU 112 | - first: 113 | WebGL: WebGL 114 | second: 115 | enabled: 1 116 | settings: {} 117 | - first: 118 | Windows Store Apps: WindowsStoreApps 119 | second: 120 | enabled: 0 121 | settings: 122 | CPU: AnyCPU 123 | DontProcess: False 124 | PlaceholderPath: 125 | SDK: AnySDK 126 | ScriptingBackend: AnyScriptingBackend 127 | - first: 128 | iPhone: iOS 129 | second: 130 | enabled: 0 131 | settings: 132 | CompileFlags: 133 | FrameworkDependencies: 134 | userData: 135 | assetBundleName: 136 | assetBundleVariant: 137 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c6652518690edc74ba1e583773c8def2 3 | folderAsset: yes 4 | timeCreated: 1435670968 5 | licenseType: Store 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/AirConsoleBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/AirConsoleBg.png -------------------------------------------------------------------------------- /Assets/AirConsole/resources/AirConsoleBg.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f33ccac877cf62b4c80246ed480787f1 3 | timeCreated: 1437760409 4 | licenseType: Store 5 | TextureImporter: 6 | fileIDToRecycleName: {} 7 | serializedVersion: 2 8 | mipmaps: 9 | mipMapMode: 0 10 | enableMipMap: 0 11 | linearTexture: 1 12 | correctGamma: 0 13 | fadeOut: 0 14 | borderMipMap: 0 15 | mipMapFadeDistanceStart: 1 16 | mipMapFadeDistanceEnd: 3 17 | bumpmap: 18 | convertToNormalMap: 0 19 | externalNormalMap: 0 20 | heightScale: .25 21 | normalMapFilter: 0 22 | isReadable: 0 23 | grayScaleToAlpha: 0 24 | generateCubemap: 0 25 | cubemapConvolution: 0 26 | cubemapConvolutionSteps: 8 27 | cubemapConvolutionExponent: 1.5 28 | seamlessCubemap: 0 29 | textureFormat: -3 30 | maxTextureSize: 32 31 | textureSettings: 32 | filterMode: -1 33 | aniso: 1 34 | mipBias: -1 35 | wrapMode: 1 36 | nPOTScale: 0 37 | lightmap: 0 38 | rGBM: 0 39 | compressionQuality: 50 40 | spriteMode: 0 41 | spriteExtrude: 1 42 | spriteMeshType: 1 43 | alignment: 0 44 | spritePivot: {x: .5, y: .5} 45 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 46 | spritePixelsToUnits: 100 47 | alphaIsTransparency: 1 48 | textureType: 2 49 | buildTargetSettings: [] 50 | spriteSheet: 51 | sprites: [] 52 | spritePackingTag: 53 | userData: 54 | assetBundleName: 55 | assetBundleVariant: 56 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/AirConsoleLogoSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/AirConsoleLogoSmall.png -------------------------------------------------------------------------------- /Assets/AirConsole/resources/AirConsoleLogoSmall.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 24cce4c13e2531f48baeac00c3652527 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 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 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: -1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 8 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | maxTextureSizeSet: 0 59 | compressionQualitySet: 0 60 | textureFormatSet: 0 61 | ignorePngGamma: 0 62 | applyGammaDecoding: 0 63 | platformSettings: 64 | - serializedVersion: 3 65 | buildTarget: DefaultTexturePlatform 66 | maxTextureSize: 2048 67 | resizeAlgorithm: 0 68 | textureFormat: -1 69 | textureCompression: 1 70 | compressionQuality: 50 71 | crunchedCompression: 0 72 | allowsAlphaSplitting: 0 73 | overridden: 0 74 | androidETC2FallbackOverride: 0 75 | forceMaximumCompressionQuality_BC6H_BC7: 0 76 | spriteSheet: 77 | serializedVersion: 2 78 | sprites: [] 79 | outline: [] 80 | physicsShape: [] 81 | bones: [] 82 | spriteID: 5e97eb03825dee720800000000000000 83 | internalID: 0 84 | vertices: [] 85 | indices: 86 | edges: [] 87 | weights: [] 88 | secondaryTextures: [] 89 | spritePackingTag: 90 | pSDRemoveMatte: 0 91 | pSDShowRemoveMatteOption: 0 92 | userData: 93 | assetBundleName: 94 | assetBundleVariant: 95 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/AirConsoleLogoText.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/AirConsoleLogoText.png -------------------------------------------------------------------------------- /Assets/AirConsole/resources/AirConsoleLogoText.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fa96579cda0638a4d823c2f246c366b9 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 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 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: -1 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 1 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 8 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | maxTextureSizeSet: 0 59 | compressionQualitySet: 0 60 | textureFormatSet: 0 61 | ignorePngGamma: 0 62 | applyGammaDecoding: 0 63 | platformSettings: 64 | - serializedVersion: 3 65 | buildTarget: DefaultTexturePlatform 66 | maxTextureSize: 2048 67 | resizeAlgorithm: 0 68 | textureFormat: -1 69 | textureCompression: 1 70 | compressionQuality: 50 71 | crunchedCompression: 0 72 | allowsAlphaSplitting: 0 73 | overridden: 0 74 | androidETC2FallbackOverride: 0 75 | forceMaximumCompressionQuality_BC6H_BC7: 0 76 | spriteSheet: 77 | serializedVersion: 2 78 | sprites: [] 79 | outline: [] 80 | physicsShape: [] 81 | bones: [] 82 | spriteID: 5e97eb03825dee720800000000000000 83 | internalID: 0 84 | vertices: [] 85 | indices: 86 | edges: [] 87 | weights: [] 88 | secondaryTextures: [] 89 | spritePackingTag: 90 | pSDRemoveMatte: 0 91 | pSDShowRemoveMatteOption: 0 92 | userData: 93 | assetBundleName: 94 | assetBundleVariant: 95 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3440620e5ebca4ef5991022029adaaa8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8dd48c7077044486e8b0e659d7bdfe0a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Cube1.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Cube1 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0.5 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0.53333336, g: 0, b: 0.08627451, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Cube1.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ad18e7b002c5a46d18e5450b8b45bbf1 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Cube2.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Cube2 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0.5 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 0 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 1, g: 0.7607843, b: 0, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Cube2.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 580ab468a3a9042538a434a167f03273 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Green.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: Green 11 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 12 | m_ShaderKeywords: _EMISSION 13 | m_LightmapFlags: 1 14 | m_EnableInstancingVariants: 0 15 | m_DoubleSidedGI: 0 16 | m_CustomRenderQueue: -1 17 | stringTagMap: {} 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BumpScale: 1 60 | - _Cutoff: 0.5 61 | - _DetailNormalMapScale: 1 62 | - _DstBlend: 0 63 | - _GlossMapScale: 1 64 | - _Glossiness: 0.269 65 | - _GlossyReflections: 1 66 | - _Metallic: 0 67 | - _Mode: 0 68 | - _OcclusionStrength: 1 69 | - _Parallax: 0.02 70 | - _SmoothnessTextureChannel: 0 71 | - _SpecularHighlights: 1 72 | - _SrcBlend: 1 73 | - _UVSec: 0 74 | - _ZWrite: 1 75 | m_Colors: 76 | - _Color: {r: 0.41788512, g: 0.8549927, b: 0, a: 1} 77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 78 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Green.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b7e27e5d067ad4a33938b2d5e46e278b 3 | timeCreated: 1447763042 4 | licenseType: Store 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/ProfilePicturePlane.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 8 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInstance: {fileID: 0} 9 | m_PrefabAsset: {fileID: 0} 10 | m_Name: ProfilePicturePlane 11 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 12 | m_Parent: {fileID: 0} 13 | m_ModifiedSerializedProperties: 0 14 | m_ValidKeywords: 15 | - _ALPHABLEND_ON 16 | - _EMISSION 17 | m_InvalidKeywords: [] 18 | m_LightmapFlags: 1 19 | m_EnableInstancingVariants: 0 20 | m_DoubleSidedGI: 0 21 | m_CustomRenderQueue: 3000 22 | stringTagMap: 23 | RenderType: Transparent 24 | disabledShaderPasses: [] 25 | m_LockedProperties: 26 | m_SavedProperties: 27 | serializedVersion: 3 28 | m_TexEnvs: 29 | - _BumpMap: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailAlbedoMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _DetailMask: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _DetailNormalMap: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _EmissionMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _MainTex: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _MetallicGlossMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | - _OcclusionMap: 58 | m_Texture: {fileID: 0} 59 | m_Scale: {x: 1, y: 1} 60 | m_Offset: {x: 0, y: 0} 61 | - _ParallaxMap: 62 | m_Texture: {fileID: 0} 63 | m_Scale: {x: 1, y: 1} 64 | m_Offset: {x: 0, y: 0} 65 | m_Ints: [] 66 | m_Floats: 67 | - _BumpScale: 1 68 | - _Cutoff: 0 69 | - _DetailNormalMapScale: 1 70 | - _DstBlend: 10 71 | - _GlossMapScale: 1 72 | - _Glossiness: 0 73 | - _GlossyReflections: 1 74 | - _Metallic: 0 75 | - _Mode: 2 76 | - _OcclusionStrength: 1 77 | - _Parallax: 0.02 78 | - _SmoothnessTextureChannel: 0 79 | - _SpecularHighlights: 1 80 | - _SrcBlend: 5 81 | - _UVSec: 0 82 | - _ZWrite: 0 83 | m_Colors: 84 | - _Color: {r: 0, g: 0, b: 0, a: 0} 85 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 86 | m_BuildTextureStacks: [] 87 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/ProfilePicturePlane.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50229279e85ab4dcea2b928155d53b71 3 | timeCreated: 1449823528 4 | licenseType: Store 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Sphere 1.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Sphere 1 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 1 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 1, g: 1, b: 1, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Sphere 1.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a1fe0c83760104b82bcc0bd691a406e8 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Sphere.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: Sphere 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: -1 16 | stringTagMap: {} 17 | disabledShaderPasses: [] 18 | m_SavedProperties: 19 | serializedVersion: 3 20 | m_TexEnvs: 21 | - _BumpMap: 22 | m_Texture: {fileID: 0} 23 | m_Scale: {x: 1, y: 1} 24 | m_Offset: {x: 0, y: 0} 25 | - _DetailAlbedoMap: 26 | m_Texture: {fileID: 0} 27 | m_Scale: {x: 1, y: 1} 28 | m_Offset: {x: 0, y: 0} 29 | - _DetailMask: 30 | m_Texture: {fileID: 0} 31 | m_Scale: {x: 1, y: 1} 32 | m_Offset: {x: 0, y: 0} 33 | - _DetailNormalMap: 34 | m_Texture: {fileID: 0} 35 | m_Scale: {x: 1, y: 1} 36 | m_Offset: {x: 0, y: 0} 37 | - _EmissionMap: 38 | m_Texture: {fileID: 0} 39 | m_Scale: {x: 1, y: 1} 40 | m_Offset: {x: 0, y: 0} 41 | - _MainTex: 42 | m_Texture: {fileID: 0} 43 | m_Scale: {x: 1, y: 1} 44 | m_Offset: {x: 0, y: 0} 45 | - _MetallicGlossMap: 46 | m_Texture: {fileID: 0} 47 | m_Scale: {x: 1, y: 1} 48 | m_Offset: {x: 0, y: 0} 49 | - _OcclusionMap: 50 | m_Texture: {fileID: 0} 51 | m_Scale: {x: 1, y: 1} 52 | m_Offset: {x: 0, y: 0} 53 | - _ParallaxMap: 54 | m_Texture: {fileID: 0} 55 | m_Scale: {x: 1, y: 1} 56 | m_Offset: {x: 0, y: 0} 57 | m_Floats: 58 | - _BumpScale: 1 59 | - _Cutoff: 0.5 60 | - _DetailNormalMapScale: 1 61 | - _DstBlend: 0 62 | - _GlossMapScale: 1 63 | - _Glossiness: 0 64 | - _GlossyReflections: 1 65 | - _Metallic: 0 66 | - _Mode: 0 67 | - _OcclusionStrength: 1 68 | - _Parallax: 0.02 69 | - _SmoothnessTextureChannel: 1 70 | - _SpecularHighlights: 1 71 | - _SrcBlend: 1 72 | - _UVSec: 0 73 | - _ZWrite: 1 74 | m_Colors: 75 | - _Color: {r: 0, g: 0, b: 0, a: 1} 76 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 77 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/Sphere.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 096ffefe818ad4bfcbe4b1438aee72ac 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/bouncy.physicsMaterial2D: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!62 &6200000 4 | PhysicsMaterial2D: 5 | m_ObjectHideFlags: 0 6 | m_PrefabParentObject: {fileID: 0} 7 | m_PrefabInternal: {fileID: 0} 8 | m_Name: bouncy 9 | friction: 0 10 | bounciness: 1 11 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/bouncy.physicsMaterial2D.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 72b2deea4eb46aa428f636f09b7b55d3 3 | timeCreated: 1437925853 4 | licenseType: Store 5 | NativeFormatImporter: 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/transparent.mat: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!21 &2100000 4 | Material: 5 | serializedVersion: 6 6 | m_ObjectHideFlags: 0 7 | m_CorrespondingSourceObject: {fileID: 0} 8 | m_PrefabInternal: {fileID: 0} 9 | m_Name: transparent 10 | m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} 11 | m_ShaderKeywords: _ALPHABLEND_ON 12 | m_LightmapFlags: 4 13 | m_EnableInstancingVariants: 0 14 | m_DoubleSidedGI: 0 15 | m_CustomRenderQueue: 3000 16 | stringTagMap: 17 | RenderType: Transparent 18 | disabledShaderPasses: [] 19 | m_SavedProperties: 20 | serializedVersion: 3 21 | m_TexEnvs: 22 | - _BumpMap: 23 | m_Texture: {fileID: 0} 24 | m_Scale: {x: 1, y: 1} 25 | m_Offset: {x: 0, y: 0} 26 | - _DetailAlbedoMap: 27 | m_Texture: {fileID: 0} 28 | m_Scale: {x: 1, y: 1} 29 | m_Offset: {x: 0, y: 0} 30 | - _DetailMask: 31 | m_Texture: {fileID: 0} 32 | m_Scale: {x: 1, y: 1} 33 | m_Offset: {x: 0, y: 0} 34 | - _DetailNormalMap: 35 | m_Texture: {fileID: 0} 36 | m_Scale: {x: 1, y: 1} 37 | m_Offset: {x: 0, y: 0} 38 | - _EmissionMap: 39 | m_Texture: {fileID: 0} 40 | m_Scale: {x: 1, y: 1} 41 | m_Offset: {x: 0, y: 0} 42 | - _MainTex: 43 | m_Texture: {fileID: 0} 44 | m_Scale: {x: 1, y: 1} 45 | m_Offset: {x: 0, y: 0} 46 | - _MetallicGlossMap: 47 | m_Texture: {fileID: 0} 48 | m_Scale: {x: 1, y: 1} 49 | m_Offset: {x: 0, y: 0} 50 | - _OcclusionMap: 51 | m_Texture: {fileID: 0} 52 | m_Scale: {x: 1, y: 1} 53 | m_Offset: {x: 0, y: 0} 54 | - _ParallaxMap: 55 | m_Texture: {fileID: 0} 56 | m_Scale: {x: 1, y: 1} 57 | m_Offset: {x: 0, y: 0} 58 | m_Floats: 59 | - _BumpScale: 1 60 | - _Cutoff: 0.5 61 | - _DetailNormalMapScale: 1 62 | - _DstBlend: 10 63 | - _GlossMapScale: 1 64 | - _Glossiness: 0 65 | - _GlossyReflections: 1 66 | - _Metallic: 0 67 | - _Mode: 2 68 | - _OcclusionStrength: 1 69 | - _Parallax: 0.02 70 | - _SmoothnessTextureChannel: 0 71 | - _SpecularHighlights: 1 72 | - _SrcBlend: 5 73 | - _UVSec: 0 74 | - _ZWrite: 0 75 | m_Colors: 76 | - _Color: {r: 1, g: 1, b: 1, a: 0.50980395} 77 | - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} 78 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Materials/transparent.mat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6964da17416934c91b9a4e29f8c2d16d 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2100000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Meshes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a89ae0fedff8430e98fd9dea447ee86 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Meshes/LogoAirConsole.fbx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/Art/Meshes/LogoAirConsole.fbx -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Meshes/LogoAirConsole.fbx.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 099bfe4af54b04dd88d6658405b1b203 3 | ModelImporter: 4 | serializedVersion: 19301 5 | internalIDToNameTable: [] 6 | externalObjects: {} 7 | materials: 8 | materialImportMode: 1 9 | materialName: 0 10 | materialSearch: 1 11 | materialLocation: 1 12 | animations: 13 | legacyGenerateAnimations: 4 14 | bakeSimulation: 0 15 | resampleCurves: 1 16 | optimizeGameObjects: 0 17 | motionNodeName: 18 | rigImportErrors: 19 | rigImportWarnings: 20 | animationImportErrors: 21 | animationImportWarnings: 22 | animationRetargetingWarnings: 23 | animationDoRetargetingWarnings: 0 24 | importAnimatedCustomProperties: 0 25 | importConstraints: 0 26 | animationCompression: 1 27 | animationRotationError: 0.5 28 | animationPositionError: 0.5 29 | animationScaleError: 0.5 30 | animationWrapMode: 0 31 | extraExposedTransformPaths: [] 32 | extraUserProperties: [] 33 | clipAnimations: [] 34 | isReadable: 0 35 | meshes: 36 | lODScreenPercentages: [] 37 | globalScale: 1 38 | meshCompression: 0 39 | addColliders: 0 40 | useSRGBMaterialColor: 1 41 | sortHierarchyByName: 1 42 | importVisibility: 1 43 | importBlendShapes: 1 44 | importCameras: 1 45 | importLights: 1 46 | fileIdsGeneration: 2 47 | swapUVChannels: 0 48 | generateSecondaryUV: 0 49 | useFileUnits: 1 50 | keepQuads: 0 51 | weldVertices: 1 52 | preserveHierarchy: 0 53 | skinWeightsMode: 0 54 | maxBonesPerVertex: 4 55 | minBoneWeight: 0.001 56 | meshOptimizationFlags: -1 57 | indexFormat: 0 58 | secondaryUVAngleDistortion: 8 59 | secondaryUVAreaDistortion: 15.000001 60 | secondaryUVHardAngle: 88 61 | secondaryUVPackMargin: 4 62 | useFileScale: 1 63 | tangentSpace: 64 | normalSmoothAngle: 60 65 | normalImportMode: 0 66 | tangentImportMode: 3 67 | normalCalculationMode: 4 68 | legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 69 | blendShapeNormalImportMode: 1 70 | normalSmoothingSource: 0 71 | referencedClips: [] 72 | importAnimation: 1 73 | humanDescription: 74 | serializedVersion: 3 75 | human: [] 76 | skeleton: [] 77 | armTwist: 0.5 78 | foreArmTwist: 0.5 79 | upperLegTwist: 0.5 80 | legTwist: 0.5 81 | armStretch: 0.05 82 | legStretch: 0.05 83 | feetSpacing: 0 84 | globalScale: 1 85 | rootMotionBoneName: 86 | hasTranslationDoF: 0 87 | hasExtraRoot: 0 88 | skeletonHasParents: 1 89 | lastHumanDescriptionAvatarSource: {instanceID: 0} 90 | autoGenerateAvatarMappingIfUnspecified: 1 91 | animationType: 2 92 | humanoidOversampling: 1 93 | avatarSetup: 0 94 | additionalBone: 0 95 | userData: 96 | assetBundleName: 97 | assetBundleVariant: 98 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Sprites.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9c07e76cc9d2f4d4386a5f774ba8d45e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Sprites/ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/Art/Sprites/ball.png -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Sprites/ball.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 658e3cbaebcabe54fa3484bc714c9df5 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 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 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: -3 31 | maxTextureSize: 32 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 32 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Sprites/player.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/Art/Sprites/player.png -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Art/Sprites/player.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 179e85ac2a85c954e8523c81bdb28cb4 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 10 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 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: -3 31 | maxTextureSize: 256 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 16 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | platformSettings: 61 | - serializedVersion: 3 62 | buildTarget: DefaultTexturePlatform 63 | maxTextureSize: 256 64 | resizeAlgorithm: 0 65 | textureFormat: -1 66 | textureCompression: 0 67 | compressionQuality: 50 68 | crunchedCompression: 0 69 | allowsAlphaSplitting: 0 70 | overridden: 0 71 | androidETC2FallbackOverride: 0 72 | forceMaximumCompressionQuality_BC6H_BC7: 0 73 | spriteSheet: 74 | serializedVersion: 2 75 | sprites: [] 76 | outline: [] 77 | physicsShape: [] 78 | bones: [] 79 | spriteID: 5e97eb03825dee720800000000000000 80 | internalID: 0 81 | vertices: [] 82 | indices: 83 | edges: [] 84 | weights: [] 85 | secondaryTextures: [] 86 | spritePackingTag: 87 | pSDRemoveMatte: 0 88 | pSDShowRemoveMatteOption: 0 89 | userData: 90 | assetBundleName: 91 | assetBundleVariant: 92 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Audio.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 700787e485c61408fb4839584bd923a1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Audio/Music.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 45ed1a2c10e234a6aa6cef9a65c1664a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Audio/Music/Happy_1.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/Audio/Music/Happy_1.wav -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Audio/Music/Happy_1.wav.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 804632e1e46684476b4ea5f752e8df15 3 | AudioImporter: 4 | externalObjects: {} 5 | serializedVersion: 6 6 | defaultSettings: 7 | loadType: 0 8 | sampleRateSetting: 0 9 | sampleRateOverride: 44100 10 | compressionFormat: 1 11 | quality: 1 12 | conversionMode: 0 13 | platformSettingOverrides: {} 14 | forceToMono: 0 15 | normalize: 1 16 | preloadAudioData: 1 17 | loadInBackground: 0 18 | ambisonic: 0 19 | 3D: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d7405f219f8d64e79830660a445e5888 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/Prefabs/PlayerCapsule.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38981a680ee6e49a7a8e01595d2bdf3a 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/android banner placeholder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/android banner placeholder.jpg -------------------------------------------------------------------------------- /Assets/AirConsole/resources/android banner placeholder.jpg.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 89e42e8f0e05b4d99b5c6004a59d06f1 3 | TextureImporter: 4 | fileIDToRecycleName: {} 5 | externalObjects: {} 6 | serializedVersion: 5 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 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: 0 39 | lightmap: 0 40 | compressionQuality: 50 41 | spriteMode: 1 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: 1 51 | spriteTessellationDetail: -1 52 | textureType: 8 53 | textureShape: 1 54 | singleChannelComponent: 0 55 | maxTextureSizeSet: 0 56 | compressionQualitySet: 0 57 | textureFormatSet: 0 58 | platformSettings: 59 | - serializedVersion: 2 60 | buildTarget: DefaultTexturePlatform 61 | maxTextureSize: 2048 62 | resizeAlgorithm: 0 63 | textureFormat: -1 64 | textureCompression: 1 65 | compressionQuality: 50 66 | crunchedCompression: 0 67 | allowsAlphaSplitting: 0 68 | overridden: 0 69 | androidETC2FallbackOverride: 0 70 | spriteSheet: 71 | serializedVersion: 2 72 | sprites: [] 73 | outline: [] 74 | physicsShape: [] 75 | bones: [] 76 | spriteID: d24065db3d4f44335a38872ccd8b2c42 77 | vertices: [] 78 | indices: 79 | edges: [] 80 | weights: [] 81 | spritePackingTag: 82 | userData: 83 | assetBundleName: 84 | assetBundleVariant: 85 | -------------------------------------------------------------------------------- /Assets/AirConsole/resources/androidtv-loadingscreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/resources/androidtv-loadingscreen.png -------------------------------------------------------------------------------- /Assets/AirConsole/scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78f15d4c3531b674fa239b9031b7d69b 3 | folderAsset: yes 4 | timeCreated: 1435571204 5 | licenseType: Store 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bef99b3522d00c447b4ac4b6afe11b35 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.Editor", 3 | "rootNamespace": "NDream.AirConsole.Editor", 4 | "references": [ 5 | "AirConsole.Runtime", 6 | "UnityEditor.UI" 7 | ], 8 | "includePlatforms": [ 9 | "Editor" 10 | ], 11 | "excludePlatforms": [], 12 | "allowUnsafeCode": false, 13 | "overrideReferences": true, 14 | "precompiledReferences": [ 15 | "Newtonsoft.Json.dll" 16 | ], 17 | "autoReferenced": true, 18 | "defineConstraints": [ 19 | "UNITY_2022_3_OR_NEWER" 20 | ], 21 | "versionDefines": [], 22 | "noEngineReferences": false 23 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/AirConsole.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 42224983e155e41ae9a9caf097f2acc8 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("AirConsole.Editor.Tests")] 4 | 5 | namespace NDream.AirConsole.Editor { 6 | public class AssemblyInfo { } 7 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/AssemblyInfo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a24f2049e3a542c6a1e32600687ab8d8 3 | timeCreated: 1741882098 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/Assets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7300270c72d5945a0ac28483b434d719 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/Assets/AirConsoleIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/AirConsole/scripts/Editor/Assets/AirConsoleIcon.png -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c381f3ab8a094e36b2d764ac3b026fa5 3 | timeCreated: 1746690423 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidGradleProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 85a6f69111854635a025c12665371f95 3 | timeCreated: 1745398290 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidManifest.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using System.Diagnostics.CodeAnalysis; 3 | using System.Xml; 4 | 5 | namespace NDream.AirConsole.Editor { 6 | // Approach based on https://stackoverflow.com/questions/56886994/c-sharp-adding-attribute-to-xml-element-appends-the-namespace-to-the-end-of-the 7 | [SuppressMessage("ReSharper", "UnusedMember.Global")] 8 | internal class AndroidManifest : AndroidXmlDocument { 9 | private readonly XmlElement ApplicationElement; 10 | 11 | internal AndroidManifest(string path) : base(path) { 12 | ApplicationElement = SelectSingleNode("/manifest/application") as XmlElement; 13 | } 14 | 15 | internal XmlAttribute GenerateAttribute(string prefix, string key, string value, string XmlNamespace) { 16 | XmlAttribute attr = CreateAttribute(prefix, key, XmlNamespace); 17 | attr.Value = value; 18 | return attr; 19 | } 20 | 21 | internal void SetAttribute(XmlAttribute Attribute) { 22 | ApplicationElement.Attributes.Append(Attribute); 23 | } 24 | } 25 | } 26 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidManifest.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b217a021a66642c7959b7a10b88663aa 3 | timeCreated: 1740744068 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidManifestProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9ac7776244484c6c9bcccecea83ed32a 3 | timeCreated: 1740744263 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidProjectProcessor.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole.Editor { 3 | using UnityEditor.Android; 4 | 5 | public class AndroidProjectProcessor : IPostGenerateGradleAndroidProject { 6 | public int callbackOrder { 7 | get => 999; 8 | } 9 | 10 | public void OnPostGenerateGradleAndroidProject(string projectPath) { 11 | AndroidGradleProcessor.Execute(projectPath); 12 | AndroidManifestProcessor.Execute(projectPath); 13 | } 14 | } 15 | } 16 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidProjectProcessor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 14434a3537884dd6b4ba1a52486e184b 3 | timeCreated: 1748939901 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidXMLDocument.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using System.Text; 3 | using System.Xml; 4 | 5 | namespace NDream.AirConsole.Editor { 6 | // Approach based on https://stackoverflow.com/questions/56886994/c-sharp-adding-attribute-to-xml-element-appends-the-namespace-to-the-end-of-the 7 | internal class AndroidXmlDocument : XmlDocument { 8 | private readonly string documentPath; 9 | private readonly XmlNamespaceManager nsManager; 10 | internal readonly string AndroidXmlNamespace = "http://schemas.android.com/apk/res/android"; 11 | internal readonly string ToolsXmlNamespace = "http://schemas.android.com/tools"; 12 | 13 | internal AndroidXmlDocument(string path) { 14 | documentPath = path; 15 | using (XmlTextReader reader = new(documentPath)) { 16 | reader.Read(); 17 | Load(reader); 18 | } 19 | 20 | nsManager = new XmlNamespaceManager(NameTable); 21 | nsManager.AddNamespace("android", AndroidXmlNamespace); 22 | nsManager.AddNamespace("tools", ToolsXmlNamespace); 23 | } 24 | 25 | /// 26 | /// Saves the XML document at the current documentPath. 27 | /// 28 | /// Returns the path at which the document was saved. 29 | internal string Save() { 30 | return SaveAs(documentPath); 31 | } 32 | 33 | private string SaveAs(string path) { 34 | using (XmlTextWriter writer = new(path, new UTF8Encoding(false))) { 35 | writer.Formatting = Formatting.Indented; 36 | Save(writer); 37 | } 38 | 39 | return path; 40 | } 41 | } 42 | } 43 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/AndroidXMLDocument.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f34adc7144b4c5f84335b4f6e3eef5d 3 | timeCreated: 1740744100 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/PostBuildProcess.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | 3 | namespace NDream.AirConsole.Editor { 4 | using UnityEditor; 5 | using UnityEditor.Callbacks; 6 | using System.IO; 7 | using System; 8 | using System.Text.RegularExpressions; 9 | using UnityEngine; 10 | 11 | public class PostBuildProcess { 12 | [PostProcessBuild(1)] 13 | public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) { 14 | if (target == BuildTarget.WebGL) { 15 | ValidateApiUsage(); 16 | 17 | // Copy index.html to screen.html and overwrite it if necessary. 18 | File.Copy(pathToBuiltProject + "/index.html", pathToBuiltProject + "/screen.html", true); 19 | 20 | // Save last port path 21 | EditorPrefs.SetString("airconsolePortPath", pathToBuiltProject); 22 | 23 | } 24 | } 25 | 26 | private static void ValidateApiUsage() { 27 | string webGLTemplateDirectory = PreBuildProcessing.GetWebGLTemplateDirectory(); 28 | if (!VerifyAPIUsage(Path.Combine(webGLTemplateDirectory, "index.html"), Settings.RequiredMinimumVersion) 29 | // || !VerifyAPIUsage(pathToBuiltProject + "/screen.html", Settings.RequiredMinimumVersion) 30 | || !VerifyAPIUsage(Path.Combine(webGLTemplateDirectory, "controller.html"), Settings.RequiredMinimumVersion)) { 31 | AirConsoleLogger.LogError(() => "Outdated AirConsole API detected. Please check the previous logs to address the problem."); 32 | throw new UnityException("Build failed. Outdated AirConsole API detected"); 33 | } 34 | } 35 | 36 | private static bool VerifyAPIUsage(string pathToHtml, Version requiredApiVersion) { 37 | // Using regex, check if the reference to airconsole-Major.Minor.Patch is at least as big as requiredMinimumVersion. Also ensure that it is not airconsole-latest.js 38 | string reference = File.ReadAllText(pathToHtml); 39 | Regex regex = new(@"airconsole-(\d+)\.(\d+)\.(\d+)\.js", RegexOptions.IgnoreCase); 40 | Match match = regex.Match(reference); 41 | string apiVersion = $"airconsole-{requiredApiVersion.Major}.{requiredApiVersion.Minor}.{requiredApiVersion.Build}.js"; 42 | if (match.Success && !reference.Contains("airconsole-latest.js")) { 43 | int major = int.Parse(match.Groups[1].Value); 44 | int minor = int.Parse(match.Groups[2].Value); 45 | int revision = int.Parse(match.Groups[3].Value); 46 | 47 | Version referencedVersion = new(major, minor, revision); 48 | if (referencedVersion >= requiredApiVersion) { 49 | AirConsoleLogger.LogDevelopment(() => $"Valid API reference {match.Groups[0]} found."); 50 | } else { 51 | AirConsoleLogger.LogError( 52 | () => $"airconsole-{major}.{minor}.{revision}.js found. This is outdated, please update to {apiVersion}"); 53 | return false; 54 | } 55 | } else if (reference.Contains("airconsole-latest.js")) { 56 | AirConsoleLogger.LogError( 57 | () => $"{pathToHtml} uses airconsole-latest.js. Please fix it to use {apiVersion}"); 58 | 59 | return false; 60 | } 61 | 62 | return true; 63 | } 64 | } 65 | } 66 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/PostBuildProcess.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf693daf251b5744c94fbae65dd60f4f 3 | timeCreated: 1435670435 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/PreBuildProcessing.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE && UNITY_EDITOR 2 | 3 | namespace NDream.AirConsole.Editor { 4 | using System.IO; 5 | using System.Linq; 6 | using UnityEditor; 7 | using UnityEditor.Build; 8 | using UnityEditor.Build.Reporting; 9 | using UnityEngine; 10 | 11 | public class PreBuildProcessing : IPreprocessBuildWithReport { 12 | public int callbackOrder => 1; 13 | 14 | public void OnPreprocessBuild(BuildReport report) { 15 | if (report.summary.platform == BuildTarget.WebGL) { 16 | CheckWebGLSetup(); 17 | } 18 | } 19 | 20 | private static void CheckWebGLSetup() { 21 | if (string.IsNullOrEmpty(PlayerSettings.WebGL.template)) { 22 | EditorUtility.DisplayDialog("Error", "No WebGL Template configured", "Cancel"); 23 | throw new BuildFailedException("WebGL template not configured"); 24 | } 25 | 26 | if (Directory.Exists(GetWebGLTemplateDirectory())) { 27 | string templatePath = GetWebGLTemplateDirectory(); 28 | if (!Directory.GetFiles(templatePath).Any(filename => filename.EndsWith("controller.html"))) { 29 | EditorUtility.DisplayDialog("Error", 30 | "The controller has not yet been generated. Please execute the game at least once in play mode.", 31 | "OK"); 32 | throw new BuildFailedException("Controller missing in WebGL template location."); 33 | } 34 | 35 | if (!Directory.GetFiles(templatePath).Any(filename => filename.EndsWith("airconsole-unity-plugin.js"))) { 36 | EditorUtility.DisplayDialog("Error", 37 | "airconsole-unity-plugin missing. Please set up your airconsole plugin again", 38 | "Cancel"); 39 | throw new BuildFailedException("Unity template incomplete"); 40 | } 41 | } 42 | } 43 | 44 | internal static string GetWebGLTemplateDirectory() => 45 | Path.GetFullPath("Assets/WebGLTemplates/" + PlayerSettings.WebGL.template.Split(':')[1]); 46 | } 47 | } 48 | #endif 49 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/BuildAutomation/PreBuildProcessing.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a07a0f17666ca403baa269023708928a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/Extentions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e2536216e3cc26742a0e293a982ed909 3 | timeCreated: 1437754626 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/Inspector.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b821d1b6206d7784cafde0ec55116ef9 3 | timeCreated: 1435670925 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/PlayMode.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEditor; 3 | using System; 4 | using System.Collections; 5 | 6 | namespace NDream.AirConsole.Editor { 7 | public enum PlayModeState { 8 | Stopped, 9 | Playing, 10 | Paused, 11 | AboutToStop, 12 | AboutToPlay 13 | } 14 | 15 | [InitializeOnLoad] 16 | public class PlayMode { 17 | private static PlayModeState _currentState = PlayModeState.Stopped; 18 | 19 | static PlayMode() { 20 | EditorApplication.playModeStateChanged += OnUnityPlayModeChanged; 21 | if (EditorApplication.isPaused) { 22 | _currentState = PlayModeState.Paused; 23 | } 24 | } 25 | 26 | private static int Bool2Int(bool b) { 27 | if (b) { 28 | return 1; 29 | } else { 30 | return 2; 31 | } 32 | } 33 | 34 | private static int GetEditorAppStateBoolComb() { 35 | int b1 = Bool2Int(EditorApplication.isUpdating); 36 | int b2 = Bool2Int(EditorApplication.isPlayingOrWillChangePlaymode); 37 | int b3 = Bool2Int(EditorApplication.isPlaying); 38 | int b4 = Bool2Int(EditorApplication.isPaused); 39 | int b5 = Bool2Int(EditorApplication.isCompiling); 40 | return b1 + b2 * 10 + b3 * 100 + b4 * 1000 + b5 * 10000; 41 | } 42 | 43 | public static event Action PlayModeChanged; 44 | 45 | private static void OnPlayModeChanged(PlayModeState currentState, PlayModeState changedState) { 46 | if (PlayModeChanged != null) { 47 | PlayModeChanged(currentState, changedState); 48 | } 49 | } 50 | 51 | private static void OnUnityPlayModeChanged(PlayModeStateChange playModeState) { 52 | PlayModeState changedState = PlayModeState.Stopped; 53 | 54 | int state = GetEditorAppStateBoolComb(); 55 | 56 | switch (state) { 57 | case 22112: 58 | changedState = PlayModeState.Playing; 59 | break; 60 | case 21112: 61 | changedState = PlayModeState.Paused; 62 | break; 63 | case 22222: 64 | changedState = PlayModeState.Stopped; 65 | break; 66 | case 22122: 67 | changedState = PlayModeState.AboutToStop; 68 | break; 69 | case 21122: 70 | changedState = PlayModeState.AboutToStop; 71 | break; 72 | case 21222: 73 | changedState = PlayModeState.Stopped; 74 | break; 75 | case 22212: 76 | changedState = PlayModeState.Stopped; 77 | break; 78 | case 21212: 79 | changedState = PlayModeState.Paused; 80 | break; 81 | default: 82 | AirConsoleLogger.LogDevelopment(() => $"No such state combination defined: {state}"); 83 | break; 84 | } 85 | 86 | // Fire PlayModeChanged event. 87 | if (_currentState != changedState) { 88 | OnPlayModeChanged(_currentState, changedState); 89 | } 90 | 91 | // Set current state. 92 | _currentState = changedState; 93 | } 94 | } 95 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/PlayMode.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f62f6a50dc6e20241aca97d01fbb2881 3 | timeCreated: 1437762758 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/PluginDevelopment.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b08e24dfc564c8798306eec21a9b309 3 | timeCreated: 1746690692 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/PluginDevelopment/BuildHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: acdaff160185f4c7aa8de39913450979 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/PluginDevelopment/DevelopmentTools.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b00236f82e6c47f48ebc744fd2aebede 3 | timeCreated: 1741277117 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f3bc69a38d0f4c8da71c33f757931ce8 3 | timeCreated: 1746690637 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectConfigurationCheck.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ad7ea0ffc1224648b158fd41c19d78b9 3 | timeCreated: 1733323668 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectDependencyCheck.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole.Editor { 3 | using UnityEditor; 4 | using UnityEngine; 5 | using System; 6 | 7 | public abstract class ProjectDependencyCheck { 8 | [InitializeOnLoadMethod] 9 | private static void CheckUnityVersions() { 10 | ValidateUnityVersion(EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android); 11 | } 12 | 13 | /// 14 | /// To meet automotive requirements, we need to have certain minimum versions of Unity that have updated dependencies. 15 | /// To make the game developer experience consistent, we always check for this. 16 | /// 17 | internal static void ValidateUnityVersion(bool invokeErrorOnFail = false) { 18 | string unityVersion = GetUnityVersion(); 19 | string[] versions = unityVersion.Split("."); 20 | 21 | Version requiredVersion = versions[0] switch { 22 | // 2022.3.?? -> 2022.3.62f2 first with CVE-2025-59489 fix 23 | "2022" => new Version(2022, 3, 62, 2), 24 | "6000" => versions[1] switch { 25 | // 6000.0.?? -> 6000.0.58f2 first with CVE-2025-59489 fix 26 | "0" => new Version(6000, 0, 58, 2), 27 | 28 | // 6000.1.?? -> 6000.1.17f1 first with CVE-2025-59489 fix 29 | "1" => new Version(6000, 1, 17, 1), 30 | 31 | // 6000.2.?? -> 6000.2.6f2 first with CVE-2025-59489 fix 32 | "2" => new Version(6000, 2, 6, 2), 33 | 34 | // 6000.3.?? -> 6000.3.0b4 first with CVE-2025-59489 fix but we require official releases 35 | _ => new Version(6000, 3, 0, 1) 36 | }, 37 | _ => new Version(6000, 0, 58, 2) 38 | }; 39 | 40 | if (!SemVerCheck.ValidateUnityVersionMinimum(requiredVersion, unityVersion)) { 41 | InvokeErrorOrLog( 42 | $"For security (CVE-2025-59489), AirConsole requires at least Unity {StringFromVersion(requiredVersion)}", 43 | $"Insecure version {unityVersion}", invokeErrorOnFail); 44 | } 45 | } 46 | 47 | private static void InvokeErrorOrLog(string message, string title, bool shallError = false) { 48 | #if UNITY_INCLUDE_TESTS 49 | if (InvokeErrorOrLogOverride != null) { 50 | InvokeErrorOrLogOverride(message, title, shallError); 51 | return; 52 | } 53 | #endif 54 | if (!shallError) { 55 | AirConsoleLogger.LogWarning(() => message); 56 | return; 57 | } 58 | 59 | EditorNotificationService.InvokeError(message, false, title); 60 | } 61 | 62 | private static string StringFromVersion(Version version) => $"{version.Major}.{version.Minor}.{version.Build}f{version.Revision}"; 63 | 64 | private static string GetUnityVersion() { 65 | #if UNITY_INCLUDE_TESTS 66 | return UnityVersionProvider?.Invoke() ?? Application.unityVersion; 67 | #else 68 | return Application.unityVersion; 69 | #endif 70 | } 71 | 72 | #if UNITY_INCLUDE_TESTS 73 | internal static Func? UnityVersionProvider; 74 | internal static Action? InvokeErrorOrLogOverride; 75 | #endif 76 | } 77 | } 78 | #endif 79 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectDependencyCheck.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 83b84b7ca50e415bb4976894b56069b3 3 | timeCreated: 1746690860 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectPreferenceManager.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using System; 3 | using System.IO; 4 | using Newtonsoft.Json; 5 | using UnityEngine; 6 | 7 | namespace NDream.AirConsole.Editor { 8 | internal abstract class ProjectPreferenceManager { 9 | private static string PreferencePath => Path.GetFullPath(Path.Combine(Application.dataPath, "AirConsole", "airconsole.prefs")); 10 | 11 | /// 12 | /// Loads the Project Preferences. 13 | /// 14 | /// The loaded ProjectPreferences object. 15 | internal static ProjectPreferences LoadPreferences() { 16 | if (!File.Exists(PreferencePath)) { 17 | ProjectPreferences newPreferences = new(); 18 | SavePreferences(newPreferences); 19 | return newPreferences; 20 | } 21 | 22 | ProjectPreferences result = JsonConvert.DeserializeObject(File.ReadAllText(PreferencePath)); 23 | return result; 24 | } 25 | 26 | /// 27 | /// Saves new project preferences. This overwrites the complete preferences. This does not update single changed keys. 28 | /// 29 | /// The ProjectPreferences to persist. 30 | /// Thrown when preferences is null 31 | internal static void SavePreferences(ProjectPreferences preferences) { 32 | if (preferences == null) { 33 | throw new ArgumentNullException(nameof(preferences)); 34 | } 35 | 36 | File.WriteAllText(PreferencePath, JsonConvert.SerializeObject(preferences, Formatting.None)); 37 | } 38 | } 39 | } 40 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectPreferenceManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9769679c284f4a8ab50eeb9d3a112306 3 | timeCreated: 1741704964 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectPreferences.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using System.ComponentModel; 3 | using Newtonsoft.Json; 4 | 5 | namespace NDream.AirConsole.Editor { 6 | internal class ProjectPreferences { 7 | [DefaultValue("")] 8 | [JsonProperty("pv")] 9 | private string pluginVersion; 10 | 11 | internal string PluginVersion { 12 | get => pluginVersion; 13 | set => pluginVersion = value; 14 | } 15 | } 16 | } 17 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectPreferences.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41ad7b50ae434296aa94e967f8019544 3 | timeCreated: 1741707366 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/ProjectUpgradeEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f913ab96fc1141c58b155117c1193a45 3 | timeCreated: 1741269563 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/SemVerCheck.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole.Editor { 3 | using System; 4 | using System.Text.RegularExpressions; 5 | using UnityEditor.Build; 6 | 7 | internal abstract class SemVerCheck { 8 | /// 9 | /// Validates that Unity matches a required minimum version. 10 | /// 11 | /// The required version. We use Version to form Unity's version string of MAJOR.MINOR.BUILDfREVISION 12 | /// The version string to check, expected in the format "major.minor.patch". 13 | /// True, if the detected version is greater than or equal to the required version. 14 | internal static bool ValidateUnityVersionMinimum(Version requiredVersion, string detectedVersion) { 15 | Version foundVersion = GetMajorMinorPatchFromVersion(detectedVersion); 16 | return foundVersion.CompareTo(requiredVersion) >= 0; 17 | } 18 | 19 | private static Version GetMajorMinorPatchFromVersion(string version) { 20 | Regex versionExtractor = new(@"^(?\d{4})\.(?\d+)\.(?\d+)f(?\d+)$"); 21 | Match match = versionExtractor.Match(version); 22 | if (!match.Success) { 23 | throw new BuildFailedException( 24 | "No valid Unity Application version found. Format should be ..f"); 25 | } 26 | 27 | return new Version( 28 | int.Parse(match.Groups["Major"].Value), 29 | int.Parse(match.Groups["Minor"].Value), 30 | int.Parse(match.Groups["Build"].Value), 31 | int.Parse(match.Groups["Revision"].Value) 32 | ); 33 | } 34 | } 35 | } 36 | #endif 37 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/ProjectMaintenance/SemVerCheck.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 111f68ef338d4a43b5825385fcf7f192 3 | timeCreated: 1759739181 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/SafeAreaTester.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 18aeae825dcd24d6c8223c6903939356 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/SettingWindow.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using UnityEngine; 3 | using UnityEditor; 4 | using System.Collections; 5 | 6 | namespace NDream.AirConsole.Editor { 7 | public class SettingWindow : EditorWindow { 8 | private GUIStyle styleBlack = new(); 9 | private bool groupEnabled = false; 10 | private static Texture2D bg; 11 | private static Texture logo; 12 | private static Texture logoSmall; 13 | private static GUIContent titleInfo; 14 | 15 | public void OnEnable() { 16 | // get images 17 | bg = (Texture2D)Resources.Load("AirConsoleBg"); 18 | logo = (Texture)Resources.Load("AirConsoleLogoText"); 19 | logoSmall = (Texture)Resources.Load("AirConsoleLogoSmall"); 20 | titleInfo = new GUIContent("AirConsole", logoSmall, "AirConsole Settings"); 21 | 22 | // setup style for airconsole logo 23 | styleBlack.normal.background = bg; 24 | styleBlack.normal.textColor = Color.white; 25 | styleBlack.margin.top = 5; 26 | styleBlack.padding.right = 5; 27 | } 28 | 29 | [MenuItem("Window/AirConsole/Settings")] 30 | private static void Init() { 31 | SettingWindow window = (SettingWindow)GetWindow(typeof(SettingWindow)); 32 | window.titleContent = titleInfo; 33 | window.Show(); 34 | } 35 | 36 | private void OnGUI() { 37 | // show logo & version 38 | EditorGUILayout.BeginHorizontal(styleBlack, GUILayout.Height(30)); 39 | GUILayout.Label(logo, GUILayout.Width(128), GUILayout.Height(30)); 40 | GUILayout.FlexibleSpace(); 41 | GUILayout.Label("v" + Settings.VERSION, styleBlack); 42 | EditorGUILayout.EndHorizontal(); 43 | 44 | GUILayout.Label("AirConsole Settings", EditorStyles.boldLabel); 45 | 46 | Settings.webSocketPort = EditorGUILayout.IntField("Websocket Port", Settings.webSocketPort, GUILayout.MaxWidth(200)); 47 | EditorPrefs.SetInt("webSocketPort", Settings.webSocketPort); 48 | 49 | Settings.webServerPort = EditorGUILayout.IntField("Webserver Port", Settings.webServerPort, GUILayout.MaxWidth(200)); 50 | EditorPrefs.SetInt("webServerPort", Settings.webServerPort); 51 | 52 | EditorGUILayout.LabelField("Webserver is running", Extentions.webserver.IsRunning().ToString()); 53 | 54 | groupEnabled = EditorGUILayout.BeginToggleGroup("Debug Settings", groupEnabled); 55 | 56 | Settings.debug.info = EditorGUILayout.Toggle("Info", Settings.debug.info); 57 | EditorPrefs.SetBool("debugInfo", Settings.debug.info); 58 | 59 | Settings.debug.warning = EditorGUILayout.Toggle("Warning", Settings.debug.warning); 60 | EditorPrefs.SetBool("debugWarning", Settings.debug.warning); 61 | 62 | Settings.debug.error = EditorGUILayout.Toggle("Error", Settings.debug.error); 63 | EditorPrefs.SetBool("debugError", Settings.debug.error); 64 | 65 | EditorGUILayout.EndToggleGroup(); 66 | 67 | EditorGUILayout.BeginHorizontal(styleBlack); 68 | 69 | GUILayout.FlexibleSpace(); 70 | if (GUILayout.Button("Reset Settings", GUILayout.MaxWidth(110))) { 71 | Extentions.ResetDefaultValues(); 72 | } 73 | 74 | GUILayout.EndHorizontal(); 75 | } 76 | } 77 | } 78 | #endif 79 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/SettingWindow.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6bd50cbd56c9f4a40bdf74c061e05d42 3 | timeCreated: 1437826751 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Editor/WebListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7484c3ec7c6b424088f06baa57602bb 3 | timeCreated: 1437574812 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5b58f7c53cb674d6c8fbf7f407793411 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.Runtime", 3 | "rootNamespace": "NDream.AirConsole", 4 | "references": [ 5 | "Unity.TextMeshPro", 6 | "UnityEngine.UI", 7 | "unity-webview" 8 | ], 9 | "includePlatforms": [ 10 | "Android", 11 | "Editor", 12 | "WebGL" 13 | ], 14 | "excludePlatforms": [], 15 | "allowUnsafeCode": false, 16 | "overrideReferences": true, 17 | "precompiledReferences": [ 18 | "Newtonsoft.Json.dll", 19 | "websocket-sharp.dll" 20 | ], 21 | "autoReferenced": true, 22 | "defineConstraints": [ 23 | "UNITY_2022_3_OR_NEWER" 24 | ], 25 | "versionDefines": [], 26 | "noEngineReferences": false 27 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/AirConsole.Runtime.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 85c1bfc4f160746aca7904c58b122e65 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/AirConsole.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e37d83ebce05ad74683fd3228dde9e7d 3 | timeCreated: 1437923318 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {fileID: 2800000, guid: 7880c2c6c2772ca4dbf267146591adf5, type: 3} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/AirConsoleLogger.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b6b58d993a7f48da95496caa6d642f28 3 | timeCreated: 1728905162 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("AirConsole.Editor")] 4 | [assembly: InternalsVisibleTo("AirConsole.EditMode.Tests")] 5 | [assembly: InternalsVisibleTo("AirConsole.Editor.Tests")] 6 | [assembly: InternalsVisibleTo("AirConsole.PlayMode.Tests")] 7 | 8 | namespace NDream.AirConsole { 9 | public class AssemblyInfo { } 10 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/AssemblyInfo.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d74a5ce46190453291fb181a2e3f974b 3 | timeCreated: 1741859147 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/DebugLevel.cs: -------------------------------------------------------------------------------- 1 | namespace NDream.AirConsole { 2 | public class DebugLevel { 3 | public const bool DEFAULT_INFO = false; 4 | public const bool DEFAULT_WARNING = true; 5 | public const bool DEFAULT_ERROR = true; 6 | public bool info = true; 7 | public bool warning = true; 8 | public bool error = true; 9 | } 10 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/DebugLevel.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c9ddf324121125748ac451dfd51f1e47 3 | timeCreated: 1437835206 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c22a8432ace462a88af08fa2ac85b09 3 | timeCreated: 1725538039 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0c9b31edda074220b4263266f09abdc6 3 | timeCreated: 1725538053 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/AndroidUnityUtils.cs: -------------------------------------------------------------------------------- 1 | namespace NDream.AirConsole.Android.Plugin { 2 | // ReSharper disable RedundantUsingDirective 3 | using UnityEngine; 4 | 5 | internal static class AndroidIntentUtils { 6 | public static string GetIntentExtraString(string key, string defaultValue) { 7 | #if !UNITY_ANDROID || UNITY_EDITOR 8 | return defaultValue; 9 | #endif 10 | try { 11 | using (AndroidJavaClass unityPlayer = new("com.unity3d.player.UnityPlayer")) { 12 | AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); 13 | AndroidJavaObject intent = currentActivity.Call("getIntent"); 14 | return intent.Call("getStringExtra", key); 15 | } 16 | } catch (System.Exception e) { 17 | AirConsoleLogger.LogWarning(() => "Error getting intent extra: " + e); 18 | return defaultValue; 19 | } 20 | } 21 | 22 | public static bool GetIntentExtraBool(string key, bool defaultValue) { 23 | #if !UNITY_ANDROID || UNITY_EDITOR 24 | return defaultValue; 25 | #endif 26 | try 27 | { 28 | using (AndroidJavaClass unityPlayer = new("com.unity3d.player.UnityPlayer")) 29 | { 30 | AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); 31 | AndroidJavaObject intent = currentActivity.Call("getIntent"); 32 | return intent.Call("getBooleanExtra", key, defaultValue); 33 | } 34 | } 35 | catch (System.Exception e) 36 | { 37 | AirConsoleLogger.LogWarning(() => "Error getting intent extra: " + e); 38 | return defaultValue; 39 | } 40 | } 41 | } 42 | // ReSharper enable RedundantUsingDirective 43 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/AndroidUnityUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7a75ee92f3f047338c60f51df8b5b71f 3 | timeCreated: 1752652799 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using System; 3 | using UnityEngine; 4 | 5 | namespace NDream.AirConsole.Android.Plugin { 6 | internal class GenericUnityPluginCallback : AndroidJavaProxy { 7 | private readonly Action _callback; 8 | 9 | public GenericUnityPluginCallback(Action callback) 10 | : base("com.airconsole.unityandroidlibrary.GenericUnityPluginCallback") { 11 | _callback = callback ?? throw new ArgumentNullException(nameof(callback)); 12 | } 13 | 14 | // Implements onExecute, called in Android natively. 15 | // ReSharper disable once InconsistentNaming 16 | public void onExecute(T value) { 17 | if (_callback != null) { 18 | AirConsoleLogger.LogDevelopment(() => $"GenericUnityPluginCallback executed {value}"); 19 | 20 | _callback.Invoke(value); 21 | } else { 22 | AirConsoleLogger.LogDevelopment(() => "Execution callback is not assigned."); 23 | } 24 | } 25 | } 26 | } 27 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/GenericUnityPluginCallback.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8ac0833e27ba4a20996bae4df99c5422 3 | timeCreated: 1747911884 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/PluginManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 88fc53daa2264dc88139e98d5d91a55a 3 | timeCreated: 1747911986 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/UnityAndroidObjectProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | #if !DISABLE_AIRCONSOLE 4 | 5 | namespace NDream.AirConsole.Android.Plugin { 6 | using UnityEngine; 7 | 8 | internal abstract class UnityAndroidObjectProvider { 9 | // ReSharper disable once MemberCanBePrivate.Global 10 | internal static AndroidJavaObject GetUnityContext() { 11 | if (!AirConsole.IsAndroidRuntime) { 12 | throw new UnityException("UnityAndroidObjectProvider is only supported on Unity Android builds."); 13 | } 14 | 15 | #if UNITY_6000_0_OR_NEWER 16 | return UnityEngine.Android.AndroidApplication.currentContext; 17 | #endif 18 | 19 | AndroidJavaClass unityPlayer = new("com.unity3d.player.UnityPlayer"); 20 | return unityPlayer.GetStatic("currentActivity"); 21 | } 22 | 23 | // ReSharper disable once MemberCanBePrivate.Global 24 | internal static AndroidJavaObject GetUnityActivity() { 25 | if (!AirConsole.IsAndroidRuntime) { 26 | throw new UnityException("UnityAndroidObjectProvider is only supported on Unity Android builds."); 27 | } 28 | 29 | #if UNITY_6000_0_OR_NEWER 30 | return UnityEngine.Android.AndroidApplication.currentActivity; 31 | #endif 32 | 33 | AndroidJavaClass unityPlayer = new("com.unity3d.player.UnityPlayer"); 34 | return unityPlayer.GetStatic("currentActivity"); 35 | } 36 | 37 | // ReSharper disable once MemberCanBePrivate.Global 38 | internal static AndroidJavaObject GetInstanceOfClass(string className) { 39 | AndroidJavaObject result = null; 40 | if (AirConsole.IsAndroidRuntime) { 41 | result = new AndroidJavaObject(className, GetUnityActivity()); 42 | } 43 | 44 | AirConsoleLogger.LogDevelopment(() => 45 | $"UnityAndroidObjectProvider.GetInstanceOfClass({className}) successful: {result != null}"); 46 | 47 | return result; 48 | } 49 | 50 | // ReSharper disable once MemberCanBePrivate.Global 51 | internal static AndroidJavaObject GetInstanceOfClass(string className, params object[] parameters) { 52 | AndroidJavaObject result = null; 53 | if (AirConsole.IsAndroidRuntime) { 54 | IEnumerable parametersList = new List(parameters); 55 | parametersList = parametersList.Prepend(GetUnityActivity()); 56 | result = new AndroidJavaObject(className, parametersList.ToArray()); 57 | } 58 | 59 | AirConsoleLogger.LogDevelopment(() => 60 | $"UnityAndroidObjectProvider.GetInstanceOfClass({className}) successful: {result != null}"); 61 | 62 | return result; 63 | } 64 | } 65 | } 66 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/UnityAndroidObjectProvider.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e690b73de0d4f08a1474e6cd4b5f2b6 3 | timeCreated: 1744707804 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/UnityPluginExecutionCallback.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using System; 3 | using UnityEngine; 4 | 5 | namespace NDream.AirConsole.Android.Plugin { 6 | internal class UnityPluginExecutionCallback : AndroidJavaProxy { 7 | private readonly Action _executionCallback; 8 | 9 | public UnityPluginExecutionCallback(Action executionCallback) 10 | : base("com.airconsole.unityandroidlibrary.UnityPluginExecutionCallback") { 11 | _executionCallback = executionCallback ?? throw new ArgumentNullException(nameof(executionCallback)); 12 | } 13 | 14 | // Implements onExecute, called in Android natively. 15 | // ReSharper disable once InconsistentNaming 16 | public void onExecute() { 17 | if (_executionCallback != null) { 18 | AirConsoleLogger.LogDevelopment(() => $"UnityPluginExecutionCallback executed"); 19 | 20 | _executionCallback.Invoke(); 21 | } else { 22 | AirConsoleLogger.LogDevelopment(() => "UnityPluginExecutionCallback execution callback is not assigned."); 23 | } 24 | } 25 | } 26 | } 27 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/UnityPluginExecutionCallback.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 80b019b6e5394821a95ae9df845932a9 3 | timeCreated: 1747741704 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/UnityPluginStringCallback.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | 3 | // This class is used in AndroidJNI of DataProviderPlugin.cs 4 | // ReSharper disable UnusedMember.Global 5 | // ReSharper disable UnusedType.Global 6 | namespace NDream.AirConsole.Android.Plugin { 7 | using System; 8 | using UnityEngine; 9 | 10 | /// 11 | /// AndroidJNI Callback Class implementation for DataProviderPlugin 12 | /// 13 | internal class UnityPluginStringCallback : AndroidJavaProxy { 14 | private readonly Action _successCallback; 15 | private readonly Action _failureCallback; 16 | 17 | public UnityPluginStringCallback(Action successCallback, Action failureCallback) 18 | : base("com.airconsole.unityandroidlibrary.UnityPluginStringCallback") { 19 | _successCallback = successCallback ?? throw new ArgumentNullException(nameof(successCallback)); 20 | _failureCallback = failureCallback ?? throw new ArgumentNullException(nameof(failureCallback)); 21 | } 22 | 23 | // Implements onSuccess, called in Android natively. 24 | // ReSharper disable once InconsistentNaming 25 | public void onSuccess(string message) { 26 | if (_successCallback != null) { 27 | int length = message.Length; 28 | for (int i = 0; i < length; i += 500) { 29 | int endValue = Math.Min(i + 500, length); 30 | AirConsoleLogger.LogDevelopment(() => 31 | $"UnityPluginStringCallback received message[{i}]: {message.Substring(i, endValue - i)}"); 32 | } 33 | // AirConsoleLogger.LogDevelopment($"UnityPluginStringCallback received message[{message.Length}]: {message}"); 34 | _successCallback.Invoke(message); 35 | } else { 36 | AirConsoleLogger.LogDevelopment(() => "UnityPluginStringCallback success callback is not assigned."); 37 | } 38 | } 39 | 40 | // Implements onFailure, called in Android natively. 41 | // ReSharper disable once InconsistentNaming 42 | public void onFailure(string error) { 43 | if (_failureCallback != null) { 44 | if (Settings.debug.error) { 45 | AirConsoleLogger.LogError(() => $"UnityPluginStringCallback failed with error: {error}"); 46 | } 47 | 48 | _failureCallback.Invoke(error); 49 | } else { 50 | AirConsoleLogger.LogDevelopment(() => "UnityPluginStringCallback failure callback is not assigned."); 51 | } 52 | } 53 | } 54 | } 55 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Plugin/Android/UnityPluginStringCallback.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: afa407c64e9545b7bdba0fb30b3eb136 3 | timeCreated: 1736351451 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8d1c28ca1d2340a6842c3071a927e6f4 3 | timeCreated: 1719320102 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/AndroidRuntimeConfigurator.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | 3 | namespace NDream.AirConsole { 4 | using Android.Plugin; 5 | using UnityEngine; 6 | using Screen = UnityEngine.Device.Screen; 7 | 8 | // Used in platform dependant dependency injection. 9 | // ReSharper disable once UnusedType.Global 10 | internal class AndroidRuntimeConfigurator : IRuntimeConfigurator { 11 | internal AndroidRuntimeConfigurator() { 12 | ApplyRequiredSettings(); 13 | Screen.sleepTimeout = SleepTimeout.NeverSleep; 14 | } 15 | 16 | public void RefreshConfiguration() { 17 | ApplyRequiredSettings(); 18 | } 19 | 20 | private void ApplyRequiredSettings() { 21 | Application.runInBackground = false; 22 | 23 | // To ensure consistent behavior and layout on cars where custom safe areas can be in use, 24 | // we ensure to run in fullscreen for it to be treated correctly. 25 | // In the optimal case we could use _pluginManager.IsAutomotiveDevice() to decide more granularly. 26 | Screen.fullScreen = true; 27 | // Car OEMs can modify some of the standard android behavior so we want to make sure to be vSync aligned. 28 | QualitySettings.vSyncCount = 0; 29 | Application.targetFrameRate = Mathf.CeilToInt((float)Screen.currentResolution.refreshRateRatio.value); 30 | } 31 | } 32 | } 33 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/AndroidRuntimeConfigurator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 745b9b96519d4550ab4203d795772a07 3 | timeCreated: 1720011897 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/EditorRuntimeConfigurator.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | 3 | namespace NDream.AirConsole { 4 | using UnityEngine; 5 | 6 | public class EditorRuntimeConfigurator : IRuntimeConfigurator { 7 | public EditorRuntimeConfigurator() { 8 | ApplyRequiredSettings(); 9 | } 10 | 11 | public void RefreshConfiguration() { 12 | ApplyRequiredSettings(); 13 | } 14 | 15 | private void ApplyRequiredSettings() { 16 | Application.runInBackground = true; 17 | Application.targetFrameRate = 0; 18 | } 19 | } 20 | } 21 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/EditorRuntimeConfigurator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1cc7b0225500494d8cf367561f33f8f0 3 | timeCreated: 1719328688 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/IRuntimeConfigurator.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole { 3 | public interface IRuntimeConfigurator { 4 | /// 5 | /// Refreshes the runtime configuration to match the expected runtime configuration. 6 | /// 7 | void RefreshConfiguration(); 8 | } 9 | } 10 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/IRuntimeConfigurator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1bbbf4bf6de846bcb3e5b862e0d6e90c 3 | timeCreated: 1719319909 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/WebGLRuntimeConfigurator.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | 3 | namespace NDream.AirConsole { 4 | using UnityEngine; 5 | using Screen = UnityEngine.Device.Screen; 6 | 7 | // Used in AirConsole.cs based on #if directives 8 | // ReSharper disable once UnusedType.Global 9 | public class WebGLRuntimeConfigurator : IRuntimeConfigurator { 10 | public WebGLRuntimeConfigurator() { 11 | ApplyRequiredSettings(); 12 | 13 | Screen.sleepTimeout = SleepTimeout.NeverSleep; 14 | } 15 | 16 | public void RefreshConfiguration() { 17 | ApplyRequiredSettings(); 18 | } 19 | 20 | private void ApplyRequiredSettings() { 21 | Application.runInBackground = true; 22 | Screen.fullScreen = true; 23 | Application.targetFrameRate = -1; 24 | } 25 | } 26 | } 27 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/RuntimeConfiguration/WebGLRuntimeConfigurator.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c04e44cf0d804b718cc23888c93e5747 3 | timeCreated: 1719328535 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Settings.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | using UnityEngine; 3 | using System; 4 | 5 | namespace NDream.AirConsole { 6 | public static class Settings { 7 | public static readonly Version RequiredMinimumVersion = new(1, 10, 0); 8 | public const string VERSION = "2.6.1"; 9 | 10 | // ReSharper disable once UnusedMember.Global // Used by AirConsole on Android only 11 | public const string AIRCONSOLE_BASE_URL = "https://www.airconsole.com/"; 12 | public const string AIRCONSOLE_DEV_URL_HTTPS = "https://www.airconsole.com/"; 13 | public const string AIRCONSOLE_DEV_URL_HTTP = "http://http.airconsole.com/"; 14 | 15 | public const string AIRCONSOLE_PROFILE_PICTURE_URL = "https://www.airconsole.com/api/profile-picture?uid="; 16 | public const string WEBSOCKET_PATH = "/api"; 17 | public const int DEFAULT_WEBSERVER_PORT = 7842; 18 | public const int DEFAULT_WEBSOCKET_PORT = 7843; 19 | public static int webServerPort = 7842; 20 | public static int webSocketPort = 7843; 21 | public static DebugLevel debug = new(); 22 | public static readonly string WEBTEMPLATE_PATH; 23 | 24 | private const string TEMPLATE_NAME_2020 = "AirConsole-2020"; 25 | private const string TEMPLATE_NAME_U6 = "AirConsole-U6"; 26 | 27 | public static readonly string[] TEMPLATE_NAMES = { TEMPLATE_NAME_2020, TEMPLATE_NAME_U6 }; 28 | 29 | static Settings() { 30 | string templateName = IsUnity6OrHigher() ? TEMPLATE_NAME_U6 : TEMPLATE_NAME_2020; 31 | WEBTEMPLATE_PATH = $"/WebGLTemplates/{templateName}"; 32 | } 33 | 34 | public static bool IsUnity6OrHigher() => int.Parse(Application.unityVersion.Split('.')[0]) >= 6000; 35 | 36 | public static bool IsUnity2022OrHigher() => int.Parse(Application.unityVersion.Split('.')[0]) >= 2022; 37 | } 38 | } 39 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/Settings.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0d56b6d52294b2f448483fe8560ead25 3 | timeCreated: 1437761027 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/WebViewManager.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole { 3 | using UnityEngine; 4 | using System; 5 | using System.Runtime.CompilerServices; 6 | 7 | public class WebViewManager { 8 | private readonly WebViewObject _webViewObject; 9 | private readonly int _defaultScreenHeight; 10 | 11 | private WebViewState _currentState; 12 | private bool _isSafeAreaActive; 13 | private int _webViewHeight; 14 | 15 | internal enum WebViewState { 16 | Hidden, 17 | TopBar, 18 | FullScreen, 19 | SafeAreaBased 20 | } 21 | 22 | internal WebViewManager(WebViewObject webViewObject, int defaultScreenHeight) { 23 | _webViewObject = webViewObject; 24 | AirConsoleLogger.LogDevelopment(() => "SetMargins(0,0,0,0)"); 25 | _webViewObject.SetMargins(0, 0, 0, 0); 26 | 27 | _defaultScreenHeight = defaultScreenHeight; 28 | } 29 | 30 | internal void SetWebViewHeight(int webViewHeight) { 31 | _webViewHeight = webViewHeight; 32 | UpdateWebView(); 33 | } 34 | 35 | internal void ActivateSafeArea() { 36 | AirConsoleLogger.LogDevelopment(() => "WebViewManager.ActivateSafeArea()"); 37 | 38 | _isSafeAreaActive = true; 39 | _currentState = WebViewState.SafeAreaBased; 40 | UpdateWebView(); 41 | } 42 | 43 | internal void RequestStateTransition(WebViewState newState) { 44 | AirConsoleLogger.LogDevelopment(() => $"WebViewManager.RequestStateTransition: {_currentState} => {newState}"); 45 | 46 | // When the SafeArea has been activated, we do not allow any other state transitions anymore. 47 | // The only thing allowed after this is for the safe area itself to change. 48 | if (_isSafeAreaActive) { 49 | return; 50 | } 51 | 52 | _currentState = newState; 53 | UpdateWebView(); 54 | } 55 | 56 | private void UpdateWebView() { 57 | if (!_webViewObject) { 58 | return; 59 | } 60 | 61 | switch (_currentState) { 62 | case WebViewState.Hidden: 63 | LogMargins(0, 0, 0, _defaultScreenHeight); 64 | _webViewObject.SetMargins(0, 0, 0, _defaultScreenHeight); 65 | break; 66 | case WebViewState.TopBar: 67 | LogMargins(0, 0, 0, _defaultScreenHeight - _webViewHeight); 68 | _webViewObject.SetMargins(0, 0, 0, _defaultScreenHeight - _webViewHeight); 69 | break; 70 | case WebViewState.FullScreen: 71 | case WebViewState.SafeAreaBased: 72 | LogMargins(0, 0, 0, 0); 73 | _webViewObject.SetMargins(0, 0, 0, 0); 74 | break; 75 | default: 76 | throw new ArgumentOutOfRangeException(); 77 | } 78 | 79 | _webViewObject.SetVisibility(_currentState != WebViewState.Hidden && !Application.isEditor); 80 | } 81 | 82 | [MethodImpl(MethodImplOptions.AggressiveInlining)] 83 | private static void LogMargins(int left, int top, int right, int bottom) { 84 | AirConsoleLogger.LogDevelopment(() => $"WebViewManager SetMargins: ({left}, {top}, {right}, {bottom})"); 85 | } 86 | } 87 | } 88 | 89 | #endif -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/WebViewManager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e8fc30e7e4f47b3aa1d1fcca4b110e6 3 | timeCreated: 1728892697 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Runtime/WebsocketListener.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2b10877b34da1724194f7525936498ca 3 | timeCreated: 1437574812 4 | licenseType: Store 5 | MonoImporter: 6 | serializedVersion: 2 7 | defaultReferences: [] 8 | executionOrder: 0 9 | icon: {instanceID: 0} 10 | userData: 11 | assetBundleName: 12 | assetBundleVariant: 13 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/SupportCheck.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e3b87720b9a74cdd9d567d96779e71f2 3 | timeCreated: 1745493928 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.Support", 3 | "rootNamespace": "NDream.AirConsole.Support", 4 | "references": [], 5 | "includePlatforms": [ 6 | "Editor" 7 | ], 8 | "excludePlatforms": [], 9 | "allowUnsafeCode": false, 10 | "overrideReferences": true, 11 | "precompiledReferences": [ 12 | "Newtonsoft.Json.dll", 13 | "websocket-sharp.dll" 14 | ], 15 | "autoReferenced": true, 16 | "defineConstraints": [ 17 | "!UNITY_2022_3_OR_NEWER" 18 | ], 19 | "versionDefines": [], 20 | "noEngineReferences": false 21 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/SupportCheck/AirConsole.SupportCheck.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c23e8ac5e2454a8098a69bdd42b3b49b 3 | timeCreated: 1745493933 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/SupportCheck/UnityVersionNotSupported.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole.Support { 3 | using UnityEditor; 4 | using UnityEngine; 5 | using UnityEditor.Build; 6 | using UnityEditor.Build.Reporting; 7 | 8 | #if !UNITY_2022_3_OR_NEWER 9 | internal class UnityVersionNotSupported : MonoBehaviour, IPreprocessBuildWithReport { 10 | [InitializeOnLoadMethod] 11 | private static void TriggerNotSupportedVersion() { 12 | string message = $"AirConsole requires Unity 2022.3 or newer. Please upgrade the project."; 13 | EditorUtility.DisplayDialog("Not supported", message, "Ok"); 14 | Debug.LogError(message); 15 | } 16 | 17 | private void Awake() { 18 | TriggerNotSupportedVersion(); 19 | } 20 | private void Start() { 21 | EditorApplication.isPlaying = false; 22 | } 23 | 24 | public int callbackOrder { 25 | get => 1; 26 | } 27 | 28 | public void OnPreprocessBuild(BuildReport report) { 29 | throw new BuildFailedException($"AirConsole requires Unity 2022.3 or newer but found {Application.unityVersion}."); 30 | } 31 | } 32 | #endif 33 | } 34 | #endif 35 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/SupportCheck/UnityVersionNotSupported.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6c20aef7b2cd440391b20397d4527598 3 | timeCreated: 1745494001 -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5a2f729e9fffc4d60bf472fdacb02010 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/EditMode.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cede534eeac844129aea1ccb14363750 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.EditMode.Tests", 3 | "rootNamespace": "NDream.AirConsole.EditMode.Tests", 4 | "references": [ 5 | "UnityEngine.TestRunner", 6 | "AirConsole.Runtime" 7 | ], 8 | "includePlatforms": [ 9 | "Android", 10 | "Editor", 11 | "WebGL" 12 | ], 13 | "excludePlatforms": [], 14 | "allowUnsafeCode": false, 15 | "overrideReferences": true, 16 | "precompiledReferences": [ 17 | "nunit.framework.dll", 18 | "Newtonsoft.Json.dll" 19 | ], 20 | "autoReferenced": true, 21 | "defineConstraints": [ 22 | "UNITY_2022_3_OR_NEWER", 23 | "UNITY_INCLUDE_TESTS" 24 | ], 25 | "versionDefines": [], 26 | "noEngineReferences": false 27 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/EditMode/AirConsole.EditMode.Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 788dcb39422b64b61a0be0d05cc5cd2c 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/EditMode/AirConsoleTests.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3dc170b2c53ad42d98ddc697814110f2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38a5a7106ddb74c64840179c946b5132 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.Editor.Tests", 3 | "rootNamespace": "NDream.AirConsole.Editor.Tests", 4 | "references": [ 5 | "UnityEngine.TestRunner", 6 | "UnityEditor.TestRunner", 7 | "AirConsole.Runtime", 8 | "AirConsole.Editor" 9 | ], 10 | "includePlatforms": [ 11 | "Editor" 12 | ], 13 | "excludePlatforms": [], 14 | "allowUnsafeCode": false, 15 | "overrideReferences": true, 16 | "precompiledReferences": [ 17 | "nunit.framework.dll", 18 | "Newtonsoft.Json.dll" 19 | ], 20 | "autoReferenced": false, 21 | "defineConstraints": [ 22 | "UNITY_2022_3_OR_NEWER", 23 | "UNITY_INCLUDE_TESTS" 24 | ], 25 | "versionDefines": [], 26 | "noEngineReferences": false 27 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/Editor/AirConsole.Editor.Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78b10e337a9ef42beae9dd6f37f048be 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/Editor/ProjectDependencyCheckTests.cs: -------------------------------------------------------------------------------- 1 | #if !DISABLE_AIRCONSOLE 2 | namespace NDream.AirConsole.Editor.Tests { 3 | using NUnit.Framework; 4 | using UnityEditor.Build; 5 | using UnityEngine; 6 | using UnityEngine.TestTools; 7 | 8 | public class ProjectDependencyCheckTests { 9 | [TearDown] 10 | public void TearDown() { 11 | ProjectDependencyCheck.UnityVersionProvider = null; 12 | ProjectDependencyCheck.InvokeErrorOrLogOverride = null; 13 | } 14 | 15 | [TestCase("2022.3.62f2")] 16 | [TestCase("2022.3.62f3")] 17 | [TestCase("2022.3.99f1")] 18 | [TestCase("6000.0.99f1")] 19 | [TestCase("6000.1.20f5")] 20 | [TestCase("6000.2.6f2")] 21 | [TestCase("6000.3.0f1")] 22 | [TestCase("6001.0.0f1")] 23 | public void ValidateUnityVersion_PassesExpectedRequiredVersion(string unityVersion) { 24 | bool handlerInvoked = false; 25 | 26 | ProjectDependencyCheck.UnityVersionProvider = () => unityVersion; 27 | ProjectDependencyCheck.InvokeErrorOrLogOverride = (_, _, _) => { handlerInvoked = true; }; 28 | 29 | ProjectDependencyCheck.ValidateUnityVersion(); 30 | 31 | 32 | Assert.That(handlerInvoked, Is.False); 33 | } 34 | 35 | [TestCase("2022.3.61f1", "2022.3.62f2")] 36 | [TestCase("2022.3.62f1", "2022.3.62f2")] 37 | [TestCase("6000.0.57f1", "6000.0.58f2")] 38 | [TestCase("6000.0.58f1", "6000.0.58f2")] 39 | [TestCase("6000.1.16f1", "6000.1.17f1")] 40 | [TestCase("6000.2.5f1", "6000.2.6f2")] 41 | public void ValidateUnityVersion_WhenBelowMinimum_LogsWarning(string unityVersion, string expectedRequired) { 42 | string expectedMessage = $"For security (CVE-2025-59489), AirConsole requires at least Unity {expectedRequired}"; 43 | 44 | ProjectDependencyCheck.UnityVersionProvider = () => unityVersion; 45 | 46 | LogAssert.Expect(LogType.Warning, expectedMessage); 47 | 48 | ProjectDependencyCheck.ValidateUnityVersion(false); 49 | 50 | LogAssert.NoUnexpectedReceived(); 51 | } 52 | 53 | [TestCase("6000.3.0b4")] 54 | public void ValidateUnityVersion_WhenInBeta_ThrowsBuildFailed(string unityVersion) { 55 | ProjectDependencyCheck.UnityVersionProvider = () => unityVersion; 56 | 57 | Assert.Throws(() => ProjectDependencyCheck.ValidateUnityVersion(false), 58 | "UnityEditor.Build.BuildFailedException : No valid Unity Application version found. Format should be ..f"); 59 | } 60 | 61 | [TestCase("2022.3.61f1", "2022.3.62f2")] 62 | [TestCase("2022.3.62f1", "2022.3.62f2")] 63 | [TestCase("6000.0.57f1", "6000.0.58f2")] 64 | [TestCase("6000.0.58f1", "6000.0.58f2")] 65 | [TestCase("6000.1.16f1", "6000.1.17f1")] 66 | [TestCase("6000.2.5f1", "6000.2.6f2")] 67 | public void ValidateUnityVersion_WhenBelowMinimumAndErrorRequested_InvokesErrorHandler(string unityVersion, 68 | string expectedRequired) { 69 | bool handlerInvoked = false; 70 | 71 | ProjectDependencyCheck.UnityVersionProvider = () => unityVersion; 72 | ProjectDependencyCheck.InvokeErrorOrLogOverride = (message, title, shallError) => { 73 | handlerInvoked = true; 74 | Assert.That(shallError, Is.True); 75 | Assert.That(message, Is.EqualTo($"For security (CVE-2025-59489), AirConsole requires at least Unity {expectedRequired}")); 76 | Assert.That(title, Is.EqualTo($"Insecure version {unityVersion}")); 77 | }; 78 | 79 | ProjectDependencyCheck.ValidateUnityVersion(true); 80 | 81 | Assert.That(handlerInvoked, Is.True); 82 | LogAssert.NoUnexpectedReceived(); 83 | } 84 | } 85 | } 86 | #endif 87 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/Editor/ProjectDependencyCheckTests.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a099e71b9f7f4e0f91a1d02767fcbfcb 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/PlayMode.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9ee10c0b213534a99802ab6cd205c976 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AirConsole.PlayMode.Tests", 3 | "rootNamespace": "NDream.AirConsole.PlayMode.Tests", 4 | "references": [ 5 | "UnityEngine.TestRunner", 6 | "AirConsole.Runtime" 7 | ], 8 | "includePlatforms": [], 9 | "excludePlatforms": [], 10 | "allowUnsafeCode": false, 11 | "overrideReferences": true, 12 | "precompiledReferences": [ 13 | "nunit.framework.dll", 14 | "Newtonsoft.Json.dll" 15 | ], 16 | "autoReferenced": false, 17 | "defineConstraints": [ 18 | "UNITY_2022_3_OR_NEWER", 19 | "UNITY_INCLUDE_TESTS" 20 | ], 21 | "versionDefines": [], 22 | "noEngineReferences": false 23 | } -------------------------------------------------------------------------------- /Assets/AirConsole/scripts/Tests/PlayMode/AirConsole.PlayMode.Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a3088e074c3947f3874a606bb54eacc4 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Packager.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 23a7c504dcd8a4c3492d4d930b0273e4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Packager/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8b322324a32a84bea83f848257819111 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Packager/Editor/Packager.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: db5a80f6578ae475da86673f14a9ee51 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7ab9eebe89fab4046b515eb974e6fc16 3 | folderAsset: yes 4 | timeCreated: 1435649412 5 | licenseType: Free 6 | DefaultImporter: 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7ec9666911a6d44a0a0485c8bd9829a9 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/TemplateData.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d53f7b31e2f564e5fbad027a87c0e520 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/TemplateData/loading-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/WebGLTemplates/AirConsole-2020/TemplateData/loading-screen.png -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/TemplateData/loading-screen.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d5696b793203b44dfb24b50df7b58ef2 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/airconsole-settings.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af88984e335c547afaeb9444273d2151 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/airconsole-unity-plugin.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 33d913e4bc33f4477ba094d2520f3670 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/index.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68f3ca333f66e4a7ca4f680522fa1d3f 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/WebGLTemplates/AirConsole-2020/thumbnail.png -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-2020/thumbnail.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 19e4a60af483a4262b3b77decfa17a2d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ed0b2919cafd34c9abb88ef76c9b098b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/TemplateData.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3a8dbc5fe6cc743b4b49f29bc9fe0e58 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/TemplateData/loading-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/WebGLTemplates/AirConsole-U6/TemplateData/loading-screen.png -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/TemplateData/loading-screen.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 92eeddf0b218243b29fca6fb0aa6ac29 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/airconsole-settings.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b63b835fd6ecf40dea8c11e1afe40ec6 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/airconsole-unity-plugin.js.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a16d7320b9af34870a86261e76f12d2e 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/index.html.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cdc39dd093dea4a30b1e891b3940e458 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Assets/WebGLTemplates/AirConsole-U6/thumbnail.png -------------------------------------------------------------------------------- /Assets/WebGLTemplates/AirConsole-U6/thumbnail.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 502ab1cee0d254602937ff45e75bbe3a 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Builds/airconsole-unity-plugin-v2.6.1.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AirConsole/airconsole-unity-plugin/4de46189f1750ddc6749244c47bc43c2f3fc5150/Builds/airconsole-unity-plugin-v2.6.1.unitypackage -------------------------------------------------------------------------------- /Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.airconsole.unity-webview": "https://github.com/airconsole/airconsole-unity-webview.git?path=/dist/package-nofragment#v1.1.5", 4 | "com.unity.ext.nunit": "2.0.5", 5 | "com.unity.ide.rider": "3.0.36", 6 | "com.unity.ide.vscode": "1.2.5", 7 | "com.unity.mobile.android-logcat": "1.4.5", 8 | "com.unity.test-framework": "1.4.4", 9 | "com.unity.textmeshpro": "3.0.9", 10 | "com.unity.ugui": "2.0.0", 11 | "com.unity.modules.androidjni": "1.0.0", 12 | "com.unity.modules.animation": "1.0.0", 13 | "com.unity.modules.assetbundle": "1.0.0", 14 | "com.unity.modules.audio": "1.0.0", 15 | "com.unity.modules.imageconversion": "1.0.0", 16 | "com.unity.modules.imgui": "1.0.0", 17 | "com.unity.modules.jsonserialize": "1.0.0", 18 | "com.unity.modules.particlesystem": "1.0.0", 19 | "com.unity.modules.physics": "1.0.0", 20 | "com.unity.modules.physics2d": "1.0.0", 21 | "com.unity.modules.screencapture": "1.0.0", 22 | "com.unity.modules.tilemap": "1.0.0", 23 | "com.unity.modules.ui": "1.0.0", 24 | "com.unity.modules.uielements": "1.0.0", 25 | "com.unity.modules.unitywebrequest": "1.0.0", 26 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 27 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 28 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 29 | "com.unity.modules.unitywebrequestwww": "1.0.0", 30 | "com.unity.modules.video": "1.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 0 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_DisableAudio: 0 15 | -------------------------------------------------------------------------------- /ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | m_Gravity: {x: 0, y: -9.81000042, z: 0} 7 | m_DefaultMaterial: {fileID: 0} 8 | m_BounceThreshold: 2 9 | m_SleepThreshold: .00499999989 10 | m_DefaultContactOffset: .00999999978 11 | m_SolverIterationCount: 6 12 | m_RaycastsHitTriggers: 1 13 | m_EnableAdaptiveForce: 0 14 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 15 | -------------------------------------------------------------------------------- /ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/AirConsole/examples/basic/basic.unity 10 | guid: be2892f0848650f4fa6714ec6d9100bf 11 | - enabled: 0 12 | path: Assets/AirConsole/examples/platformer/platformer.unity 13 | guid: d1c6c76d1e441496eb198de3564ddb56 14 | m_configObjects: {} 15 | -------------------------------------------------------------------------------- /ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 12 7 | m_SerializationMode: 2 8 | m_LineEndingsForNewScripts: 1 9 | m_DefaultBehaviorMode: 1 10 | m_PrefabRegularEnvironment: {fileID: 0} 11 | m_PrefabUIEnvironment: {fileID: 0} 12 | m_SpritePackerMode: 2 13 | m_SpritePackerCacheSize: 10 14 | m_SpritePackerPaddingPower: 1 15 | m_Bc7TextureCompressor: 0 16 | m_EtcTextureCompressorBehavior: 0 17 | m_EtcTextureFastCompressor: 2 18 | m_EtcTextureNormalCompressor: 2 19 | m_EtcTextureBestCompressor: 5 20 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp;asmref 21 | m_ProjectGenerationRootNamespace: 22 | m_EnableTextureStreamingInEditMode: 1 23 | m_EnableTextureStreamingInPlayMode: 1 24 | m_EnableEditorAsyncCPUTextureLoading: 0 25 | m_AsyncShaderCompilation: 1 26 | m_PrefabModeAllowAutoSave: 1 27 | m_EnterPlayModeOptionsEnabled: 0 28 | m_EnterPlayModeOptions: 3 29 | m_GameObjectNamingDigits: 1 30 | m_GameObjectNamingScheme: 0 31 | m_AssetNamingUsesSpace: 1 32 | m_InspectorUseIMGUIDefaultInspector: 0 33 | m_UseLegacyProbeSampleCount: 1 34 | m_SerializeInlineMappingsOnOneLine: 0 35 | m_DisableCookiesInLightmapper: 1 36 | m_AssetPipelineMode: 1 37 | m_RefreshImportMode: 0 38 | m_CacheServerMode: 0 39 | m_CacheServerEndpoint: 40 | m_CacheServerNamespacePrefix: default 41 | m_CacheServerEnableDownload: 1 42 | m_CacheServerEnableUpload: 1 43 | m_CacheServerEnableAuth: 0 44 | m_CacheServerEnableTls: 0 45 | m_CacheServerValidationMode: 2 46 | m_CacheServerDownloadBatchSize: 128 47 | m_EnableEnlightenBakedGI: 0 48 | -------------------------------------------------------------------------------- /ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0} 38 | - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} 39 | - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} 40 | - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} 41 | - {fileID: 16003, guid: 0000000000000000f000000000000000, type: 0} 42 | m_PreloadedShaders: [] 43 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 44 | type: 0} 45 | m_CustomRenderPipeline: {fileID: 0} 46 | m_TransparencySortMode: 0 47 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 48 | m_DefaultRenderingPath: 1 49 | m_DefaultMobileRenderingPath: 1 50 | m_TierSettings: [] 51 | m_LightmapStripping: 0 52 | m_FogStripping: 0 53 | m_InstancingStripping: 0 54 | m_LightmapKeepPlain: 1 55 | m_LightmapKeepDirCombined: 1 56 | m_LightmapKeepDynamicPlain: 1 57 | m_LightmapKeepDynamicDirCombined: 1 58 | m_LightmapKeepShadowMask: 1 59 | m_LightmapKeepSubtractive: 1 60 | m_FogKeepLinear: 1 61 | m_FogKeepExp: 1 62 | m_FogKeepExp2: 1 63 | m_AlbedoSwatchInfos: [] 64 | m_LightsUseLinearIntensity: 0 65 | m_LightsUseColorTemperature: 0 66 | m_LogWhenShaderIsCompiled: 0 67 | m_AllowEnlightenSupportForUpgradedProject: 1 68 | -------------------------------------------------------------------------------- /ProjectSettings/MemorySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!387306366 &1 4 | MemorySettings: 5 | m_ObjectHideFlags: 0 6 | m_EditorMemorySettings: 7 | m_MainAllocatorBlockSize: -1 8 | m_ThreadAllocatorBlockSize: -1 9 | m_MainGfxBlockSize: -1 10 | m_ThreadGfxBlockSize: -1 11 | m_CacheBlockSize: -1 12 | m_TypetreeBlockSize: -1 13 | m_ProfilerBlockSize: -1 14 | m_ProfilerEditorBlockSize: -1 15 | m_BucketAllocatorGranularity: -1 16 | m_BucketAllocatorBucketsCount: -1 17 | m_BucketAllocatorBlockSize: -1 18 | m_BucketAllocatorBlockCount: -1 19 | m_ProfilerBucketAllocatorGranularity: -1 20 | m_ProfilerBucketAllocatorBucketsCount: -1 21 | m_ProfilerBucketAllocatorBlockSize: -1 22 | m_ProfilerBucketAllocatorBlockCount: -1 23 | m_TempAllocatorSizeMain: -1 24 | m_JobTempAllocatorBlockSize: -1 25 | m_BackgroundJobTempAllocatorBlockSize: -1 26 | m_JobTempAllocatorReducedBlockSize: -1 27 | m_TempAllocatorSizeGIBakingWorker: -1 28 | m_TempAllocatorSizeNavMeshWorker: -1 29 | m_TempAllocatorSizeAudioWorker: -1 30 | m_TempAllocatorSizeCloudWorker: -1 31 | m_TempAllocatorSizeGfx: -1 32 | m_TempAllocatorSizeJobWorker: -1 33 | m_TempAllocatorSizeBackgroundWorker: -1 34 | m_TempAllocatorSizePreloadManager: -1 35 | m_PlatformMemorySettings: {} 36 | -------------------------------------------------------------------------------- /ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshAreas: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | -------------------------------------------------------------------------------- /ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /ProjectSettings/PackageManagerSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &1 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 61 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} 13 | m_Name: 14 | m_EditorClassIdentifier: 15 | m_ScopedRegistriesSettingsExpanded: 1 16 | oneTimeWarningShown: 0 17 | m_Registries: 18 | - m_Id: main 19 | m_Name: 20 | m_Url: https://packages.unity.com 21 | m_Scopes: [] 22 | m_IsDefault: 1 23 | m_UserSelectedRegistryName: 24 | m_UserAddingNewScopedRegistry: 0 25 | m_RegistryInfoDraft: 26 | m_ErrorMessage: 27 | m_Original: 28 | m_Id: 29 | m_Name: 30 | m_Url: 31 | m_Scopes: [] 32 | m_IsDefault: 0 33 | m_Modified: 0 34 | m_Name: 35 | m_Url: 36 | m_Scopes: 37 | - 38 | m_SelectedScopeIndex: 0 39 | -------------------------------------------------------------------------------- /ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | m_Gravity: {x: 0, y: -9.81000042} 7 | m_DefaultMaterial: {fileID: 0} 8 | m_VelocityIterations: 8 9 | m_PositionIterations: 3 10 | m_VelocityThreshold: 1 11 | m_MaxLinearCorrection: .200000003 12 | m_MaxAngularCorrection: 8 13 | m_MaxTranslationSpeed: 100 14 | m_MaxRotationSpeed: 360 15 | m_MinPenetrationForPenalty: .00999999978 16 | m_BaumgarteScale: .200000003 17 | m_BaumgarteTimeOfImpactScale: .75 18 | m_TimeToSleep: .5 19 | m_LinearSleepTolerance: .00999999978 20 | m_AngularSleepTolerance: 2 21 | m_RaycastsHitTriggers: 1 22 | m_RaycastsStartInColliders: 1 23 | m_ChangeStopsCallbacks: 0 24 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 25 | -------------------------------------------------------------------------------- /ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | m_DefaultList: [] 7 | -------------------------------------------------------------------------------- /ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2022.3.62f1 2 | m_EditorVersionWithRevision: 2022.3.62f1 (4af31df58517) 3 | -------------------------------------------------------------------------------- /ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: 7 | - PlatformSphere 8 | layers: 9 | - Default 10 | - TransparentFX 11 | - Ignore Raycast 12 | - 13 | - Water 14 | - UI 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | - 41 | m_SortingLayers: 42 | - name: Default 43 | uniqueID: 0 44 | locked: 0 45 | -------------------------------------------------------------------------------- /ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: .0199999996 7 | Maximum Allowed Timestep: .333333343 8 | m_TimeScale: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_DashboardUrl: https://dashboard.unity3d.com 13 | m_TestInitMode: 0 14 | CrashReportingSettings: 15 | m_EventUrl: https://perf-events.cloud.unity3d.com 16 | m_Enabled: 0 17 | m_LogBufferSize: 10 18 | m_CaptureEditorExceptions: 1 19 | UnityPurchasingSettings: 20 | m_Enabled: 0 21 | m_TestMode: 0 22 | UnityAnalyticsSettings: 23 | m_Enabled: 0 24 | m_TestMode: 0 25 | m_InitializeOnStartup: 1 26 | m_PackageRequiringCoreStatsPresent: 0 27 | UnityAdsSettings: 28 | m_Enabled: 0 29 | m_InitializeOnStartup: 1 30 | m_TestMode: 0 31 | m_IosGameId: 32 | m_AndroidGameId: 33 | m_GameIds: {} 34 | m_GameId: 35 | PerformanceReportingSettings: 36 | m_Enabled: 0 37 | -------------------------------------------------------------------------------- /ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_RenderPipeSettingsPath: 10 | m_FixedTimeStep: 0.016666668 11 | m_MaxDeltaTime: 0.05 12 | -------------------------------------------------------------------------------- /ProjectSettings/VersionControlSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!890905787 &1 4 | VersionControlSettings: 5 | m_ObjectHideFlags: 0 6 | m_Mode: Visible Meta Files 7 | m_CollabEditorSettings: 8 | inProgressEnabled: 1 9 | -------------------------------------------------------------------------------- /ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Info 2 | 3 | The AirConsole-Unity-Plugin is a C# wrapper for the AirConsole Javascript API. 4 | AirConsole provides a simple to use Javascript API for game developers to build their own local multiplayer realtime browser games. 5 | You can find the Javascript API documentation here: 6 | 7 | IMPORTANT: The plugin comes with an embedded webserver / websocket-server for the communication between the AirConsole backend and the Unity-Editor. 8 | You don't need to install any other webserver or services. 9 | 10 | ## Changelog 11 | 12 | Please see [CHANGELOG.md](CHANGELOG.md) for the full changelog. 13 | 14 | ## Upgrading your installation 15 | 16 | The upgrade instructions can be found in 17 | 18 | ## Documentation 19 | 20 | All install instructions and examples are documented in the file "[Documentation_1.7.pdf](./Assets/AirConsole/Documentation_1.7.pdf)" inside this folder. 21 | There are more examples on the website: 22 | 23 | ## Platforms 24 | 25 | AirConsole supports WebGL and AndroidTV as targets. To make use of this plugin, you need to make sure to switch your target to either WebGL or Android. 26 | 27 | ### 1. Android instructions 28 | 29 | #### 1.1 Debugging the Chromium webview in Android Builds 30 | 31 | To be able to connect to the Chrome Webview, launch the Android based AirConsole application using ADB and add the intent extra `webview_debuggable` 32 | 33 | Example: `adb shell am start -n /com.unity3d.player.UnityPlayerActivity --ez webview_debuggable true` 34 | 35 | #### 1.2 Debugging AirConsole Platform Messages in Android Builds 36 | 37 | To have all received platform message payloads logged, launch the Android based AirConsole application using ADB and add the intent extra `log_platform_messages` 38 | 39 | Example: `adb shell am start -n /com.unity3d.player.UnityPlayerActivity --ez log_platform_messages true` 40 | 41 | ## Support 42 | 43 | If you need support, please visit: 44 | --------------------------------------------------------------------------------