我已经为自己的目的改编了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并手动将其添加到其中。更改是否存储在某个地方?如何应用更改?注意:右键单击并“重新导入”无效。
如您所见,在编辑器模式下,它实际上在这里。
我的编辑器代码如下:
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
}
答案 0 :(得分:1)
您必须确保您的EditorScript正确调用EditorUtility.SetDirty
。
我通常总是在编辑器脚本的OnEnable()方法中调用它,因为一旦选择了有问题的对象并显示了检查器窗口,就会立即调用它。
private YourClass classObject;
private void OnEnable()
{
classObject = (YourClass)target;
EditorUtility.SetDirty(classObject);
}