static void ResetGameObjectReferences(GameObject go)
    {
        // Try to get the swapper
        AssetResolutionSwapper swapper = go.GetComponent <AssetResolutionSwapper>();

        if (swapper != null)
        {
            SpriteRenderer spriteRenderer = go.GetComponent <SpriteRenderer>();
            if (spriteRenderer != null && swapper.SpriteName.Length > 0)
            {
                if (!swapper.DisableSwapping)
                {
                    spriteRenderer.sprite = swapper.defaultSprite;
                }
            }

            Animator animator = go.GetComponent <Animator>();
            if (animator != null && swapper.AnimationControllerName.Length > 0)
            {
                if (!swapper.DisableSwapping)
                {
                    animator.runtimeAnimatorController = swapper.defaultAnimatorController;
                }
            }
        }

        Transform transf = go.transform;
        int       i;

        for (i = 0; i < transf.childCount; ++i)
        {
            ResetGameObjectReferences(transf.GetChild(i).gameObject);
        }
    }
    //
    static AssetResolutionSwapper AddAssetSwapper(GameObject go)
    {
        AssetResolutionSwapper swapper = go.AddComponent <AssetResolutionSwapper>();

        Multires._bDisableUpdate = false;
        swapper.ForceUpdate();
        Multires._bDisableUpdate = true;
        return(swapper);
    }
    static void PrepareGameObject(GameObject go)
    {
        // Try to get the swapper
        AssetResolutionSwapper swapper = go.GetComponent <AssetResolutionSwapper>();

        // Get sprite renderer
        SpriteRenderer spriteRenderer = go.GetComponent <SpriteRenderer>();

        if (spriteRenderer != null && spriteRenderer.sprite != null)
        {
            if (swapper == null)
            {
                swapper = AddAssetSwapper(go);
            }

            if (!swapper.DisableSwapping)
            {
                // Remove reference to prevent loading
                swapper.defaultSprite = spriteRenderer.sprite;
                spriteRenderer.sprite = null;
            }
        }

        // Does the prefab have an animator
        Animator animator = go.GetComponent <Animator>();

        if (animator != null && animator.runtimeAnimatorController != null)
        {
            if (swapper == null)
            {
                swapper = AddAssetSwapper(go);
            }

            if (!swapper.DisableSwapping)
            {
                // Remove reference to prevent loading
                swapper.defaultAnimatorController  = animator.runtimeAnimatorController;
                animator.runtimeAnimatorController = null;
            }
        }

        // Iterate through children
        Transform  transf = go.transform;
        GameObject child;
        int        i;

        for (i = 0; i < transf.childCount; ++i)
        {
            child = transf.GetChild(i).gameObject;
            PrepareGameObject(child);
        }
    }
    // Remove sprite references
    static void RemoveSpriteReferences(GameObject[] objects)
    {
        Debug.Log("Remove sprite references begin");

        SpriteRenderer         renderer;
        AssetResolutionSwapper swapper = null;
        Animator animator;

        foreach (GameObject go in objects)
        {
            swapper = go.GetComponent <AssetResolutionSwapper>();

            // Sprite renderers
            renderer = go.GetComponent <SpriteRenderer>();
            if (renderer != null)
            {
                if (renderer.sprite != null)
                {
                    if (swapper == null)
                    {
                        swapper = AddAssetSwapper(go);
                    }

                    if (!swapper.DisableSwapping)
                    {
                        // Remove references to prevent loading
                        swapper.defaultSprite = renderer.sprite;
                        renderer.sprite       = null;
                    }
                }
                else
                {
                    if (swapper != null)
                    {
                        swapper.SpriteName    = "";
                        swapper.defaultSprite = null;
                    }
                }
            }

            // Controller references
            animator = go.GetComponent <Animator>();
            if (animator != null && animator.runtimeAnimatorController != null)
            {
                if (swapper == null)
                {
                    swapper = AddAssetSwapper(go);
                }

                if (!swapper.DisableSwapping)
                {
                    // Remove references to prevent loading
                    swapper.defaultAnimatorController  = animator.runtimeAnimatorController;
                    animator.runtimeAnimatorController = null;
                }
            }
            else
            {
                if (swapper != null)
                {
                    swapper.AnimationControllerName   = "";
                    swapper.defaultAnimatorController = null;
                }
            }
        }

        Debug.Log("Remove sprite references finished");
    }