using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TMPro; using UnityEngine; public class FloatingTextSpawner { private static GameObject GameObjectContainer = new GameObject($"Floating Text Container"); private Transform Transform; private float YOffset; private List TextList = new List(); public FloatingTextSpawner(Transform transform, float yOffset) { Transform = transform; YOffset = yOffset; } public void SpawnFloatingText(string message, Color color, float duration = 1.5f) { try { GameObject textObj = new GameObject("FloatingText"); textObj.transform.position = Transform.position + new Vector3(0, 1, 1); // offset above character TextMeshPro text = textObj.AddComponent(); text.text = message; //text.size = 0.2f; text.fontSize = 14; text.fontStyle = FontStyles.Bold; text.color = color; text.alignment = TextAlignmentOptions.Center; //text.anchor = TextAnchor.MiddleCenter; text.outlineColor = Color.black; text.outlineWidth = 0.4f; Renderer renderer = textObj.GetComponent(); renderer.sortingLayerName = "UI"; renderer.sortingOrder = 0; textObj.AddComponent().Init(duration, ref TextList, YOffset); UnityEngine.Object.Instantiate(textObj, GameObjectContainer.transform); } catch (Exception e) { } } } public class FloatingText : MonoBehaviour { private float lifetime; private float speed = 1f; private Color originalColor; private TextMeshPro text; public void Init(float duration, ref List textList, float yOffset) { try { lifetime = duration; text = GetComponent(); originalColor = text.color; //for (int i = textList.Count - 1; i >= 0; i--) { // if (textList[i] == null) // textList.RemoveAt(i); // else // textList[i].position += Vector3.up * yOffset; //} //textList.Add(this.transform); } catch (Exception e) { } } void Update() { try { transform.position += Vector3.up * speed * Time.deltaTime; lifetime -= Time.deltaTime; if (lifetime <= 0) { Destroy(gameObject); } else { float alpha = Mathf.Clamp01(lifetime / 1.5f); text.color = new Color(originalColor.r, originalColor.g, originalColor.b, alpha); } } catch (Exception e) { } } }