Ejemplo n.º 1
0
    private void OnGUI()
    {
        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Height(400));

        GUILayout.Label("Scene", GUILayout.Width(100));

        if (_scenedata != null)
        {
            if (_scenedata.scenename.Count == 0)
            {
                foreach (var s in EditorBuildSettings.scenes)
                {
                    string sceneName = Path.GetFileName(s.path).Replace(".unity", "");
                    _scenedata.scenename.Add(sceneName);
                    _scenedata.scenepath.Add(s.path);
                }
                EditorUtility.SetDirty(_scenedata);
                AssetDatabase.Refresh();
            }

            var stylex = new GUIStyle(GUI.skin.button);
            stylex.alignment = TextAnchor.MiddleLeft;
            stylex.fontSize  = 14;
            int index = 0;
            scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUI.skin.box, GUILayout.Width(260), GUILayout.Height(370));
            {
                foreach (string s in _scenedata.scenename)
                {
                    if (Application.loadedLevelName == s)
                    {
                        stylex.normal.textColor = Color.red;
                    }
                    else
                    {
                        stylex.normal.textColor = Color.blue;
                    }
                    if (GUILayout.Button(s, stylex))
                    {
                        if (EditorApplication.SaveCurrentSceneIfUserWantsTo())
                        {
                            EditorApplication.OpenScene(_scenedata.scenepath[index]);
                        }
                    }
                    index++;
                }
            }
            if (GUILayout.Button("シーンデータを再生成する"))
            {
                AssetDatabase.DeleteAsset("Assets/Editor_Extension/Editor/SceneData.asset");
                AssetDatabase.Refresh();
                SceneData.CreateScriptableObject();
            }
            EditorGUILayout.EndScrollView();
        }
        else
        {
            if (GUILayout.Button("シーンデータを作成する"))
            {
                SceneData.CreateScriptableObject();
            }
        }

        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(260), GUILayout.Height(400));
        EditorGUI.BeginChangeCheck();
        mTypeName       = EditorGUILayout.TextField("オブジェクトネーム", mTypeName);
        isFullMatchName = EditorGUILayout.Toggle("名前の完全一致", isFullMatchName);
        if (EditorGUI.EndChangeCheck())
        {
            mResult = CheckObject(mTypeName);
        }
        mScrollPos = EditorGUILayout.BeginScrollView(mScrollPos, GUI.skin.box, GUILayout.Width(260), GUILayout.Height(100));
        EditorGUILayout.TextArea(mResult);
        EditorGUILayout.EndScrollView();
        if (GUILayout.Button("検索結果全てを選択する"))
        {
            Selection.objects = resultObjs.ToArray();
        }

        if (GUILayout.Button("Sync Hierarchy"))
        {
            SetSearchFilter(mTypeName, 1);
        }

        GUILayout.Space(10);

        if (GUILayout.Button("コンポーネント一覧更新"))
        {
            cResult = CheckCompornent();
        }
        cScrollPos = EditorGUILayout.BeginScrollView(cScrollPos, GUI.skin.box, GUILayout.Width(260), GUILayout.Height(150));
        foreach (string s in componentnames)
        {
            if (GUILayout.Button(s))
            {
                SetSearchFilter("t:" + s, 0);
            }
        }
        EditorGUILayout.EndScrollView();

        if (GUILayout.Button("Select Warning Object"))
        {
            Selection.objects = SelectWarningObject();
        }

        EditorGUILayout.EndVertical();
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(540));
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Data Init"))
        {
            CreateAllPathGUIDProject();
        }
        if (GUILayout.Button("Cache Hierarchy"))
        {
            CashHierarchyInstanceID();
        }
        if (GUILayout.Button("Cache Project"))
        {
            CashProjectFolderGUID();
        }
        EditorGUILayout.EndHorizontal();

        var style = new GUIStyle(GUI.skin.button);

        style.alignment   = TextAnchor.MiddleLeft;
        style.fontSize    = 14;
        style.fixedHeight = 30;
        var content = new GUIContent();

        caPos = EditorGUILayout.BeginScrollView(caPos, GUI.skin.box, GUILayout.Width(530), GUILayout.Height(150));
        foreach (string s in _guids.cashpath)
        {
            content.image = GetIconForFile(s);
            content.text  = s;
            var split     = s.Split(new[] { "/" }, StringSplitOptions.None);
            var filename  = split[split.Length - 1];
            var split_ext = filename.Split(new[] { "." }, StringSplitOptions.None);
            if (GUILayout.Button(content, style))
            {
                SetProjectFilter(split_ext[0]);
            }
        }
        string scenename    = Application.loadedLevelName;
        var    currentscene = UnityEngine.Object.FindObjectsOfType(typeof(GameObject));

        foreach (string i in _guids.scene)
        {
            var split   = i.Split(new[] { "/" }, StringSplitOptions.None);
            var objectv = currentscene.FirstOrDefault(id => id.GetInstanceID() == int.Parse(split[1]));
            if (objectv != null)
            {
                if (GUILayout.Button(i, style))
                {
                    SelectObjectFromID(int.Parse(split[1]));
                }
            }
        }
        EditorGUILayout.EndScrollView();
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical(GUI.skin.box, GUILayout.Width(540));

        GUILayout.Label(netWorkType, GUILayout.Width(530));

        if (EditorApplication.isUpdating)
        {
            GUILayout.Label("更新中", GUILayout.Width(530));
        }

        if (!show || (!Application.isPlaying && !showInEditor))
        {
            GUILayout.Label("ProfilerMemInfo", GUILayout.Width(530));
            uint   monoUsed  = UnityEngine.Profiling.Profiler.GetMonoUsedSize();
            uint   monoSize  = UnityEngine.Profiling.Profiler.GetMonoHeapSize();
            uint   totalUsed = UnityEngine.Profiling.Profiler.GetTotalAllocatedMemory();
            uint   totalSize = UnityEngine.Profiling.Profiler.GetTotalReservedMemory();
            string memsize   = string.Format(
                "mono:{0}/{1} kb({2:f1}%)\n" +
                "total  :{3}/{4} kb({5:f1}%)\n",
                monoUsed / 1024, monoSize / 1024, 100.0 * monoUsed / monoSize,
                totalUsed / 1024, totalSize / 1024, 100.0 * totalUsed / totalSize);
            GUILayout.Label(memsize, GUILayout.Width(530));
            if (GUILayout.Button(filesize))
            {
                filesize = AllAssetSize();
            }
        }
        else
        {
            int collCount = System.GC.CollectionCount(0);

            if (lastCollectNum != collCount)
            {
                lastCollectNum = collCount;
                delta          = Time.realtimeSinceStartup - lastCollect;
                lastCollect    = Time.realtimeSinceStartup;
                lastDeltaTime  = Time.deltaTime;
                collectAlloc   = allocMem;
            }

            allocMem = (int)System.GC.GetTotalMemory(false);

            peakAlloc = allocMem > peakAlloc ? allocMem : peakAlloc;

            if (Time.realtimeSinceStartup - lastAllocSet > 0.3F)
            {
                int diff = allocMem - lastAllocMemory;
                lastAllocMemory = allocMem;
                lastAllocSet    = Time.realtimeSinceStartup;

                if (diff >= 0)
                {
                    allocRate = diff;
                }
            }

            StringBuilder text = new StringBuilder();
            text.Append("Currently allocated :");
            text.Append((allocMem / 1000000F).ToString("0"));
            text.Append("mb\n");
            text.Append("Peak allocated       :");
            text.Append((peakAlloc / 1000000F).ToString("0"));
            text.Append("mb (last collect:");
            text.Append((collectAlloc / 1000000F).ToString("0"));
            text.Append(" mb)\n");
            text.Append("Allocation rate       :");
            text.Append((allocRate / 1000000F).ToString("0.0"));
            text.Append("mb\n");
            text.Append("Collection frequency:");
            text.Append(delta.ToString("0.00"));
            text.Append("s\n");
            text.Append("Last collect delta  :");
            text.Append(lastDeltaTime.ToString("0.000"));
            text.Append("s (");
            text.Append(fps.ToString("0.0"));
            text.Append(" fps)");
            GUILayout.Label(text.ToString(), GUILayout.Width(530));

            GUI.Box(new Rect(5, 5, 380, 100 + (showFPS ? 16 : 0)), "");
            GUI.Label(new Rect(10, 5, 1000, 200), text.ToString());
        }

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button(">", GUILayout.Width(40)))
        {
            EditorApplication.isPlaying = !EditorApplication.isPlaying;
        }
        if (GUILayout.Button("||", GUILayout.Width(40)))
        {
            EditorApplication.isPaused = !EditorApplication.isPaused;
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();
    }