Ejemplo n.º 1
0
    void OnGUI()
    {
        if (!initialized)
        {
            Initialize();
        }

        if (GUILayout.Button("创建新区域"))
        {
            Object prefab = Resources.LoadAssetAtPath <Object>("Assets/EditorPrefab/CameraSwitch.prefab");
            if (prefab)
            {
                GameObject instance = GameObject.Instantiate(prefab) as GameObject;
                instance.transform.position = Vector3.zero;

                ZonePolygon zonePoly = instance.GetComponent <ZonePolygon>();
                zonePoly.CreateBasePoly();
            }
            else
            {
                EditorUtility.DisplayDialog("创建失败 - 找不到Prefab", "Assets/EditorPrefab/CameraSwitch.prefab", "确定");
            }
        }
    }
Ejemplo n.º 2
0
    public override void OnInspectorGUI()
    {
        ZonePolygon zonePoly = target as ZonePolygon;

        GUILayout.Label("编辑 - 触发区");
        EditorGUILayout.Separator();

        float oldHeight = zonePoly.Height;

        base.DrawDefaultInspector();

        bool meshDirty = false;


        if (oldHeight != zonePoly.Height)
        {
            meshDirty = true;
        }

        if (!zonePoly)
        {
            return;
        }

        MeshFilter meshFilter = zonePoly.GetComponent <MeshFilter>();

        bool enableVertEdit = EditorGUILayout.Toggle("开启场景点编辑", EnableVertEdit);

        if (enableVertEdit != EnableVertEdit)
        {
            EnableVertEdit = enableVertEdit;
            EditorUtility.SetDirty(target);
        }

        for (int i = 0; i < zonePoly.Verts.Count; i++)
        {
            EditorGUILayout.BeginHorizontal(new GUILayoutOption[] {});
            Vector3 node   = zonePoly.Verts[i];
            Vector3 newPos = EditorGUILayout.Vector3Field("位置", node);
            if (newPos != node)
            {
                node = newPos;
                zonePoly.Verts[i] = node;
                meshDirty         = true;
            }
            if (GUILayout.Button(new GUIContent("删")))
            {
                if (zonePoly.Verts.Count > 3)
                {
                    zonePoly.Verts.RemoveAt(i);
                    i--;
                    meshDirty = true;
                }
            }
            if (GUILayout.Button(new GUIContent("加")))
            {
                int     zonePolyVertCnt = zonePoly.Verts.Count;
                Vector3 pos             = (zonePoly.Verts[(i) % zonePolyVertCnt] + zonePoly.Verts[(i + 1) % zonePolyVertCnt]) * 0.5f;
                zonePoly.Verts.Insert((i + 1) % zonePolyVertCnt, pos);
                meshDirty = true;
            }
            if (GUILayout.Button(new GUIContent("上")))
            {
                int     lastId = (i - 1 + zonePoly.Verts.Count) % zonePoly.Verts.Count;
                Vector3 temp   = zonePoly.Verts[i];
                zonePoly.Verts[i]      = zonePoly.Verts[lastId];
                zonePoly.Verts[lastId] = temp;
                meshDirty = true;
            }
            if (GUILayout.Button(new GUIContent("下")))
            {
                int     nextId = (i + 1 + zonePoly.Verts.Count) % zonePoly.Verts.Count;
                Vector3 temp   = zonePoly.Verts[i];
                zonePoly.Verts[i]      = zonePoly.Verts[nextId];
                zonePoly.Verts[nextId] = temp;
                meshDirty = true;
            }
            EditorGUILayout.EndHorizontal();
        }

        if (GUILayout.Button(new GUIContent("添加点")))
        {
            int     zonePolyVertCnt = zonePoly.Verts.Count;
            Vector3 pos             = (zonePoly.Verts[(zonePolyVertCnt - 1) % zonePolyVertCnt] + zonePoly.Verts[0]) * 0.5f;
            zonePoly.Verts.Insert(zonePoly.Verts.Count, pos);
            meshDirty = true;
        }
        if (GUILayout.Button("刷新Mesh"))
        {
            meshDirty = true;
        }

        EditorGUILayout.Separator();

        if (GUILayout.Button("翻转顶点"))
        {
            zonePoly.Verts.Reverse();
            meshDirty = true;
        }
        if (GUILayout.Button("重置为基本体"))
        {
            zonePoly.CreateBasePoly();
        }

        if (meshDirty)
        {
            zonePoly.RegenerateMesh();
        }

        if (GUILayout.Button("保存Mesh到文件"))
        {
            SaveMeshAsset(zonePoly);
        }
    }