├── package.json.meta ├── LICENSE.meta ├── README.md.meta ├── DeviceTypeDetectorLibrary.jslib ├── DeviceTypeDetector.cs.meta ├── DeviceTypeDetectorLibrary.jslib.meta ├── package.json ├── LICENSE ├── DeviceTypeDetector.cs └── README.md /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e7422947e874fd4b896b1b71c6f0ccb 3 | timeCreated: 1725133063 -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 770aaf24a9e5b401ea1d63d25f9c007d 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9395a7f5a0a5b4cacb69a08312e373b4 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /DeviceTypeDetectorLibrary.jslib: -------------------------------------------------------------------------------- 1 | mergeInto(LibraryManager.library, { 2 | IsMobile: function () { 3 | return ('ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 || /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)); 4 | } 5 | }); -------------------------------------------------------------------------------- /DeviceTypeDetector.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da0290fac033c4f8284ece0ce9813bb2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /DeviceTypeDetectorLibrary.jslib.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a360b02527ce5494c808fa6f75045891 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 | - first: 20 | Editor: Editor 21 | second: 22 | enabled: 0 23 | settings: 24 | DefaultValueInitialized: true 25 | - first: 26 | WebGL: WebGL 27 | second: 28 | enabled: 1 29 | settings: {} 30 | userData: 31 | assetBundleName: 32 | assetBundleVariant: 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unity-webgl-device-type-detector", 3 | "version": "1.1.2", 4 | "description": "A Unity script to detect if a WebGL application is running on a mobile device or PC, with support for Unity's Device Simulator.", 5 | "author": "RimuruDev", 6 | "license": "MIT", 7 | "main": "DeviceTypeDetector.cs", 8 | "scripts": {}, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/RimuruDev/Unity-WEBGL-DeviceTypeDetector.git" 12 | }, 13 | "keywords": [ 14 | "unity", 15 | "webgl", 16 | "device detector", 17 | "mobile", 18 | "pc", 19 | "device simulation", 20 | "editor", 21 | "rimuru-dev", 22 | "rimurudev" 23 | ], 24 | "bugs": { 25 | "email": "rimuru.dev@gmail.com", 26 | "url": "https://github.com/RimuruDev/Unity-WEBGL-DeviceTypeDetector/issues" 27 | }, 28 | "homepage": "https://github.com/RimuruDev/Unity-WEBGL-DeviceTypeDetector", 29 | "dependencies": {} 30 | } 31 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Rimuru 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /DeviceTypeDetector.cs: -------------------------------------------------------------------------------- 1 | // **************************************************************** // 2 | // 3 | // Copyright (c) RimuruDev. All rights reserved. 4 | // Contact me: 5 | // - Gmail: rimuru.dev@gmail.com 6 | // - LinkedIn: https://www.linkedin.com/in/rimuru/ 7 | // - GitHub: https://github.com/RimuruDev 8 | // 9 | // **************************************************************** // 10 | 11 | using System; 12 | using System.Linq; 13 | using UnityEngine; 14 | 15 | #if UNITY_EDITOR 16 | using UnityEditor; 17 | #endif 18 | 19 | namespace RimuruDev 20 | { 21 | [Serializable] 22 | public enum CurrentDeviceType : byte 23 | { 24 | None = 0, 25 | WebPC = 2, 26 | WebMobile = 4, 27 | } 28 | 29 | [SelectionBase] 30 | [DisallowMultipleComponent] 31 | [DefaultExecutionOrder(-100)] 32 | [HelpURL("https://github.com/RimuruDev/Unity-WEBGL-DeviceTypeDetector")] 33 | public sealed class DeviceTypeDetector : MonoBehaviour 34 | { 35 | #if UNITY_EDITOR 36 | private const string WINDOW_TITLE_SIMULATOR = "Simulator"; 37 | private const string WINDOW_TITLE_SIMULATOR_DEVICE = "Simulator Device"; 38 | #endif 39 | [field: SerializeField] public CurrentDeviceType CurrentDeviceType { get; private set; } 40 | 41 | #if UNITY_2020_1_OR_NEWER 42 | [SerializeField] private bool enableDeviceSimulator = true; 43 | #endif 44 | 45 | private void Awake() 46 | { 47 | #if UNITY_EDITOR 48 | if (IsSimulatorWindowOpen() && enableDeviceSimulator) 49 | { 50 | Debug.Log("WEBGL -> Mobile"); 51 | CurrentDeviceType = CurrentDeviceType.WebMobile; 52 | } 53 | else 54 | { 55 | Debug.Log("WEBGL -> PC"); 56 | CurrentDeviceType = CurrentDeviceType.WebPC; 57 | } 58 | #else 59 | if (IsMobile()) 60 | { 61 | Debug.Log("WEBGL -> Mobile"); 62 | CurrentDeviceType = CurrentDeviceType.WebMobile; 63 | } 64 | else 65 | { 66 | Debug.Log("WEBGL -> PC"); 67 | CurrentDeviceType = CurrentDeviceType.WebPC; 68 | } 69 | #endif 70 | } 71 | 72 | #if UNITY_EDITOR 73 | private static bool IsSimulatorWindowOpen() => 74 | Resources 75 | .FindObjectsOfTypeAll() 76 | .Any(window => window.titleContent.text 77 | is WINDOW_TITLE_SIMULATOR 78 | or WINDOW_TITLE_SIMULATOR_DEVICE); 79 | #endif 80 | 81 | #if !UNITY_EDITOR 82 | [System.Runtime.InteropServices.DllImport("__Internal")] 83 | public static extern bool IsMobile(); 84 | #endif 85 | } 86 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DeviceTypeDetector 2 | 3 | **DeviceTypeDetector** — это Unity-скрипт, который позволяет разработчикам веб-игр на Unity определять, запускается ли приложение на мобильном устройстве или на ПК. Он также поддерживает работу с симулятором устройств в редакторе Unity, что позволяет тестировать мобильные версии игр прямо в редакторе. 4 | 5 | ## Особенности 6 | 7 | - Определение типа устройства (мобильное или ПК) при запуске приложения для WebGL. 8 | - Поддержка симулятора устройств в редакторе Unity. 9 | - Легко интегрируется в проекты Unity для WebGL. 10 | - Автоматическая настройка типа устройства (мобильное или ПК) в зависимости от состояния окон в редакторе или в билд-версии с использованием `.jslib`. 11 | 12 | ## Установка 13 | 14 | 1. Скачайте последнюю версию [релиза](https://github.com/RimuruDev/Unity-WEBGL-DeviceTypeDetector/releases) и распакуйте содержимое в любую папку вашего проекта Unity. 15 | 2. Откройте вашу сцену в Unity и добавьте компонент `DeviceTypeDetector` на любой GameObject в сцене. Рекомендуется добавлять его на объект, который инициализируется при загрузке сцены, например, на объект `GameManager`. 16 | 17 | ## Использование 18 | 19 | ### Пример использования 20 | 21 | 1. Добавьте компонент `DeviceTypeDetector` на любой GameObject в вашей сцене. Например, создайте пустой GameObject и назовите его `DeviceManager`, затем добавьте скрипт `DeviceTypeDetector` на этот объект. 22 | 23 | ```csharp 24 | private void Start() 25 | { 26 | if (GetComponent().CurrentDeviceType == CurrentDeviceType.WebMobile) 27 | { 28 | // Логика для мобильных устройств 29 | } 30 | else 31 | { 32 | // Логика для ПК 33 | } 34 | } 35 | ``` 36 | 37 | 2. Скрипт автоматически определит тип устройства при запуске и выведет соответствующее сообщение в консоль: 38 | - `WEBGL -> Mobile` для мобильных устройств 39 | - `WEBGL -> PC` для ПК 40 | 41 | ## Преимущества 42 | 43 | - **Легкость тестирования**: С поддержкой симулятора устройств в редакторе Unity вы можете тестировать мобильные версии ваших игр без необходимости развертывания на реальные устройства. 44 | - **Гибкость**: Скрипт позволяет легко переключаться между логикой для мобильных устройств и ПК, что особенно полезно для веб-игр, которые должны работать на различных платформах. 45 | - **Простота интеграции**: Добавление скрипта в ваш проект требует минимальных усилий, и он легко интегрируется в существующую инфраструктуру проекта. 46 | 47 | ## Поддержка 48 | 49 | Если у вас возникли вопросы или проблемы с использованием `DeviceTypeDetector`, пожалуйста, создайте issue на [GitHub репозитории](https://github.com/RimuruDev/Unity-WEBGL-DeviceTypeDetector). 50 | 51 | ## Лицензия 52 | 53 | Этот проект лицензирован под лицензией MIT. Подробности см. в файле [LICENSE](LICENSE). --------------------------------------------------------------------------------