而改成如下图所示的 3:4 时
则输出结果为:竖屏。 计算分辨率
现在我们知道了屏幕的方向,这样我们就比较好判断当前屏幕的宽高比了。
代码如下:
由于 Screen.width 和 Screen.height 都是 int 类型的。相除可能结果也只能是整数,所以要在前边转成 float 类型。
以上的这个代码不管是将 Game 视图的分辨率设置成 4:3 还是 3:4,输出的宽高比值都是 1.333 左右,而这个宽高比值的小数点第三位都有一点浮动。所以要在判断是否是 Pad 分辨率的时候要把这个浮动范围考虑进去。
计算是否是 Pad 分辨率有了以上准备,我们的 Pad 分辨率就比较容易写了。
代码如下
#if UNITY_EDITOR [MenuItem("QFramework/9.屏幕宽高比判断")] #endif private static void MenuClicked() { var aspect = Screen.width > Screen.height ? (float) Screen.width / Screen.height : (float) Screen.height / Screen.width; var isPad = aspect > (4.0f / 3 - 0.05) && aspect < (4.0f / 3 + 0.05); Debug.Log(isPad ? "是 Pad 分辨率" : "不是 Pad 分辨率"); }关于 aspect 的计算做了一步简化,核心代码还是下边的代码,不过也比较好理解了,不多讲了。
代码的执行结果为:Game 视图的宽高比设置成 4:3 或者 3:4 的时候,则输出“是 Pad 分辨率”。如果设置成其他的则输出“不是 Pad 分辨率”。
基本上的一个功能我们算是实现完了,而且测试的结果也是正确的。
提取成方法。我们来观察一下这几行代码
#if UNITY_EDITOR [MenuItem("QFramework/9.屏幕宽高比判断")] #endif private static void MenuClicked() { var aspect = Screen.width > Screen.height ? (float) Screen.width / Screen.height : (float) Screen.height / Screen.width; var isPad = aspect > (4.0f / 3 - 0.05) && aspect < (4.0f / 3 + 0.05); Debug.Log(isPad ? "是 Pad 分辨率" : "不是 Pad 分辨率"); }其实可以提取成两个方法。一个是计算 aspect (宽高比)的,一个是判断是否是 Pad 分辨率的。
提取后的代码如下:
using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif namespace QFramework { public class ResolutionCheck { #if UNITY_EDITOR [MenuItem("QFramework/9.屏幕宽高比判断")] #endif private static void MenuClicked() { Debug.Log(IsPadResolution() ? "是 Pad 分辨率" : "不是 Pad 分辨率"); } /// <summary> /// 获取屏幕宽高比 /// </summary> /// <returns></returns> public static float GetAspectRatio() { return Screen.width > Screen.height ? (float) Screen.width / Screen.height : (float) Screen.height / Screen.width; } public static bool IsPadResolution() { var aspect = GetAspectRatio(); return aspect > (4.0f / 3 - 0.05) && aspect < (4.0f / 3 + 0.05); } } }代码执行的结果与之前的一致。
第九个示例(二)在上一篇文章中,我们完成了 Pad 设备分辨率的判断。我们今天把剩下的其他分辨率都搞定。
16:9 手机分辨率大部分手机是 16 : 9 的。
所以代码如下。
相信扩展机型的规律大家应该掌握了,这里就不多说了。
完整示例代码如下:
using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif namespace QFramework { public class ResolutionCheck { #if UNITY_EDITOR [MenuItem("QFramework/9.屏幕宽高比判断")] #endif private static void MenuClicked() { Debug.Log(IsPadResolution() ? "是 Pad 分辨率" : "不是 Pad 分辨率"); Debug.Log(IsPhoneResolution() ? "是 Phone 分辨率" : "不是 Phone 分辨率"); Debug.Log(IsiPhoneXResolution() ? "是 iPhone X 分辨率" : "不是 iPhone X 分辨率"); } /// <summary> /// 获取屏幕宽高比 /// </summary> /// <returns></returns> public static float GetAspectRatio() { return Screen.width > Screen.height ? (float) Screen.width / Screen.height : (float) Screen.height / Screen.width; } /// <summary> /// 是否是 Pad 分辨率 4 : 3 /// </summary> /// <returns></returns> public static bool IsPadResolution() { var aspect = GetAspectRatio(); return aspect > 4.0f / 3 - 0.05 && aspect < 4.0f / 3 + 0.05; } /// <summary> /// 是否是手机分辨率 16:9 /// </summary> /// <returns></returns> public static bool IsPhoneResolution() { var aspect = GetAspectRatio(); return aspect > 16.0f / 9 - 0.05 && aspect < 16.0f / 9 + 0.05; } /// <summary> /// 是否是iPhone X 分辨率 2436:1125 /// </summary> /// <returns></returns> public static bool IsiPhoneXResolution() { var aspect = GetAspectRatio(); return aspect > 2436.0f / 1125 - 0.05 && aspect < 2436.0f / 1125 + 0.05; } } }到此呢,我们可以进行一次导出了。
今天内容就这些。
转载请注明地址:凉鞋的笔记:liangxiegame.com
更多内容
QFramework 地址:https://github.com/liangxiegame/QFramework
QQ 交流群:623597263
Unity 进阶小班:
主要训练内容:
框架搭建训练(第一年)
跟着案例学 Shader(第一年)
副业的孵化(第二年、第三年)
权益、授课形式等具体详情请查看《小班产品手册》:https://liangxiegame.com/master/intro