Un Tutorial Unity para Rotar GameObject Mirando al Jugador: Mejora la Interacción de NPC, Orientación Dinámica y Scripting en Unity 3D
Introducción
Recientemente, mientras trabajaba en un proyecto personal en Unity, me enfrenté a un desafío específico relacionado con la programación de mis personajes no jugables (NPC). En una de las escenas del juego, he creado una calle virtual llena de NPC que ofrecen diversos servicios a los jugadores durante su aventura. Cada NPC tiene un nombre y un apodo flotando sobre su cabeza, lo cual ayuda a los jugadores a identificar rápidamente su función en el juego. Para lograr esto, utilicé un GameObject con TextMeshPro. Este tutorial es ideal si estás buscando un tutorial Unity para rotar GameObject mirando al jugador.
Sin embargo, me topé con un obstáculo: los nombres de los NPC permanecían estáticos y alineados de manera uniforme con la orientación y postura del personaje. Esto resultó en una experiencia menos dinámica de lo que inicialmente había imaginado.
Problema
Aunque la implementación inicial de los nombres y apodos de los NPC sobre sus cabezas parecía funcionar bien, pronto me di cuenta de una limitación significativa. El verdadero desafío surge cuando el jugador comienza a moverse por la escena: los nombres de los NPC solo son visibles si el jugador se encuentra directamente frente a ellos o en un ángulo que permita ver claramente el texto flotante. Esto significa que, si el jugador se mueve y cambia de perspectiva, podría perderse información crucial sobre los NPC, lo cual afecta la experiencia de juego.
Solución
Para abordar este desafío de manera efectiva, vamos a crear un script personalizado y lo añadiremos como un componente al GameObject que alberga el TextMeshPro. A continuación, te guiaré a través de los pasos necesarios para lograrlo:
Paso 1: Añadir un Nuevo Componente
Dirígete al Panel Inspector del GameObject que contiene el componente TextMeshPro. Haz clic en el botón «Add Component».
Paso 2: Crear un Nuevo Script
En el campo de búsqueda que aparece, escribe el nombre que deseas para tu script. En mi caso, lo he llamado FaceTextToPlayer
. Luego, haz clic en «New Script» y confirma pulsando «Create and Add». Esto generará una nueva clase que podrás abrir en Visual Studio (o en el editor de código que prefieras) para comenzar a editar.
Paso 3: Editar el Código
Reemplaza el código autogenerado por el siguiente:
using UnityEngine;
public class FaceTextToPlayer : MonoBehaviour
{
void FixedUpdate()
{
if (Camera.main == null)
return;
transform.LookAt(Camera.main.transform.position);
//Descomenta esta línea si el GameObject del Text aparece inverso
//transform.Rotate(0, 180, 0);
}
}
Verificación
Ahora, si ejecutas la escena de nuevo, notarás que el texto siempre se orienta hacia la cámara, mejorando así la experiencia del jugador.
Versión Video
¿Te gusta más aprender en formato video? No te preocupes, aquí lo tienes:
Nota Adicional
Es posible que te preguntes por qué hemos orientado el script hacia la cámara y no hacia el jugador. La razón es simple: si estás utilizando un sistema de cámara orbital y la cámara está posicionada en un ángulo elevado, el texto no sería visible si estuviera orientado hacia el jugador. Con esta implementación en nuestro tutorial Unity para rotar GameObject mirando al jugador, el texto siempre se orientará hacia la cámara, independientemente de su posición.
Espero que este tutorial te haya sido de gran utilidad. Si tienes alguna duda, pregunta o estás interesado en aprender algún aspecto específico de Unity, no dudes en dejar un comentario abajo. Tu retroalimentación es invaluable para crear futuros contenidos que sean de tu interés.
Mantente atento, ya que seguiré publicando más tutoriales y consejos sobre Unity en esta misma categoría.
¡Hasta la próxima!