private static void UF_HandleToken(List <TextToken> tokens, List <OutLineData> listOutLineDatas) { int overlying = 0; listOutLineDatas.Clear(); for (int k = 0; k < tokens.Count; k++) { if (tokens [k].type == TextTokenType.HEAD_O) { overlying++; for (int i = k + 1; i < tokens.Count; i++) { if (tokens [i].type == TextTokenType.HEAD_O) { overlying++; } else if (tokens [i].type == TextTokenType.END_O) { overlying--; if (overlying == 0) { OutLineData ldData = new OutLineData(); //解析buff 内容 int idxHref = tokens[k].buffer.IndexOf("#"); int idxValue = tokens[k].buffer.IndexOf("v="); ldData.idx = tokens [k].index; ldData.length = tokens [i].index - tokens [k].index; ldData.color = new Color32(0, 0, 0, 255); ldData.offset = new Vector4(0.68f, 0.68f, 0, 0); if (idxHref > -1) { ldData.color = RichText.UF_ReadColor(tokens [k].buffer, idxHref + 1); } if (idxValue > -1) { ldData.offset = RichText.UF_ReadVector4(tokens [k].buffer, idxValue + 2); } listOutLineDatas.Add(ldData); //嵌套类型只有最外层有效 k = i; break; } } } } } }
//描边必须放在最后 private static void UF_HandleMesh(List <UIVertex> uivertexs, List <OutLineData> listOutLineDatas, int startIndex) { if (uivertexs.Count == 0 || listOutLineDatas.Count == 0) { return; } //Vector2 uvPoint = Vector2.zero; int charCount = uivertexs.Count / 6; UIVertex[] rawUIVeterxs = uivertexs.ToArray(); uivertexs.Clear(); for (int k = 0; k < listOutLineDatas.Count; k++) { OutLineData ldData = listOutLineDatas [k]; if (ldData.idx + ldData.length > charCount) { break; } UF_PopulateOutLineMesh(uivertexs, rawUIVeterxs, startIndex + ldData.idx * 6, ldData.length * 6, ldData.offset, ldData.color); } uivertexs.AddRange(rawUIVeterxs); }