Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Mostrar nombre sobre objeto

Iniciado por Auronity, Diciembre 06, 2017, 11:00:21 AM

Tema anterior - Siguiente tema
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?

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;

Diciembre 06, 2017, 01:42:33 PM #2 Ultima modificación: Diciembre 06, 2017, 01:44:07 PM por James Roman
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.

Diciembre 06, 2017, 03:47:01 PM #3 Ultima modificación: Diciembre 06, 2017, 04:25:37 PM por Auronity
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

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

Cita de: Auronity date=1512554421y 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 anc***dPosition.
 
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í.

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...

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?

Cita de: Auronity date=1512644236Que puede estar pasando?
   


Que no estás subiendo el código

Etiquetas: