Как устранить эту ошибку? Окно графического интерфейса попыталось начать рендеринг, пока что-то еще не завершило рендериC#

Место общения программистов C#
Ответить
Anonymous
 Как устранить эту ошибку? Окно графического интерфейса попыталось начать рендеринг, пока что-то еще не завершило рендери

Сообщение Anonymous »

Это единственный скрипт редактора в проекте:
Ошибка в редакторе не указывает имя скрипта или номер строки.
Когда я устраню ошибку в окне консоли, ошибка появится снова через несколько секунд.
Полное сообщение об ошибке:
Окно графического интерфейса попыталось начать рендеринг, в то время как что-то еще не завершило рендеринг! Либо у вас рекурсивный рендеринг OnGUI, либо предыдущий OnGUI не был очищен должным образом.

Код: Выделить всё

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

[CustomEditor(typeof(TagsAndLayers))]
public class TagsAndLayersCustomEditor : Editor
{
string tagname = "";
string layername = "";

public override void OnInspectorGUI()
{
DrawDefaultInspector();
TagsAndLayers myTarget = (TagsAndLayers)target;

tagname = EditorGUILayout.TextField("", tagname);

if (tagname == "" || tagname == null)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
if (GUILayout.Button("Create Tag"))
{
myTarget.AddNewTag(tagname);
}

if (GUILayout.Button("Remove Tag"))
{
myTarget.DeleteTag(tagname);
}

GUILayout.Space(50);

layername = EditorGUILayout.TextField("", layername);

if(layername == "" || layername == null)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
if (GUILayout.Button("Create Layer"))
{
myTarget.AddNewLayer(layername);
}

if (GUILayout.Button("Remove Layer"))
{
myTarget.DeleteLayer(layername);
}
}
}
Вот как выглядит сценарий после изменений в ответе на решение:

Код: Выделить всё

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

[CustomEditor(typeof(TagsAndLayers))]
public class TagsAndLayersCustomEditor : Editor
{
string tagname = "";
string layername = "";

public override void OnInspectorGUI()
{

DrawDefaultInspector();
TagsAndLayers myTarget = (TagsAndLayers)target;

EditorApplication.delayCall += () =>  myTarget.AddNewTag(tagname);

tagname = EditorGUILayout.TextField("", tagname);

if (tagname == "" || tagname == null)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
if (GUILayout.Button("Create Tag"))
{
myTarget.AddNewTag(tagname);
}

if (GUILayout.Button("Remove Tag"))
{
myTarget.DeleteTag(tagname);
}

GUILayout.Space(50);

layername = EditorGUILayout.TextField("", layername);

if(layername == "" || layername == null)
{
GUI.enabled = false;
}
else
{
GUI.enabled = true;
}
if (GUILayout.Button("Create Layer"))
{
myTarget.AddNewLayer(layername);
}

if (GUILayout.Button("Remove Layer"))
{
myTarget.DeleteLayer(layername);
}
}
}
Я добавил строку:

Код: Выделить всё

EditorApplication.delayCall += () =>  myTarget.AddNewTag(tagname);
Теперь ошибки больше нет, но эта новая строка заставляет постоянно добавлять новый тег без остановки, когда я нажимаю кнопку «Удалить тег», он добавляет тег снова из-за этой новой строки.>

Подробнее здесь: https://stackoverflow.com/questions/683 ... -something
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»