Jump to content
UnitySpain
Auronity

Mostrar nombre sobre objeto

Recommended Posts

Hola, hace tiempo que tengo esta duda y ha llegado el momento en que necesito saber como hacerlo. Como hago para que se muestre el nombre de un objeto sobre el, y que se mueva con el?

Share this post


Link to post
Share on other sites

buenas

world to screen point te dice la posicion de un objeto en pantalla....

 

void OnGUI() {
   Vector2 screenPos = Camera.WorldToScreenPoint(transform.position);

   Rect rect = new Rect(screenPos.x - 40, screenPos.y, 80, 20);

   GUI.Label(rect, "estoy aqui");
}

tendras igual que invertir la pos "Y"

screenPos.y = Screen.height - screenPos.y;

Share this post


Link to post
Share on other sites

Coloca un Canvas dentro del objeto que quieres que tenga el nombre en Render Mode World Space, dentro puedes colocar cualquier elemento de UI que quieras texto, imagenes etc, asi es como haces barras de vida que sigan a los personajes.

O si tus necesidades son solo texto añade un Text Mesh component al objeto y listo.

Edited by James Roman

Share this post


Link to post
Share on other sites

Lo he probado pero me da el siguiente error: error CS0120: An object reference is required to access non-static member `UnityEngine.Camera.WorldToScreenPoint(UnityEngine.Vector3)'

 

Editado: acabo de ver la respuesta del Canvas, Lo que he probado es lo anterior

Edited by Auronity

Share this post


Link to post
Share on other sites

Si quieres probar con OnGUI prueba con Camera.main.WorldToScreenPoint(transform.position); , aunque no es recomendado este es el viejo sistema de UI de Unity

Share this post


Link to post
Share on other sites
13 hours ago, Auronity said:

y que se mueva con el?

Bueno eso depende, moverse con él implica que si se va 1000 unidades en z lo siga, es decir que tu texto ahora ni siquiera los puedas ver en pantalla (suponiendo screen en X,Y profundidad en Z), o querés que solamente siga a su par (x,y) ? desde donde lo veo yo podés hacer ambas cosas copn ambos métodos (UI y OnGUI):

- OnGUI , usando lo que dicen arriba, pasar el punto espacial a la pantalla y de ahí actualizar las posición del rect

- OnGUI, idem a anterior pero a partir de la profundidad actualizar el Width y Height.

- UI , usar un canvas World Space, listo.

- UI, usar un canvas en Overlay o Camera Space, y hacés algo parecido al primer punto con anchoredPosition.

Osea con los dos podés hacer que se siga en pos y que se ajuste en escala (si quisieras), pero si querés simular un nombre que siga a un objeto como si fuera "real", es decir como si alguien tuviera un cartel atado a alguien (pos y "escala"), usaría UI. Además OnGUI te tira muchisimas GC allocs ya casi ni lo uso salvo que sea a modo de Debug rápido de algo o cosas de editor, pero una build ni ahí.

Share this post


Link to post
Share on other sites

Si es un tema de Canvas/GUI, añade un Text con el nombre del gameObject (transform.gameobject.name.toString...), y luego convierte las coordenadas de World a Screen, para que el Canvas sepa dónde hay que colocar ese texto...

Share this post


Link to post
Share on other sites

Ya he solucionado el error que me salia, pero sigue sin funcionar. He probado a crear un simple GUI.Button para comprobar si es cosa del GUI en general y, exactamente, el boton tampoco aparece. He probado lo de crear un boton en otro script y ahi si funciona, sin problemas. Que puede estar pasando?

Share this post


Link to post
Share on other sites

×
×
  • Create New...