/// <summary> /// 帧动画更新 /// </summary> public void LateUpdate() { for (int index = 0; index < m_RendererInfo.Count; index++) { RendererInfo rendererInfo = m_RendererInfo[index]; if (rendererInfo.placeholder.isAnimate) { rendererInfo.timeline += Time.deltaTime; if (rendererInfo.timeline >= (1 / (float)rendererInfo.placeholder.rate)) { int frame = rendererInfo.curFrame + 1; string animateName = rendererInfo.placeholder.animateName; RichTextAnimate richTextAnimate = textSpriteAsset.GetAnimateListByName(animateName); List <TexturePackSprite> sprites = richTextAnimate.spriteList; if (frame >= sprites.Count) { frame = 0; } GenerateNewUv(sprites[frame], ref rendererInfo.uvInfo); rendererInfo.timeline = 0.0f; rendererInfo.curFrame = frame; PlayAnimate(); } } } }
private List <TexturePackSprite> CreateSpriteFromUnityPackSetting(TextureImporter importer) { List <TexturePackSprite> list = new List <TexturePackSprite>(); RichTextAnimateDic.Clear(); for (int i = 0; i < importer.spritesheet.Length; i++) { SpriteMetaData frame = importer.spritesheet[i]; TexturePackSprite spriteData = new TexturePackSprite(); spriteData.id = i; spriteData.name = frame.name; spriteData.hashCode = spriteData.name.GetHashCode(); spriteData.x = frame.rect.x; spriteData.y = frame.rect.y; spriteData.width = frame.rect.width; spriteData.height = frame.rect.height; spriteData.pivot = frame.pivot; spriteData.rotated = false; spriteData.xAdvance = spriteData.width; spriteData.scale = 1f; spriteData.xOffset = 0f - spriteData.width * spriteData.pivot.x; spriteData.yOffset = spriteData.height - spriteData.height * spriteData.pivot.y; list.Add(spriteData); int pos = spriteData.name.LastIndexOf("_"); if (pos > 0) { string key = spriteData.name.Substring(0, pos); string aniIndex = spriteData.name.Substring(pos + 1, spriteData.name.Length - pos - 1); if (!RichTextAnimateDic.ContainsKey(key)) { RichTextAnimate richTextAnimate = new RichTextAnimate(); RichTextAnimateDic.Add(key, richTextAnimate); } spriteData.animatGroup = key; spriteData.animatIndex = int.Parse(aniIndex); RichTextAnimateDic[key].animateName = key; RichTextAnimateDic[key].frameCount++; RichTextAnimateDic[key].spriteList.Add(spriteData); } } return(list); }
private List <TexturePackSprite> CreateSpriteInfoList(TP.TexturePackJsonData spriteDataObject) { List <TP.SpriteData> frames = spriteDataObject.frames; List <TexturePackSprite> list = new List <TexturePackSprite>(); for (int i = 0; i < frames.Count; i++) { TexturePackSprite spriteData = new TexturePackSprite(); spriteData.id = i; spriteData.name = Path.GetFileNameWithoutExtension(frames[i].filename); spriteData.hashCode = spriteData.name.GetHashCode(); spriteData.x = frames[i].frame.x; spriteData.y = (float)this.TextureSource.height - (frames[i].frame.y + frames[i].frame.h); spriteData.width = frames[i].frame.w; spriteData.height = frames[i].frame.h; spriteData.pivot = frames[i].pivot; spriteData.rotated = frames[i].rotated; spriteData.xAdvance = spriteData.width; spriteData.scale = 1f; spriteData.xOffset = 0f - spriteData.width * spriteData.pivot.x; spriteData.yOffset = spriteData.height - spriteData.height * spriteData.pivot.y; list.Add(spriteData); int pos = spriteData.name.LastIndexOf("_"); if (pos > 0) { string key = spriteData.name.Substring(0, pos); string aniIndex = spriteData.name.Substring(pos + 1, spriteData.name.Length - pos - 1); if (!RichTextAnimateDic.ContainsKey(key)) { RichTextAnimate richTextAnimate = new RichTextAnimate(); RichTextAnimateDic.Add(key, richTextAnimate); } //动画 spriteData.animatGroup = key; spriteData.animatIndex = int.Parse(aniIndex); RichTextAnimateDic[key].animateName = key; RichTextAnimateDic[key].frameCount++; RichTextAnimateDic[key].spriteList.Add(spriteData); } } return(list); }
/// <summary> /// 获取动画所有帧 /// </summary> /// <param name="animateName"></param> /// <returns></returns> public RichTextAnimate GetAnimateListByName(string animateName) { if (m_AnimateList == null) { return(null); } RichTextAnimate textAnimate = null; for (int i = 0; i < m_AnimateList.Count; i++) { if (m_AnimateList[i].animateName == animateName) { textAnimate = m_AnimateList[i]; break; } } return(textAnimate); }
/// <summary> /// 生成uv信息 /// </summary> /// <param name="info"></param> /// <param name="startVertex"></param> /// <param name="unitsPerPixel"></param> /// <returns></returns> public int GenerateVertices(QuadPlaceholder info, Vector3 postion, int startVertex, float unitsPerPixel) { TextMeshInfo tempUv = new TextMeshInfo(); tempUv.startPos = postion * unitsPerPixel; //设置图片的位置 tempUv.vertices = new Vector3[4]; tempUv.vertices[0] = new Vector3(0, 0, 0) + tempUv.startPos; tempUv.vertices[1] = new Vector3(info.size.x, info.size.y, 0) + tempUv.startPos; tempUv.vertices[2] = new Vector3(info.size.x, 0, 0) + tempUv.startPos; tempUv.vertices[3] = new Vector3(0, info.size.y, 0) + tempUv.startPos; TexturePackSprite sprite = null; if (info.isAnimate) { RichTextAnimate textAnimate = textSpriteAsset.GetAnimateListByName(info.animateName); if (textAnimate != null) { sprite = textAnimate.spriteList[0]; } } else if (textSpriteAsset.spriteInfoList != null) { int index = int.Parse(info.sprite); if (textSpriteAsset.spriteInfoList.Count > index) { sprite = textSpriteAsset.spriteInfoList[index]; } } Vector2 texSize = Vector2.zero; if (sprite == null) { startVertex += 4 * info.length - 1; return(startVertex); } //计算其uv texSize = new Vector2(textSpriteAsset.spriteSheet.width, textSpriteAsset.spriteSheet.height); tempUv.uv = new Vector2[4]; if (!sprite.rotated) { tempUv.uv[0] = new Vector2(sprite.x / texSize.x, sprite.y / texSize.y); tempUv.uv[1] = new Vector2((sprite.x + sprite.width) / texSize.x, (sprite.y + sprite.width) / texSize.y); tempUv.uv[2] = new Vector2((sprite.x + sprite.width) / texSize.x, sprite.y / texSize.y); tempUv.uv[3] = new Vector2(sprite.x / texSize.x, (sprite.y + sprite.width) / texSize.y); } else { tempUv.uv[0] = new Vector2(sprite.x / texSize.x, sprite.y / texSize.y); tempUv.uv[1] = new Vector2((sprite.x + sprite.width) / texSize.x, (sprite.y + sprite.width) / texSize.y); tempUv.uv[2] = new Vector2((sprite.x + sprite.width) / texSize.x, sprite.y / texSize.y); tempUv.uv[3] = new Vector2(sprite.x / texSize.x, (sprite.y + sprite.width) / texSize.y); } //声明三角顶点所需要的数组 tempUv.triangles = new int[6]; startVertex += 4 * info.length - 1; RendererInfo rendererInfo = new RendererInfo(); rendererInfo.uvInfo = tempUv; rendererInfo.placeholder = info; m_RendererInfo.Add(rendererInfo); return(startVertex); }