示例#1
0
        internal static float GetScreenDiagonalInches(IUnityUIAgent agent)
        {
            var screenWidth  = agent.ScreenWidth / Screen.dpi;
            var screenHeight = agent.ScreenHeight / Screen.dpi;

            return(Mathf.Sqrt(Mathf.Pow(screenWidth, 2) + Mathf.Pow(screenHeight, 2)));
        }
示例#2
0
        public static InterfaceType GetInterfaceTypeStatic(IUnityUIAgent agent)
        {
            var target = EditorUserBuildSettings.activeBuildTarget;

            switch (target)
            {
            case BuildTarget.iOS:
            case BuildTarget.Android:
                return(UnityUI.IsTablet(agent) ? InterfaceType.Tablet : InterfaceType.Phone);

            case BuildTarget.StandaloneOSX:
            case BuildTarget.StandaloneWindows:
            case BuildTarget.StandaloneWindows64:
            case BuildTarget.StandaloneLinux64:
                return(InterfaceType.Desktop);

            case BuildTarget.XboxOne:
            case BuildTarget.GameCoreXboxOne:
            case BuildTarget.PS4:
            case BuildTarget.PS5:
            case BuildTarget.Switch:
                return(InterfaceType.Console);

            case BuildTarget.WebGL:
                return(InterfaceType.Web);

            case BuildTarget.tvOS:
                return(InterfaceType.TV);

            default:
                throw new ArgumentOutOfRangeException($"Unknown build type. Target: {target}");
            }
        }
示例#3
0
        /*
         * Public.
         */

        internal static bool IsTablet(IUnityUIAgent agent)
        {
            var diagonal = GetScreenDiagonalInches(agent);
            var aspect   = GetScreenAspectRatio(agent);

            if (aspect >= 1.77)
            {
                return(diagonal >= 7F);
            }
            return(diagonal >= 5F);
        }
示例#4
0
        static UnityUI()
        {
            if (!Application.isPlaying)
            {
                return;
            }

            _agent = InitializeAgent(UnityUIAgentRuntime.Create(GetRoot()));

            CurrentInterfaceType = _agent.GetInterfaceType();
        }
示例#5
0
        private static void DisposeAgent()
        {
            if (_agent == null)
            {
                return;
            }

            _agent.OnSomethingChanged -= OnSomethingChangedHandler;
            _agent.Dispose();
            _agent = null;
        }
示例#6
0
        private static void OnPlayModeChanged(UnityEditor.PlayModeStateChange state)
        {
            switch (state)
            {
            case UnityEditor.PlayModeStateChange.EnteredPlayMode:
                DisposeAgent();
                _agent = InitializeAgent(UnityUIAgentEditorRuntime.Create(GetRoot()));
                CurrentInterfaceType = _agent.GetInterfaceType();
                break;

            case UnityEditor.PlayModeStateChange.EnteredEditMode:
                DisposeAgent();
                _agent = InitializeAgent(UnityUIAgentEditor.Create());
                CurrentInterfaceType = _agent.GetInterfaceType();
                break;
            }
        }
示例#7
0
        /*
         * Private.
         */

        private static IUnityUIAgent InitializeAgent(IUnityUIAgent agent)
        {
            agent.OnSomethingChanged += OnSomethingChangedHandler;
            return(agent);
        }
示例#8
0
 internal static float GetScreenAspectRatio(IUnityUIAgent agent)
 {
     return(Mathf.Max((float)agent.ScreenWidth, agent.ScreenHeight) / Mathf.Min(agent.ScreenWidth, agent.ScreenHeight));
 }
示例#9
0
        private static void Initialize()
        {
            _agent = InitializeAgent(UnityUIAgentEditor.Create());

            UnityEditor.EditorApplication.playModeStateChanged += OnPlayModeChanged;
        }