You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
8.9 KiB
223 lines
8.9 KiB
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.fontFeatures.Clear(); |
|
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()); |
|
} |
|
} |
|
}
|
|
|