使用ScriptableWizard创建编辑窗口 实现格子创建

使用ScriptableWizard创建编辑窗口 实现格子创建_第1张图片

假如实现Unity编辑窗口自定义创建格子,类似上图,可以使用ScriptableWizard自定义编辑窗口一键生成。

使用ScriptableWizard创建编辑窗口 实现格子创建_第2张图片

首先创建脚本继承ScriptableWizard,该类中有三个函数OnWizardCreate()【对应上图中的Create按钮】,OnWizardUpdate(【该方法当处于自定义的该编辑窗口操作时更新】),OnWizardOtherButton(【对应上图中的AAA按钮】)。

下面是相关代码:

using UnityEngine;
using UnityEditor;

public class CreateBattleBox : ScriptableWizard
{
    public Vector2 mapSize;                  //地图大小的格子乘比
    public Vector3 cellSize;                 //每个格子的大小
    public Vector3 cellRotation;             //每个格子的角度
    public Transform parent;                 //映射的父物体
    
    [MenuItem("Tools/BoxMap/CreateBox")]
    static void CreateWizard ()
    {
        ScriptableWizard.DisplayWizard("CreateBox", "Create", "AAA");
    }

    private void OnWizardCreate()
    {
        GameObject root = new GameObject(string.Format("mapRoot:{0}x{1}", mapSize[0], mapSize[1]));
        root.transform.position = parent.position;
        for(float x=root.transform.position.x; x() != null)
                    cell.GetComponent().enabled = false;
            }
        }
        root.transform.Rotate(new Vector3(90, 0, 0));
    }

    private void OnWizardOtherButton()
    {
        Debug.Log("AAA");
    }
}
创建格子之后为了对格子进行快速查找操作,可以顺便设置SortBox,用来序列化整理格子,并为其重新命名。代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class SortBox : ScriptableWizard
{
    public bool isMine;
    public int everyRowNum;                        //每列的个数

    [MenuItem("Tools/BoxMap/SortBox")]
    static void OnSortBox()
    {
        ScriptableWizard.DisplayWizard("SortBox", "Sort");
    }

    private void OnWizardCreate()
    {
        List list = new List();
        list.AddRange(Selection.gameObjects);
        list.Sort((x, y) =>                                 //使用list.Sort()进行排序,默认list.Sort()升序排,可以使用匿名方法自定义排序标准
        {
            if (isMine)
            {
                if (x.transform.localPosition.x == y.transform.localPosition.x)
                    return y.transform.localPosition.y.CompareTo(x.transform.localPosition.y);
                else
                    return y.transform.localPosition.x.CompareTo(x.transform.localPosition.x);
            }
            else
            {
                if (x.transform.localPosition.x == y.transform.localPosition.x)
                    return x.transform.localPosition.y.CompareTo(y.transform.localPosition.y);
                else
                    return x.transform.localPosition.x.CompareTo(y.transform.localPosition.x);
            }
        });

        int row = 0;
        int colu = 0;
        int maxNum = everyRowNum;
        for (int i = 0; i < list.Count; i++)
        {
            if (i >= maxNum)
            {
                row = 0;
                colu++;
                maxNum += everyRowNum;
            }
            if (isMine)
            {
                list[i].name = string.Format("{0}x{1}", colu, row);
            }
            else
            {
                list[i].name = string.Format("{0}x-{1}", colu, row);
            }
            row++;
        }
    }
}



你可能感兴趣的:(Unity,Unity,Unity自定义编辑窗口)