Привет, помоги с рефакторингом кода для unity я бы хотел сохрать его гибкость так как дальше мне нужно будет сделать несколько копий но поменять контекст 
using DG.Tweening;
using Extensions;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

public class WeaponAK : MonoBehaviour
{
    [SerializeField]
    private Animator animator;
    [SerializeField]
    private Transform fuseAK;
    [SerializeField]
    private Transform zatvorAK;
    [SerializeField]
    private AudioSource audioSourse;
    [SerializeField]
    private CustomGrabInteractable grabInteractable;
    [SerializeField]
    private Collider colliderZatvor;
    [SerializeField]
    private TriggerPerevotchik fuseFire;
    [SerializeField]
    private DetachOnGrab detachMagazin;
    [SerializeField]
    private DetachOnGrab detachResiver;
    [SerializeField]
    private DetachOnGrab detachGazTube;
    [SerializeField]
    private DetachOnGrab detachShompol;
    [SerializeField]
    private DetachOnGrab detachMufta;
    [SerializeField]
    private DetachOnGrab detachZatvornayaRama;
    [SerializeField]
    private DetachOnGrab detachPinal;
    [SerializeField]
    private DetachOnGrab detachZatvor;
    [SerializeField]
    private List<AudioClip> audioClips;
    [SerializeField]
    private InstallingBody installingBody;


    private bool isPerevotchikOn = false;
    private bool isZatvorOn = false;
    private bool isMagazinInstallation = true;
    private bool isResiverInstallation = true;
    private bool isGazTubeInstallation = true;
    private bool isShompolInstallation = true;
    private bool isMuftaInstallation = true;
    private bool isZatvornayaRamaInstallation = true;
    private bool isPinalInstallation = true;
    private bool isZatvorlInstallation = true;

    private void Start()
    {
        fuseFire.Initialize();
        detachMagazin.Initialize();
        detachResiver.Initialize();
        detachGazTube.Initialize();
        detachShompol.Initialize();
        detachMufta.Initialize();
        detachZatvornayaRama.Initialize();
        detachPinal.Initialize();
        detachZatvor.Initialize();

        installingBody.AllDeactiveTrigger();

        detachMagazin.OnDetalGrab += DetalGrabMagazin;
        detachMagazin.OnInstallationDetal += InstallationDetalMagazin;

        detachResiver.OnDetalGrab += DetalGrabResiver;
        detachResiver.OnInstallationDetal += InstallationDetalResiver;

        detachGazTube.OnDetalGrab += DetalGrabGazTube;
        detachGazTube.OnInstallationDetal += InstallationDetalGazTube;

        detachShompol.OnDetalGrab += DetalGrabShompol;
        detachShompol.OnInstallationDetal += InstallationDetalShompol;

        detachMufta.OnDetalGrab += DetalGrabMufta;
        detachMufta.OnInstallationDetal += InstallationDetalMufta;

        detachZatvornayaRama.OnDetalGrab += DetalGrabZatvornayaRama;
        detachZatvornayaRama.OnInstallationDetal += InstallationDetalZatvornayaRama;

        detachPinal.OnDetalGrab += DetalGrabPinal;
        detachPinal.OnInstallationDetal += InstallationDetalPinal;

        detachZatvor.OnDetalGrab += DetalGrabZatvor;
        detachZatvor.OnInstallationDetal += InstallationDetalZatvor;

        grabInteractable.OnPullingTrigger += PullingTrigger;
        fuseFire.OnTrigger += PerevotchikTrigger;
        grabInteractable.OnZatvorTrigger += ZatvorTrigger;
    }

    private void InstallationDetalZatvor(ColliderID iD)
    {
        isZatvorlInstallation = true;
        audioSourse.PlayOneShot(audioClips[12]);
        installingBody.DeactiveTrigger(iD);
        animator.enabled = false;
        // Можно подождать 1 кадр или изменить что-то в объекте тут
        animator.enabled = true;
        animator.Rebind();
    }

