昨天呢我们把第八个示例整理完了。整理之后学习了类的第一作用:方法的集合,还有 Obselete 这个 API。并且在进行整理的时候贯彻了我们新的约定和规则:先确保功能有效,再去做变更和删除。

今天我们在往下接着整理第九个示例

第九个示例

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;
}
}
}

我们先看些类的名字,ResolutionCheck,这个没有太大的问题。所以这个示例就留着。

第十个示例

#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine; namespace QFramework
{
public class TransformLocalPosImprovements
{
#if UNITY_EDITOR
[MenuItem("QFramework/10.Transform 赋值优化")]
#endif
private static void GenerateUnityPackageName()
{
var transform = new GameObject("transform").transform; SetLocalPosX(transform, 5.0f);
SetLocalPosY(transform, 5.0f);
SetLocalPosZ(transform, 5.0f);
} public static void SetLocalPosX(Transform transform, float x)
{
var localPos = transform.localPosition;
localPos.x = x;
transform.localPosition = localPos;
} public static void SetLocalPosY(Transform transform, float y)
{
var localPos = transform.localPosition;
localPos.y = y;
transform.localPosition = localPos;
} public static void SetLocalPosZ(Transform transform, float z)
{
var localPos = transform.localPosition;
localPos.z = z;
transform.localPosition = localPos;
} public static void SetLocalPosXY(Transform transform, float x, float y)
{
var localPos = transform.localPosition;
localPos.x = x;
localPos.y = y;
transform.localPosition = localPos;
} public static void SetLocalPosXZ(Transform transform, float x, float z)
{
var localPos = transform.localPosition;
localPos.x = x;
localPos.z = z;
transform.localPosition = localPos;
} public static void SetLocalPosYZ(Transform transform, float y, float z)
{
var localPos = transform.localPosition;
localPos.y = y;
localPos.z = z;
transform.localPosition = localPos;
}
}
}

同样也是没啥太大的问题,也留着。

第十一个示例

#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine; namespace QFramework
{
public class TransformIdentity : MonoBehaviour
{ #if UNITY_EDITOR
[MenuItem("QFramework/11.Transform 归一化")]
#endif
private static void MenuClicked()
{
var transform = new GameObject("transform").transform; Identity(transform);
} /// <summary>
/// 重置操作
/// </summary>
/// <param name="trans">Trans.</param>
public static void Identity(Transform trans)
{
trans.localPosition = Vector3.zero;
trans.localScale = Vector3.one;
trans.localRotation = Quaternion.identity;
}
}
}

类的名字没有问题,但是到这里笔者发现这个类里的方法是可以和 第十个示例: TransformLocalPosImprovements 放在一个类里的,因为都是对 Transform API 的简化。

类名字可以叫 TransformSimplify。

类的定义如下:

	public class TransformSimplify
{
/// <summary>
/// 重置操作
/// </summary>
/// <param name="trans">Trans.</param>
public static void Identity(Transform trans)
{
trans.localPosition = Vector3.zero;
trans.localScale = Vector3.one;
trans.localRotation = Quaternion.identity;
} public static void SetLocalPosX(Transform transform, float x)
{
var localPos = transform.localPosition;
localPos.x = x;
transform.localPosition = localPos;
} public static void SetLocalPosY(Transform transform, float y)
{
var localPos = transform.localPosition;
localPos.y = y;
transform.localPosition = localPos;
} public static void SetLocalPosZ(Transform transform, float z)
{
var localPos = transform.localPosition;
localPos.z = z;
transform.localPosition = localPos;
} public static void SetLocalPosXY(Transform transform, float x, float y)
{
var localPos = transform.localPosition;
localPos.x = x;
localPos.y = y;
transform.localPosition = localPos;
} public static void SetLocalPosXZ(Transform transform, float x, float z)
{
var localPos = transform.localPosition;
localPos.x = x;
localPos.z = z;
transform.localPosition = localPos;
} public static void SetLocalPosYZ(Transform transform, float y, float z)
{
var localPos = transform.localPosition;
localPos.y = y;
localPos.z = z;
transform.localPosition = localPos;
}
}

