Странно получаются два исключения в скрипте EditorWindow.Любые идеи, как это исправить и что это сделать? - PullRequest
0 голосов
/ 03 января 2019

Я использую 2018.3.0f2 Personal

Исключения появляются, когда я пытаюсь запустить скрипт в редакторе, выполнив в меню: Window> Manager, тогда он даже не показывает окно редактора, но после того, как я много раз пробовал, он работает. Не могу понять, что происходит.

Может быть, мне следует удалить старые версии Unity, включая текущую, и заново установить эту? Может быть, это ошибка в версии 3.0f2?

Два исключения:

NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта UnityEditor.EditorWindow.GetRootElement [TMode] (System.Boolean createIfNull) (в C: /buildslave/unity/build/Editor/Mono/EditorWindow.cs: 55) Unity.Experimental.EditorMode.EditorModes.GetRootElement [TMode] (окно UnityEditor.EditorWindow) (в C: /buildslave/unity/build/Editor/Mono/EditorMode/EditorModes.cs: 455) Unity.Experimental.EditorMode.EditorModes + ModeGenericHelper`1 [TMode] .GetRoot (окно UnityEditor.EditorWindow) (в C: /buildslave/unity/build/Editor/Mono/EditorMode/EditorModes.cs: 28) Unity.Experimental.EditorMode.EditorModes.GetRootElement (окно UnityEditor.EditorWindow) (в C: /buildslave/unity/build/Editor/Mono/EditorMode/EditorModes.cs: 215) UnityEditor.HostView.DeregisterSelectedPane (System.Boolean clearActualView, System.Boolean sendEvents) (в C: /buildslave/unity/build/Editor/Mono/HostView.cs: 399) UnityEditor.HostView.OnDisable () (в C: /buildslave/unity/build/Editor/Mono/HostView.cs: 103)

И

NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта UnityEditor.DockArea.KillIfEmpty () (в C: /buildslave/unity/build/Editor/Mono/GUI/DockArea.cs: 234) UnityEditor.DockArea.RemoveTab (панель UnityEditor.EditorWindow, System.Boolean killIfEmpty, System.Boolean sendEvents) (в C: /buildslave/unity/build/Editor/Mono/GUI/DockArea.cs: 222) UnityEditor.DockArea.RemoveTab (панель UnityEditor.EditorWindow) (в C: /buildslave/unity/build/Editor/Mono/GUI/DockArea.cs: 193) UnityEditor.EditorWindow.set_position (значение UnityEngine.Rect) (в C: /buildslave/unity/build/Editor/Mono/EditorWindow.cs: 1030) Manager.CenterWindow () (в разделе Активы / Редактор / Manager.cs: 81) Manager.ShowEditor () (в разделе Активы / Редактор / Manager.cs: 25)

Сценарий:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;

public class Manager : EditorWindow
{
    private static Manager editor;
    private static int width = 350;
    private static int height = 300;
    private static int x = 0;
    private static int y = 0;
    private static List<string> allFiles = new List<string>();
    private StreamWriter w;

    [MenuItem("Window/Manager")]
    static void ShowEditor()
    {
        editor = EditorWindow.GetWindow<Manager>();
        CenterWindow();
    }

    private void OnGUI()
    {
        if (GUILayout.Button("Rename"))
        {
            w = new StreamWriter(@"d:\test\names.txt");
            Rename();
        }
    }

    public void Rename()
    {
        DirSearch();

        if (allFiles.Count > 0)
        {
            for (int i = 0; i < allFiles.Count; i++)
            {
                int idx = allFiles[i].IndexOf("Assets");
                string filename = Path.GetFileName(allFiles[i]);
                string asset = allFiles[i].Substring(idx);
                AnimationClip orgClip = (AnimationClip)AssetDatabase.LoadAssetAtPath(
                     asset, typeof(AnimationClip));

                var fileName = Path.GetFileNameWithoutExtension(allFiles[i]);
                var importer = (ModelImporter)AssetImporter.GetAtPath(asset);

                RenameAndImport(importer, fileName);
            }

            w.Close();
        }
    }

    private void RenameAndImport(ModelImporter asset, string name)
    {
        ModelImporter modelImporter = asset as ModelImporter;
        ModelImporterClipAnimation[] clipAnimations = modelImporter.defaultClipAnimations;

        for (int i = 0; i < clipAnimations.Length; i++)
        {
            clipAnimations[i].name = "magic_" + name;
            w.WriteLine(clipAnimations[i].name);
        }

        modelImporter.clipAnimations = clipAnimations;
        modelImporter.SaveAndReimport();
    }

    private static void CenterWindow()
    {
        editor = EditorWindow.GetWindow<Manager>();
        x = (Screen.currentResolution.width - width) / 2;
        y = (Screen.currentResolution.height - height) / 2;
        editor.position = new Rect(x, y, width, height);
        editor.maxSize = new Vector2(width, height);
        editor.minSize = editor.maxSize;
    }

    static void DirSearch()
    {
        string info = Application.dataPath + "/Mixamo/Animations/medea_m_arrebola/Magic Pack";
        string[] fileInfo = Directory.GetFiles(info, "*.fbx", SearchOption.AllDirectories);
        foreach (string file in fileInfo)
        {
            if (file.EndsWith(".fbx"))
                allFiles.Add(file);
        }
    }
}

Строка 81:

editor.position = new Rect(x, y, width, height);

Строка 25:

CenterWindow();

Я не уверен, подключен ли он к StreamWriter. Я начал использовать его только вчера с этим сценарием, но ничего не вижу в исключениях, касающихся StreamWriter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...