美文网首页Unity游戏框架搭建
Unity 游戏框架搭建 2019 (三十一) 类的提取

Unity 游戏框架搭建 2019 (三十一) 类的提取

作者: 凉鞋的笔记 | 来源:发表于2020-04-18 21:40 被阅读0次

    在上一篇,我们搞定了调整菜单栏顺序的关键问题。

    我们今天把剩下的顺序调整完,我们先整理第八个示例。

    第八个示例

    我们先看第八个示例的第一个 MenuItem,代码如下。

            [MenuItem("QFramework/8.总结之前的方法/1.获取文件名")]
            private static void MenuClicked()
            {
                Debug.Log(Exporter.GenerateUnityPackageName());
            }
    

    其中的 “QFramework/8.总结之前的方法/1.获取文件名” 我们可以改成 “QFramework/2.总结之前的方法/1.获取文件名”

    不过这个总结的功能,对我们来说没有太大的作用了,因为我们在刚刚完成的第一个示例中,已经包含了 Exporter.GenerateUnityPackageName 的使用方式了。

    第一个示例代码如下:

    using System.IO;
    
    #if UNITY_EDITOR
    using UnityEditor;
    #endif
    
    using UnityEngine;
    
    namespace QFramework
    {
        public class CustomShortCut : MonoBehaviour
        {
    #if UNITY_EDITOR
            [MenuItem("QFramework/1.导出 UnityPackage %e",false,-10)]
            private static void MenuClicked()
            {
                var generatePackageName = Exporter.GenerateUnityPackageName();
                
                EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage");
                
                EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
            }
    #endif
        }
    }
    

    所以,我们删掉第八个示例中的这个 MenuItem 方法就好了。

    再看第二个 MenuItem 代码如下:

            
            [MenuItem("QFramework/8.总结之前的方法/2.复制文本到剪切板")]
            private static void MenuClicked2()
            {
                CommonUtil.CopyText("要复制的关键字");
            }
    

    代码中 CommonUtil.CopyText 的使用,没有在第一个示例中包含。所以这个 MenuItem 要保留。

    这个呢可以留着,我们对这段代码的 MenuItem 进行改进。改进后代码如下所示:

            [MenuItem("QFramework/2.复制文本到剪切板",false,2)]
            private static void MenuClicked2()
            {
                CommonUtil.CopyText("要复制的关键字");
            }
    

    代码中,菜单从二级变成,一级了,并且了添加了顺序,是第二个顺序。
    等代码编译后,菜单展示如下所示:



    顺序是正确的。但是第一个示例和第二个示例之间有一个分割线。为什么会有这个分割线呢?

    有可能是因为 第一个示例,设置的顺序是 -10,而第二个示例设置的顺序是 2,中间相差太多了。
    那么我们把第一个示例的顺序改成 1 试试。改动后的代码就不展示了。
    改动之后,菜单如下图所示:



    横线消失了,不过这个分割线算是意外的收获,我们可以好好利用它,比如用它来好好划分我们的菜单结构,题外话就先不说了。我们接着往下整理。

    第二个示例的菜单整理好了,文件夹要怎么整理?现在这个示例的 MenuItem 方法在第八个示例中的 PreviousFuntions 里,而 示例的核心 API: CommonUtil.CopyText 也在第八个示例的文件里。

    其实很简单,把这两部分提取出来就好了,将 MenuItem 示例方法写到 CommonUtil.CopyText 方法实现位置的上方。然后把 CommonUtil 这个类,单独从 PreviousFuctions.cs 这个文件中提取出来,放到第二个示例中。

    代码如下:
    CommonUtil.cs

    using UnityEngine;
    
    namespace QFramework
    {
        public class CommonUtil
        {
    #if UNITY_EDITOR
            [UnityEditor.MenuItem("QFramework/2.复制文本到剪切板", false, 2)]
    #endif
            private static void MenuClicked2()
            {
                CopyText("要复制的关键字");
            }
    
            public static void CopyText(string text)
            {
                GUIUtility.systemCopyBuffer = text;
            }
        }
    }
    

    代码所在文件目录如下图:



    那么第二个示例就算整理完成了。

    单独把 CommonUtil 放在一个文件夹里的原因是与”方法所在类名”这个问题是一样的。都是方法所在的类不合理,所以会导致方法所在的类名比较奇怪。同理,类所在的文件夹不合理,所以导致菜单也不合理。因为我们的菜单的名字,和文件目录的名字是一一对应的。

    虽然没有在文章中强调这一点,但是,笔者呢始终贯彻这个这个规则。

    今天的内容就到这里,下一篇再见,拜拜~

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

    更多内容

    相关文章

      网友评论

        本文标题:Unity 游戏框架搭建 2019 (三十一) 类的提取

        本文链接:https://www.haomeiwen.com/subject/xnmvmhtx.html