Unity编辑器不会更新资产

时间:2019-05-16 10:11:19

标签: c# unity3d

我已经为自己的目的改编了Unity的2d-extras,但是自定义资产有时会停止更新。

典型的周期是:我在检查器中分配了属性和标志,并将其保存,可以在编辑器模式下看到资产更新,并且可以在游戏模式下看到它们。但是,如果我使用文本编辑器打开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

我不得不手动编辑资产文件,但是很累。对于某些资源,我无法做到这一点-例如,我无法获取文件ID并手动将其添加到其中。更改是否存储在某个地方?如何应用更改?注意:右键单击并“重新导入”无效。

如您所见,在编辑器模式下,它实际上在这里。

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 个答案:

答案 0 :(得分:1)

您必须确保您的EditorScript正确调用EditorUtility.SetDirty

我通常总是在编辑器脚本的OnEnable()方法中调用它,因为一旦选择了有问题的对象并显示了检查器窗口,就会立即调用它。

private YourClass classObject;

private void OnEnable()
{
    classObject = (YourClass)target;
    EditorUtility.SetDirty(classObject);
}