Редактор Unity не обновляет актив - PullRequest
0 голосов
/ 16 мая 2019

Я адаптировал 2d-дополнения Unity для своих собственных целей, но настроенный ресурс иногда прекращал обновляться.

Типичный цикл: я присваиваю атрибуты и флаги в инспекторе и сохраняю их, я вижу, как актив обновляется в режиме редактора, и я вижу, как они работают в режиме игры. Но если я открою tile.asset в текстовом редакторе, вы увидите, что в файл ничего не сохраняется!

// Example: WaterEntity.asset

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 0}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 9d1514134bc4fbd41bb739b1b9a49231, type: 3}
  m_Name: WaterEntity
  m_EditorClassIdentifier: 
  m_DefaultSprite: {fileID: 0}    // in editor but not updated
  m_DefaultGameObject: {fileID: 0}
  m_DefaultColliderType: 1
  m_DefaultTileAttributes: 8
  m_DefaultTileEntity: 16
  m_TileAttributesContainer: 0
  isEntity: 0                     // in editor but not updated
  isBindToObject: 0               // in editor but not updated

Мне пришлось вручную редактировать файл ресурсов, но он стал утомительным. А для некоторых ресурсов я не могу этого сделать - например, я не могу получить идентификатор файла и добавить его вручную. Кэшируется ли где-нибудь изменение? Как я могу применить изменения? Примечание: щелчок правой кнопкой мыши и «reimport» не работает.

Как видите, в режиме редактора он на самом деле здесь.

enter image description here

У меня есть код редактора, приведенный ниже:

public override void OnInspectorGUI()
{
  tile.m_DefaultSprite = EditorGUILayout.ObjectField("Default Sprite", tile.m_DefaultSprite, typeof(Sprite), false);
  tile.m_DefaultColliderType = (Tile.ColliderType)EditorGUILayout.EnumPopup("Default Collider", tile.m_DefaultColliderType);
  // whatever
}

1 Ответ

1 голос
/ 16 мая 2019

Вы должны убедиться, что ваш EditorScript правильно вызывает EditorUtility.SetDirty.

Обычно я всегда вызываю его в моем методе OnEnable () сценария редактора, так как он вызывается, как только вы выбираете объектпод вопросом и показаны в окне инспектора.

private YourClass classObject;

private void OnEnable()
{
    classObject = (YourClass)target;
    EditorUtility.SetDirty(classObject);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...