    private void DetalGrabZatvor(ColliderID iD)
    {
        animator.Rebind();
        if (isZatvorlInstallation)
        {
            isZatvorlInstallation = false;
            audioSourse.PlayOneShot(audioClips[12]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void InstallationDetalPinal(ColliderID iD)
    {
        isPinalInstallation = true;
        audioSourse.PlayOneShot(audioClips[12]);
        installingBody.DeactiveTrigger(iD);
    }

    private void DetalGrabPinal(ColliderID iD)
    {
        if (isPinalInstallation)
        {
            isPinalInstallation = false;
            audioSourse.PlayOneShot(audioClips[12]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void InstallationDetalZatvornayaRama(ColliderID iD)
    {
        isZatvornayaRamaInstallation = true;
        detachZatvornayaRama.DeactivatedDetal();
        installingBody.DeactiveTrigger(iD);
        detachZatvor.DeactivatedDetal();
        animator.enabled = false;
        // Можно подождать 1 кадр или изменить что-то в объекте тут
        animator.enabled = true;
        animator.Rebind();
    }

    private void DetalGrabZatvornayaRama(ColliderID iD)
    {
        if (isZatvornayaRamaInstallation)
        {
            isZatvornayaRamaInstallation = false;
            installingBody.ActiveTrigger(iD);
            detachZatvor.ActivatedDetal();
            animator.Rebind();
        }
    }

    private void InstallationDetalMufta(ColliderID iD)
    {
        grabInteractable.colliders.Add(colliderZatvor);
        isMuftaInstallation = true;
        audioSourse.PlayOneShot(audioClips[10]);
        installingBody.DeactiveTrigger(iD);
    }

    private void DetalGrabMufta(ColliderID iD)
    {
        if (isMuftaInstallation)
        {
            grabInteractable.colliders.Remove(colliderZatvor);
            detachZatvornayaRama.ActivatedDetal();
            isMuftaInstallation = false;
            audioSourse.PlayOneShot(audioClips[10]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void InstallationDetalShompol(ColliderID iD)
    {
        isShompolInstallation = true;
        audioSourse.PlayOneShot(audioClips[9]);
        installingBody.DeactiveTrigger(iD);
    }

    private void DetalGrabShompol(ColliderID iD)
    {
        if (isShompolInstallation)
        {
            isShompolInstallation = false;
            audioSourse.PlayOneShot(audioClips[8]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void InstallationDetalGazTube(ColliderID iD)
    {
        isGazTubeInstallation = true;
        audioSourse.PlayOneShot(audioClips[11]);
        installingBody.DeactiveTrigger(iD);
    }

    private void DetalGrabGazTube(ColliderID iD)
    {
        if (isResiverInstallation)
        {
            isGazTubeInstallation = false;
            audioSourse.PlayOneShot(audioClips[11]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void InstallationDetalResiver(ColliderID iD)
    {
        detachMufta.DeactivatedDetal();
        isResiverInstallation = true;
        audioSourse.PlayOneShot(audioClips[6]);
        installingBody.DeactiveTrigger(iD);
    }

    private void InstallationDetalMagazin(ColliderID iD)
    {
        isMagazinInstallation = true;
        audioSourse.PlayOneShot(audioClips[5]);
        installingBody.DeactiveTrigger(iD);
    }

    private void DetalGrabResiver(ColliderID iD)
    {
        if (isResiverInstallation)
        {
            detachMufta.ActivatedDetal();
            isResiverInstallation = false;
            audioSourse.PlayOneShot(audioClips[6]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void DetalGrabMagazin(ColliderID iD)
    {
        if (isMagazinInstallation)
        {
            isMagazinInstallation = false;
            audioSourse.PlayOneShot(audioClips[4]);
            installingBody.ActiveTrigger(iD);
        }
    }

    private void ZatvorTrigger(bool isReleased)
    {
        if (!isMuftaInstallation)
            return;
        if (isZatvorOn == isReleased)
            return;

        isZatvorOn = isReleased;

        if (isReleased)
        {
            if (isPerevotchikOn)
            {
                animator.Play("BoltCarrier");
                audioSourse.PlayOneShot(audioClips[2]);
            }
            else
            {
                animator.Play("ShutterIsFuseOn");
                audioSourse.PlayOneShot(audioClips[2]);
            }
        }
        else
        {
            if (isPerevotchikOn)
            {
                animator.Play("BoltCarrierOff");
                audioSourse.PlayOneShot(audioClips[3]);
            }
            else
            {
                animator.Play("ShutterIsFuseOff");
                audioSourse.PlayOneShot(audioClips[3]);
            }
        }
    }

    public void PerevotchikTrigger()
    {
        isPerevotchikOn = !isPerevotchikOn;
        if (isPerevotchikOn)
        {
            animator.Play("SwitchingFire");
            audioSourse.PlayOneShot(audioClips[1]);
        }
        else
        {
            animator.Play("SwitchingFireBlock");
            audioSourse.PlayOneShot(audioClips[1]);
        }
    }

    private void PullingTrigger()
    {
        animator.Play("PullingTrigger");
        audioSourse.PlayOneShot(audioClips[0]);
    }

    private void OnDestroy()
    {
        detachMagazin.OnDetalGrab -= DetalGrabMagazin;
        detachMagazin.OnInstallationDetal -= InstallationDetalMagazin;

        detachResiver.OnDetalGrab -= DetalGrabResiver;
        detachResiver.OnInstallationDetal -= InstallationDetalResiver;

        detachGazTube.OnDetalGrab -= DetalGrabGazTube;
        detachGazTube.OnInstallationDetal -= InstallationDetalGazTube;

        detachShompol.OnDetalGrab -= DetalGrabShompol;
        detachShompol.OnInstallationDetal -= InstallationDetalShompol;

        detachMufta.OnDetalGrab -= DetalGrabMufta;
        detachMufta.OnInstallationDetal -= InstallationDetalMufta;

        detachZatvornayaRama.OnDetalGrab -= DetalGrabZatvornayaRama;
        detachZatvornayaRama.OnInstallationDetal -= InstallationDetalZatvornayaRama;

        detachPinal.OnDetalGrab -= DetalGrabPinal;
        detachPinal.OnInstallationDetal -= InstallationDetalPinal;

        detachZatvor.OnDetalGrab -= DetalGrabZatvor;
        detachZatvor.OnInstallationDetal -= InstallationDetalZatvor;

        grabInteractable.OnPullingTrigger -= PullingTrigger;
        fuseFire.OnTrigger -= PerevotchikTrigger;
        grabInteractable.OnZatvorTrigger -= ZatvorTrigger;
    }
}