привет, помоги с рефакторингом кода 
 public class ConstructorPanel : MonoBehaviour
 {
     [SerializeField]
     private List<InteractiveElements> registerBlocks;
     [SerializeField]
     private List<InteractiveElements> registerObstacles;
     [SerializeField]
     private List<InteractiveElements> registerContainers;
     [SerializeField]
     private List<InteractiveElements> registerDevices;

     [SerializeField]
     private MenuConstructor menuConstructor;

     private List<ConstructorType> activConstructorTypes;
     private List<InteractiveElements> allRegisters;

     public void Initialized()
     {
         allRegisters = new List<InteractiveElements>();
         allRegisters.AddRange(registerBlocks);
         allRegisters.AddRange(registerObstacles);
         allRegisters.AddRange(registerContainers);
         allRegisters.AddRange(registerDevices);

         activConstructorTypes = new List<ConstructorType>();

         menuConstructor.Initialized();
         menuConstructor.OnChoiceType += ActivateRegister;
     }

     public void ActivateRegister(ConstructorType constructorType)
     {
         DeactivateRegisters();

         if (activConstructorTypes.Contains(constructorType))
         {
             activConstructorTypes.Remove(constructorType);
         }
         else
         {
             activConstructorTypes.Add(constructorType);
         }

         if (activConstructorTypes.Count == 0)
         {
             ActivateAllRegisters();
         }
         else
         {
             foreach (var type in activConstructorTypes)
             {
                 switch (type)
                 {
                     case ConstructorType.registerBlocks:
                         ActivateType(registerBlocks);
                         break;
                     case ConstructorType.registerObstacles:
                         ActivateType(registerObstacles);
                         break;
                     case ConstructorType.registerContainers:
                         ActivateType(registerContainers);
                         break;
                     case ConstructorType.registerDevices:
                         ActivateType(registerDevices);
                         break;
                 }
             }
         }
     }

     private void ActivateType(List<InteractiveElements> registers)
     {
         foreach (var register in registers)
         {
             register.gameObject.SetActive(true); 
         }
     }

     private void DeactivateRegisters()
     {
         foreach (var register in allRegisters)
         {
             register.gameObject.SetActive(false);
         }
     }

     private void ActivateAllRegisters()
     {
         foreach (var register in allRegisters)
         {
             register.gameObject.SetActive(true);
         }
     }

     public void Remove()
     {
         menuConstructor.OnChoiceType -= ActivateRegister;
         menuConstructor.Remove();
     }    
 }

 public class MenuConstructor : MonoBehaviour
 {
     [SerializeField]
     private InteractiveElements InteractiveElementBlock;
     [SerializeField]
     private InteractiveElements InteractiveElementObstacle;
     [SerializeField]
     private InteractiveElements InteractiveElementContainer;
     [SerializeField]
     private InteractiveElements InteractiveElementDevice;

     public event Action<ConstructorType> OnChoiceType;

     public void Initialized()
     {
         InteractiveElementBlock.OnClick += ChoiceTypeBlock;
         InteractiveElementObstacle.OnClick += ChoiceTypeObstacle;
         InteractiveElementContainer.OnClick += ChoiceTypeContainer;
         InteractiveElementDevice.OnClick += ChoiceTypeDevice;
     }

     private void ChoiceTypeBlock()
     {
         OnChoiceType?.Invoke(ConstructorType.registerBlocks);
     }
     private void ChoiceTypeObstacle()
     {
         OnChoiceType?.Invoke(ConstructorType.registerObstacles);
     }
     private void ChoiceTypeContainer()
     {
         OnChoiceType?.Invoke(ConstructorType.registerContainers);
     }
     private void ChoiceTypeDevice()
     {
         OnChoiceType?.Invoke(ConstructorType.registerDevices);
     }

     public void Remove()
     {
         InteractiveElementBlock.OnClick -= ChoiceTypeBlock;
         InteractiveElementObstacle.OnClick -= ChoiceTypeObstacle;
         InteractiveElementContainer.OnClick -= ChoiceTypeContainer;
         InteractiveElementDevice.OnClick -= ChoiceTypeDevice;
     }
 }