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(); }