void OnDestroy()
        {
            SetTool(BrushTool.None);

#if PROBUILDER_4_0_OR_NEWER
            if (ProBuilderBridge.ProBuilderExists())
            {
                ProBuilderBridge.SetSelectMode(ProBuilderBridge.SelectMode.Object);
            }
#endif

            foreach (BrushMode m in modes)
            {
                GameObject.DestroyImmediate(m);
            }

            if (brushSettings != null)
            {
                GameObject.DestroyImmediate(brushSettings);
            }

            if (m_BrushEditor != null)
            {
                GameObject.DestroyImmediate(m_BrushEditor);
            }
        }
        /// <summary>
        /// Switch Polybrush to the given tool.
        /// </summary>
        /// <param name="brushTool">Tool to show in Polybrush window.</param>
        /// <param name="enableTool">If true, will activate the given tool automatically. Default: true.</param>
        internal void SetTool(BrushTool brushTool, bool enableTool = true)
        {
            if (brushTool == tool && mode != null)
            {
                return;
            }

#if PROBUILDER_4_0_OR_NEWER
            if (ProBuilderBridge.ProBuilderExists())
            {
                ProBuilderBridge.SetSelectMode(ProBuilderBridge.SelectMode.Object);
            }
#endif

            if (mode != null)
            {
                // Exiting edit mode
                if (m_LastHoveredGameObject != null)
                {
                    OnBrushExit(m_LastHoveredGameObject);
                    FinalizeAndResetHovering();
                }

                mode.OnDisable();
            }

            m_LastHoveredGameObject = null;

            System.Type modeType = brushTool.GetModeType();

            if (modeType != null)
            {
                mode = modes.FirstOrDefault(x => x != null && x.GetType() == modeType);

                if (mode == null)
                {
                    mode = (BrushMode)ScriptableObject.CreateInstance(modeType);
                }
            }

            // Handle tool auto activation/deactivation.
            tool = enableTool? brushTool : BrushTool.None;

            if (tool != BrushTool.None)
            {
                Tools.current = Tool.None;
                mode.OnEnable();
            }

            EnsureBrushSettingsListIsValid();
            DoRepaint();
        }