public float PrefabModeButton(GameObjectTreeViewItem item, Rect selectionRect) { float contentRectRight = selectionRect.xMax; if (item.showPrefabModeButton) { float yOffset = (selectionRect.height - GameObjectStyles.rightArrow.fixedWidth) / 2; Rect buttonRect = new Rect( selectionRect.xMax - GameObjectStyles.rightArrow.fixedWidth - GameObjectStyles.rightArrow.margin.right, selectionRect.y + yOffset, GameObjectStyles.rightArrow.fixedWidth, GameObjectStyles.rightArrow.fixedHeight); int instanceID = item.id; GUIContent content = buttonRect.Contains(Event.current.mousePosition) ? PrefabStageUtility.GetPrefabButtonContent(instanceID) : GUIContent.none; if (GUI.Button(buttonRect, content, GameObjectStyles.rightArrow)) { GameObject go = EditorUtility.InstanceIDToObject(instanceID) as GameObject; string assetPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(go); Object originalSource = AssetDatabase.LoadMainAssetAtPath(assetPath); if (originalSource != null) { var prefabStageMode = PrefabStageUtility.GetPrefabStageModeFromModifierKeys(); PrefabStageUtility.OpenPrefab(assetPath, go, prefabStageMode, StageNavigationManager.Analytics.ChangeType.EnterViaInstanceHierarchyRightArrow); } } contentRectRight = buttonRect.xMin; } return(contentRectRight); }