Изменение материала с помощью скрипта редактора показывает результат, только курсор наводит курсор на вид сцены или вид C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Изменение материала с помощью скрипта редактора показывает результат, только курсор наводит курсор на вид сцены или вид

Сообщение Anonymous »

Я написал скрипт для настройки цвета и значений материала в режиме редактора. Его структура выглядит следующим образом.

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

  private void OnGUI()
{
if (basicTextilePreset.Count != 5)
{
LoadBasic();
}

if (material != null)
{
if (material != _nowMaterial)
{

SaveOriginalValues();
_nowMaterial = material;
_nowTextileType = TextileType;

Select();
}
if (material == _nowMaterial)
{
if (TextileType != _nowTextileType)
{
_nowTextileType = TextileType;

Select();
}
else
{
ChangeMaterialDynamically();
}

}
}
if (material == null && _nowMaterial != null)
{
_nowMaterial = null;
originalTextilePreset = null;
}

}
а это скриншот инспектора компонента.
введите здесь описание изображения.
Как видите, этот скрипт настраивает значения и цвет (метод ChangeMaterialDynamically) при вызове OnGUI. Насколько я знаю, OnGUI вызывается для обработки и обработки событий графического интерфейса. Поэтому я подумал, что корректировка стоимости материала с помощью этого инспектора скриптов покажет результат сразу, как только я что-то откорректирую.
Но его результат не отображается сразу. Он отображается только после наведения курсора на вид сцены или вид игры, если я одновременно отображаю вид игры и вид сцены в редакторе.
Я показываю вид игры и вид сцены одновременно. в редакторе](https://i.sstatic.net/65TTp97B.png)
или если я вижу один между видом игры и видом сцены, результат иногда не применяется или применяется через несколько секунд.
Этот скрипт выполняется в режиме редактирования (выполняется в режиме редактирования), поэтому я попытался принудительно обновить его, используя метод ниже

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

   public override void OnInspectorGUI()
{
base.OnInspectorGUI();

if (GUI.changed)
{

UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
EditorApplication.QueuePlayerLoopUpdate();
EditorApplication.update();
EditorApplication.RepaintProjectWindow();
EditorApplication.RepaintHierarchyWindow();
EditorApplication.RepaintAnimationWindow();
SceneView.RepaintAll();

}

}
Я написал их в OnGUI в своем скрипте. Но ничего не изменилось (думаю). Обновление по-прежнему применяется через несколько секунд или не применяется, если я не вижу одновременно вид игры и сцену в редакторе.

Подробнее здесь: https://stackoverflow.com/questions/790 ... into-scene
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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