第九个示例

目前代码如下:

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

第九个示例没有太大的问题,不管是类名还是目录名、菜单名、代码文件名,以及它每个方法所在的类都没有太大的问题。

所以只需要更改菜单的顺序就好了。

更改后,MenuItem 代码如下:

#if UNITY_EDITOR
[MenuItem("QFramework/4.屏幕宽高比判断", false, 4)]
#endif
private static void MenuClicked()
{
Debug.Log(IsPadResolution() ? "是 Pad 分辨率" : "不是 Pad 分辨率");
Debug.Log(IsPhoneResolution() ? "是 Phone 分辨率" : "不是 Phone 分辨率");
Debug.Log(IsiPhoneXResolution() ? "是 iPhone X 分辨率" : "不是 iPhone X 分辨率");
}

目录结构如下:

第九个示例很容易整理成第四个示例。

第十个示例

目前代码如下:

#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; TransformSimplify.SetLocalPosX(transform, 5.0f);
TransformSimplify.SetLocalPosY(transform, 5.0f);
TransformSimplify.SetLocalPosZ(transform, 5.0f);
}
}
}

做如下更改:

  • MenuItem:10.Transform 赋值优化 => 5.Transform 赋值优化 并加上顺序号 5。
  • 目录名:10.Transform 赋值优化 = > 5.Transform 赋值优化。
  • MenuItem 方法名:GenerateUnityPackageName => MenuClicked

这样就可以了。

更改后菜单如下:

目录结构如下:

到目前为止还比较顺利。但是呢代码中使用的 TransformSimplify 这个类,是在别的文件中定义的。

而目前的这个示例仅仅有 MenuItem 方法,没有 TransformSimplify 实现代码,为什么会这样呢?

因为我们在整理之前,对 Transform 的 API 做了两次简化,而我们的示例是一个一个独立写的,所以第一次简化的时候写了一个示例并且创建了一个 Transform 的简化类,第二次也一样也创建了一个 Transform 的简化类,而这两个类在之后整理的时候被合并成一个 Transform 的简化类了。

这种情况,我们以后还会遇到的,可能有无数个 Transform 的简化方法。而我们的写示例的顺序,就是一个示例一个示例地写,这样写的好处就是初学者友好,也比较容易收集知识点。但是随着示例越写越多,会产生一些问题,比如代码重复实现,类需要合并等等,以目前我们的实力来说是没法搞定的,我们要学习新的东西。但是新的东西,要在我们排序完菜单顺序比较好一些。

这个问题我们先记下来。

要做的事情:

  • (完成) 备份:导出文件,并取一个合理的名字。
  • 整理完菜单顺序后,学习新的知识,解决随着示例增多可能出现类需要合并的问题。

OK,我们接着整理第十一个示例

第十一个示例

代码如下


using System;
#if UNITY_EDITOR
using UnityEditor;
#endif using UnityEngine; namespace QFramework
{
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;
}
} public class TransformIdentity : MonoBehaviour
{ #if UNITY_EDITOR
[MenuItem("QFramework/11.Transform 归一化")]
#endif
private static void MenuClicked()
{
var transform = new GameObject("transform").transform; TransformSimplify.Identity(transform);
}
}
}

这个示例可以和第五个示例进行合并。

合并后的代码如下:

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
#endif namespace QFramework
{
public class TransformSimplify
{
#if UNITY_EDITOR
[MenuItem("QFramework/5.Transform API 简化/1.赋值优化", false, 5)]
#endif
private static void MenuClicked1()
{
var transform = new GameObject("transform").transform; SetLocalPosX(transform, 5.0f);
SetLocalPosY(transform, 5.0f);
SetLocalPosZ(transform, 5.0f);
} #if UNITY_EDITOR
[MenuItem("QFramework/5.Transform API 简化/2.重置", false 6)]
#endif
private static void MenuClicked2()
{
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;
} 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;
}
}
}

菜单如下:

目录及文件如下:

而第一个示例的文件夹已经被笔者删除了。

第十二个示例

代码如下

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

整理步骤:

  1. 合并 MathUtil 类和 PercentFunction 类为 MathUtil.cs
  2. 菜单的标题 从 12 改成 6,而顺序改成 7 (因为 5 和 6 已经被第五个示例用了)。
  3. 目录名改成与菜单名一致。

更改后代码如下:

#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;
} #if UNITY_EDITOR
[MenuItem("QFramework/6.概率函数", false, 7)]
#endif
private static void MenuClicked()
{
Debug.Log(Percent(50));
}
}
}

目录结构如下

菜单如下

OK,第十二个示例整理完了

第十三个示例

代码如下:

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

整理步骤:

  1. 类合并为 GameObjectSimplify
  2. 菜单顺序更改以及标题顺序更改
  3. 代码文件名和目录更改

整理之后代码如下:

#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);
} #if UNITY_EDITOR
[MenuItem("QFramework/7.GameObejct API 简化/显示、隐藏简化", false, 8)]
#endif
private static void MenuClicked()
{
var gameObject = new GameObject(); Hide(gameObject);
}
}
}

编译之后,菜单栏编程如下:

目录结构如下:

到此,全部的菜单顺序整理完了。

小结:

遗留问题:

  • (完成) 第八个示例与之前的示例代码重复,功能重复。
  • (完成) 方法所在类的命名有问题。
  • (完成) 菜单栏显示顺序问题(new)。
  • (完成) 弃用的代码警告

遗留问题终于全部解决了,我们的整理阶段也要接近尾声了。

今天就写到这,我们下一篇再见,拜拜~ 。

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

更多内容

最新文章

  1. Smart Tag——DevExpress WPF初探
  2. C++变参数模板和...操作符
  3. ISO8583报文协议
  4. xhtml 和 html 的区别
  5. iOS学习之判断是否有网络的方法
  6. Trie树:POJ2001
  7. JavaScript备忘录(2)——闭包
  8. JQuery思维导图
  9. NetSetMan IP地址切换工具
  10. 如何在win下编译thunderbird
  11. Android开发ScrollView上下左右滑动事件冲突整理一(根据事件)
  12. Socket的协议地址属性
  13. leetcode83,删除有序链表中的重复元素
  14. html5中cookie介绍,封装以及添加,获取,删除
  15. core dump 配置
  16. dubbo面试问题
  17. LeetCode--026--删除排序数组中的重复项
  18. nginx只允许移动端访问( 判断拦截pc浏览器访问)
  19. HDU4825 Xor Sum (01Trie)
  20. 动态规划--电路布线(circuit layout)

热门文章

  1. Spring ioc xml 实例化bean 自己实现
  2. -bash: syntax error near unexpected token `newline&#39;问题解决
  3. python学习第四节 迭代器 生成器
  4. SVN同步代码问题集锦
  5. 性能测试环境搭建:XAMPP1.8+PHPwind9.0安装教程
  6. 字符串学习笔记(一)---- String介绍
  7. 监听窗口大小变化,改变画面大小-[Three.js]-[onResize]
  8. 搭建脚手架cli2.x环境
  9. Windows上安装Docker
  10. DevEco Toolkit使用指南--平行视界