我想访问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
。请参见下面的调试面板:
我认为这是因为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
),我很容易理解。仅与私有财产有关。
也许我做错了。我该怎么做才能获得私有财产,然后再获得那个财产(对象)的财产?