Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit 4c77b09

Browse files
committed
更新例子 使用1 代替空格的占位符
1 parent 9e2c1bf commit 4c77b09

File tree

3 files changed

+159
-75
lines changed

3 files changed

+159
-75
lines changed

Assets/Examples/Scene/Text.unity

88 Bytes
Binary file not shown.

Assets/TextInlineSprite/Scripts/EmojiUIData.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,26 @@ public class SpriteTagInfo
4848
//表情位置
4949
public Vector3[] _Pos;
5050
//位置索引
51-
public int _Position;
51+
private int _Position =-1;
5252
//uv
5353
public Vector2[] _UV;
54+
55+
private const int dv = 100000;
56+
57+
public void FillIdxAndPlaceHolder(int idx,int cnt)
58+
{
59+
_Position = cnt * dv + idx;
60+
}
61+
62+
public int GetPlaceHolderCnt()
63+
{
64+
return _Position / dv;
65+
}
66+
67+
public int GetPositionIdx()
68+
{
69+
return _Position % dv;
70+
}
5471
}
5572

5673
public class UnitMeshInfo:IEquatable<UnitMeshInfo>

Assets/TextInlineSprite/Scripts/InlineText.cs

Lines changed: 141 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ private InlineManager Manager
4646
}
4747

4848
List<SpriteTagInfo> RenderTagList;
49-
49+
private const string palceholder = "1";
5050
private bool needupdate;
5151
private bool updatespace =true;
5252
private string _OutputText = "";
@@ -179,50 +179,62 @@ void OnDrawGizmos()
179179
{
180180
Gizmos.color = Color.blue;
181181

182-
Vector3 size = new Vector3(preferredWidth, preferredHeight, 0);
183-
Vector3 fixsize = transform.TransformDirection(rectTransform.rect.size);
184-
Vector3 textsize =transform.TransformDirection(size);
185-
186-
Vector3 fixpos = transform.position ;
187-
//可简化
188-
if(this.alignment == TextAnchor.LowerCenter)
189-
{
190-
fixpos += new Vector3(0, -0.5f * (fixsize.y - textsize.y) , 0);
191-
}
192-
else if(this.alignment == TextAnchor.LowerLeft)
193-
{
194-
fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), -0.5f * (fixsize.y - textsize.y), 0);
195-
}
196-
else if (this.alignment == TextAnchor.LowerRight)
197-
{
198-
fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), -0.5f * (fixsize.y - textsize.y), 0);
199-
}
200-
else if (this.alignment == TextAnchor.MiddleCenter)
201-
{
202-
fixpos += new Vector3(0, 0, 0);
203-
}
204-
else if (this.alignment == TextAnchor.MiddleLeft)
205-
{
206-
fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x),0, 0);
207-
}
208-
else if (this.alignment == TextAnchor.MiddleRight)
209-
{
210-
fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), 0, 0);
211-
}
212-
else if (this.alignment == TextAnchor.UpperCenter)
213-
{
214-
fixpos += new Vector3(0, 0.5f * (fixsize.y - textsize.y), 0);
215-
}
216-
else if (this.alignment == TextAnchor.UpperLeft)
217-
{
218-
fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), 0.5f * (fixsize.y - textsize.y), 0);
219-
}
220-
else if (this.alignment == TextAnchor.UpperRight)
221-
{
222-
fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), 0.5f * (fixsize.y - textsize.y), 0);
223-
}
224-
225-
Gizmos.DrawWireCube(fixpos, textsize);
182+
var corners = new Vector3[4];
183+
rectTransform.GetWorldCorners(corners);
184+
185+
Gizmos.DrawLine(corners[0], corners[1]);
186+
Gizmos.DrawLine(corners[1], corners[2]);
187+
Gizmos.DrawLine(corners[3], corners[3]);
188+
Gizmos.DrawLine(corners[3], corners[0]);
189+
//Vector3 size = new Vector3(preferredWidth, preferredHeight, 0);
190+
//Vector3 fixsize = transform.TransformDirection(rectTransform.rect.size);
191+
//Vector3 textsize = transform.TransformDirection(size);
192+
193+
//Vector3 fixpos = transform.position;
194+
//int cid = ((int)alignment) / 3;
195+
//int rid = ((int)alignment) % 3;
196+
//float pivx = this.rectTransform.pivot.x;
197+
//float pivy = this.rectTransform.pivot.y;
198+
199+
////可简化
200+
//if (this.alignment == TextAnchor.LowerCenter)
201+
//{
202+
// fixpos += new Vector3(0, -0.5f * (fixsize.y - textsize.y), 0);
203+
//}
204+
//else if (this.alignment == TextAnchor.LowerLeft)
205+
//{
206+
// fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), -0.5f * (fixsize.y - textsize.y), 0);
207+
//}
208+
//else if (this.alignment == TextAnchor.LowerRight)
209+
//{
210+
// fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), -0.5f * (fixsize.y - textsize.y), 0);
211+
//}
212+
//else if (this.alignment == TextAnchor.MiddleCenter)
213+
//{
214+
// fixpos += new Vector3(0, 0, 0);
215+
//}
216+
//else if (this.alignment == TextAnchor.MiddleLeft)
217+
//{
218+
// fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), 0, 0);
219+
//}
220+
//else if (this.alignment == TextAnchor.MiddleRight)
221+
//{
222+
// fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), 0, 0);
223+
//}
224+
//else if (this.alignment == TextAnchor.UpperCenter)
225+
//{
226+
// fixpos += new Vector3(0, 0.5f * (fixsize.y - textsize.y), 0);
227+
//}
228+
//else if (this.alignment == TextAnchor.UpperLeft)
229+
//{
230+
// fixpos += new Vector3(-0.5f * (fixsize.x - textsize.x), 0.5f * (fixsize.y - textsize.y), 0);
231+
//}
232+
//else if (this.alignment == TextAnchor.UpperRight)
233+
//{
234+
// fixpos += new Vector3(0.5f * (fixsize.x - textsize.x), 0.5f * (fixsize.y - textsize.y), 0);
235+
//}
236+
237+
// Gizmos.DrawWireCube(fixpos, textsize);
226238
}
227239

228240
protected override void Start()
@@ -323,6 +335,17 @@ protected override void OnPopulateMesh(VertexHelper toFill)
323335
_listVertsPos.Clear();
324336
}
325337

338+
339+
int NextSkipMin = -10;
340+
int NextSkipMax = -10;
341+
int TagIndex = 0;
342+
if (RenderTagList != null && RenderTagList.Count > 0)
343+
{
344+
var data = RenderTagList[TagIndex];
345+
NextSkipMin = data.GetPositionIdx();
346+
NextSkipMax = NextSkipMin + 4 * data.GetPlaceHolderCnt();
347+
}
348+
326349
if (roundingOffset != Vector2.zero)
327350
{
328351
for (int i = 0; i < vertCount; ++i)
@@ -332,11 +355,38 @@ protected override void OnPopulateMesh(VertexHelper toFill)
332355
m_TempVerts[tempVertsIndex].position *= unitsPerPixel;
333356
m_TempVerts[tempVertsIndex].position.x += roundingOffset.x;
334357
m_TempVerts[tempVertsIndex].position.y += roundingOffset.y;
335-
if (tempVertsIndex == 3)
336-
toFill.AddUIVertexQuad(m_TempVerts);
358+
359+
if(NextSkipMin >=0 && i >= NextSkipMin && i <= NextSkipMax)
360+
{
361+
362+
}
363+
else
364+
{
365+
if (tempVertsIndex == 3)
366+
toFill.AddUIVertexQuad(m_TempVerts);
367+
}
368+
337369

338370
if (RenderTagList != null && RenderTagList.Count > 0)
371+
{
372+
if (i == NextSkipMax)
373+
{
374+
TagIndex++;
375+
if (RenderTagList.Count > TagIndex)
376+
{
377+
var data = RenderTagList[TagIndex];
378+
NextSkipMin = data.GetPositionIdx();
379+
NextSkipMax = NextSkipMin + 4 * data.GetPlaceHolderCnt();
380+
}
381+
else
382+
{
383+
NextSkipMin = -10;
384+
}
385+
}
386+
339387
_listVertsPos.Add(m_TempVerts[tempVertsIndex].position);
388+
}
389+
340390
}
341391
}
342392
else
@@ -346,12 +396,37 @@ protected override void OnPopulateMesh(VertexHelper toFill)
346396
int tempVertsIndex = i & 3;
347397
m_TempVerts[tempVertsIndex] = verts[i];
348398
m_TempVerts[tempVertsIndex].position *= unitsPerPixel;
349-
if (tempVertsIndex == 3)
350-
toFill.AddUIVertexQuad(m_TempVerts);
351399