很简单,就是把上一个示例与这个示例的方法都复制到了这里,类的定义位置在 TransformIdentity 的上方。

接下来,我们要把原来的实现方法做中转,再加上 Obselete 属性。这步就不展示了,内容与上一篇文章一致,

第十二个示例

#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine; namespace QFramework
{
public class PercentFunction : MonoBehaviour
{
#if UNITY_EDITOR
[MenuItem("QFramework/12.概率函数")]
#endif
private static void MenuClicked()
{
Debug.Log(Percent(50));
} /// <summary>
/// 输入百分比返回是否命中概率
/// </summary>
public static bool Percent(int percent)
{
return Random.Range (0, 100) <= percent;
}
}
}

这个代码的类名就有点问题了,叫做 PercentFunction,Percent 呢,是数学计算,所以我们把这个方法归到 MathUtil 这个类里。

代码如下:

using System;

#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine;
using Random = UnityEngine.Random; namespace QFramework
{
public class MathUtil
{
/// <summary>
/// 输入百分比返回是否命中概率
/// </summary>
public static bool Percent(int percent)
{
return Random.Range (0, 100) <= percent;
}
}
public class PercentFunction : MonoBehaviour
{
#if UNITY_EDITOR
[MenuItem("QFramework/12.概率函数")]
#endif
private static void MenuClicked()
{
Debug.Log(MathUtil.Percent(50));
} /// <summary>
/// 输入百分比返回是否命中概率
/// </summary>
[Obsolete("方法已弃用,请使用 MathUtil.Percent")]
public static bool Percent(int percent)
{
return MathUtil.Percent(percent);
}
}
}

第十三个示例

#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine; namespace QFramework
{
public class GameObejctActiveImprovements
{
#if UNITY_EDITOR
[MenuItem("QFramework/13.GameObejct 的显示、隐藏简化")]
#endif
private static void MenuClicked()
{
var gameObject = new GameObject(); Hide(gameObject);
} public static void Show(GameObject gameObj)
{
gameObj.SetActive(true);
} public static void Hide(GameObject gameObj)
{
gameObj.SetActive(false);
}
}
}

与 TransformSimplify 一样,我们也定义一个 GameObjectSimplify。

整理后代码如下:

#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine; namespace QFramework
{
public class GameObjectSimplify
{
public static void Show(GameObject gameObj)
{
gameObj.SetActive(true);
} public static void Hide(GameObject gameObj)
{
gameObj.SetActive(false);
}
} public class GameObejctActiveImprovements
{
#if UNITY_EDITOR
[MenuItem("QFramework/13.GameObejct 的显示、隐藏简化")]
#endif
private static void MenuClicked()
{
var gameObject = new GameObject(); GameObjectSimplify.Hide(gameObject);
} [Obsolete("方法已启用,请使用 GameObjectSimplify.Show")]
public static void Show(GameObject gameObj)
{
GameObjectSimplify.Show(gameObj);
} [Obsolete("方法已启用,请使用 GameObjectSimplify.Hide")]
public static void Hide(GameObject gameObj)
{
GameObjectSimplify.Hide(gameObj);
}
}
}

到此呢,我们十三个示例都做了一轮整理。整理之后又要回头去解决一些整理过程中发现的问题。这部分内容我们在下一篇开始解决。

今天的内容就这些,拜拜~

转载请注明地址:凉鞋的笔记:liangxiegame.com

