Пример #1
0
    void OnGUI()
    {
        scrowPos = GUILayout.BeginScrollView(scrowPos, GUILayout.Width(position.width), GUILayout.Height(position.height));

        EditorGUI.BeginChangeCheck();

        // 设置标题语(用途:错行)
        EditorGUILayout.HelpBox("木叶飞舞之处,火亦生生不息", MessageType.Info, true);
        whichOneSelect = GUI.Toolbar(new Rect(5, 5, _topInfoType.Length * 70, 37), whichOneSelect, _topInfoType);

        switch (whichOneSelect)
        {
        case 0:
            #region 关键部位

            #region 一:克隆关键部位

            GUILayout.Label("一:克隆关键部位", TitleStyle());
            GUILayout.Space(3);

            // 默认间隔
            SelfBuWei.Instance().ModelSpace = SelfBuWei.Instance().GeneralSpace;
            GUILayout.Label("A:选择关键部位间隔", SetGuiStyle(Color.gray, 14));

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            // 指定间隔的值
            if (GUILayout.Button("1:正常颗粒间隔值=0.8"))
            {
                SelfBuWei.Instance().IsClickChangeSpace = false;
            }
            else if (GUILayout.Button("2:中颗粒间隔值=1.6"))
            {
                SelfBuWei.Instance().IsClickChangeSpace = true;
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------


            // ------------ 二:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("提示:当前关键部位间隔的值是", SetGuiStyle(Color.black, 14));
            SelfBuWei.Instance().ModelSpace = SelfBuWei.Instance().IsClickChangeSpace ? SelfBuWei.Instance().MediumSpace : SelfBuWei.Instance().GeneralSpace;
            GUILayout.TextField(SelfBuWei.Instance().ModelSpace + "");
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 二:结束垂直画盒子 ------------

            GUILayout.Label("B:选择克隆关键部位方式", SetGuiStyle(Color.gray, 14));

            // ------------ 三:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            // 指定间隔的值
            if (GUILayout.Button("1:单行克隆"))
            {
                SelfBuWei.Instance().IsMoreLine   = false;
                SelfBuWei.Instance().ShowCloneWay = "单行克隆";
            }
            else if (GUILayout.Button("2:多行克隆"))
            {
                SelfBuWei.Instance().IsMoreLine   = true;
                SelfBuWei.Instance().ShowCloneWay = "多行克隆";
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 三:结束垂直画盒子 ------------

            // ------------ 四:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("提示:当前的克隆方式为", SetGuiStyle(Color.black, 14));
            GUILayout.TextField(SelfBuWei.Instance().ShowCloneWay);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 四:结束垂直画盒子 ------------

            // ------------ 五:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            GUILayout.Label("沿着坐标轴 正 / 负 方向克隆多少个(不含自身)", SetGuiStyle(Color.red, 14));
            GUILayout.Space(5);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("x 轴正方向", SetGuiStyle(Color.black, 14));
            SelfBuWei.Instance().CloneNumByAxisX = int.Parse(GUILayout.TextField(SelfBuWei.Instance().CloneNumByAxisX.ToString()));
            GUILayout.Space(50);
            GUILayout.Label("z 轴正方向", SetGuiStyle(Color.black, 14));
            SelfBuWei.Instance().CloneNumByAxisZ = int.Parse(GUILayout.TextField(SelfBuWei.Instance().CloneNumByAxisZ.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(5);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("x 轴负方向", SetGuiStyle(Color.black, 14));
            SelfBuWei.Instance().CloneNumByAxisXFu = int.Parse(GUILayout.TextField(SelfBuWei.Instance().CloneNumByAxisXFu.ToString()));
            GUILayout.Space(50);
            GUILayout.Label("z 轴负方向", SetGuiStyle(Color.black, 14));
            SelfBuWei.Instance().CloneNumByAxisZFu = int.Parse(GUILayout.TextField(SelfBuWei.Instance().CloneNumByAxisZFu.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 五:结束垂直画盒子 ------------

            if (GUILayout.Button("开始克隆关键部位"))
            {
                SelfBuWei.Instance().CloneBuWeiOneByOne();
            }

            // ------------ 六:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("注:可以手动改变关键部位名称下标的值", SetGuiStyle(Color.black, 14));
            CommonFun.CurrentIndexNum = int.Parse(GUILayout.TextField(CommonFun.CurrentIndexNum.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            //------------ 六:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);     //设置上下间隔

            #region 二:特殊部位坐标的计算(+-0.4类型)

            GUILayout.Label("二:特殊部位坐标的计算", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            //第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("x轴"))
            {
                SelfBuWei.Instance().IsClickX      = true;
                SelfBuWei.Instance().IsClickZ      = false;
                SelfBuWei.Instance().ShowClickAxis = "x轴";
            }
            else if (GUILayout.Button("z轴"))
            {
                SelfBuWei.Instance().IsClickZ      = true;
                SelfBuWei.Instance().IsClickX      = false;
                SelfBuWei.Instance().ShowClickAxis = "z轴";
            }

            if (GUILayout.Button("+0.4"))
            {
                SelfBuWei.Instance().AddValueNum    = true;
                SelfBuWei.Instance().ReduceValueNum = false;
                SelfBuWei.Instance().ShowValueNum   = "+0.4";
            }
            else if (GUILayout.Button("-0.4"))
            {
                SelfBuWei.Instance().ReduceValueNum = true;
                SelfBuWei.Instance().AddValueNum    = false;
                SelfBuWei.Instance().ShowValueNum   = "-0.4";
            }
            if (GUILayout.Button("都减0.4"))
            {
                SelfBuWei.Instance().SubtractAllValue();
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(5);

            // 第二组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.TextField("当前操作方式:" + SelfBuWei.Instance().ShowClickAxis + "    " + SelfBuWei.Instance().ShowValueNum);
            EditorGUILayout.EndVertical();
            // 第二组垂直排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            //------------ 一:结束垂直画盒子 ------------

            if (GUILayout.Button("点击设定新坐标"))
            {
                SelfBuWei.Instance().SpecialAxis();
            }

            #endregion
            GUILayout.Space(8);

            #region  :对称克隆关键部位

            GUILayout.Label("三:对称克隆关键部位", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            //第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            if (GUILayout.Button("对称克隆关键部位"))
            {
                SelfBuWei.Instance().SymmetryCloneBuWei();
            }
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 四:生成默认关键部位、Box

            GUILayout.Label("四:生成空物体、Normal Box", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:GameObject"))
            {
                SelfBuWei.Instance().CreateDefaultObj();
            }
            if (GUILayout.Button("2:Normal Box"))
            {
                SelfBuWei.Instance().CreateDefaultNormalBox();
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 测试按钮

            GUILayout.Label("测试按钮", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            if (GUILayout.Button("测试按钮"))
            {
                JustTest.Instance().JustTestBtn();
            }
            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        case 1:
            #region 模型相关

            #region 前提

            #region 前提一:选择颗粒大类

            GUILayout.Label("前提一:选择颗粒大类", TitleStyle());
            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();

            // 设置首写字母按钮
            SelfModel.Instance().IsOpenGranuleToggle = EditorGUILayout.Toggle("点击选择颗粒种类 → → → ", SelfModel.Instance().IsOpenGranuleToggle);
            if (SelfModel.Instance().IsOpenGranuleToggle)
            {
                // 每次点击该 Toggle 按钮时都让ShowGranuleType为空
                CommonFun.ShowGranuleType = string.Empty;
                SelfModel.Instance().SetTypeBtn();
            }
            // 是否需要记住颗粒路径
            SelfModel.Instance().IsRememberGranuleType = EditorGUILayout.Toggle("记住颗粒大类", SelfModel.Instance().IsRememberGranuleType);
            if (SelfModel.Instance().IsRememberGranuleType)
            {
                // 记住颗粒大类前确保名字不为空
                if (Equals(CommonFun.ShowGranuleType, string.Empty))
                {
                    WindowTips("当前颗粒大类为空,无需记住!!!");
                    SelfModel.Instance().IsRememberGranuleType = false;
                    return;
                }
                // 存储颗粒大类名称
                PlayerPrefs.SetString("颗粒大类名称", CommonFun.ShowGranuleType);
            }

            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第二组垂直排版开始
            EditorGUILayout.BeginVertical();
            if (SelfModel.Instance().ResultList.Count > 1)
            {
                // 第三组水平排版开始
                EditorGUILayout.BeginHorizontal();
                SelfModel.Instance().SetGranuleName();
                EditorGUILayout.EndHorizontal();
                // 第三组水平排版结束
            }
            // 颗粒大类有值就清除数据
            if (CommonFun.ShowGranuleType != string.Empty)
            {
                SelfModel.Instance().ClearGranuleData();
                SelfModel.Instance().IsOpenGranuleToggle = false;
            }
            GUILayout.Label("1、当前颗粒类别", SetGuiStyle(Color.black, 14));
            CommonFun.ShowGranuleType = PlayerPrefs.HasKey("颗粒大类名称") ? GUILayout.TextField(PlayerPrefs.GetString("颗粒大类名称")) : GUILayout.TextField(CommonFun.ShowGranuleType);
            EditorGUILayout.EndVertical();
            // 第二组垂直排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 前提二:指定模型外部路径

            GUILayout.Label("前提二:指定模型外部路径", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("1、外部模型路径", SetGuiStyle(Color.black, 14));
            // SelfModel.Instance().IsRememberOutModelPath = EditorGUILayout.Toggle("记住模型路径", SelfModel.Instance().IsRememberOutModelPath);

            SelfModel.Instance().ModelFolderPath = PlayerPrefs.HasKey("外部模型路径") ?
                                                   GUILayout.TextField(PlayerPrefs.GetString("外部模型路径")): GUILayout.TextField(SelfModel.Instance().ModelFolderPath);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:记住模型路径"))
            {
                SelfModel.Instance().IsRememberOutModelPath = true;
                // 记住模型路径前确保路径不为空
                if (Equals(SelfModel.Instance().ModelFolderPath, string.Empty))
                {
                    WindowTips("当前路径为空,无需记住!!!");
                    SelfModel.Instance().IsRememberOutModelPath = false;
                    return;
                }
                // 存储颗粒大类名称
                PlayerPrefs.SetString("外部模型路径", SelfModel.Instance().ModelFolderPath);
            }
            if (GUILayout.Button("2:取消记住路径"))
            {
                if (PlayerPrefs.HasKey("外部模型路径"))
                {
                    PlayerPrefs.DeleteKey("外部模型路径");
                }
            }
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束

            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 前提三:给一个默认的操作方式

            // 给一个默认的操作方式
            SelfModel.Instance().ShowWay = "新上架颗粒";
            GUILayout.Label("前提三:选择操作方式", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            // 重新指定操作方式
            if (GUILayout.Button("一:新上架颗粒"))
            {
                SelfModel.Instance().isAddNewGranuleWay = true;
            }
            else if (GUILayout.Button("二:更换旧模型"))
            {
                SelfModel.Instance().isAddNewGranuleWay = false;
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion

            #endregion
            GUILayout.Space(8);

            #region 根据操作方式,绘制不同的GUI

            if (SelfModel.Instance().isAddNewGranuleWay)
            {
                DrawAddNewGranuleWayGui();
            }
            else
            {
                DrawReplaceOldGranuleWayGui();
            }

            #endregion
            GUILayout.Space(8);

            #region 功能一:复制模型全称、半称

            GUILayout.Label("一:复制模型名全称、半称", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:全称"))
            {
                Clipboard.SetText(Selection.activeGameObject.name);
            }
            if (GUILayout.Button("2:半称"))
            {
                var str  = Selection.activeGameObject.name;
                var flag = '&';
                // 获取到 & 后面的内容
                var text = str.Substring(str.IndexOf(flag) + 1);
                Clipboard.SetText(text);
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 功能二:临时更换物件上的材质_2

            GUILayout.Label("二:临时更换材质_2", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            if (GUILayout.Button(SelfModel.Instance().IsHaveReplace ? "1、替换为《原材质_2》" : "2、替换为《临时材质》"))
            {
                SelfModel.Instance().ReplaceMaterial2();
            }
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        case 2:
            #region 常用工具

            #region 一:3 个顶点确定圆心

            GUILayout.Label("一:三个顶点确定圆心", TitleStyle());
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("提示信息", SetGuiStyle(Color.black, 14));
            GUILayout.TextField(SelfCollider.Instance().WhichTimeTips);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            if (GUILayout.Button("点击 3 次按钮,获取圆心"))
            {
                SelfCollider.Instance().CreateCenterOfCircle();
            }

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 二:计算 Length 的值

            GUILayout.Label("二:计算长度的值", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            GUILayout.Label("1、获取当前哪个轴的坐标值", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().SetAxis = GUILayout.TextField(SelfTools.Instance().SetAxis);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("x"))
            {
                SelfTools.Instance().SetAxis = "x";
            }
            else if (GUILayout.Button("y"))
            {
                SelfTools.Instance().SetAxis = "y";
            }
            else if (GUILayout.Button("z"))
            {
                SelfTools.Instance().SetAxis = "z";
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            // 第二组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("2、第一个坐标值是", SetGuiStyle(Color.black, 14));
            GUILayout.TextField(SelfTools.Instance().FirstValue + "");
            EditorGUILayout.EndVertical();
            // 第二组垂直排版结束

            // 第三组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("3、长度的值等于", SetGuiStyle(Color.black, 14));
            GUILayout.TextField(SelfTools.Instance().Length + "");
            EditorGUILayout.EndVertical();
            // 第三组垂直排版结束

            // 第四组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("4、中点的值等于", SetGuiStyle(Color.black, 14));
            GUILayout.TextField(SelfTools.Instance().MidPoint + "");
            EditorGUILayout.EndVertical();
            // 第四组垂直排版结束

            // ------------ 一:结束垂直画盒子 ------------
            GUILayout.EndVertical();

            // 第三组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:点击两次求长度及中点的值"))
            {
                SelfTools.Instance().GetLength();
            }
            if (GUILayout.Button("2:清空按钮"))
            {
                SelfTools.Instance().ClearValue();
                // 单独重置长度和中点值,如果直接写到ClearValue函数里,在编辑器里回看不到长度,因为已经被重置
                SelfTools.Instance().Length   = 0;
                SelfTools.Instance().MidPoint = 0;
            }
            EditorGUILayout.EndHorizontal();
            // 第三组水平排版结束

            #endregion
            GUILayout.Space(8);

            #region  :带角度模型的方向

            GUILayout.Label("三:带角度模型的方向", TitleStyle());
            GUILayout.Space(3);

            #region 1:角度

            GUILayout.Label("A:角度", SetGuiStyle(Color.red, 16));

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("提示信息", SetGuiStyle(Color.black, 14));
            GUILayout.TextField(SelfCollider.Instance().StrAngleTips);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            if (GUILayout.Button("点击两次按钮,计算单位向量"))
            {
                SelfCollider.Instance().AngleModel();
            }

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion

            #endregion
            GUILayout.Space(8);

            #region 四:检查建模发过来的fbx名称的准确性

            GUILayout.Label("四:检查建模发的 fbx", TitleStyle());
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("1、要检查的文件夹路径", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().ModelingFbxPath = GUILayout.TextField(SelfTools.Instance().ModelingFbxPath);
            if (GUILayout.Button("开始检查"))
            {
                SelfTools.Instance().CheckModelingFbx();
            }
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        case 3:
            #region ToolPro

            #region 一:修改完旧模型的后续操作

            GUILayout.Label("一:修改完旧模型的后续操作", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            #region 一:复制名称到指定 txt 文件

            GUILayout.Label("1:复制颗粒名称到 txt 文件(修改一个点一次)", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // ------------ 二:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1、点击颗粒预设,添加至 txt"))
            {
                ToolPro.Instance().CopyNameToTxt();
            }
            if (GUILayout.Button("2、打开 txt"))
            {
                ToolPro.Instance().OpenTxt();
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 二:结束垂直画盒子 ------------

            GUILayout.Space(3);

            #endregion
            GUILayout.Space(2);

            #region 二:复制fbx到指定文件夹

            GUILayout.Label("2:复制fbx到文件夹,并取消待定颗粒标识(只点一次)", SetGuiStyle(Color.red, 14));

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            GUILayout.Label("指定外部文件夹路径", SetGuiStyle(Color.black, 14));
            ToolPro.Instance().OutFbxPath = GUILayout.TextField(ToolPro.Instance().OutFbxPath);

            // 第一组垂排版开始
            EditorGUILayout.BeginVertical();
            if (GUILayout.Button("点击按钮"))
            {
                ToolPro.Instance().CopyFbxToDirectory();
            }
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(2);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 二:从 Hierarchy 批量修改颗粒预设

            GUILayout.Label("二:批量处理颗粒预设", TitleStyle());
            GUILayout.Space(3);

            #region A:选择处理方式

            GUILayout.Label("A:选择处理方式", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:Hierarchy"))
            {
                ToolPro.Instance().IsHierarchy = true;
            }
            if (GUILayout.Button("2:选择颗粒预设"))
            {
                ToolPro.Instance().IsHierarchy = false;
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("提示:当前修改方式为:", SetGuiStyle(Color.black, 14));
            ToolPro.Instance().strTips = ToolPro.Instance().IsHierarchy ? "Hierarchy" : "选择颗粒预设";
            GUILayout.TextField(ToolPro.Instance().strTips);
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            #endregion

            #region B:自定义检查面板

            // 第零组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("B:检查面板", SetGuiStyle(Color.red, 14));
            if (GUILayout.Button("一键 " + (ToolPro.Instance().IsOpenAll ? "关闭" : "开启") + " 检查面板"))
            {
                ToolPro.Instance().OpenAndCloseAll();
            }
            EditorGUILayout.EndHorizontal();
            // 第零组水平排版结束
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            ToolPro.Instance().IsCheckBlockPrefab =
                EditorGUILayout.Toggle(new GUIContent("1:检查《颗粒预设》", "是否检查颗粒预设的 1:位置、旋转。2:移除 KeLiData 和 GranuleModel 脚本和刚体。"),
                                       ToolPro.Instance().IsCheckBlockPrefab);
            ToolPro.Instance().IsCheckWu =
                EditorGUILayout.Toggle(new GUIContent("2:检查《物件_1》",
                                                      "是否检查物件的 1:位置、旋转、比例、名称"), ToolPro.Instance().IsCheckWu);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            ToolPro.Instance().IsCheckBuWei = EditorGUILayout.Toggle(new GUIContent("3:检查《关键部位》",
                                                                                    "是否检查关键部位的 1:旋转。2:移除 MeshRenderer 和 MeshFilter 组件。3:所有子物体的比例。"),
                                                                     ToolPro.Instance().IsCheckBuWei);
            ToolPro.Instance().IsCheckBoxCollider = EditorGUILayout.Toggle(new GUIContent("4:检查《碰撞盒》",
                                                                                          "是否检查碰撞盒的 1:Center 转化"), ToolPro.Instance().IsCheckBoxCollider);
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------
            #endregion

            #region C:一次性功能区

            GUILayout.Label("C:一次性功能区", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            ToolPro.Instance().IsRenameBoxCollider = EditorGUILayout.Toggle(new GUIContent("1:碰撞盒大改版",
                                                                                           "将父物体上的碰撞盒移动到子物体,普通碰撞盒改成 Normal Box,倾斜碰撞盒改成 Bevel Box,该项属于实现功能范围," +
                                                                                           "只用一次即可"), ToolPro.Instance().IsRenameBoxCollider);
            ToolPro.Instance().IsAddSoAoCao = EditorGUILayout.Toggle(new GUIContent("2:生成 SonAoCao ",
                                                                                    "将含有小插销的颗粒,在同位置克隆一个 SonAoCao"), ToolPro.Instance().IsAddSoAoCao);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            if (GUILayout.Button("开始"))
            {
                ToolPro.Instance().CheckGranule();
            }
            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------
            GUILayout.Space(8);

            #endregion
            GUILayout.Space(8);

            #region  :批量处理 Hierarchy 上的颗粒大类

            GUILayout.Label("三:批量处理 Hierarchy 上的颗粒大类", TitleStyle());
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            GUILayout.Label("A:选择预设", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);
            ToolPro.Instance().PrefabObj = (GameObject)EditorGUILayout.ObjectField("点击选择预设:", ToolPro.Instance().PrefabObj, typeof(GameObject), true);
            GUILayout.Space(3);

            GUILayout.Label("B:待生成子物体面板", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            ToolPro.Instance().IsCreateSingleObj =
                EditorGUILayout.Toggle(new GUIContent("1:添加单个子物体",
                                                      "在某一颗粒大类下直接添加一个子物体"), ToolPro.Instance().IsCreateSingleObj);
            ToolPro.Instance().IsCreateBorder =
                EditorGUILayout.Toggle(new GUIContent("2:添加 《Border》",
                                                      "在某一颗粒大类下添加一个 Border 子物体,负责鼠标经过移出时的边框显示"), ToolPro.Instance().IsCreateBorder);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            ToolPro.Instance().IsCreateMain =
                EditorGUILayout.Toggle(new GUIContent("3:添加 《Main》",
                                                      "在某一颗粒大类下添加一个 Main 子物体,负责鼠标经过移出时颗粒大类 UI 的放大与缩小"), ToolPro.Instance().IsCreateMain);
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            GUILayout.Label("C:删除子物体", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label(" 指定子物体名称", SetGuiStyle(Color.black, 14));
            ToolPro.Instance().DeleteChildName = GUILayout.TextField(ToolPro.Instance().DeleteChildName);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            if (GUILayout.Button("点击批量处理颗粒大类"))
            {
                ToolPro.Instance().ChangeGranuleImage();
            }

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        case 4:
            #region 一般工具

            #region 一:批量修改“-”为“&”

            GUILayout.Label("一:批量修改“-”为“&”", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("1、要修改的文件路径", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().ChangeFileNamePath = GUILayout.TextField(SelfTools.Instance().ChangeFileNamePath);
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束

            if (GUILayout.Button("点击批量修改“-”为“&”"))
            {
                SelfTools.Instance().ChangeFileName();
            }

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 二:添加,删除 MeshRenderer,MeshFilter

            GUILayout.Label("二:添加,移除紫色 Mesh", TitleStyle());

            // ------------ 一:开始水平画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("添加紫色 Mesh"))
            {
                SelfTools.Instance().AddMesh();
            }
            if (GUILayout.Button("移除紫色 Mesh"))
            {
                SelfTools.Instance().RemoveMesh();
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束水平画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region  :查询文件夹下的同名fbx文件

            GUILayout.Label("三:查询文件夹下的同名文件", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            GUILayout.Space(3);

            GUILayout.Label("指定文件路径", SetGuiStyle(Color.black, 14));
            GUILayout.Space(3);
            SelfTools.Instance().FilePath = GUILayout.TextField(SelfTools.Instance().FilePath);
            if (GUILayout.Button("查询重名文件"))
            {
                SelfTools.Instance().SameNameFile();
            }
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 四:删除指定后缀名的文件

            GUILayout.Label("四:删除指定后缀名的文件", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("1、要修改的文件路径", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().DeleteFilePath = GUILayout.TextField(SelfTools.Instance().DeleteFilePath);
            GUILayout.Label("2、选择要删除的文件后缀名", SetGuiStyle(Color.black, 14));

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button(".meta"))
            {
                SelfTools.Instance().SelectExtension = ".meta";
            }
            if (GUILayout.Button(".fbx"))
            {
                SelfTools.Instance().SelectExtension = ".fbx";
            }
            if (GUILayout.Button(".jpg"))
            {
                SelfTools.Instance().SelectExtension = ".jpg";
            }
            if (GUILayout.Button(".png"))
            {
                SelfTools.Instance().SelectExtension = ".png";
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            SelfTools.Instance().SelectExtension = GUILayout.TextField(SelfTools.Instance().SelectExtension);

            if (GUILayout.Button("点击删除指定后缀名的文件"))
            {
                SelfTools.Instance().DeleteSelectExtension();
            }

            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 五:从ACE项目移动预设

            GUILayout.Label("五:导出ACE预设", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:从ACE项目移动预设"))
            {
                SelfCollider.Instance().MovePrefabFromAce();
            }
            if (GUILayout.Button("2:删除QD下的预设"))
            {
                SelfCollider.Instance().DeletePrefab();
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 六:零件库相关数据显示区

            GUILayout.Label("六:零件库相关数据显示区", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            #region ★、初级零件库

            GUILayout.Label("★、初级零件库", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("1、总的类数:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().PrimaryTypeCount = int.Parse(GUILayout.TextField(SelfTools.Instance().PrimaryTypeCount.ToString()));
            GUILayout.Space(3);
            GUILayout.Label("2、总的个数:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().AllPrimaryGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().AllPrimaryGranuleCount.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("3、待定颗粒:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().PrimaryUndoneGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().PrimaryUndoneGranuleCount.ToString()));
            GUILayout.Space(3);
            GUILayout.Label("4、完成颗粒:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().PrimaryCompletedGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().PrimaryCompletedGranuleCount.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            #endregion

            #region ★、中级零件库

            GUILayout.Space(5);
            GUILayout.Label("★、中级零件库", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("1、总的类数:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().IntermediateTypeCount = int.Parse(GUILayout.TextField(SelfTools.Instance().IntermediateTypeCount.ToString()));
            GUILayout.Space(3);
            GUILayout.Label("2、总的个数:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().AllIntermediateGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().AllIntermediateGranuleCount.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("3、待定颗粒:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().IntermediateUndoneGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().IntermediateUndoneGranuleCount.ToString()));
            GUILayout.Space(3);
            GUILayout.Label("4、完成颗粒:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().IntermediateCompletedGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().IntermediateCompletedGranuleCount.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            #endregion

            #region ★、总数据区

            GUILayout.Space(5);
            GUILayout.Label("★、总数据区", SetGuiStyle(Color.red, 14));
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("1、总的类数:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().AllGranuleTypeCount = int.Parse(GUILayout.TextField(SelfTools.Instance().AllGranuleTypeCount.ToString()));
            GUILayout.Space(3);
            GUILayout.Label("2、总的个数:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().AllGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().AllGranuleCount.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("3、待定颗粒:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().AllUndoneGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().AllUndoneGranuleCount.ToString()));
            GUILayout.Space(3);
            GUILayout.Label("4、完成颗粒:", SetGuiStyle(Color.black, 14));
            SelfTools.Instance().AllCompletedGranuleCount = int.Parse(GUILayout.TextField(SelfTools.Instance().AllCompletedGranuleCount.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            // 第三组水平排版开始
            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.EndHorizontal();
            // 第三组水平排版结束
            GUILayout.Space(3);
            #endregion

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            if (GUILayout.Button("点击获取数据"))
            {
                SelfTools.Instance().ShowLibraryData();
            }

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
        GUILayout.EndScrollView();
    }
Пример #2
0
 public static SelfTools Instance()
 {
     return(instance ?? (instance = new SelfTools()));
 }
Пример #3
0
    /// <summary>
    /// 从《初级颗粒数据》json 中读取数据,希望处理的功能
    /// </summary>
    public void AboutPrimaryData()
    {
        if (granuleDic1.Count != 0)
        {
            return;
        }

        SelfTools.Instance().ShowLibraryData(); // 为 PrimaryGranuleList 赋值

        // json 文件路径
        var dataPath = Application.dataPath + "/AllenSuTools/Data/初级颗粒数据.txt";

        if (!File.Exists(dataPath))
        {
            WindowTips("JSON 文件不存在!!!");
            return;
        }

        // 先从 json 中读取数据
        TextReader tr      = File.OpenText(dataPath);
        var        primary = JsonMapper.ToObject <Primary>(tr.ReadToEnd());

        tr.Dispose();
        tr.Close();

        // 为相关字典赋值
        foreach (var primaryData in primary.PrimaryData)
        {
            if (Equals(primaryData.是否已上架, "0"))
            {
                granuleDic0.Add(primaryData.总序, primaryData.全称);                                 // 未上架颗粒名称字典
            }
            else if (Equals(primaryData.是否已上架, "1"))
            {
                granuleDic1.Add(primaryData.总序, primaryData.全称);                                      // 已上架颗粒名称字典
            }
            else
            {
                Debug.Log("均不属于《未上架》和《已上架》颗粒的名称:" + primaryData.全称);
            }
            // 建模没法的(不包含未上架的以及名称是"未记录该颗粒")
            // if (Equals(primaryData.建模是否已发,"0") && (!Equals(primaryData.是否已上架, "0")))
            // {
            //     if (!Equals(primaryData.全称, "未记录该颗粒"))
            //     {
            //         WriteToTxt(TxtDirPath, "建模尚未发的颗粒名称", primaryData.全称);
            //     }
            // }
            if (Equals(primaryData.建模是否已发, "1"))
            {
                ModelPersonHadSendDic.Add(primaryData.总序, primaryData.全称);                                 // 建模已发模型名称字典
            }
        }

        // 零件库中初级颗粒的名称字典
        var primaryGranuleNameDic = new Dictionary <int, string>();

        foreach (var granule in PrimaryGranuleList)
        {
            primaryGranuleNameDic.Add(granule.transform.GetSiblingIndex(), granule.name);
        }

        // 检测功能一:《零件库名称字典》要和《已上架颗粒名称字典》的颗粒名称要一致,如果有不一样的,则利用差集求两个字典的差值
        var diffNameGroup = granuleDic1.Values.ToList().Except(primaryGranuleNameDic.Values.ToList());
        var granuleNames  = diffNameGroup as string[] ?? diffNameGroup.ToArray();

        if (granuleNames.Length != 0)
        {
            foreach (var granuleName in granuleNames)
            {
                Debug.Log("编码表有,但零件库没有的颗粒名称 " + granuleName);
            }
        }

        // 检测功能二:零件库初级颗粒的相关处理
        foreach (var granule in PrimaryGranuleList)
        {
            // 处理一:检查零件库中的错误名称(不包含组合颗粒)
            if (!granuleDic1.ContainsValue(granule.name) && !granule.name.Contains("组合"))
            {
                Debug.Log("零件库错误编码的颗粒名称:" + granule.name);
            }

            // 处理二:零件库已上架,但在编码表中依然显示 0 的颗粒:
            if (granuleDic0.ContainsValue(granule.name))
            {
                Debug.Log("零件库已上架,但在编码表中依然显示 0 的颗粒:" + granule.name);
            }
        }

        // 比较上次与本次待定颗粒的差值名称
        CompareDaiDingGranule();

        // 输出模型已发,但我这边还未做的颗粒名称
        //        foreach (var granuleName in DaiDingDic.Values)
        //        {
        //            if (ModelPersonHadSendDic.ContainsValue(granuleName))
        //            {
        //                WriteToTxt(TxtDirPath,"模型已发,但我这边还未做的颗粒名称",granuleName);
        //            }
        //        }
    }
Пример #4
0
    void OnGUI()
    {
        scrowPos = GUILayout.BeginScrollView(scrowPos, GUILayout.Width(position.width), GUILayout.Height(position.height));
        EditorGUI.BeginChangeCheck();

        // 设置标题语(用途:错行)
        EditorGUILayout.HelpBox("", MessageType.Info, true);

        whichOneSelect = GUI.Toolbar(new Rect(5, 5, _topInfoType.Length * 100, 37), whichOneSelect, _topInfoType);

        switch (whichOneSelect)
        {
        case 0:
            #region 克隆 A 类碰撞盒

            #region 一:添加环形类的碰撞盒

            SelfCollider.Instance().RingBoxCollGuiControl();
            if (EditorGUI.EndChangeCheck() && SelfCollider.Instance().EditorStatus == EditorStatus.编辑)     // <-- 控制检查结束在这里
            {
                SelfCollider.Instance().UpdateRingBoxColl();
            }

            SelfCollider.Instance().DrawStatusText();
            if (SelfCollider.Instance().EditorStatus == EditorStatus.编辑)
            {
                // 第一组水平排版开始
                EditorGUILayout.BeginHorizontal();

                //完成创建碰撞盒
                if (GUILayout.Button("确认"))
                {
                    // 清除工作对撞机参考,结束编辑状态
                    SelfCollider.Instance().WorkingCollider = null;
                }

                //取消
                if (GUILayout.Button("取消"))
                {
                    // //删除工作对撞机,取消其创建
                    DestroyImmediate(SelfCollider.Instance().WorkingCollider);

                    // 清除工作对撞机参考,结束编辑状态
                    SelfCollider.Instance().WorkingCollider = null;
                }

                EditorGUILayout.EndHorizontal();
                // 第一组水平排版结束
            }
            else
            {
                // 第一组水平排版开始
                EditorGUILayout.BeginHorizontal();
                if (SelfCollider.Instance().EditorStatus != EditorStatus.准备)
                {
                    GUI.enabled = false;
                }
                if (GUILayout.Button("1:点击颗粒预设,开始克隆"))
                {
                    SelfCollider.Instance().CreateRingBoxColl();
                }
                GUI.enabled = true;
                if (GUILayout.Button("2:整理、拆分碰撞盒"))
                {
                    SelfCollider.Instance().DeleteAndArrangeRing();
                }
                EditorGUILayout.EndHorizontal();
                // 第一组水平排版结束
            }

            #endregion
            GUILayout.Space(8);

            #region 二:自定义倾斜环形碰撞盒

            #region 一:旋转

            GUILayout.Label("二:自定义操作碰撞盒", TitleStyle());
            GUILayout.Space(5);
            GUILayout.Label(" Tips:该模式需先选中一个已有对象", SetGuiStyle(Color.black, 14));
            GUILayout.Space(3);
            GUILayout.Label(" A:旋转", SetGuiStyle(Color.red, 16));
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            GUILayout.Space(3);

            GUILayout.Label("1:快捷设置克隆个数(含自身,且会删除所选对象)", SetGuiStyle(Color.black, 14));
            GUILayout.Space(5);

            // 第四组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("4"))
            {
                SelfCollider.Instance().CustomBoxCollNum = 4;
            }
            if (GUILayout.Button("8"))
            {
                SelfCollider.Instance().CustomBoxCollNum = 8;
            }
            if (GUILayout.Button("10"))
            {
                SelfCollider.Instance().CustomBoxCollNum = 10;
            }
            if (GUILayout.Button("12"))
            {
                SelfCollider.Instance().CustomBoxCollNum = 12;
            }
            if (GUILayout.Button("16"))
            {
                SelfCollider.Instance().CustomBoxCollNum = 16;
            }
            if (GUILayout.Button("x2"))
            {
                SelfCollider.Instance().CustomBoxCollNum = SelfCollider.Instance().CustomBoxCollNum * 2;
            }
            EditorGUILayout.EndHorizontal();
            // 第四组水平排版结束
            GUILayout.Space(5);

            // 第三组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("2:选中已做好物体,设置克隆个数:", SetGuiStyle(Color.black, 14));
            SelfCollider.Instance().CustomBoxCollNum = int.Parse(GUILayout.TextField(SelfCollider.Instance().CustomBoxCollNum.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第三组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            if (GUILayout.Button("开始克隆"))
            {
                SelfCollider.Instance().RotateBoxCollider();
            }


            #endregion
            GUILayout.Space(3);

            #region 二:平移

            GUILayout.Label(" B:平移", SetGuiStyle(Color.red, 16));

            // ------------ 二:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            SelfCollider.Instance().SelfPivotAxis = (SelfPivotAxis)EditorGUILayout.EnumPopup("选择克隆方向", SelfCollider.Instance().SelfPivotAxis);
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束
            GUILayout.Space(3);

            SelfCollider.Instance().CustomBoxCollNum = EditorGUILayout.IntSlider("设置克隆个数", SelfCollider.Instance().CustomBoxCollNum, 1, 64);
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label(" 设置克隆间隔", SetGuiStyle(Color.black, 11));
            SelfCollider.Instance().CloneSpace = float.Parse(EditorGUILayout.TextField(SelfCollider.Instance().CloneSpace.ToString()));
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            if (GUILayout.Button("开始克隆"))
            {
                SelfCollider.Instance().PanBoxCollider();
            }

            GUILayout.EndVertical();
            // ------------ 二:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        case 1:
            #region 克隆 B 类碰撞盒

            #region 一:长方体类模型,通过一对角线的两个顶点,确定碰撞盒

            GUILayout.Label("一:对角线两顶点确定碰撞盒", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.Label("当前已确定 " + (SelfCollider.Instance().VertexList == null ? 0 : SelfCollider.Instance().VertexList.Count) + " 个顶点", SetGuiStyle(Color.black, 14));
            if (GUILayout.Button("获取对角线两顶点,确定碰撞盒"))
            {
                SelfCollider.Instance().VertexBox();
            }
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 二:镜像克隆对象

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("二:镜像克隆对象", TitleStyle());
            if (GUILayout.Button("碰撞盒 Center 转换"))
            {
                ToolPro.Instance().CheckBoxCollider(Selection.activeGameObject);
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("一:选择轴心 ", SetGuiStyle(Color.red, 14));
            GUILayout.Label(SelfTools.Instance().SetMirrorAxis, SetGuiStyle(Color.black, 14));
            GUILayout.Label("");
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(2);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("x"))
            {
                SelfTools.Instance().SetMirrorAxis = "x";
            }
            if (GUILayout.Button("y"))
            {
                SelfTools.Instance().SetMirrorAxis = "y";
            }
            if (GUILayout.Button("z"))
            {
                SelfTools.Instance().SetMirrorAxis = "z";
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("二:指定对称中心(默认原点)", SetGuiStyle(Color.red, 14));
            if (GUILayout.Button("选中物体设置对称中心"))
            {
                SelfTools.Instance().MirrorPoint = Selection.activeGameObject.transform.position;
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            EditorGUILayout.Vector3Field("对称中心", SelfTools.Instance().MirrorPoint);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            GUILayout.Space(3);

            if (GUILayout.Button("点击按钮,镜像克隆对象"))
            {
                SelfTools.Instance().MirrorObj();
            }

            #endregion
            GUILayout.Space(80);

            #region  :一键添加长方体类型的碰撞盒(如高一粒)

            GUILayout.Label("三:正方类碰撞盒", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            if (GUILayout.Button("点击克隆碰撞盒"))
            {
                SelfCollider.Instance().AddBoxCollider();
            }
            GUILayout.EndVertical();
            //------------一:结束垂直画盒子------------

            #endregion
            GUILayout.Space(8);

            #endregion
            break;

        case 2:
            #region 碰撞盒信息

            #region 一:显示模型数据

            GUILayout.Space(3);
            GUILayout.Label("一:显示模型数据", TitleStyle());

            GUILayout.Space(3);
            GUILayout.Label("1:模型基础数据", SetGuiStyle(Color.red, 14));

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // ------------ 第一组水平排版开始 -----------
            EditorGUILayout.BeginHorizontal();
            GUILayout.TextField("长度:" + SelfCollider.Instance().ModelLength);
            GUILayout.TextField("宽度:" + SelfCollider.Instance().ModelWidth);
            GUILayout.TextField("高度:" + SelfCollider.Instance().ModelHeight);
            EditorGUILayout.EndHorizontal();
            // ------------ 第一组水平排版结束 ------------
            GUILayout.Space(3);

            // ------------ 第二组水平排版开始 ------------
            EditorGUILayout.BeginHorizontal();
            GUILayout.TextField("凹槽 Y 轴坐标:" + SelfCollider.Instance().AoCaoY);
            GUILayout.TextField("凸起 Y 轴坐标:" + SelfCollider.Instance().TuQiY);
            EditorGUILayout.EndHorizontal();
            // ------------ 第二组水平排版结束 ------------
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------一:结束垂直画盒子------------

            GUILayout.Label("2:模型最坐标", SetGuiStyle(Color.red, 14));

            // ------------ 二:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.TextField("X轴 最小坐标是:" + SelfCollider.Instance().MinX);
            GUILayout.Space(3);
            GUILayout.TextField("X轴 最大坐标是:" + SelfCollider.Instance().MaxX);
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束
            GUILayout.Space(3);

            // 第二组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.TextField("Y轴 最小坐标是:" + SelfCollider.Instance().MinY);
            GUILayout.Space(3);
            GUILayout.TextField("Y轴 最大坐标是:" + SelfCollider.Instance().MaxY);
            EditorGUILayout.EndHorizontal();
            // 第二组水平排版结束
            GUILayout.Space(3);

            // 第三组水平排版开始
            EditorGUILayout.BeginHorizontal();
            GUILayout.TextField("Z轴 最小坐标是:" + SelfCollider.Instance().MinZ);
            GUILayout.Space(3);
            GUILayout.TextField("Z轴 最大坐标是:" + SelfCollider.Instance().MaxZ);
            EditorGUILayout.EndHorizontal();
            // 第三组水平排版结束
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 二:结束垂直画盒子 ------------

            GUILayout.Label("3:碰撞盒总个数", SetGuiStyle(Color.red, 14));

            // ------------ 三:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组垂直排版开始
            EditorGUILayout.BeginVertical();
            GUILayout.TextField("所有碰撞盒个数:" + SelfCollider.Instance().ChildBoxCollNum);
            EditorGUILayout.EndVertical();
            // 第一组垂直排版结束

            GUILayout.EndVertical();
            // ------------ 三:结束垂直画盒子 ------------

            // 第四组水平排版开始
            EditorGUILayout.BeginHorizontal();
            if (GUILayout.Button("1:点击颗粒名称获取"))
            {
                SelfCollider.Instance().ShowModelLengthWidthHeight();
            }
            if (GUILayout.Button("2:清空以上所有数据"))
            {
                SelfCollider.Instance().ClearModelData();
            }
            EditorGUILayout.EndHorizontal();
            // 第四组水平排版结束

            #endregion
            GUILayout.Space(8);

            #region 二:隐藏碰撞盒

            GUILayout.Label("二:隐藏,移除全部碰撞盒", TitleStyle());

            // ------------ 一:开始画盒子 ------------
            GUILayout.BeginVertical("box");

            // 第一组水平排版开始
            EditorGUILayout.BeginHorizontal();
            SelfCollider.Instance().HideOrShowTips = !SelfCollider.Instance().IsHideAllBoxColl ? "1:隐藏全部碰撞盒" : "1:显示全部碰撞盒";
            if (GUILayout.Button(SelfCollider.Instance().HideOrShowTips))
            {
                SelfCollider.Instance().IsClickHideBtn = true;
                SelfCollider.Instance().CollBtn();
            }
            if (GUILayout.Button("2:移除所有碰撞盒"))
            {
                SelfCollider.Instance().IsClickRemoveBtn = true;
                SelfCollider.Instance().CollBtn();
            }
            EditorGUILayout.EndHorizontal();
            // 第一组水平排版结束

            GUILayout.EndVertical();
            //------------ 一:结束画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #region 临时功能

            GUILayout.Label("临时功能", TitleStyle());

            // ------------ 一:开始垂直画盒子 ------------
            GUILayout.BeginVertical("box");
            if (GUILayout.Button("选中模型,检测问题"))
            {
                SelfModel.Instance().CheckModelQuestion();
            }
            GUILayout.Space(3);

            GUILayout.EndVertical();
            // ------------ 一:结束垂直画盒子 ------------

            #endregion
            GUILayout.Space(8);

            #endregion

            break;

        default:
            throw new ArgumentOutOfRangeException();
        }

        GUILayout.EndScrollView();
    }