我正在编写一个自定义检查器来解决我在Unity默认检查器中遇到的问题。我的系统使用反射和属性来绘制可自定义的检查器。 在不输入playmode的情况下修改实例工作正常。问题是,编辑器似乎没有看到我对对象所做的更改。这可以通过常规方式观察:
我的编辑器需要大约一秒钟来保存场景,并且光标会在此期间发生变化。这可以通过在更改任何MonoBehaviour
(f.e。RigidBody
)中的某些值后保存场景来触发。
使用我自己的检查器并修改值,然后保存场景不会触发实际的保存过程(没有视觉线索)。 好像Unity认为没有变化。
GameObject我想在检查员中修改:
[EnableIR]
public class CustomerSpawn : MonoBehaviour
{
[Inspect(InspectionKind.DropableObject)]
public GameObject CustomerPrefab; // This field resets to null on play.
}
我使用PropertyInfo.SetValue
或FieldInfo.SetValue
来修改使用Reflection的值和引用。 我们需要调用一些方法来通知Unity有关更改吗?
链接:
SetValue
)答案 0 :(得分:1)
我自己想出来了,我相信这个解决方案在网络上应该比现在更多(基本上没有)。一种解决方案是致电EditorUtility.SetDirty
以通知Unity已修改该项目:
// `target` is the object you are currently inspecting.
EditorUtility.SetDirty((UnityEngine.Object)target);
正如@Programmer EditorSceneManager.MarkSceneDirty
的评论中所提到的,应该使用。这在the docs中也有提及,但它们没有提供理由或解释。