Я использую 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.