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

Commit 3bbc4eb

Browse files
committed
重写文本的宽高
1 parent 97af02b commit 3bbc4eb

File tree

3 files changed

+181
-54
lines changed

3 files changed

+181
-54
lines changed

Assets/EmojiText/Examples/Scene/Text 1.unity

+11-7
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ MonoBehaviour:
490490
m_BestFit: 0
491491
m_MinSize: 10
492492
m_MaxSize: 40
493-
m_Alignment: 1
493+
m_Alignment: 6
494494
m_AlignByGeometry: 1
495495
m_RichText: 1
496496
m_HorizontalOverflow: 0
@@ -914,20 +914,24 @@ MonoBehaviour:
914914
m_BestFit: 0
915915
m_MinSize: 10
916916
m_MaxSize: 40
917-
m_Alignment: 4
917+
m_Alignment: 5
918918
m_AlignByGeometry: 1
919919
m_RichText: 1
920-
m_HorizontalOverflow: 0
921-
m_VerticalOverflow: 0
920+
m_HorizontalOverflow: 1
921+
m_VerticalOverflow: 1
922922
m_LineSpacing: 1
923-
m_Text: 00000<quad size=24 width=1 />00000000<color=blue>[000]</color>00<quad size=24
924-
width=1 />0000<quad size=24 width=1 />00000
923+
m_Text: '00000<quad size=24 width=1 />00000000<color=blue>[000]</color>00<quad size=24
924+
width=1 />0000<quad size=24 width=1 />0000000000
925+
926+
0000000'
925927
OnHrefClick:
926928
m_PersistentCalls:
927929
m_Calls: []
928930
m_TypeName: EmojiText.Taurus.InlineText+HrefClickEvent, Assembly-CSharp, Version=0.0.0.0,
929931
Culture=neutral, PublicKeyToken=null
930-
_text: 00000[1#meat]00000000[-1#000]00[1#rock]0000[#emoji_6]00000
932+
_text: '00000[1#meat]00000000[-1#000]00[1#rock]0000[#emoji_6]0000000000
933+
934+
0000000'
931935
--- !u!222 &2112333775
932936
CanvasRenderer:
933937
m_ObjectHideFlags: 0

Assets/EmojiText/Examples/Scene/Text.unity

+118-8
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ Canvas:
177177
m_Enabled: 1
178178
serializedVersion: 3
179179
m_RenderMode: 0
180-
m_Camera: {fileID: 0}
180+
m_Camera: {fileID: 1807511896}
181181
m_PlaneDistance: 100
182182
m_PixelPerfect: 0
183183
m_ReceivesEvents: 1
@@ -308,8 +308,8 @@ RectTransform:
308308
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
309309
m_AnchorMin: {x: 0.5, y: 0.5}
310310
m_AnchorMax: {x: 0.5, y: 0.5}
311-
m_AnchoredPosition: {x: 94.5, y: -76.1}
312-
m_SizeDelta: {x: 134.8, y: 182.2}
311+
m_AnchoredPosition: {x: 76.69, y: -67.04}
312+
m_SizeDelta: {x: 99.19, y: 164.08}
313313
m_Pivot: {x: 0.5, y: 0.5}
314314
--- !u!114 &609976087
315315
MonoBehaviour:
@@ -535,12 +535,12 @@ Prefab:
535535
- target: {fileID: 224894336202030516, guid: 60411c537497e614b96c56ec7a2449c7,
536536
type: 2}
537537
propertyPath: m_AnchoredPosition.y
538-
value: -76.1
538+
value: -67.04
539539
objectReference: {fileID: 0}
540540
- target: {fileID: 224894336202030516, guid: 60411c537497e614b96c56ec7a2449c7,
541541
type: 2}
542542
propertyPath: m_SizeDelta.y
543-
value: 182.2
543+
value: 164.08
544544
objectReference: {fileID: 0}
545545
- target: {fileID: 224894336202030516, guid: 60411c537497e614b96c56ec7a2449c7,
546546
type: 2}
@@ -591,6 +591,11 @@ Prefab:
591591
propertyPath: _text
592592
value: "<color=black>\u9759\u6001\u8868\u60C5</color>\nNewText[#emoji_0]\nNewText[#emoji_1]\nNewText[#emoji_2]\nNewText[#emoji_3]\nNewText[#emoji_4]"
593593
objectReference: {fileID: 0}
594+
- target: {fileID: 224894336202030516, guid: 60411c537497e614b96c56ec7a2449c7,
595+
type: 2}
596+
propertyPath: m_Pivot.x
597+
value: 0.5
598+
objectReference: {fileID: 0}
594599
m_RemovedComponents:
595600
- {fileID: 114914968845199358, guid: 60411c537497e614b96c56ec7a2449c7, type: 2}
596601
m_SourcePrefab: {fileID: 100100000, guid: 60411c537497e614b96c56ec7a2449c7, type: 2}
@@ -722,6 +727,111 @@ MonoBehaviour:
722727
m_Script: {fileID: 11500000, guid: 4a43be44be4e113479cbf3f4c3faeec9, type: 3}
723728
m_Name:
724729
m_EditorClassIdentifier:
730+
--- !u!1 &1251678750
731+
GameObject:
732+
m_ObjectHideFlags: 0
733+
m_CorrespondingSourceObject: {fileID: 1502221938520230, guid: 60411c537497e614b96c56ec7a2449c7,
734+
type: 2}
735+
m_PrefabInternal: {fileID: 0}
736+
serializedVersion: 6
737+
m_Component:
738+
- component: {fileID: 1251678751}
739+
- component: {fileID: 1251678754}
740+
- component: {fileID: 1251678753}
741+
- component: {fileID: 1251678752}
742+
m_Layer: 5
743+
m_Name: Text (4)
744+
m_TagString: Untagged
745+
m_Icon: {fileID: 0}
746+
m_NavMeshLayer: 0
747+
m_StaticEditorFlags: 0
748+
m_IsActive: 1
749+
--- !u!224 &1251678751
750+
RectTransform:
751+
m_ObjectHideFlags: 0
752+
m_CorrespondingSourceObject: {fileID: 224894336202030516, guid: 60411c537497e614b96c56ec7a2449c7,
753+
type: 2}
754+
m_PrefabInternal: {fileID: 0}
755+
m_GameObject: {fileID: 1251678750}
756+
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
757+
m_LocalPosition: {x: 0, y: 0, z: 0}
758+
m_LocalScale: {x: 1, y: 1, z: 1}
759+
m_Children: []
760+
m_Father: {fileID: 1913370633}
761+
m_RootOrder: 4
762+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
763+
m_AnchorMin: {x: 0.5, y: 0.5}
764+
m_AnchorMax: {x: 0.5, y: 0.5}
765+
m_AnchoredPosition: {x: 0, y: -217.6}
766+
m_SizeDelta: {x: 197, y: 117.31}
767+
m_Pivot: {x: 0.5, y: 0.5}
768+
--- !u!114 &1251678752
769+
MonoBehaviour:
770+
m_ObjectHideFlags: 0
771+
m_CorrespondingSourceObject: {fileID: 0}
772+
m_PrefabInternal: {fileID: 0}
773+
m_GameObject: {fileID: 1251678750}
774+
m_Enabled: 1
775+
m_EditorHideFlags: 0
776+
m_Script: {fileID: 11500000, guid: 4a43be44be4e113479cbf3f4c3faeec9, type: 3}
777+
m_Name:
778+
m_EditorClassIdentifier:
779+
--- !u!114 &1251678753
780+
MonoBehaviour:
781+
m_ObjectHideFlags: 0
782+
m_CorrespondingSourceObject: {fileID: 114718484989583292, guid: 60411c537497e614b96c56ec7a2449c7,
783+
type: 2}
784+
m_PrefabInternal: {fileID: 0}
785+
m_GameObject: {fileID: 1251678750}
786+
m_Enabled: 1
787+
m_EditorHideFlags: 0
788+
m_Script: {fileID: 11500000, guid: fe91fb1d3926f5940bad17bb75cfd5fe, type: 3}
789+
m_Name:
790+
m_EditorClassIdentifier:
791+
m_Material: {fileID: 0}
792+
m_Color: {r: 1, g: 1, b: 1, a: 1}
793+
m_RaycastTarget: 1
794+
m_OnCullStateChanged:
795+
m_PersistentCalls:
796+
m_Calls: []
797+
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
798+
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
799+
m_FontData:
800+
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
801+
m_FontSize: 14
802+
m_FontStyle: 0
803+
m_BestFit: 0
804+
m_MinSize: 10
805+
m_MaxSize: 40
806+
m_Alignment: 0
807+
m_AlignByGeometry: 1
808+
m_RichText: 1
809+
m_HorizontalOverflow: 0
810+
m_VerticalOverflow: 0
811+
m_LineSpacing: 1
812+
m_Text: <quad size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad
813+
size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24
814+
width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1
815+
/><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad
816+
size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24
817+
width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1
818+
/><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad
819+
size=24 width=1 /><quad size=24 width=1 /><quad size=24 width=1 /><quad size=24
820+
width=1 /><quad size=24 width=1 />
821+
OnHrefClick:
822+
m_PersistentCalls:
823+
m_Calls: []
824+
m_TypeName: EmojiText.Taurus.InlineText+HrefClickEvent, Assembly-CSharp, Version=0.0.0.0,
825+
Culture=neutral, PublicKeyToken=null
826+
_text: '[#emoji_0][#emoji_1][#emoji_2][#emoji_3][#emoji_4][#emoji_5][#emoji_6][#emoji_7][#emoji_0][#emoji_1][#emoji_2][#emoji_3][#emoji_4][#emoji_5][#emoji_6][#emoji_7][#emoji_0][#emoji_1][#emoji_2][#emoji_3][#emoji_4][#emoji_5][#emoji_6][#emoji_7][1#angry][#emoji_0][1#roll][0#emoji_0]'
827+
--- !u!222 &1251678754
828+
CanvasRenderer:
829+
m_ObjectHideFlags: 0
830+
m_CorrespondingSourceObject: {fileID: 222279214585701088, guid: 60411c537497e614b96c56ec7a2449c7,
831+
type: 2}
832+
m_PrefabInternal: {fileID: 0}
833+
m_GameObject: {fileID: 1251678750}
834+
m_CullTransparentMesh: 0
725835
--- !u!1 &1302729960
726836
GameObject:
727837
m_ObjectHideFlags: 0
@@ -953,7 +1063,7 @@ MonoBehaviour:
9531063
m_FontSize: 14
9541064
m_FontStyle: 0
9551065
m_BestFit: 0
956-
m_MinSize: 10
1066+
m_MinSize: 1
9571067
m_MaxSize: 40
9581068
m_Alignment: 0
9591069
m_AlignByGeometry: 1
@@ -962,14 +1072,14 @@ MonoBehaviour:
9621072
m_VerticalOverflow: 0
9631073
m_LineSpacing: 1
9641074
m_Text: "<color=black>\u591A\u56FE\u96C6\u8868\u60C5</color>\nNewText<quad size=24
965-
width=1 />NewText<quad size=24 width=1 />\nNewText<quad size=24 width=1 />NewText<quad
1075+
width=1 />NewText<quad size=24 width=1 />\nNewText<quad size=24 width=1 />New00Text<quad
9661076
size=24 width=1 />"
9671077
OnHrefClick:
9681078
m_PersistentCalls:
9691079
m_Calls: []
9701080
m_TypeName: EmojiText.Taurus.InlineText+HrefClickEvent, Assembly-CSharp, Version=0.0.0.0,
9711081
Culture=neutral, PublicKeyToken=null
972-
_text: "<color=black>\u591A\u56FE\u96C6\u8868\u60C5</color>\nNewText[0#emoji_0]NewText[1#angry]\nNewText[1#roll]NewText[0#emoji_0]"
1082+
_text: "<color=black>\u591A\u56FE\u96C6\u8868\u60C5</color>\nNewText[#emoji_0]NewText[1#angry]\nNewText[1#roll]New00Text[0#emoji_0]"
9731083
--- !u!222 &1835673699
9741084
CanvasRenderer:
9751085
m_ObjectHideFlags: 0

Assets/EmojiText/Scripts/InlineText.cs

+52-39
Original file line numberDiff line numberDiff line change
@@ -111,25 +111,26 @@ protected override void OnPopulateMesh(VertexHelper toFill)
111111
UpdateDrawSprite();
112112
}
113113

