You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			224 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			224 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
| 
								 
											1 year ago
										 
									 | 
							
								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());
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |