mirror of
				https://github.com/DerTyp7/fps-citybuild-unity.git
				synced 2025-10-31 13:17:07 +01:00 
			
		
		
		
	Interactable Class
This commit is contained in:
		| @@ -0,0 +1,223 @@ | ||||
| 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()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 DerTyp187
					DerTyp187