示例#1
0
    //动画表情:重新计算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);
    }