更多内容

Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结的更多相关文章

  1. Unity 游戏框架搭建 2019 (四十六) 简易消息机制 & 集成到 MonoBehaviourSimplify 里

    在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题. 脚本之间访问其实有更好的方式. 我们先分下脚本访问脚本的几种形式. 第一种,A GameObject 是 B GameObject 的 ...

  2. Unity 游戏框架搭建 2019 (五十六/五十七) 需求分析-架构中最重要的一环&从 EmptyGO 到 Manager Of Managers

    我们的项目开始立项的时候,最常见的一个情况就是:几个人的小团队,一开始什么也不做,就开始写代码,验证逻辑,游戏就开始写起来了.而公司的一些所谓的领导层面一开始就把游戏定义为我们要做一个大作.这个事情本 ...

  3. Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性

    在上一篇我们整理到了第七个示例,我们今天再接着往下整理.我们来看第八个示例: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; ...

  4. Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因

    我们在整理阶段解决了一些意外的问题.但是这些问题仅仅只是被解决而已,我们并没有去思考过这些问题是为什么产生的?以及在以后我们如何去避免这些问题的产生? 方法所在类的命名问题,最后我们通过方法分类解决了 ...

  5. Unity 游戏框架搭建 2019 (三十六~三十八) partial与public

    在上一篇,我们把菜单的顺序从头到尾整理了一遍.在整理菜单顺序的过程中,记录了一个要做的事情. 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 整理完菜单顺序后,学习新的知识,解决随着示例 ...

  6. Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例

    第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示 ...

  7. Unity 游戏框架搭建 2019 (二十一、二十二) 第三章简介&整理前的准备

    整理前的准备 到目前为止,我们积攒了很多示例了,并且每个示例也都贯彻了最的约定和规则. 在上一篇的小结也说了一个比较新的东西:编程体验优化. 在之前我们还积攒了一个问题:代码重复问题. 我们可是忍住整 ...

  8. Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除

    在前两篇,我们把所有的示例重头到尾整理了一遍. 当前的状态如下: 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 遗留问题: (完成) 第八个示例与之前的示例代码重复,功能重复. (完成 ...

  9. Unity 游戏框架搭建 2019 (三十二、三十三) 类的命名 & 代码文件命名

    昨天我们完成了第八个示例的第二个 MenuItem 菜单顺序的调整. 我们今天再往下接着调整. 我们来看下接下来的 MenuItem 代码如下: [MenuItem("QFramework/ ...

随机推荐

  1. 爬虫使用中间代理人 fiddl...,charles,mitmproxy 设置

    一般的设置在网上就能找到(端口,ip啥的) 但是难点是关于安卓手机证书 在网上找到的几种方法,一种是在app源码中添加设置让手机app同意你下载安装的证书,另一种则是root_adb 安装证书 但是太 ...

  2. Keil MDK版兼容51系列单片机开发环境安装

    一.安装源文件下载 百度网盘链接:https://pan.baidu.com/s/18tnjFgVat4q2hDSh7LAD8A 提取码:    2295 二.安装及破解 1.安装51的编辑器 双击安 ...

  3. linux中的源码安装

    前两天自己在笔记本上装了CentOs版本的虚拟机,接着要装Python3,是源码安装的挺费劲,个人总结了一些源码安装的经验,今天在这里给大家分享一下. 1. 首先准备环境,安装必要的编译工具gcc g ...

  4. Python包的应用

    包的简介 你们听到的包,可不是女同胞疯狂喜欢的那个包,我们来看看这个是啥包 官方解释: ? 1 2 3 4 5 6 7 8 9 Packages are a way of structuring Py ...

  5. 微信小程序修改request合法域名不生效及解决方法

    在小程序微信公众平台修改后请求,依然在console中显示修改前的域名. 解决:在小程序开发者工具中点击“详情”后点击“域名信息”,就会自动刷新

  6. 作为一位Vue工程师,这些开发技巧你都会吗?

    路由参数解耦 一般在组件内使用路由参数,大多数人会这样做: export default { methods: { getParamsId() { return this.$route.params. ...

  7. JDK14发布了,快来看看有什么新特性吧

    序言

  8. WTM 3.5发布,VUE来了!

    千呼万唤中,WTM的Vue前后端分离版本终于和大家见面了,我曾经跟群里1000多位用户保证过Vue版本会在春天到来,吹过的牛逼总算是圆上了. WTM一如既往地追求最大程度提高生产效率,所以内置的代码生 ...

  9. upload-labs学习笔记

    项目地址:https://github.com/c0ny1/upload-labs   运行环境 操作系统:windows.Linux php版本:推荐5.2.17(其他版本可能会导致部分Pass无法 ...

  10. 动态规划-划分数组的最大和 Split Array Largest Sum

    2019-10-14 22:13:18 问题描述: 问题求解: 解法一:动态规划 这种数组划分的题目基本都可以使用dp来解决,核心的思路就是先维护低的划分,再在中间找分割点加入新的划分. public ...