public static void LoadMapFromXML()
    {
        TextAsset    asset  = Resources.Load <TextAsset>("BackgroundSplit");
        MemoryStream stream = new MemoryStream(asset.bytes);

        XmlSerializer             serializer = new XmlSerializer(typeof(BackgroundPieceCollection));
        BackgroundPieceCollection collection = (BackgroundPieceCollection)serializer.Deserialize(XmlReader.Create(stream));

        List <BackgroundPiece> piecesToLoad = collection.FindWithin(0, 8640, 0, 19200);

        foreach (BackgroundPiece piece in piecesToLoad)
        {
            if (piece.shown != true)
            {
                var bundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/background/backgroundsplit-" + piece.x + "-" + piece.y + ".normal");
                if (bundle == null)
                {
                    Debug.Log("Fail to Load Bundle");
                    return;
                }
                var            backgroundTexture = bundle.LoadAsset <Texture2D>(piece.resName);
                Sprite         sprite            = Sprite.Create(backgroundTexture, new Rect(0, 0, backgroundTexture.width, backgroundTexture.height), new Vector2(0.5f, 0.5f));
                GameObject     obj      = new GameObject();
                SpriteRenderer renderer = obj.AddComponent <SpriteRenderer>();
                renderer.sprite = sprite;
                int posx = 0;
                int posy = 0;
                for (int i = 0; i <= 37 - piece.y; i++)
                {
                    if (i == 0)
                    {
                        posy += 128;
                    }
                    if (i == 1)
                    {
                        posy += 128 + 256;
                    }
                    if (i > 1)
                    {
                        posy += 512;
                    }
                }
                for (int i = 0; i <= piece.x; i++)
                {
                    if (i == 16)
                    {
                        posx += 224 + 256;
                    }
                    else
                    {
                        posx += 512;
                    }
                }
                obj.transform.position = new Vector3(posx / 100.0f, posy / 100.0f, 0f);
                Debug.Log(obj.transform.position);
                obj = PrefabUtility.InstantiatePrefab(obj) as GameObject;
                bundle.Unload(false);
            }
        }
    }
    public static void ReleaseFiles()
    {
        TextAsset    asset  = Resources.Load <TextAsset>("BackgroundSplit");
        MemoryStream stream = new MemoryStream(asset.bytes);

        XmlSerializer             serializer = new XmlSerializer(typeof(BackgroundPieceCollection));
        BackgroundPieceCollection collection = (BackgroundPieceCollection)serializer.Deserialize(XmlReader.Create(stream));

        List <BackgroundPiece> piecesToLoad = collection.FindWithin(0, 8640, 0, 19200);

        foreach (BackgroundPiece piece in piecesToLoad)
        {
            var bundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/background/backgroundsplit-" + piece.x + "-" + piece.y + ".normal");
            bundle.Unload(true);
        }
    }
Esempio n. 3
0
    // Update is called once per frame
    void Update()
    {
        float startX = cameraTransform.position.x * 100 - cameraSize.x / 2 - 256;
        float endX   = cameraTransform.position.x * 100 + cameraSize.x / 2 + 256;
        float startY = cameraTransform.position.y * 100 - cameraSize.y / 2 - 256;
        float endY   = cameraTransform.position.y * 100 + cameraSize.y / 2 + 256;
        List <BackgroundPiece> piecesToShow = collection.FindWithin(startX, endX, startY, endY);
        List <BackgroundPiece> piecesToLoad = collection.FindWithin(startX - 256, endX + 256, startY - 256, endY + 256);

        foreach (BackgroundPiece piece in collection.collection)
        {
            if (!piecesToLoad.Contains(piece))
            {
                piece.shown   = false;
                piece.loading = false;
            }
        }
        ReuseOutsight();

        foreach (BackgroundPiece piece in piecesToLoad)
        {
            if (piece.shown != true)
            {
                if (piecesToShow.Contains(piece) && !piece.loading)
                {
                    var bundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/background/backgroundsplit-" + piece.x + "-" + piece.y + ".normal");
                    if (bundle == null)
                    {
                        Debug.Log("Fail to Load Bundle");
                        return;
                    }
                    piece.loading = true;
                    var        backgroundTexture = bundle.LoadAsset <Texture2D>(piece.resName);
                    Sprite     sprite            = Sprite.Create(backgroundTexture, new Rect(0, 0, backgroundTexture.width, backgroundTexture.height), new Vector2(0.5f, 0.5f));
                    GameObject backgroundObject  = availableBackground.Pop();
                    backgroundObject.GetComponent <SpriteRenderer>().sprite = sprite;

                    float initPosX = piece.initialX / 100.0f;
                    int   xCount   = Mathf.FloorToInt(cameraTransform.position.x * 100 / backgroundWidth);
                    initPosX = initPosX + backgroundWidth / 100.0f * xCount;
                    if (initPosX < cameraTransform.position.x - cameraSize.x / 100.0f)
                    {
                        initPosX += backgroundWidth / 100.0f;
                    }
                    if (initPosX > cameraTransform.position.x + cameraSize.x / 100.0f)
                    {
                        initPosX -= backgroundWidth / 100.0f;
                    }
                    backgroundObject.transform.position = new Vector3(initPosX, piece.initialY / 100.0f, 0);
                    bundle.Unload(false);
                    piece.shown = true;
                }
                else
                {
                    if (!piece.loading)
                    {
                        StartCoroutine(LoadBackgroundAsync(piece));
                    }
                }
            }
        }
    }