Prefab Drawer 完成
事件处理
之前已经将 Prefab Drawer 的基本功能实现好了,现在通过对鼠标事件的处理来将之前的逻辑整合在一起:
private void HandleEvents () {
HandleUtility.AddDefaultControl (GUIUtility.GetControlID (FocusType.Passive));
Vector3 mousePos = Event.current.mousePosition;
switch (_mode) {
case Mode.View:
break;
case Mode.Paint:
DrawSelectedPrefab ();
if (Event.current.type == EventType.MouseDown) {
Paint (mousePos);
}
break;
case Mode.Erase:
if (Event.current.type == EventType.MouseDown || Event.current.type == EventType.MouseDrag) {
Erase (mousePos);
}
break;
}
}
绘制函数
最后在 OnSceneGUI
中调用所有的处理函数:
private void OnSceneGUI () {
Handles.BeginGUI ();
DrawToolbar ();
HandleUnityTools ();
HandleEvents ();
Handles.EndGUI ();
}
简单改进
为了让使用者更方便地选择要绘制的 Prefab(即 SelectPrefab
),这里对之前的 Prefab Center 进行简单的改进,添加一条命令可以直接选择该 Prefab 为绘制对象:
/*** SceneViewExtension/Assets/Tools/PrefabCenter/Editor/PrefabCenter.cs
*/
private void OnDetailGUI (int id) {
// ...
if (GUI.Button (new Rect (5, 108, _detailPosition.width - 10, 17), "Select Prefab")) {
SelectPrefab ();
}
// ...
}
private void SelectPrefab () {
GameObject prefabDrawer = GameObject.Find("Prefab Drawer");
prefabDrawer.GetComponent<PrefabDrawer.PrefabDrawer> ().SelectedPrefab = _shownItem;
}
编译完成后最终效果如下: