protected override void OnAttach()
        {
            base.OnAttach();
            base.Slot.Tag  = "Developer";
            this.Slot.Name = "Leftover LogiX Component Remover";
            NeosCanvasPanel neosCanvasPanel = base.Slot.AttachComponent <NeosCanvasPanel>();

            neosCanvasPanel.Panel.AddCloseButton();
            neosCanvasPanel.Panel.AddParentButton();
            neosCanvasPanel.Panel.Title = "Leftover LogiX Component Remover";
            neosCanvasPanel.CanvasSize  = new float2(300f, 200f);
            UIBuilder uIBuilder = new UIBuilder(neosCanvasPanel.Canvas);

            uIBuilder.VerticalLayout(4f);
            uIBuilder.FitContent(SizeFit.Disabled, SizeFit.MinSize);
            uIBuilder.Style.Height = 24f;
            _text = "Process root slot:";
            uIBuilder.Text(in _text);
            uIBuilder.Next("Root");
            uIBuilder.Current.AttachComponent <RefEditor>().Setup(ProcessRoot);
            uIBuilder.Spacer(24f);
            _text = "Remove LogixInterfaceProxy components";
            uIBuilder.Button(in _text, RemoveLogixInterfaceProxies);
            _text = "Remove LogixReference components";
            uIBuilder.Button(in _text, RemoveLogixReferences);
            uIBuilder.Spacer(24f);
            _text = "------";
            ResultsText.Target = uIBuilder.Text(in _text);
        }
        protected override void OnAttach()
        {
            base.OnAttach();
            // Create the UI for the wizard.
            this.Slot.Name = "MeshCollider Management Wizard";
            base.Slot.Tag  = "Developer";
            NeosCanvasPanel neosCanvasPanel = base.Slot.AttachComponent <NeosCanvasPanel>();

            neosCanvasPanel.Panel.AddCloseButton();
            neosCanvasPanel.Panel.AddParentButton();
            neosCanvasPanel.Panel.Title = "MeshCollider Management Wizard";
            neosCanvasPanel.CanvasSize  = new float2(800f, 900f);
            UIBuilder            uIBuilder = new UIBuilder(neosCanvasPanel.Canvas);
            List <RectTransform> rectList  = uIBuilder.SplitHorizontally(0.5f, 0.5f);
            // Build left hand side UI - options and buttons.
            UIBuilder uIBuilder2  = new UIBuilder(rectList[0].Slot);
            Slot      _layoutRoot = uIBuilder2.VerticalLayout(4f, 0f, new Alignment()).Slot;

            uIBuilder2.FitContent(SizeFit.Disabled, SizeFit.MinSize);
            uIBuilder2.Style.Height = 24f;
            UIBuilder uIBuilder3 = uIBuilder2;

            // Slot reference to which changes will be applied.
            _text = "Process root slot:";
            uIBuilder3.Text(in _text);
            uIBuilder3.Next("Root");
            uIBuilder3.Current.AttachComponent <RefEditor>().Setup(ProcessRoot);
            uIBuilder3.Spacer(24f);
            // Basic filtering settings for which MeshColliders are accepted for changes or listing.
            _text = "Ignore inactive:";
            uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(IgnoreInactive));
            _text = "Ignore disabled:";
            uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(IgnoreDisabled));
            _text = "Ignore non-persistent:";
            uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(IgnoreNonPersistent));
            _text = "Ignore user hierarchies:";
            uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(IgnoreUserHierarchies));
            _text      = "Tag:";
            tag.Target = uIBuilder3.HorizontalElementWithLabel(in _text, 0.2f, () => uIBuilder3.TextField());
            _text      = "Tag handling mode:";
            uIBuilder3.Text(in _text);
            uIBuilder3.EnumMemberEditor(useTagMode);
            uIBuilder3.Spacer(24f);
            // Settings for highlighing individual colliders.
            _text = "Highlight duration:";
            uIBuilder3.HorizontalElementWithLabel(in _text, 0.8f, () => uIBuilder3.PrimitiveMemberEditor(HighlightDuration));
            _text = "Highlight color:";
            uIBuilder3.Text(in _text);
            uIBuilder3.ColorMemberEditor(HighlightColor);
            uIBuilder3.Spacer(24f);
            // Controls for specific replacement collider settings.
            _text = "Replacement collider component:";
            uIBuilder3.Text(in _text);
            uIBuilder3.EnumMemberEditor(replacementColliderComponent);
            _text = "Replacement setup action:";
            uIBuilder3.Text(in _text);
            uIBuilder3.EnumMemberEditor(setupBoundsType);
            uIBuilder3.Spacer(24f);
            _text = "Preserve existing collider settings:";
            uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(PreserveColliderSettings));
            _text = "Set collision Type:";
            uIBuilder3.Text(in _text);
            Slot _hideTextSlot = _layoutRoot.GetAllChildren().Last();

            uIBuilder3.EnumMemberEditor(setColliderType);
            Slot _hideEnumSlot = _layoutRoot.GetAllChildren().Last().Parent.Parent;

            _text = "Collider Mass:";
            Slot _hideFloatSlot = uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.PrimitiveMemberEditor(Mass)).Slot.Parent;

            _text = "Set CharacterCollider:";
            Slot _hideBoolSlot1 = uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(SetCharacterCollider)).Slot.Parent;

            _text = "Set IgnoreRaycasts:";
            Slot _hideBoolSlot2 = uIBuilder3.HorizontalElementWithLabel(in _text, 0.9f, () => uIBuilder3.BooleanMemberEditor(SetIgnoreRaycasts)).Slot.Parent;

            uIBuilder3.Spacer(24f);
            // Hide some options if preserving existing settings.
            var _valCopy        = _layoutRoot.AttachComponent <ValueCopy <bool> >();
            var _boolValDriver  = _layoutRoot.AttachComponent <BooleanValueDriver <bool> >();
            var _valMultiDriver = _layoutRoot.AttachComponent <ValueMultiDriver <bool> >();

            _valCopy.Source.Target            = PreserveColliderSettings;
            _valCopy.Target.Target            = _boolValDriver.State;
            _boolValDriver.TrueValue.Value    = false;
            _boolValDriver.FalseValue.Value   = true;
            _boolValDriver.TargetField.Target = _valMultiDriver.Value;
            for (int i = 0; i < 5; i++)
            {
                _valMultiDriver.Drives.Add();
            }
            _valMultiDriver.Drives[0].Target = _hideTextSlot.ActiveSelf_Field;
            _valMultiDriver.Drives[1].Target = _hideEnumSlot.ActiveSelf_Field;
            _valMultiDriver.Drives[2].Target = _hideBoolSlot1.ActiveSelf_Field;
            _valMultiDriver.Drives[3].Target = _hideBoolSlot2.ActiveSelf_Field;
            _valMultiDriver.Drives[4].Target = _hideFloatSlot.ActiveSelf_Field;
            // Buttons for batch actions.
            _text = "List matching MeshColliders";
            uIBuilder3.Button(in _text, PopulateList);
            _text = "Replace all matching MeshColliders";
            uIBuilder3.Button(in _text, ReplaceAll);
            _text = "Remove all matching MeshColliders";
            uIBuilder3.Button(in _text, RemoveAll);
            uIBuilder3.Spacer(24f);
            _text = "------";
            resultsText.Target = uIBuilder3.Text(in _text);
            // Build right hand side UI - list of found MeshColliders.
            UIBuilder uIBuilder4 = new UIBuilder(rectList[1].Slot);

            uIBuilder4.ScrollArea();
            uIBuilder4.VerticalLayout(10f, 4f);
            _scrollAreaRoot = uIBuilder4.FitContent(SizeFit.Disabled, SizeFit.MinSize).Slot;
            // Prepare UIBuilder for addding elements to MeshCollider list.
            _listBuilder = uIBuilder4;
            _listBuilder.Style.MinHeight = 40f;
        }