Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save twobob/f951b99470a9bdeabe17 to your computer and use it in GitHub Desktop.
Save twobob/f951b99470a9bdeabe17 to your computer and use it in GitHub Desktop.
This allow us the position text elements over world objects, With screen overlay, on prefabbed things. Tags are required on the elements to find at runtime.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class GenerateTextObjectAndPositionDuringRuntime_FOR_PREFABS : MonoBehaviour
{
public string CanvasToPopulatesTag;
public string TextPrefabTag;
private GameObject instantiatedPrefab;
private Text textObject;
private RectTransform rectReference;
public int FontSize;
public float LabelVerticalOffset = 0f;
public string textToDisplay;
bool draw = false;
void Awake()
{
if (OverlayReferenceHolders.OverlayCanvas == null)
{
OverlayReferenceHolders.OverlayCanvas = GameObject.FindGameObjectWithTag(CanvasToPopulatesTag);
}
// populate from the scene since we are struggling...
if (OverlayReferenceHolders.TextPrefab == null)
{
OverlayReferenceHolders.TextPrefab = GameObject.FindGameObjectWithTag(TextPrefabTag);
}
}
void Start()
{
if (OverlayReferenceHolders.OverlayCanvas == null)
{
OverlayReferenceHolders.OverlayCanvas = GameObject.FindGameObjectWithTag(CanvasToPopulatesTag);
}
// populate from the scene since we are struggling...
if (OverlayReferenceHolders.TextPrefab == null)
{
OverlayReferenceHolders.TextPrefab = GameObject.FindGameObjectWithTag(TextPrefabTag);
}
instantiatedPrefab = Instantiate(OverlayReferenceHolders.TextPrefab);
textObject = instantiatedPrefab.GetComponent<Text>();
rectReference = OverlayReferenceHolders.OverlayCanvas.GetComponent<RectTransform>();
instantiatedPrefab.transform.SetParent(OverlayReferenceHolders.OverlayCanvas.transform, false);
textObject.text = textToDisplay;
if (FontSize > 0)
{
textObject.fontSize = FontSize;
}
textObject.enabled = false;
draw = false;
}
void OnBecameInvisible()
{
textObject.enabled = false;
draw = false;
}
void OnBecameVisible()
{
draw = true;
}
// Keep it centralised.
void Update()
{
MoveObject();
}
private void MoveObject()
{
if (!draw)
return;
Vector2 pos = WorldToCanvasPosition.ConvertWorldToCanvasPosition(rectReference, Camera.main, transform.position);
textObject.rectTransform.position = new Vector3(pos.x, pos.y + LabelVerticalOffset);
textObject.enabled = true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment