Skip to content

Instantly share code, notes, and snippets.

@Arakade
Created January 3, 2015 16:54
Show Gist options
  • Save Arakade/9dd844c2f9c10e97e3d0 to your computer and use it in GitHub Desktop.
Save Arakade/9dd844c2f9c10e97e3d0 to your computer and use it in GitHub Desktop.
Call from OnDrawGizmos() to draw text at Unity3D glocal position in Editor
static void drawString(string text, Vector3 worldPos, Color? colour = null) {
UnityEditor.Handles.BeginGUI();
if (colour.HasValue) GUI.color = colour.Value;
var view = UnityEditor.SceneView.currentDrawingSceneView;
Vector3 screenPos = view.camera.WorldToScreenPoint(worldPos);
Vector2 size = GUI.skin.label.CalcSize(new GUIContent(text));
GUI.Label(new Rect(screenPos.x - (size.x / 2), -screenPos.y + view.position.height + 4, size.x, size.y), text);
UnityEditor.Handles.EndGUI();
}
@Kaegun
Copy link

Kaegun commented Jan 15, 2023

Very neat, exactly what I was looking for!

@BurakKaragol
Copy link

BurakKaragol commented Apr 14, 2023

I passed a color and it made the whole scene view that color. I just removed it, and it satisfied what I intended. Well done! Thanks

I solved the issue color issue and also fixed the scene zoom text slipping

public static void DrawString(string text, Vector3 worldPos, Color? colour = null)
{
UnityEditor.Handles.BeginGUI();
Color defaultColor = GUI.color;
if (colour.HasValue) GUI.color = colour.Value;
var view = UnityEditor.SceneView.currentDrawingSceneView;
Vector3 screenPos = view.camera.WorldToScreenPoint(worldPos);
Vector2 size = GUI.skin.label.CalcSize(new GUIContent(text));
GUI.Label(new Rect(screenPos.x - (size.x / 2), -screenPos.y + view.position.height - size.y * 2, size.x, size.y), text);
GUI.color = defaultColor;
UnityEditor.Handles.EndGUI();
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment