public static Vector3 GetStringPositionAtText(Text text, string strFragment) {int strFragmentIndex = text.text.IndexOf(strFragment); //-1表示不包含strFragmentVector3 stringPos = Vector3.zero;if (strFragmentIndex > -1){Vector3 firstPos = GetCharPositionAtText(text, strFragmentIndex + 1);Vector3 lastPos = GetCharPositionAtText(text, strFragmentIndex + strFragment.Length);stringPos = (firstPos + lastPos) * 0.5f;}else{stringPos = GetCharPositionAtText(text, strFragmentIndex);}return stringPos; }public static Vector3 GetCharPositionAtText(Text text, int charIndex) {string textStr = text.text;Vector3 charPos = Vector3.zero;if (charIndex <= textStr.Length && charIndex > 0){TextGenerator textGen = new TextGenerator(textStr.Length);Vector2 extents = text.rectTransform.rect.size;textGen.Populate(textStr, text.GetGenerationSettings(extents));int newLine = textStr.Substring(0, charIndex).Split('\n').Length - 1;int whiteSpace = textStr.Substring(0, charIndex).Split(' ').Length - 1;int indexOfTextQuad = (charIndex * 4) + (newLine * 4) - 4;if (indexOfTextQuad < textGen.vertexCount){charPos = (textGen.verts[indexOfTextQuad].position +textGen.verts[indexOfTextQuad + 1].position +textGen.verts[indexOfTextQuad + 2].position +textGen.verts[indexOfTextQuad + 3].position) / 4f;}}charPos = text.transform.TransformPoint(charPos); //转换为世界坐标return charPos; }