//动画表情:重新计算uv private bool RecaculateAnimSpriteMesh(URichTextSpriteMeshInfo meshInfo) { int spriteID = 0; if (mainTexture == null) { return(false); } Data.AnimSpriteConfig.SSchemeAnimFrameData frameData = Data.AnimSpriteConfig.AnimSpriteConfig.Instance.GetData(meshInfo.animKey); Rect newSpriteRect = frameData.GetFrameRect(meshInfo.spriteIndex);//sInfo.rect; //由于位置不变,改变uv即可 //由于uv原点在左下角,但一般算sprite 坐标时按左上角,所以翻转一下 Vector2 newTexSize = new Vector2(m_mainTexture.width, m_mainTexture.height); meshInfo.uvs[3] = new Vector2(newSpriteRect.x / newTexSize.x, 1 - (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); //new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y); meshInfo.uvs[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, 1 - newSpriteRect.y / newTexSize.y); //new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); meshInfo.uvs[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, 1 - (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); //new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y); meshInfo.uvs[0] = new Vector2(newSpriteRect.x / newTexSize.x, 1 - newSpriteRect.y / newTexSize.y); //new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); return(true); }