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

(完成) 备份:导出文件,并取一个合理的名字。

整理完菜单顺序后,学习新的知识,解决随着示例增多,可能出现类需要合并的问题。

我们要学习新的知识,试着解决类的合并问题。首先我们来看下要合并的类是什么,在我们的示例中是 TransformSimplify,这个 TransformSimplify 是对 Transform API 的简化,而 Transform 有非常多的 API,那么以后肯定还是会给 TransformSimplify 添加方法的。

而我们的示例是逐个写的,写了一个示例,发现要给 TransformSimplify 添加方法,再回头找 TransformSimplify 类,再更改,这样很不妥。因为如果更改了 TransformSimplify 这个类了,那么对应的此篇专栏的文章就会失效了。

所以如果有一个方法能够解决这个问题就好了,在每个示例就可以为已经有的类添加方法,而不去动用以前的示例代码,等学习到一个阶段后进行整理的时候统一进行合并。有这样的东西嘛?

有的,C# 有提供 partial 关键字。

它可以让一个类在多个文件中实现。那我们就试着给 TransformSimplify 和 GameObject 应用 partial 关键字吧。

TransformSimplify 在第五个示例,增加后的代码如下:

#if UNITY_EDITOR using UnityEngine; using UnityEditor; #endif namespace QFramework { public partial 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>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; } } }

GameObjectSimplify 在第七个示例,增加 partial 之后代码如下:

#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public partial 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); } } }

增加之后呢,我们添加一个示例,用来验证 partial 关键字是否正确的。

新的示例呢,是第八个示例。

在示例中,分别为 TransformSimplify 和 GameObjectSimplify 增加一个方法。

代码如下:

#if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; namespace QFramework { public partial class TransformSimplify { public static void AddChild(Transform transform, Transform childTrans) { childTrans.SetParent(transform); } } public partial class GameObjectSimplify { public static void Show(Transform transform) { transform.gameObject.SetActive(true); } public static void Hide(Transform transform) { transform.gameObject.SetActive(false); } } public class PartialKeyword { #if UNITY_EDITOR [MenuItem("QFramework/8.partial 关键字", false, 9)] #endif private static void MenuClicked() { var parentTrans = new GameObject("Parent").transform; var childTrans = new GameObject("Child").transform; TransformSimplify.AddChild(parentTrans,childTrans); GameObjectSimplify.Hide(childTrans); } } }

执行的结果如下:

006tNc79gy1fzfrjlpmilj30hw06c0sz.jpg

菜单如下:

006tNc79gy1fzfrjojvenj308f05bgnc.jpg

目录如下:

006tNc79gy1fzfrjrd85tj30gm0agjss.jpg

学了这个 partial 之后,我们的合并问题就解决了。

这样我们整理阶段要做的事情就做完了。

要做的事情:

(完成) 备份:导出文件,并取一个合理的名字。

(完成) 整理完菜单顺序后,学习新的知识,解决随着示例增多,可能出现类需要合并的问题。

partial 和 public 的合理使用以及整理完结篇

在上一篇中,我们学习了新的知识 partial 关键字,那么我们什么时候该用 partial 呢?

我们简单分析一下:

像 GameObjectSimplify 和 TransformSimplify 都是很可能增长的类,所以自然就要用到了。

而我们的 CommonUtil、EditorUtil、MathUtil 也是非常大的一个范畴,随着时间,要加的东西也会越来越多的。所以这两个类也要加上 partial。

而 ResolutionCheck 类,目前只完成了比较常用的分辨率,未来随着时间肯定会遇到比较奇葩的分辨率的。所以 ResolutionCheck 也要加上 partial。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwyww.html