mirror of
				https://github.com/DerTyp7/example-top-down-unity.git
				synced 2025-10-31 13:27:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			224 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEngine;
 | |
| using System.Collections;
 | |
| 
 | |
| 
 | |
| namespace TMPro.Examples
 | |
| {
 | |
| 
 | |
|     public class TextMeshProFloatingText : MonoBehaviour
 | |
|     {
 | |
|         public Font TheFont;
 | |
| 
 | |
|         private GameObject m_floatingText;
 | |
|         private TextMeshPro m_textMeshPro;
 | |
|         private TextMesh m_textMesh;
 | |
| 
 | |
|         private Transform m_transform;
 | |
|         private Transform m_floatingText_Transform;
 | |
|         private Transform m_cameraTransform;
 | |
| 
 | |
|         Vector3 lastPOS = Vector3.zero;
 | |
|         Quaternion lastRotation = Quaternion.identity;
 | |
| 
 | |
|         public int SpawnType;
 | |
|         public bool IsTextObjectScaleStatic;
 | |
| 
 | |
|         //private int m_frame = 0;
 | |
| 
 | |
|         static WaitForEndOfFrame k_WaitForEndOfFrame = new WaitForEndOfFrame();
 | |
|         static WaitForSeconds[] k_WaitForSecondsRandom = new WaitForSeconds[]
 | |
|         {
 | |
|             new WaitForSeconds(0.05f), new WaitForSeconds(0.1f), new WaitForSeconds(0.15f), new WaitForSeconds(0.2f), new WaitForSeconds(0.25f),
 | |
|             new WaitForSeconds(0.3f), new WaitForSeconds(0.35f), new WaitForSeconds(0.4f), new WaitForSeconds(0.45f), new WaitForSeconds(0.5f),
 | |
|             new WaitForSeconds(0.55f), new WaitForSeconds(0.6f), new WaitForSeconds(0.65f), new WaitForSeconds(0.7f), new WaitForSeconds(0.75f),
 | |
|             new WaitForSeconds(0.8f), new WaitForSeconds(0.85f), new WaitForSeconds(0.9f), new WaitForSeconds(0.95f), new WaitForSeconds(1.0f),
 | |
|         };
 | |
| 
 | |
|         void Awake()
 | |
|         {
 | |
|             m_transform = transform;
 | |
|             m_floatingText = new GameObject(this.name + " floating text");
 | |
| 
 | |
|             // Reference to Transform is lost when TMP component is added since it replaces it by a RectTransform.
 | |
|             //m_floatingText_Transform = m_floatingText.transform;
 | |
|             //m_floatingText_Transform.position = m_transform.position + new Vector3(0, 15f, 0);
 | |
| 
 | |
|             m_cameraTransform = Camera.main.transform;
 | |
|         }
 | |
| 
 | |
|         void Start()
 | |
|         {
 | |
|             if (SpawnType == 0)
 | |
|             {
 | |
|                 // TextMesh Pro Implementation
 | |
|                 m_textMeshPro = m_floatingText.AddComponent<TextMeshPro>();
 | |
|                 m_textMeshPro.rectTransform.sizeDelta = new Vector2(3, 3);
 | |
| 
 | |
|                 m_floatingText_Transform = m_floatingText.transform;
 | |
|                 m_floatingText_Transform.position = m_transform.position + new Vector3(0, 15f, 0);
 | |
| 
 | |
|                 //m_textMeshPro.fontAsset = Resources.Load("Fonts & Materials/JOKERMAN SDF", typeof(TextMeshProFont)) as TextMeshProFont; // User should only provide a string to the resource.
 | |
|                 //m_textMeshPro.fontSharedMaterial = Resources.Load("Fonts & Materials/LiberationSans SDF", typeof(Material)) as Material;
 | |
| 
 | |
|                 m_textMeshPro.alignment = TextAlignmentOptions.Center;
 | |
|                 m_textMeshPro.color = new Color32((byte)Random.Range(0, 255), (byte)Random.Range(0, 255), (byte)Random.Range(0, 255), 255);
 | |
|                 m_textMeshPro.fontSize = 24;
 | |
|                 //m_textMeshPro.enableExtraPadding = true;
 | |
|                 //m_textMeshPro.enableShadows = false;
 | |
|                 m_textMeshPro.enableKerning = false;
 | |
|                 m_textMeshPro.text = string.Empty;
 | |
|                 m_textMeshPro.isTextObjectScaleStatic = IsTextObjectScaleStatic;
 | |
| 
 | |
|                 StartCoroutine(DisplayTextMeshProFloatingText());
 | |
|             }
 | |
|             else if (SpawnType == 1)
 | |
|             {
 | |
|                 //Debug.Log("Spawning TextMesh Objects.");
 | |
| 
 | |
|                 m_floatingText_Transform = m_floatingText.transform;
 | |
|                 m_floatingText_Transform.position = m_transform.position + new Vector3(0, 15f, 0);
 | |
| 
 | |
|                 m_textMesh = m_floatingText.AddComponent<TextMesh>();
 | |
|                 m_textMesh.font = Resources.Load<Font>("Fonts/ARIAL");
 | |
|                 m_textMesh.GetComponent<Renderer>().sharedMaterial = m_textMesh.font.material;
 | |
|                 m_textMesh.color = new Color32((byte)Random.Range(0, 255), (byte)Random.Range(0, 255), (byte)Random.Range(0, 255), 255);
 | |
|                 m_textMesh.anchor = TextAnchor.LowerCenter;
 | |
|                 m_textMesh.fontSize = 24;
 | |
| 
 | |
|                 StartCoroutine(DisplayTextMeshFloatingText());
 | |
|             }
 | |
|             else if (SpawnType == 2)
 | |
|             {
 | |
| 
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         //void Update()
 | |
|         //{
 | |
|         //    if (SpawnType == 0)
 | |
|         //    {
 | |
|         //        m_textMeshPro.SetText("{0}", m_frame);
 | |
|         //    }
 | |
|         //    else
 | |
|         //    {
 | |
|         //        m_textMesh.text = m_frame.ToString();
 | |
|         //    }
 | |
|         //    m_frame = (m_frame + 1) % 1000;
 | |
| 
 | |
|         //}
 | |
| 
 | |
| 
 | |
|         public IEnumerator DisplayTextMeshProFloatingText()
 | |
|         {
 | |
|             float CountDuration = 2.0f; // How long is the countdown alive.
 | |
|             float starting_Count = Random.Range(5f, 20f); // At what number is the counter starting at.
 | |
|             float current_Count = starting_Count;
 | |
| 
 | |
|             Vector3 start_pos = m_floatingText_Transform.position;
 | |
|             Color32 start_color = m_textMeshPro.color;
 | |
|             float alpha = 255;
 | |
|             int int_counter = 0;
 | |
| 
 | |
| 
 | |
|             float fadeDuration = 3 / starting_Count * CountDuration;
 | |
| 
 | |
|             while (current_Count > 0)
 | |
|             {
 | |
|                 current_Count -= (Time.deltaTime / CountDuration) * starting_Count;
 | |
| 
 | |
|                 if (current_Count <= 3)
 | |
|                 {
 | |
|                     //Debug.Log("Fading Counter ... " + current_Count.ToString("f2"));
 | |
|                     alpha = Mathf.Clamp(alpha - (Time.deltaTime / fadeDuration) * 255, 0, 255);
 | |
|                 }
 | |
| 
 | |
|                 int_counter = (int)current_Count;
 | |
|                 m_textMeshPro.text = int_counter.ToString();
 | |
|                 //m_textMeshPro.SetText("{0}", (int)current_Count);
 | |
| 
 | |
|                 m_textMeshPro.color = new Color32(start_color.r, start_color.g, start_color.b, (byte)alpha);
 | |
| 
 | |
|                 // Move the floating text upward each update
 | |
|                 m_floatingText_Transform.position += new Vector3(0, starting_Count * Time.deltaTime, 0);
 | |
| 
 | |
|                 // Align floating text perpendicular to Camera.
 | |
|                 if (!lastPOS.Compare(m_cameraTransform.position, 1000) || !lastRotation.Compare(m_cameraTransform.rotation, 1000))
 | |
|                 {
 | |
|                     lastPOS = m_cameraTransform.position;
 | |
|                     lastRotation = m_cameraTransform.rotation;
 | |
|                     m_floatingText_Transform.rotation = lastRotation;
 | |
|                     Vector3 dir = m_transform.position - lastPOS;
 | |
|                     m_transform.forward = new Vector3(dir.x, 0, dir.z);
 | |
|                 }
 | |
| 
 | |
|                 yield return k_WaitForEndOfFrame;
 | |
|             }
 | |
| 
 | |
|             //Debug.Log("Done Counting down.");
 | |
| 
 | |
|             yield return k_WaitForSecondsRandom[Random.Range(0, 19)];
 | |
| 
 | |
|             m_floatingText_Transform.position = start_pos;
 | |
| 
 | |
|             StartCoroutine(DisplayTextMeshProFloatingText());
 | |
|         }
 | |
| 
 | |
| 
 | |
|         public IEnumerator DisplayTextMeshFloatingText()
 | |
|         {
 | |
|             float CountDuration = 2.0f; // How long is the countdown alive.
 | |
|             float starting_Count = Random.Range(5f, 20f); // At what number is the counter starting at.
 | |
|             float current_Count = starting_Count;
 | |
| 
 | |
|             Vector3 start_pos = m_floatingText_Transform.position;
 | |
|             Color32 start_color = m_textMesh.color;
 | |
|             float alpha = 255;
 | |
|             int int_counter = 0;
 | |
| 
 | |
|             float fadeDuration = 3 / starting_Count * CountDuration;
 | |
| 
 | |
|             while (current_Count > 0)
 | |
|             {
 | |
|                 current_Count -= (Time.deltaTime / CountDuration) * starting_Count;
 | |
| 
 | |
|                 if (current_Count <= 3)
 | |
|                 {
 | |
|                     //Debug.Log("Fading Counter ... " + current_Count.ToString("f2"));
 | |
|                     alpha = Mathf.Clamp(alpha - (Time.deltaTime / fadeDuration) * 255, 0, 255);
 | |
|                 }
 | |
| 
 | |
|                 int_counter = (int)current_Count;
 | |
|                 m_textMesh.text = int_counter.ToString();
 | |
|                 //Debug.Log("Current Count:" + current_Count.ToString("f2"));
 | |
| 
 | |
|                 m_textMesh.color = new Color32(start_color.r, start_color.g, start_color.b, (byte)alpha);
 | |
| 
 | |
|                 // Move the floating text upward each update
 | |
|                 m_floatingText_Transform.position += new Vector3(0, starting_Count * Time.deltaTime, 0);
 | |
| 
 | |
|                 // Align floating text perpendicular to Camera.
 | |
|                 if (!lastPOS.Compare(m_cameraTransform.position, 1000) || !lastRotation.Compare(m_cameraTransform.rotation, 1000))
 | |
|                 {
 | |
|                     lastPOS = m_cameraTransform.position;
 | |
|                     lastRotation = m_cameraTransform.rotation;
 | |
|                     m_floatingText_Transform.rotation = lastRotation;
 | |
|                     Vector3 dir = m_transform.position - lastPOS;
 | |
|                     m_transform.forward = new Vector3(dir.x, 0, dir.z);
 | |
|                 }
 | |
| 
 | |
|                 yield return k_WaitForEndOfFrame;
 | |
|             }
 | |
| 
 | |
|             //Debug.Log("Done Counting down.");
 | |
| 
 | |
|             yield return k_WaitForSecondsRandom[Random.Range(0, 20)];
 | |
| 
 | |
|             m_floatingText_Transform.position = start_pos;
 | |
| 
 | |
|             StartCoroutine(DisplayTextMeshFloatingText());
 | |
|         }
 | |
|     }
 | |
| }
 | 