114-
#region 文本所占的长宽
115-
//public override float preferredWidth
116-
//{
117-
// get
118-
// {
119-
// var settings = GetGenerationSettings(Vector2.zero);
120-
// return cachedTextGeneratorForLayout.GetPreferredWidth(_outputText, settings) / pixelsPerUnit;
121-
// }
122-
//}
123-
//public override float preferredHeight
124-
//{
125-
// get
126-
// {
127-
// var settings = GetGenerationSettings(new Vector2(rectTransform.rect.size.x, 0.0f));
128-
// return cachedTextGeneratorForLayout.GetPreferredHeight(_outputText, settings) / pixelsPerUnit;
129-
// }
130-
//}
131-
#endregion
132-
114+
// 重写文本所占的长宽
115+
//文本的宽度计算好像有bug,超过sizeDelta就取sizeDelta
116+
public override float preferredWidth
117+
{
118+
get
119+
{
120+
var settings = GetGenerationSettings(Vector2.zero);
121+
float width= cachedTextGeneratorForLayout.GetPreferredWidth(m_Text, settings) / pixelsPerUnit;
122+
return width < rectTransform.sizeDelta.x || horizontalOverflow==HorizontalWrapMode.Overflow? width : rectTransform.sizeDelta.x;
123+
}
124+
}
125+
public override float preferredHeight
126+
{
127+
get
128+
{
129+
var settings = GetGenerationSettings(new Vector2(rectTransform.rect.size.x, 0.0f));
130+
float height= cachedTextGeneratorForLayout.GetPreferredHeight(m_Text, settings) / pixelsPerUnit;
131+
return height < rectTransform.sizeDelta.y || verticalOverflow == VerticalWrapMode.Overflow ? height : rectTransform.sizeDelta.y;
132+
}
133+
}
133134
#endregion
134135

