/// <summary> /// 解析quad标签 主要清除quad乱码 获取表情的位置 /// </summary> /// <param name="verts"></param> void CalcQuadTag(IList <UIVertex> verts) { m_AnimSpriteInfor = new List <InlineSpriteInfor[]>(); Vector3 _TempStartPos = Vector3.zero; if (m_SGManager != null) { _TempStartPos = transform.position - m_SGManager.transform.position; } for (int i = 0; i < m_AnimSpiteTag.Count; i++) { SpriteTagInfor[] tempTagInfor = m_AnimSpiteTag[i]; InlineSpriteInfor[] tempSpriteInfor = new InlineSpriteInfor[tempTagInfor.Length]; for (int j = 0; j < tempTagInfor.Length; j++) { tempSpriteInfor[j] = new InlineSpriteInfor(); tempSpriteInfor[j].textpos = _TempStartPos + verts[((tempTagInfor[j].index + 1) * 4) - 1].position; //设置图片的位置 tempSpriteInfor[j].vertices = new Vector3[4]; tempSpriteInfor[j].vertices[0] = new Vector3(0, 0, 0) + tempSpriteInfor[j].textpos; tempSpriteInfor[j].vertices[1] = new Vector3(tempTagInfor[j].size.x, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos; tempSpriteInfor[j].vertices[2] = new Vector3(tempTagInfor[j].size.x, 0, 0) + tempSpriteInfor[j].textpos; tempSpriteInfor[j].vertices[3] = new Vector3(0, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos; //计算其uv Rect newSpriteRect = m_spriteAsset.listSpriteInfor[0].rect; for (int m = 0; m < m_spriteAsset.listSpriteInfor.Count; m++) { //通过标签的名称去索引spriteAsset里所对应的sprite的名称 if (tempTagInfor[j].name == m_spriteAsset.listSpriteInfor[m].name) { newSpriteRect = m_spriteAsset.listSpriteInfor[m].rect; } } Vector2 newTexSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height); tempSpriteInfor[j].uv = new Vector2[4]; tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y); tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y); tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); //声明三角顶点所需要的数组 tempSpriteInfor[j].triangles = new int[6]; } m_AnimSpriteInfor.Add(tempSpriteInfor); _OldVerts = verts; } }
void SaveSpriteInfor(Vector3 textpos, float spriteSize, int spriteIndex) { //if (spriteIndex >= m_spriteAsset.listSpriteInfor.Count) // return; // float spriteSize = m_text.fontSize; InlineSpriteInfor tempSprite = new InlineSpriteInfor(); // tempSprite.textpos = new Vector3(fWidth, -fFontSize, 0.0f); tempSprite.textpos = textpos; tempSprite.vertices = new Vector3[4]; tempSprite.vertices[0] = new Vector3(0, 0, 0) + tempSprite.textpos; tempSprite.vertices[1] = new Vector3(spriteSize, spriteSize, 0) + tempSprite.textpos; tempSprite.vertices[2] = new Vector3(spriteSize, 0, 0) + tempSprite.textpos; tempSprite.vertices[3] = new Vector3(0, spriteSize, 0) + tempSprite.textpos; Rect spriteRect = m_spriteAsset.listSpriteInfor[0].rect; for (int i = 0; i < m_spriteAsset.listSpriteInfor.Count; i++) { if (spriteIndex == m_spriteAsset.listSpriteInfor[i].ID) { spriteRect = m_spriteAsset.listSpriteInfor[i].rect; } } Vector2 texSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height); tempSprite.uv = new Vector2[4]; tempSprite.uv[0] = new Vector2(spriteRect.x / texSize.x, spriteRect.y / texSize.y); tempSprite.uv[1] = new Vector2((spriteRect.x + spriteRect.width) / texSize.x, (spriteRect.y + spriteRect.height) / texSize.y); tempSprite.uv[2] = new Vector2((spriteRect.x + spriteRect.width) / texSize.x, spriteRect.y / texSize.y); tempSprite.uv[3] = new Vector2(spriteRect.x / texSize.x, (spriteRect.y + spriteRect.height) / texSize.y); tempSprite.triangles = new int[6]; //tempSprite.triangles[0] = 0; //tempSprite.triangles[1] = 1; //tempSprite.triangles[2] = 2; //tempSprite.triangles[3] = 1; //tempSprite.triangles[4] = 0; //tempSprite.triangles[5] = 3; listSprite.Add(tempSprite); }
/// <summary> /// 解析quad标签 主要清除quad乱码 获取表情的位置 /// </summary> /// <param name="verts"></param> void CalcQuadTag(IList <UIVertex> verts) { m_AnimSpriteInfor = new Dictionary <int, InlineSpriteInfor[]>(); //通过标签信息来设置需要绘制的图片的信息 listSprite = new List <InlineSpriteInfor>(); for (int i = 0; i < listTagInfor.Count; i++) { //UGUIText不支持<quad/>标签,表现为乱码,我这里将他的uv全设置为0,清除乱码 //for (int m = listTagInfor[i].index * 4; m < listTagInfor[i].index * 4 + listTagInfor[i].Length * 4; m++) //{ // UIVertex tempVertex = verts[m]; // Debug.Log(listTagInfor[i].index + " " + m + " " +tempVertex.position + " " + tempVertex.tangent+ " "+tempVertex.uv0); // tempVertex.uv0 = Vector2.zero; // verts[m] = tempVertex; //} InlineSpriteInfor tempSprite = new InlineSpriteInfor(); //获取表情的第一个位置,则计算他的位置为quad占位的第四个点 顶点绘制顺序: // 0 1 // 3 2 //tempSprite.textpos = verts[((listTagInfor[i].index + 1) * 4) - 1].position; tempSprite.textpos = verts[((listTagInfor[i].index - 1) * 4) + 2].position; //设置图片的位置 tempSprite.vertices = new Vector3[4]; tempSprite.vertices[0] = new Vector3(0, 0, 0) + tempSprite.textpos; tempSprite.vertices[1] = new Vector3(listTagInfor[i].size.x, listTagInfor[i].size.y, 0) + tempSprite.textpos; tempSprite.vertices[2] = new Vector3(listTagInfor[i].size.x, 0, 0) + tempSprite.textpos; tempSprite.vertices[3] = new Vector3(0, listTagInfor[i].size.y, 0) + tempSprite.textpos; //计算其uv Rect spriteRect = m_spriteAsset.listSpriteInfor[0].rect; for (int j = 0; j < m_spriteAsset.listSpriteInfor.Count; j++) { //通过标签的名称去索引spriteAsset里所对应的sprite的名称 if (listTagInfor[i].name == m_spriteAsset.listSpriteInfor[j].name) { spriteRect = m_spriteAsset.listSpriteInfor[j].rect; } } Vector2 texSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height); tempSprite.uv = new Vector2[4]; tempSprite.uv[0] = new Vector2(spriteRect.x / texSize.x, spriteRect.y / texSize.y); tempSprite.uv[1] = new Vector2((spriteRect.x + spriteRect.width) / texSize.x, (spriteRect.y + spriteRect.height) / texSize.y); tempSprite.uv[2] = new Vector2((spriteRect.x + spriteRect.width) / texSize.x, spriteRect.y / texSize.y); tempSprite.uv[3] = new Vector2(spriteRect.x / texSize.x, (spriteRect.y + spriteRect.height) / texSize.y); //声明三角顶点所需要的数组 tempSprite.triangles = new int[6]; listSprite.Add(tempSprite); if (m_AnimSpiteTag[i] != null) { SpriteTagInfor[] tempTagInfor = m_AnimSpiteTag[i]; InlineSpriteInfor[] tempSpriteInfor = new InlineSpriteInfor[tempTagInfor.Length]; for (int j = 0; j < tempTagInfor.Length; j++) { tempSpriteInfor[j] = new InlineSpriteInfor(); tempSpriteInfor[j].textpos = verts[((tempTagInfor[j].index + 1) * 4) - 1].position; //设置图片的位置 tempSpriteInfor[j].vertices = new Vector3[4]; tempSpriteInfor[j].vertices[0] = new Vector3(0, 0, 0) + tempSpriteInfor[j].textpos; tempSpriteInfor[j].vertices[1] = new Vector3(tempTagInfor[j].size.x, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos; tempSpriteInfor[j].vertices[2] = new Vector3(tempTagInfor[j].size.x, 0, 0) + tempSpriteInfor[j].textpos; tempSpriteInfor[j].vertices[3] = new Vector3(0, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos; //计算其uv Rect newSpriteRect = m_spriteAsset.listSpriteInfor[0].rect; for (int m = 0; m < m_spriteAsset.listSpriteInfor.Count; m++) { //通过标签的名称去索引spriteAsset里所对应的sprite的名称 if (tempTagInfor[j].name == m_spriteAsset.listSpriteInfor[m].name) { newSpriteRect = m_spriteAsset.listSpriteInfor[m].rect; } } Vector2 newTexSize = new Vector2(m_spriteAsset.texSource.width, m_spriteAsset.texSource.height); tempSpriteInfor[j].uv = new Vector2[4]; tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.x / newTexSize.x, newSpriteRect.y / newTexSize.y); tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / newTexSize.x, newSpriteRect.y / newTexSize.y); tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.x / newTexSize.x, (newSpriteRect.y + newSpriteRect.height) / newTexSize.y); //声明三角顶点所需要的数组 tempSpriteInfor[j].triangles = new int[6]; } m_AnimSpriteInfor.Add(i, tempSpriteInfor); } } }
/// <summary> /// 解析quad标签 主要清除quad乱码 获取表情的位置 /// </summary> /// <param name="verts"></param> void CalcQuadTag(IList <UIVertex> verts) { if (m_AnimSpriteInfor != null) { m_AnimSpriteInfor.Clear(); } else { m_AnimSpriteInfor = new TList <InlineSpriteInfor[]>(); } //通过标签信息来设置需要绘制的图片的信息 if (listSprite != null) { listSprite.Clear(); } else { listSprite = new TList <InlineSpriteInfor>(); } for (int i = 0; i < m_AnimSpiteTag.Count; i++) { TList <SpriteTagInfor> tempTagInfor = m_AnimSpiteTag[i]; InlineSpriteInfor[] tempSpriteInfor = new InlineSpriteInfor[tempTagInfor.Count]; for (int j = 0; j < tempTagInfor.Count; j++) { tempSpriteInfor[j] = new InlineSpriteInfor(); //Vector3 offset = Vector3.zero; Vector3 offset = new Vector3(0, tempTagInfor[j].size.y * 0.2f, 0); //if (tempTagInfor[j].index == 0) //{ // Vector2 anchorPivot = GetTextAnchorPivot(alignment); // Vector2 rectSize = rectTransform.sizeDelta; // //相对中心点位置 '- 0.5' + '0.5' // tempSpriteInfor[j].textpos = -rectSize / 2.0f + new Vector2(rectSize.x * anchorPivot.x, rectSize.y * anchorPivot.y - tempTagInfor[i].size.y); //} //else //{ // tempSpriteInfor[j].textpos = verts[((tempTagInfor[j].index) * 4) - 1].position; //} tempSpriteInfor[j].textpos = verts[((tempTagInfor[j].index + 1) * 4) - 1].position;//第一字符 //设置图片的位置 tempSpriteInfor[j].vertices = new Vector3[4]; tempSpriteInfor[j].vertices[0] = new Vector3(0, 0, 0) + tempSpriteInfor[j].textpos - offset; tempSpriteInfor[j].vertices[1] = new Vector3(tempTagInfor[j].size.x, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos - offset; tempSpriteInfor[j].vertices[2] = new Vector3(tempTagInfor[j].size.x, 0, 0) + tempSpriteInfor[j].textpos - offset; tempSpriteInfor[j].vertices[3] = new Vector3(0, tempTagInfor[j].size.y, 0) + tempSpriteInfor[j].textpos - offset; //计算其uv Rect newSpriteRect = m_spriteAsset.listSpriteInfor[0].rect; for (int m = 0; m < m_spriteAsset.listSpriteInfor.Count; m++) { //通过标签的名称去索引spriteAsset里所对应的sprite的名称 //if (tempTagInfor[j].name == m_spriteAsset.listSpriteInfor[m].name) if (m_spriteAsset.listSpriteInfor[m].name.StartsWith(tempTagInfor[j].name)) { newSpriteRect = m_spriteAsset.listSpriteInfor[m].rect; break; } } //Vector2 newTexSize = m_spriteAsset.sourceSize; tempSpriteInfor[j].uv = new Vector2[4]; tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.x / m_spriteAsset.sourceSize.x, newSpriteRect.y / m_spriteAsset.sourceSize.y); tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, (newSpriteRect.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y); tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, newSpriteRect.y / m_spriteAsset.sourceSize.y); tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.x / m_spriteAsset.sourceSize.x, (newSpriteRect.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y); //Debug.Log(newSpriteRect.x + "_" + newSpriteRect.y + "_" + newSpriteRect.min.ToString()); //tempSpriteInfor[j].uv[0] = new Vector2(newSpriteRect.min.x / m_spriteAsset.sourceSize.x, newSpriteRect.min.y / m_spriteAsset.sourceSize.y); //tempSpriteInfor[j].uv[1] = new Vector2((newSpriteRect.min.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, (newSpriteRect.min.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y); //tempSpriteInfor[j].uv[2] = new Vector2((newSpriteRect.min.x + newSpriteRect.width) / m_spriteAsset.sourceSize.x, newSpriteRect.min.y / m_spriteAsset.sourceSize.y); //tempSpriteInfor[j].uv[3] = new Vector2(newSpriteRect.min.x / m_spriteAsset.sourceSize.x, (newSpriteRect.min.y + newSpriteRect.height) / m_spriteAsset.sourceSize.y); //声明三角顶点所需要的数组 tempSpriteInfor[j].triangles = new int[6]; } m_AnimSpriteInfor.Add(tempSpriteInfor); listSprite.Add(tempSpriteInfor[0]); } //_OldVerts = verts; }