textureInfoForImage() публичный Метод

source name can be either just the file name or the file name and extension
public textureInfoForImage ( string sourceImageName ) : SKTextureInfo,
sourceImageName string
Результат SKTextureInfo,
Пример #1
0
    public static SKSprite createSprite( SKSpriteSheet sheet, string imageName, SpriteAnchor anchor )
    {
        var targetGO = new GameObject( imageName );
        var sprite = targetGO.AddComponent<SKSprite>();
        sprite.spriteSheet = sheet;
        sprite.sourceImageName = imageName;
        sprite.anchor = anchor;

        var info = sheet.textureInfoForImage( imageName );
        sprite.pixelPerfectHDSize = sprite.desiredSize = info.size;
        sprite.renderer.sharedMaterial = sheet.getMaterial( isDoubleDensityScreen );
        sprite.generateMesh();

        return sprite;
    }
Пример #2
0
    public void OnEnable()
    {
        if (imageNames == null)
        {
            return;
        }

        // prep our actual SKTextureInfo array from the imageNames
        textureInfo = new SKTextureInfo[imageNames.Length];

        for (var i = 0; i < imageNames.Length; i++)
        {
            textureInfo[i] = spriteSheet.textureInfoForImage(imageNames[i]);
        }
    }
Пример #3
0
    public static SKSprite createSprite(SKSpriteSheet sheet, string imageName, SpriteAnchor anchor)
    {
        var targetGO = new GameObject(imageName);
        var sprite   = targetGO.AddComponent <SKSprite>();

        sprite.spriteSheet     = sheet;
        sprite.sourceImageName = imageName;
        sprite.anchor          = anchor;

        var info = sheet.textureInfoForImage(imageName);

        sprite.pixelPerfectHDSize      = sprite.desiredSize = info.size;
        sprite.renderer.sharedMaterial = sheet.getMaterial(isDoubleDensityScreen);
        sprite.generateMesh();

        return(sprite);
    }
Пример #4
0
    protected virtual void generateVerts(ref Mesh mesh)
    {
        // fetch required information and cache the uv values
        var spriteInfo         = spriteSheet.textureInfoForImage(sourceImageName);
        var uvRect             = spriteInfo.uvRect;
        var uvArrayForFullQuad = new Vector2[4];

        // handle filling up the UV values. flipped get reversed
        if (!_isFlipped)
        {
            uvArrayForFullQuad[0] = new Vector2(uvRect.xMin, uvRect.yMax);
            uvArrayForFullQuad[1] = new Vector2(uvRect.xMin, uvRect.yMin);
            uvArrayForFullQuad[2] = new Vector2(uvRect.xMax, uvRect.yMin);
            uvArrayForFullQuad[3] = new Vector2(uvRect.xMax, uvRect.yMax);
        }
        else
        {
            uvArrayForFullQuad[3] = new Vector2(uvRect.xMin, uvRect.yMax);
            uvArrayForFullQuad[2] = new Vector2(uvRect.xMin, uvRect.yMin);
            uvArrayForFullQuad[1] = new Vector2(uvRect.xMax, uvRect.yMin);
            uvArrayForFullQuad[0] = new Vector2(uvRect.xMax, uvRect.yMax);
        }

        // create a multiplier to adjust for different ortho sizes
        var orthoAdjustment = (2f * spriteSheet.cameraOrthoSize) / spriteSheet.targetScreenHeight;
        var orthoAdjustedPixelPerfectHDSize = pixelPerfectHDSize * orthoAdjustment;


        // mesh storage lists
        var verts  = new List <Vector3>();
        var uvs    = new List <Vector2>();
        var tris   = new List <int>();
        var colors = new List <Color>();

        // figure out the number of quads we are going to need
        var horizontalQuadCount = Mathf.CeilToInt(desiredSize.x / pixelPerfectHDSize.x);
        var verticalQuadCount   = Mathf.CeilToInt(desiredSize.y / pixelPerfectHDSize.y);
        var triIndex            = 0;
        var anchorOffset        = offsetForAnchor() * orthoAdjustment;

        // do we have enough room for the full width and height? this will only matter for the last row/column
        var clipHorizontally = desiredSize.x / pixelPerfectHDSize.x != horizontalQuadCount;
        var clipVertically   = desiredSize.y / pixelPerfectHDSize.y != verticalQuadCount;

        // we build the quads from bottom left to top right
        for (var x = 0; x < horizontalQuadCount; x++)
        {
            for (var y = 0; y < verticalQuadCount; y++)
            {
                var offset = new Vector2(x * orthoAdjustedPixelPerfectHDSize.x, y * orthoAdjustedPixelPerfectHDSize.y);
                var rect   = new Rect(offset.x * scale.x, offset.y * scale.y, orthoAdjustedPixelPerfectHDSize.x * scale.x, orthoAdjustedPixelPerfectHDSize.y * scale.y);
                rect.center += anchorOffset;

                var didClipHorizontally = false;
                var didClipVertically   = false;
                if (clipHorizontally && x == horizontalQuadCount - 1)
                {
                    didClipHorizontally = true;

                    // get the actual width of the clipped quad
                    var quadWidth = desiredSize.x % orthoAdjustedPixelPerfectHDSize.x;
                    rect.width = quadWidth * scale.x;
                }

                if (clipVertically && y == verticalQuadCount - 1)
                {
                    didClipVertically = true;

                    // get the actual height of the clipped quad
                    var quadHeight = desiredSize.y % orthoAdjustedPixelPerfectHDSize.y;
                    rect.height = quadHeight * scale.y;

                    // offset vertically to line up the quads
                    //rect.y += ( originalHeight - rect.height );
                }

                // add the quad to our vert list
                verts.Add(new Vector3(rect.xMin, rect.yMax, 0));
                verts.Add(new Vector3(rect.xMin, rect.yMin, 0));
                verts.Add(new Vector3(rect.xMax, rect.yMin, 0));
                verts.Add(new Vector3(rect.xMax, rect.yMax, 0));

                if (didClipHorizontally || didClipVertically)
                {
                    uvs.AddRange(getUvsForClippedQuad(uvRect, rect.width, rect.height, orthoAdjustedPixelPerfectHDSize));
                }
                else
                {
                    uvs.AddRange(uvArrayForFullQuad);
                }

                tris.Add(triIndex + 3);
                tris.Add(triIndex + 1);
                tris.Add(triIndex);
                tris.Add(triIndex + 2);
                tris.Add(triIndex + 1);
                tris.Add(triIndex + 3);
                triIndex += 4;

                colors.Add(tintColor);
                colors.Add(tintColor);
                colors.Add(tintColor);
                colors.Add(tintColor);
            }     // end for
        }         // end for


        mesh.vertices  = verts.ToArray();
        mesh.colors    = colors.ToArray();
        mesh.triangles = tris.ToArray();
        mesh.uv        = uvs.ToArray();
    }