Unity3d UGUI基于屏幕尺寸的自适应

作者: 重装机霸 | 来源:发表于2015-12-10 09:04 被阅读8274次

    现有的自适应方法,通常都是基于屏幕的分辨率。分辨率越高的设备上,UI显示的越小。这就造成了一些5寸左右的手机分辨率比ipad等平板设备还要高。UI在平板上显示太大。但是在高分辨率手机上显示太小。

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using System.Collections.Generic;
    
    public class ScreenAdaptive : MonoBehaviour
    {
        public List<CanvasScaler> UICanvas;
    
        private float diagonalInches;
        private float width;
        private float height;
        private float ypotinousa;
        private float dpi;
    
        private float screenScale;
        void screenInch()
        {
            dpi = Screen.dpi;
            if (dpi < 25 || dpi > 1000)
            {
                dpi = 150;
            }
            width = Screen.width * Screen.width;
            height = Screen.height * Screen.height;
            ypotinousa = width + height;
            ypotinousa = Mathf.Sqrt(ypotinousa);
            diagonalInches = ypotinousa / Screen.dpi;
        }
    
        void Awake()
        {
            if (Application.isMobilePlatform)
            {
                screenInch();
                //以五寸屏幕作为标准
                screenScale = diagonalInches / 5f;
    
                for (int i = 0; i < UICanvas.Count; i++)
                {
                    Vector2 _size = UICanvas[i].referenceResolution;
                    UICanvas[i].referenceResolution = _size * screenScale;
                    if (UICanvas[i].GetComponent<Canvas>().renderMode == RenderMode.ScreenSpaceCamera)
                    {
                        UICanvas[i].GetComponent<Canvas>().worldCamera.orthographicSize *= screenScale;
                    }
                }
            }
        }
    }
    

    以上脚本为基于屏幕物理尺寸自适应UI的一种方法。通过计算屏幕的DPI获取到屏幕的实际尺寸。然后根据一个标准的尺寸对UI的分辨率进行相对应的缩放。
    可以改进的地方就是对于大屏幕或者小屏幕进行缩放的限制。避免类似ipad pro这类的设备上,UI有小的离谱。
    配合这个脚本使用的同时。UI也需要用到锚点,进行初步的自适应,不然会造成UI的错乱。

    相关文章

      网友评论

        本文标题:Unity3d UGUI基于屏幕尺寸的自适应

        本文链接:https://www.haomeiwen.com/subject/bpqyhttx.html