135136
#region 事件回调
@@ -381,41 +382,53 @@ protected override void OnValidate()
381382
private void OnDrawGizmos()
382383
{
383384
//text
384-
Gizmos.color = Color.white;
385385
rectTransform.GetWorldCorners(_textWolrdVertexs);
386-
Gizmos.DrawLine(_textWolrdVertexs[0], _textWolrdVertexs[1]);
387-
Gizmos.DrawLine(_textWolrdVertexs[1], _textWolrdVertexs[2]);
388-
Gizmos.DrawLine(_textWolrdVertexs[2], _textWolrdVertexs[3]);
389-
Gizmos.DrawLine(_textWolrdVertexs[3], _textWolrdVertexs[0]);
386+
GizmosDrawLine(Color.white,_textWolrdVertexs);
387+
388+
//preferred size
389+
Vector2 pivot = GetTextAnchorPivot(alignment);
390+
Rect rect = new Rect();
391+
Vector2 size = rectTransform.sizeDelta - new Vector2(preferredWidth, preferredHeight);
392+
rect.position = pivot * size - rectTransform.sizeDelta / 2.0f;
393+
rect.width = preferredWidth;
394+
rect.height = preferredHeight;
395+
_textWolrdVertexs[0] = Utility.TransformPoint2World(transform,new Vector3(rect.x, rect.y));
396+
_textWolrdVertexs[1] = Utility.TransformPoint2World(transform, new Vector3(rect.x+rect.width, rect.y));
397+
_textWolrdVertexs[2] = Utility.TransformPoint2World(transform, new Vector3(rect.x + rect.width, rect.y+rect.height));
398+
_textWolrdVertexs[3] = Utility.TransformPoint2World(transform, new Vector3(rect.x, rect.y+rect.height));
399+
GizmosDrawLine(Color.blue,_textWolrdVertexs);
390400

391401
//href
392-
Gizmos.color = Color.green;
393402
for (int i = 0; i < _listHrefInfos.Count; i++)
394403
{
395404
for (int j = 0; j < _listHrefInfos[i].Boxes.Count; j++)
396405
{
397-
Rect rect = _listHrefInfos[i].Boxes[j];
398-
Vector3 point00 = Utility.TransformPoint2World(transform, rect.position);
399-
Vector3 point01 = Utility.TransformPoint2World(transform, new Vector3(rect.x + rect.width, rect.y));
400-
Vector3 point02 = Utility.TransformPoint2World(transform, new Vector3(rect.x + rect.width, rect.y + rect.height));
401-
Vector3 point03 = Utility.TransformPoint2World(transform, new Vector3(rect.x, rect.y + rect.height));
402-
Gizmos.DrawLine(point00, point01);
403-
Gizmos.DrawLine(point01, point02);
404-
Gizmos.DrawLine(point02, point03);
405-
Gizmos.DrawLine(point03, point00);
406+
rect = _listHrefInfos[i].Boxes[j];
407+
_textWolrdVertexs[0] = Utility.TransformPoint2World(transform, rect.position);
408+
_textWolrdVertexs[1] = Utility.TransformPoint2World(transform, new Vector3(rect.x + rect.width, rect.y));
409+
_textWolrdVertexs[2] = Utility.TransformPoint2World(transform, new Vector3(rect.x + rect.width, rect.y + rect.height));
410+
_textWolrdVertexs[3] = Utility.TransformPoint2World(transform, new Vector3(rect.x, rect.y + rect.height));
411+
412+
GizmosDrawLine(Color.green,_textWolrdVertexs);
406413
}
407414
}
408415

409416
//sprite
410-
Gizmos.color = Color.yellow;
411417
for (int i = 0; i < _spriteInfo.Count; i++)
412418
{
413-
Gizmos.DrawLine(_spriteInfo[i].Pos[0], _spriteInfo[i].Pos[1]);
414-
Gizmos.DrawLine(_spriteInfo[i].Pos[1], _spriteInfo[i].Pos[2]);
415-
Gizmos.DrawLine(_spriteInfo[i].Pos[3], _spriteInfo[i].Pos[2]);
416-
Gizmos.DrawLine(_spriteInfo[i].Pos[0], _spriteInfo[i].Pos[3]);
419+
GizmosDrawLine(Color.yellow,_spriteInfo[i].Pos);
417420
}
418421
}
422+
//划线
423+
private void GizmosDrawLine(Color color,Vector3[] pos)
424+
{
425+
Gizmos.color = color;
426+
427+
Gizmos.DrawLine(pos[0], pos[1]);
428+
Gizmos.DrawLine(pos[1], pos[2]);
429+
Gizmos.DrawLine(pos[2], pos[3]);
430+
Gizmos.DrawLine(pos[3], pos[0]);
431+
}
419432
#endif
420433
#endregion
421434
}

0 commit comments

Comments
 (0)