参与实验的事件方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Open()
OnEnable()
OnFocus()
OnGUI()
OnInspectorUpdate()
OnLostFocus()
OnDisable()
OnDestroy()
OnHierarchyChange()
OnProjectChange()
OnSelectionChange()
|
实验代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
| using UnityEditor; using UnityEngine;
public class MyWindow : EditorWindow { bool bool_OnEnable = true; bool bool_OnInspectorUpdate = true; bool bool_OnHierarchyChange = true; bool bool_OnProjectChange = true; bool bool_OnGUI = true; bool bool_OnFocus = true; bool bool_OnSelectionChange = true; bool bool_OnLostFocus = true; bool bool_OnDisable = true; bool bool_OnDestroy = true;
public static void Open() { Debug.Log("打开窗口"); Debug.Log("BeforeOpen");
GetWindow<MyWindow>();
Debug.Log("AfterOpen"); }
private void OnEnable() { if (bool_OnEnable) { bool_OnEnable = false; Debug.Log("OnEnable"); } }
private void OnInspectorUpdate() { if (bool_OnInspectorUpdate) { bool_OnInspectorUpdate = false; Debug.Log("OnInspectorUpdate"); } }
private void OnHierarchyChange() { if (bool_OnHierarchyChange) { bool_OnHierarchyChange = false; Debug.Log("OnHierarchyChange"); } }
private void OnProjectChange() { if (bool_OnProjectChange) { bool_OnProjectChange = false; Debug.Log("OnProjectChange"); } }
private void OnGUI() { if (bool_OnGUI) { bool_OnGUI = false; Debug.Log("OnGUI"); } }
private void OnFocus() { if (bool_OnFocus) { bool_OnFocus = false; Debug.Log("OnFocus"); } }
private void OnSelectionChange() { if (bool_OnSelectionChange) { bool_OnSelectionChange = false; Debug.Log("OnSelectionChange"); } }
private void OnLostFocus() { if (bool_OnLostFocus) { bool_OnLostFocus = false; Debug.Log("---------------------------------------------------------------------------------------------------------------------"); Debug.Log("关闭窗口"); Debug.Log("OnLostFocus"); } }
private void OnDisable() { if (bool_OnDisable) { bool_OnDisable = false; Debug.Log("OnDisable"); } }
private void OnDestroy() { if (bool_OnDestroy) { bool_OnDestroy = false; Debug.Log("OnDestroy"); } } }
|
实验输出
实验结论
下图中有一个点需要特别注意, OnEnable()
和 OnFocus()
是在 GetWindow()
方法返回之前执行的. 因此 OnEnable()
和 OnFocus()
中不能对 GetWindow()
的返回值做任何操作, 因为此时的返回值还是空值.
另外的三个 Change() 类事件方法:
OnHierarchyChange()
每当场景的层次结构发生变化时调用.
OnProjectChange()
每当项目发生更改时调用.
OnSelectionChange()
每当选择发生更改时调用.