352-
if(RenderTagList != null && RenderTagList.Count > 0)
353-
_listVertsPos.Add(m_TempVerts[tempVertsIndex].position);
400+
if (NextSkipMin >= 0 && i >= NextSkipMin && i <= NextSkipMax)
401+
{
402+
403+
}
404+
else
405+
{
406+
if (tempVertsIndex == 3)
407+
toFill.AddUIVertexQuad(m_TempVerts);
408+
}
354409

410+
411+
if (RenderTagList != null && RenderTagList.Count > 0)
412+
{
413+
if (i == NextSkipMax)
414+
{
415+
TagIndex++;
416+
if (RenderTagList.Count > TagIndex)
417+
{
418+
var data = RenderTagList[TagIndex];
419+
NextSkipMin = data.GetPositionIdx();
420+
NextSkipMax = NextSkipMin + 4 * data.GetPlaceHolderCnt();
421+
}
422+
else
423+
{
424+
NextSkipMin = -10;
425+
}
426+
}
427+
428+
_listVertsPos.Add(m_TempVerts[tempVertsIndex].position);
429+
}
355430
}
356431
}
357432

@@ -383,7 +458,7 @@ private void ClearQuadUVs(IList<UIVertex> verts)
383458
for (int i = 0; i < RenderTagList.Count; ++i)
384459
{
385460
SpriteTagInfo info = RenderTagList[i];
386-
int pos = info._Position;
461+
int pos = info.GetPositionIdx();
387462
if ((pos + 4) > verts.Count)
388463
continue;
389464
for (int m = pos; m < pos + 4; m++)
@@ -402,15 +477,14 @@ void CalcQuadInfo()
402477
{
403478
if(RenderTagList != null)
404479
{
405-
float height = this.preferredHeight /2;
406480
for(int i =0; i < RenderTagList.Count;++i)
407481
{
408482
SpriteTagInfo info = RenderTagList[i];
409-
int pos = info._Position;
483+
int pos = info.GetPositionIdx();
410484
if ((pos + 4) > _listVertsPos.Count)
411485
continue;
412486

413-
Vector3 p1 = _listVertsPos[pos];
487+
Vector3 p1 = _listVertsPos[pos+3];
414488

415489
//info._Pos[0] = p1 ;
416490
//info._Pos[1] = _listVertsPos[pos+1];
@@ -419,10 +493,10 @@ void CalcQuadInfo()
419493
//int cid = ((int)alignment) /3;
420494
//int rid = ((int)alignment) % 3;
421495

422-
info._Pos[0] = p1 + new Vector3(0, info._Size.y/2 + height, 0);
423-
info._Pos[1] = p1 + new Vector3(info._Size.x,info._Size.y/ 2 + height , 0);
424-
info._Pos[2] = p1 + new Vector3(info._Size.x, height - info._Size.y / 2, 0);
425-
info._Pos[3] = p1 + new Vector3(0, height - info._Size.y / 2, 0);
496+
info._Pos[0] = p1 + new Vector3(0, info._Size.y , 0);
497+
info._Pos[1] = p1 + new Vector3(info._Size.x,info._Size.y, 0);
498+
info._Pos[2] = p1 + new Vector3(info._Size.x,0, 0);
499+
info._Pos[3] = p1 + new Vector3(0, 0 ,0);
426500
}
427501
}
428502

@@ -582,14 +656,13 @@ bool ParseEmoji(string newInfo,int Index, int Id, string TagName, Match match, r
582656
if (_SpaceGen == null)
583657
{
584658
_SpaceGen = new TextGenerator();
585-
586659
}
587660

588661
if(updatespace)
589662
{
590663
Vector2 extents = rectTransform.rect.size;
591664
TextGenerationSettings settings = GetGenerationSettings(extents);
592-
_SpaceGen.Populate(" ", settings);
665+
_SpaceGen.Populate(palceholder, settings);
593666
updatespace = false;
594667
}
595668

@@ -598,31 +671,24 @@ bool ParseEmoji(string newInfo,int Index, int Id, string TagName, Match match, r
598671
float spaceheight = spaceverts[0].position.y - spaceverts[3].position.y;
599672
float spacesize = Mathf.Max(spacewid, spaceheight);
600673

601-
int fillspacecnt = Mathf.RoundToInt(autosize / spacesize);
602-
if (autosize > spacesize)
603-
{
604-
fillspacecnt = Mathf.RoundToInt((autosize ) / (spacesize ));
605-
}
606-
else
607-
{
608-
fillspacecnt = Mathf.RoundToInt(autosize / spacesize);
609-
}
674+
int fillspacecnt = Mathf.CeilToInt(autosize / spacesize);
675+
610676
for (int i = 0; i < fillspacecnt; i++)
611677
{
612-
_textBuilder.Append(" ");
678+
_textBuilder.Append(palceholder);
613679
}
614680

615681
//_textBuilder.AppendFormat("<quad material=0 x={0} y={1} size={2} width={3} />", tagSprites.x, tagSprites.y, autosize, tagSprites.width);
616682

617683
if (RenderTagList.Count > Index)
618684
{
619685
SpriteTagInfo _tempSpriteTag = RenderTagList[Index];
620-
if(Id != _tempSpriteTag._ID || TagName != _tempSpriteTag._Tag || _tempIndex != _tempSpriteTag._Position)
686+
if(Id != _tempSpriteTag._ID || TagName != _tempSpriteTag._Tag || _tempIndex != _tempSpriteTag.GetPositionIdx())
621687
{
622688
_tempSpriteTag._ID = Id;
623689
_tempSpriteTag._Tag = TagName;
624690
_tempSpriteTag._Size = new Vector2(autosize * tagSprites.width, autosize);
625-
_tempSpriteTag._Position = _tempIndex;
691+
_tempSpriteTag.FillIdxAndPlaceHolder(_tempIndex, fillspacecnt);
626692
_tempSpriteTag._UV = tagSprites.spritegroups[0].uv;
627693
}
628694
}
@@ -634,10 +700,11 @@ bool ParseEmoji(string newInfo,int Index, int Id, string TagName, Match match, r
634700
_Tag = TagName,
635701
_Size = new Vector2(autosize * tagSprites.width, autosize),
636702
_Pos = new Vector3[4],
637-
_Position = _tempIndex,
638703
_UV = tagSprites.spritegroups[0].uv
639704
};
640705

706+
_tempSpriteTag.FillIdxAndPlaceHolder(_tempIndex, fillspacecnt);
707+
641708
RenderTagList.Add(_tempSpriteTag);
642709
}
643710

0 commit comments

Comments
 (0)