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; }
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]); } }
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); }
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(); }