首页 >Unity3D频道 >【UGUI研究院】 > UGUI研究院之iPhoneX自适应分辨率(三十一)
2018
03-20

UGUI研究院之iPhoneX自适应分辨率(三十一)

最近把游戏的iPhoneX自适应做完了,并且已经过了审。我的做法是每个界面的最上层都是一个横纵Stretch自动拉伸的,检测当发现是iPhoneX时,打开界面代码中自动设置 Left Top Right Bottom 为44.

Snip20180320_3

由于我们用的是Unity5.5.4,并没有方法来判断是否是iPhoneX 所以就用分辨率判断了。

		/// <summary>
		/// 自适应iPhoneX
		/// </summary>
		/// <param name="canvas">Canvas.</param>
		private void OpeniPhoneX(Canvas canvas){
		
			#if UNITY_IPHONE 
			if (Screen.width == 2436 && Screen.height == 1125){
				RectTransform rectTransform = (canvas.transform as RectTransform);
				rectTransform.offsetMin = new Vector2(44f,0f);
				rectTransform.offsetMax = new Vector2(-44f,0f);
			}
			#endif
		}

接着就是界面最下面可能有些需要全屏的图,这样就不全屏了,所以需要给全屏图挂一个脚本。一般做全屏图有两种方式,一个是自动拉伸的,另一个就是AspectTatioFitter带裁切的全屏。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 自适应iPhoneX背景
/// </summary>
public class UIRectLayout : MonoBehaviour 
{
	#if UNITY_IPHONE
	void Awake () {
		if (Screen.width == 2436 && Screen.height == 1125) {
			AspectRatioFitter aspectRatioFitter = GetComponent<AspectRatioFitter> ();
			if (aspectRatioFitter) {
				aspectRatioFitter.aspectRatio = 2.165333f;
			} else {
				RectTransform rectTransform = transform as RectTransform;
				if (rectTransform.anchorMax.x == 1f) {
					rectTransform.offsetMin = new Vector2(rectTransform.offsetMin.x - 44f,rectTransform.offsetMin.y);
					rectTransform.offsetMax = new Vector2(rectTransform.offsetMax.x +44f,rectTransform.offsetMax.y);
				}
			}
		}
	}
	#endif
}

OK

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

UGUI研究院之iPhoneX自适应分辨率(三十一)》有 16 条评论

  1. JJ说:

    安卓的全面屏mono是怎么做的适配的?主要针对小米、华为、oppo和vivo四个厂商的。
    不同厂商的分辨率不一致,notch高度也不一致 很头痛

  2. zhourui说:

    momo,最近开始用unity做Android游戏开发,发现很多东西在Android上都没法正常使用,比如查找一个目录下的所有文件,还有加载StreamingAssets下的一个txt, jar:file:///data/app/com.XXX.XXX-32swj-wqw4NcKiP9LEPfdg==/base.apk!/assets/Config/GameFloatConfig.txt这是txt的完整路径,但是无论如何都无法打开这个文件,这两个问题已经困扰我很多天了,一直没有查到有用的资料能解决问题的

  3. gaa说:

    我是改 ios screen大小的 不用改项目代码。。

  4. 说:

    是AspectRatioFitter

  5. Fly说:

    NGUI做法差不多
    但是你是真的这样子写死?现在全面屏越来越多

    • YY说:

      可以贴一下iPhone X 自适应分辨率 NGUI的做法吗?谢谢。

    • 雨松MOMO说:

      android最近我还在调研, 听几个朋友说需要做一个配置表。。 不过我看android 9 已经支持获取 安全区域的接口, 这块你们有经验吗?

      • 李振说:

        所以雨松大大的安卓适配有想法吗?现在不进行适配打出来的包装在刘海屏安卓手机上默认左右两条黑边,其实挺方便的,但是如果想要达到iPhoneX的效果,我这里查到的是android O版本的需要调用手机厂商给的接口。。。感觉好多啊,而且一个一个还得现查。。。。。

      • wzhcoimg说:

        其实很简单的 不用区分那么多的 因为水滴屏幕 刘海屏幕 全面屏幕 各种都要考虑 那么就一刀切就行 判断屏幕的宽高比例 符合1:1.7或者1.8 具体我忘记多少了 一定能适配

  6. long说:

    44 怎么来的?ios 文档好像没说多少

  7. Mmmmm83777说:

    哈哈,我也是这么搞的,也已过审

留下一个回复

你的email不会被公开。 必填项已用 * 标注。