在上一篇,我们把菜单的顺序从头到尾整理了一遍。在整理菜单顺序的过程中,记录了一个要做的事情。
要做的事情:
- (完成) 备份:导出文件,并取一个合理的名字。
- 整理完菜单顺序后,学习新的知识,解决随着示例增多,可能出现类需要合并的问题。
我们要学习新的知识,试着解决类的合并问题。首先我们来看下要合并的类是什么,在我们的示例中是 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 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;
}
}
}
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);
}
}
}
执行的结果如下:
菜单如下:
目录如下:
学了这个 partial 之后,我们的合并问题就解决了。
这样我们整理阶段要做的事情就做完了。
要做的事情:
- (完成) 备份:导出文件,并取一个合理的名字。
- (完成) 整理完菜单顺序后,学习新的知识,解决随着示例增多,可能出现类需要合并的问题。
今天的内容就这些,我们下一篇再见,拜拜~
转载请注明地址:凉鞋的笔记:liangxiegame.com
更多内容
-
QFramework 地址:https://github.com/liangxiegame/QFramework
-
QQ 交流群:623597263
-
Unity 进阶小班:
- 主要训练内容:
- 框架搭建训练(第一年)
- 跟着案例学 Shader(第一年)
- 副业的孵化(第二年、第三年)
- 权益、授课形式等具体详情请查看《小班产品手册》:https://liangxiegame.com/master/intro
- 主要训练内容:
-
关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。