如何访问动画窗口的私有属性?

时间:2018-08-03 06:33:56

标签: c# unity3d reflection

我想访问m_AnimEditor中的私有财产Animation Window(老实说,我想更深入一点,但现在并不重要)。

我正在打开窗户:

EditorWindow[] allWindows = Resources.FindObjectsOfTypeAll<EditorWindow>();
EditorWindow animationWindow = null;
foreach (var editorWindow in allWindows) {
    if (editorWindow.titleContent.text.Equals("Animation")) {
        animationWindow = editorWindow;
        break;
    }
}

现在,我想获得m_AnimEditor属性:

PropertyInfo animWindowPropInfo = animationWindow.GetType().GetProperty("m_AnimEditor", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);

但是我得到null。请参见下面的调试面板:

enter image description here

我认为这是因为animationWindow类型可能是EditorWindow,尽管调试器向我展示了"(UnityEditor.AnimationWindow)",但我仍尝试转换该对象:

Assembly assem = typeof(EditorWindow).Assembly;
Type type = assem.GetType("UnityEditor.AnimationWindow");
object castedObject = Convert.ChangeType(animationWindow, type);
PropertyInfo castedObjectPropInfo = castedObject.GetType().GetProperty("m_AnimEditor", BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);
PropertyInfo[] castedObjectPropInfos = castedObject.GetType().GetProperties(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.GetField);

但是结果与之前相同。 ,公共财产(例如wantsMouseMove),我很容易理解。仅与私有财产有关。


也许我做错了。我该怎么做才能获得私有财产,然后再获得那个财产(对象)的财产?

1 个答案:

答案 0 :(得分:2)

我尝试使用GetField,这可以获取字段信息。希望对您有所帮助。

FieldInfo fieldInfo = animationWindow.GetType().GetField("m_AnimEditor", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

enter image description here