3 using System.Collections;
5 #pragma warning disable 0109 // Disable warning due to conflict between Unity Editor DLL and Runtime DLL related to .renderer property being available in one but not the other. 11 [RequireComponent(typeof(MeshRenderer))]
12 [RequireComponent(typeof(MeshFilter))]
20 get {
return m_fontAsset; }
21 set { m_fontAsset = value; }
32 get {
return m_spriteAsset; }
33 set { m_spriteAsset = value; }
45 get {
return GetMaterial(m_sharedMaterial); }
50 if (m_sharedMaterial.GetInstanceID() == value.GetInstanceID())
53 m_sharedMaterial = m_material = value;
62 private Material m_material;
70 get {
return m_sharedMaterial; }
74 private Material m_sharedMaterial;
82 get {
return m_fallbackMaterial; }
85 if (m_fallbackMaterial == value)
return;
87 if (m_fallbackMaterial !=
null && m_fallbackMaterial != value)
88 TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
90 m_fallbackMaterial = value;
91 TMP_MaterialManager.AddFallbackMaterialReference(m_fallbackMaterial);
96 private Material m_fallbackMaterial;
104 get {
return m_fallbackSourceMaterial; }
105 set { m_fallbackSourceMaterial = value; }
107 private Material m_fallbackSourceMaterial;
115 get {
return m_isDefaultMaterial; }
116 set { m_isDefaultMaterial = value; }
119 private bool m_isDefaultMaterial;
127 get {
return m_padding; }
128 set { m_padding = value; }
131 private float m_padding;
139 get {
if (m_renderer ==
null) m_renderer = GetComponent<Renderer>();
145 private Renderer m_renderer;
153 get {
if (m_meshFilter ==
null) m_meshFilter = GetComponent<MeshFilter>();
158 private MeshFilter m_meshFilter;
171 m_mesh.hideFlags = HideFlags.HideAndDontSave;
177 set { m_mesh = value; }
209 private bool m_isRegisteredForEvents;
215 if (!m_isRegisteredForEvents)
218 TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Add(ON_MATERIAL_PROPERTY_CHANGED);
219 TMPro_EventManager.FONT_PROPERTY_EVENT.Add(ON_FONT_PROPERTY_CHANGED);
221 TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Add(ON_DRAG_AND_DROP_MATERIAL);
223 TMPro_EventManager.SPRITE_ASSET_PROPERTY_EVENT.Add(ON_SPRITE_ASSET_PROPERTY_CHANGED);
227 m_isRegisteredForEvents =
true;
234 if (m_sharedMaterial !=
null)
235 m_sharedMaterial.SetVector(ShaderUtilities.ID_ClipRect,
new Vector4(-32767, -32767, 32767, 32767));
242 m_meshFilter.sharedMesh =
null;
244 if (m_fallbackMaterial !=
null)
246 TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
247 m_fallbackMaterial =
null;
257 if (m_mesh !=
null) DestroyImmediate(m_mesh);
259 if (m_fallbackMaterial !=
null)
261 TMP_MaterialManager.ReleaseFallbackMaterial(m_fallbackMaterial);
262 m_fallbackMaterial =
null;
267 TMPro_EventManager.MATERIAL_PROPERTY_EVENT.Remove(ON_MATERIAL_PROPERTY_CHANGED);
268 TMPro_EventManager.FONT_PROPERTY_EVENT.Remove(ON_FONT_PROPERTY_CHANGED);
270 TMPro_EventManager.DRAG_AND_DROP_MATERIAL_EVENT.Remove(ON_DRAG_AND_DROP_MATERIAL);
272 TMPro_EventManager.SPRITE_ASSET_PROPERTY_EVENT.Remove(ON_SPRITE_ASSET_PROPERTY_CHANGED);
275 m_isRegisteredForEvents =
false;
282 void ON_MATERIAL_PROPERTY_CHANGED(
bool isChanged, Material mat)
285 int targetMaterialID = mat.GetInstanceID();
286 int sharedMaterialID = m_sharedMaterial.GetInstanceID();
287 int fallbackSourceMaterialID = m_fallbackSourceMaterial ==
null ? 0 : m_fallbackSourceMaterial.GetInstanceID();
290 if (targetMaterialID != sharedMaterialID)
293 if (m_fallbackMaterial !=
null && fallbackSourceMaterialID == targetMaterialID)
294 TMP_MaterialManager.CopyMaterialPresetProperties(mat, m_fallbackMaterial);
309 void ON_DRAG_AND_DROP_MATERIAL(GameObject obj, Material currentMaterial, Material newMaterial)
312 #if UNITY_2018_2_OR_NEWER 313 if (obj == gameObject ||
UnityEditor.PrefabUtility.GetCorrespondingObjectFromSource(gameObject) == obj)
315 if (obj == gameObject ||
UnityEditor.PrefabUtility.GetPrefabParent(gameObject) == obj)
318 if (!m_isDefaultMaterial)
return;
321 if (m_renderer ==
null) m_renderer = GetComponent<Renderer>();
323 UnityEditor.Undo.RecordObject(
this,
"Material Assignment");
324 UnityEditor.Undo.RecordObject(m_renderer,
"Material Assignment");
333 void ON_SPRITE_ASSET_PROPERTY_CHANGED(
bool isChanged,
UnityEngine.Object obj)
347 void ON_FONT_PROPERTY_CHANGED(
bool isChanged, TMP_FontAsset font)
349 if (m_fontAsset !=
null && font.GetInstanceID() == m_fontAsset.GetInstanceID())
352 if (m_fallbackMaterial !=
null)
354 m_fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightNormal, m_fontAsset.normalStyle);
355 m_fallbackMaterial.SetFloat(ShaderUtilities.ID_WeightBold, m_fontAsset.boldStyle);
363 void ON_TMP_SETTINGS_CHANGED()
373 public static TMP_SubMesh AddSubTextObject(TextMeshPro textComponent, MaterialReference materialReference)
375 GameObject go =
new GameObject(
"TMP SubMesh [" + materialReference.material.name +
"]", typeof(TMP_SubMesh));
377 TMP_SubMesh subMesh = go.GetComponent<TMP_SubMesh>();
379 go.transform.SetParent(textComponent.transform,
false);
380 go.transform.localPosition = Vector3.zero;
381 go.transform.localRotation = Quaternion.identity;
382 go.transform.localScale = Vector3.one;
383 go.layer = textComponent.gameObject.layer;
385 subMesh.m_meshFilter = go.GetComponent<MeshFilter>();
387 subMesh.m_TextComponent = textComponent;
388 subMesh.m_fontAsset = materialReference.fontAsset;
389 subMesh.m_spriteAsset = materialReference.spriteAsset;
390 subMesh.m_isDefaultMaterial = materialReference.isDefaultMaterial;
391 subMesh.SetSharedMaterial(materialReference.material);
393 subMesh.renderer.sortingLayerID = textComponent.renderer.sortingLayerID;
394 subMesh.renderer.sortingOrder = textComponent.renderer.sortingOrder;
400 public void DestroySelf()
402 Destroy(this.gameObject, 1f);
406 Material GetMaterial(Material mat)
410 if (m_renderer ==
null)
411 m_renderer = GetComponent<Renderer>();
414 if (m_material ==
null || m_material.GetInstanceID() != mat.GetInstanceID())
417 m_sharedMaterial = m_material;
425 return m_sharedMaterial;
436 Material mat =
new Material(source);
437 mat.shaderKeywords = source.shaderKeywords;
438 mat.name +=
" (Instance)";
450 if (m_renderer ==
null)
451 m_renderer = GetComponent<Renderer>();
453 return m_renderer.sharedMaterial;
466 m_sharedMaterial = mat;
474 if (m_sharedMaterial !=
null)
475 gameObject.name =
"TMP SubMesh [" + m_sharedMaterial.name +
"]";
499 m_padding = ShaderUtilities.GetPadding(m_sharedMaterial, isExtraPadding, isUsingBold);
545 if (m_renderer ==
null) m_renderer = this.
renderer;
547 m_renderer.sharedMaterial = m_sharedMaterial;
550 if (m_sharedMaterial !=
null && gameObject.name !=
"TMP SubMesh [" + m_sharedMaterial.name +
"]")
551 gameObject.name =
"TMP SubMesh [" + m_sharedMaterial.name +
"]";
Mesh mesh
The Mesh of this text sub object.
void UpdateMeshPadding(bool isExtraPadding, bool isUsingBold)
Function to update the padding values of the object.
bool isDefaultMaterial
Is the text object using the default font asset material.
override void SetVerticesDirty()
Schedule rebuilding of the text geometry.
TextMeshPro m_TextComponent
float padding
Padding value resulting for the property settings on the material.
bool havePropertiesChanged
Property tracking if any of the text properties have changed. Flag is set before the text is regenera...
Material sharedMaterial
The material to be assigned to this text object.
TMP_SpriteAsset spriteAsset
The TMP Sprite Asset assigned to this sub text object.
void SetSharedMaterial(Material mat)
Method to set the shared material.
Material CreateMaterialInstance(Material source)
Method used to create an instance of the material
Material GetSharedMaterial()
Method returning the shared material assigned to the text object.
bool isUsingBold
Property used in conjunction with padding calculation for the geometry.
Material material
The material to be assigned to this object. Returns an instance of the material.
bool extraPadding
Adds extra padding around each character. This may be necessary when the displayed text is very small...
Material fallbackMaterial
The fallback material created from the properties of the fallback source material.
Material fallbackSourceMaterial
The source material used by the fallback font
TMP_FontAsset fontAsset
The TMP Font Asset assigned to this sub text object.
new Renderer renderer
The Mesh Renderer of this text sub object.
float GetPaddingForMaterial()
Function called when the padding value for the material needs to be re-calculated.
MeshFilter meshFilter
The MeshFilter of this text sub object.