コード例 #1
0
    public static void SetAnimations(Texture2D givenTexture)
    {
        Color     animationColour        = transparent;
        Rect      currentAnimationBorder = new Rect(new Vector2(0, 0), new Vector2(givenTexture.width, 0));
        SpriteMap currentSpriteMap       = new SpriteMap();

        for (int i = 0; i <= givenTexture.height; i++)
        {
            Color pixelColour = givenTexture.GetPixel(0, i);
            if (pixelColour.a == 0)
            {
                if (i - currentAnimationBorder.y > 0)
                {
                    if (animationColour.a != 0)
                    {
                        if (animationColour != currentSpriteMap.GetColour())
                        {
                            currentSpriteMap = new SpriteMap();
                            currentSpriteMap.Initialise(givenTexture.name, animationColour);
                            layerList.Add(currentSpriteMap.m_index, currentSpriteMap);
                        }
                        currentAnimationBorder.size = new Vector2(currentAnimationBorder.size.x, i - currentAnimationBorder.y - 1);
                        PlayAnimation currentAnimation = SetAnimation(currentAnimationBorder, animationColour, givenTexture);
                        currentSpriteMap.AddAnimation(currentAnimation);
                    }
                }
                while (givenTexture.GetPixel(0, i).a == 0)
                {
                    i++;
                    if (i == givenTexture.height)
                    {
                        break;
                    }
                }
                currentAnimationBorder.y = i;
                animationColour          = pixelColour;
            }
            else if (i == givenTexture.height)
            {
                if (pixelColour.a == 0)
                {
                    throw new TextureNotfoundException(givenTexture.name + " didn't find any textures to make an animation from");
                }
                if (animationColour != currentSpriteMap.GetColour())
                {
                    currentSpriteMap = new SpriteMap();
                    currentSpriteMap.Initialise(givenTexture.name, animationColour);
                    layerList.Add(currentSpriteMap.m_index, currentSpriteMap);
                }
                currentAnimationBorder.size = new Vector2(currentAnimationBorder.size.x, i - currentAnimationBorder.y - 1);
                Rect          currentFrameBorder = new Rect(currentAnimationBorder.position, new Vector2(0, currentAnimationBorder.size.y));
                PlayAnimation currentAnimation   = SetAnimation(currentAnimationBorder, animationColour, givenTexture);
                currentSpriteMap.AddAnimation(currentAnimation);
            }
            else
            {
                animationColour = pixelColour;
            }
        }
    }
コード例 #2
0
    public static void SetAnimations(Sprite givenSprite, ref Dictionary <string, SpriteMap> givenDictionary)
    {
        Color     animationColour        = transparent;
        Rect      currentAnimationBorder = new Rect(new Vector2(0, 0), new Vector2(givenSprite.rect.size.x, 0));
        SpriteMap currentSpriteMap       = new SpriteMap();
        string    currentSpriteMapId;

        for (int i = 0; i < givenSprite.rect.size.y; i++)
        {
            Color pixelColour = givenSprite.texture.GetPixel(0, i);
            if (animationColour != pixelColour)
            {
                if (pixelColour != transparent)
                {
                    if (animationColour != transparent)
                    {
                        currentSpriteMapId = currentSpriteMap.GetName() + ColourToString(currentSpriteMap.GetColour());
                        givenDictionary.Add(currentSpriteMapId, currentSpriteMap);
                    }
                    animationColour          = pixelColour;
                    currentAnimationBorder.y = i;
                    currentSpriteMap.Initialise(givenSprite.name, animationColour);
                }
                else
                {
                    currentAnimationBorder.size = new Vector2(currentAnimationBorder.size.x, i - currentAnimationBorder.y);
                    PlayAnimation currentAnimation = SetAnimation(currentAnimationBorder, animationColour, givenSprite.texture);
                    currentSpriteMap.AddAnimation(currentAnimation);
                    i += YGAP - 1;
                    currentAnimationBorder.y = i + 1;
                }
            }
            else if (i == givenSprite.rect.size.y - 1)
            {
                if (pixelColour == transparent)
                {
                    throw new TextureNotfoundException(givenSprite.name + " didn't find any textures to make an animation from");
                }
                currentAnimationBorder.size = new Vector2(currentAnimationBorder.size.x, i - currentAnimationBorder.y);
                Rect          currentFrameBorder = new Rect(currentAnimationBorder.position, new Vector2(0, currentAnimationBorder.size.y));
                PlayAnimation currentAnimation   = SetAnimation(currentAnimationBorder, animationColour, givenSprite.texture);
                currentSpriteMap.AddAnimation(currentAnimation);
                i += YGAP - 1;
            }
        }
        currentSpriteMapId = currentSpriteMap.GetName() + ColourToString(currentSpriteMap.GetColour());
        givenDictionary.Add(currentSpriteMapId, currentSpriteMap);
    }