Unity技术分享unity3D技术分享Unity游戏开发入门

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

2015-12-10  本文已影响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的错乱。

上一篇下一篇

猜你喜欢

热点阅读