Unity2D无数踩坑得到的安卓手机屏幕自适应完美解决方案,这一篇就够了

您所在的位置:网站首页 unity设计分辨率 Unity2D无数踩坑得到的安卓手机屏幕自适应完美解决方案,这一篇就够了

Unity2D无数踩坑得到的安卓手机屏幕自适应完美解决方案,这一篇就够了

2023-09-07 20:45| 来源: 网络整理| 查看: 265

Unity无数踩坑得到的安卓手机屏幕自适应完美解决方案,这一篇就够了(想要解决方案的直接转下链接链接: 解决问题版Unity2D无数安卓手机屏幕自适应.) 首先,说明解决屏幕适配最重要的两点 1解决Canvas内的也就是画布的自适应 2解决摄像机的范围,使游戏内容能够完美显示。 在解决问题之前,为了小白也能不迷糊,这里先说明两个小简单知识点: 一 手机的所谓分辨率,也就是我们说的屏幕尺寸,是指手机的长宽所占的像素是多少,也就是你截图之后图片的长宽,现代的手机一般就是1080*1920,其余多数长在1920以上,因为Unity设计的时候会有初始的分辨率选择,当发布以后到手机上之后如果和Unity的设计分辨率一样,当然是最完美的显示,其他大小都是我们做过自适应处理之后的,所以在项目开始之前,尽量设计成当下多用的,让自适应的处理尽量少做。

下两图第一个是提到的Unity设计初始的分辨率,第二张是手机的分辨率

二,当不做任何调整的情况下,游戏发布后到达手机上的显示效果,想当于我们将unity的设计分辨率调整为手机大小后摄像机显示的效果。也就是说游戏在手机运行只会自动调整大小,UI的布局和摄像机不会自动调整。

现在,进入正题,承接刚开始的说法,这里我们就将两个需要解决的问题分而治之 1解决Canvas内的也就是画布的自适应

一般,为了调整方便,和UI有关系的内容,我们都放到一个Canvas之下,当Unity新建一个Canvas时,Canvas会有以下属性: 对于这个Canvas Scaler,就是控制Canvas下面的所有组件如何自适应,如何缩放,UI缩放模式,如果设计为恒定像素大小,也就是无论如何大小都是固定的像素点,不随手机大小改变,这不是我们想要的,所以我们选择屏幕大小缩放,也就是屏幕越大,UI元素越大,但是具体是什么效果,就取决与匹配,这个匹配的意义就是自适应的方法,这个参考分辨率就填我们的设计分辨率,然后这个匹就会在当前分辨率的高宽比不适合参考分辨率的时候触发,指定用于缩放画布区域的模式,确定缩放是使用宽度或高度作为参考,还是两者之间的混合。以我的理解这个匹配就是说缩放到什么时候为止,如果我们的10801920,手机是10802340,那么如果我们选择宽,结果就是10802340,如果选择高,结果就是8861920,所以我自己的理解就是选择什么,就是在缩放的时候,在保证这个全部显示的情况下,尽量让全部显示,也就是选择宽,横向的组件一定要全显示出来,选择高,竖向的组件一定要全显示出来,最后得到结论:

横版游戏以高度缩放,竖版游戏按宽度缩放

2解决摄像机的范围,使游戏内容能够完美显示。

上面的第一步让所有的UI组件完美显示,当然游戏中还有我们的精灵,以及其他的内容,总之不会全是UI,所以对于剩下部分,如何解决,这就是我自己无数次失败摸索出来的经验了------ 当我们设定了设计分辨率后,摄像机就会完全贴合我们的分辨率,如下图,注意:下图显示的内容没有Canvas的内容,也就是其他的内容。 当我们改变分辨率,也就是相当于在其他手机运行的时候,效果就是这样 我们发现分辨率改变后,摄像机的大小不会再改变了,所以到时候显示的内容就是 这些,可以明显看出来一部分内容丢失了,所以第二个问题我们要努力解决的就是这个问题。 其实我是通过了各种摸索计算才得出了答案,我这里就直接说我的结论:(全篇最重要的部分) 一,当初始分辨率定下时,摄像机以后的大小变化,是在这个比例确定下按比例缩放的,也就是当我们为19201080时,现在的摄像机完全贴合19201080,当新的分辨率长宽比大于1920/1080时,也就是说新的分辨率是长类型的,比如2340*1090,现在我们将2340的长换算成1920,得到的新分辨率的宽为925.7 那么我们想要完美显示,也就是要调整大小使得925.7变成1080 得到算法如下,将下列代码挂到Camera上

12345678910111213141516171819202122232425262728293031323334using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CameraAdapter : MonoBehaviour {     public float PhoneWidth;     public float PhoneHeight=Screen.height;     public float RateOfPhone ;     public float MyWidth = 1080;     public float MyHeight = 1920;     public float RateOfDesine;     public float TSize = 23.65f;     public void FitCamera(Camera camera)     {     PhoneWidth = Screen.width;      PhoneHeight = Screen.height;     RateOfDesine = MyHeight / MyWidth;         RateOfPhone = PhoneHeight / PhoneWidth;         if (RateOfPhone == RateOfDesine)             camera.orthographicSize = TSize;         else if (RateOfPhone > RateOfDesine)             camera.orthographicSize = PhoneHeight * TSize/ MyHeight;               else if(RateOfPhone > RateOfDesine)             camera.orthographicSize = PhoneWidth * TSize / MyWidth;     }     private void Awake()     {        // Screen.SetResolution(1080, 1920, true);                 FitCamera(transform.GetComponent());     } }

这两部做完就完美了 对于手机调试,可以在电脑上下模拟器,如果需要经常调试,则安装软件Unity Remote5

如果我的方法解决了你的问题,不要吝啬一个赞哟,对我是莫大的鼓励哈哈哈


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3