¿Cómo convertir coordenadas en Unity para que la barra de salud esté en la cabeza del soldado?
Después de modificarlo, básicamente el código se puede utilizar directamente. Puedes entenderlo fácilmente echando un vistazo.
Textura pública 2D rojo sangre;
Textura pública 2D sangre_negro;
pública int HP = 100;
void OnGUI(){
//Obtén las coordenadas de la cabeza del NPC en el mundo 3D
//El punto de coordenadas predeterminado del NPC está debajo de los pies, así que simplemente agrega npcHeight y la altura de su modelo aquí
Vector3 worldPosition = new Vector3 (transform.position.x, transform.position.y + playerHeight,transform.position.z);
//Convierte a su posición en la pantalla 2D según las coordenadas 3D de la cabeza del NPC Coordenadas
Vector2 position = camera.WorldToScreenPoint (worldPosition);
//Obtiene las coordenadas 2D de la cabeza del NPC real
position = new Vector2 (position.x, Screen.height - position.y);
//Nota 2
//Calcula el ancho y alto de la barra de sangrado
Vector2 bloodSize = GUI.skin.label .CalcSize (nuevo GUIContent(blood_red));
if (HP < 0)
HP = 0;
//Calcula la barra de sangre roja a través del área de visualización del valor de sangre
int blood_width = blood_red.width * 100/100;
//Dibuja la barra de sangre negra primero
GUI.DrawTexture(new Rect(position. x - (bloodSize.x/3),position.y - bloodSize.y ,bloodSize.x-bloodSize.x/3,bloodSize.y/2), blood_black);
//Dibujando la barra de sangre roja
GUI.DrawTexture(new Rect(position.x - (bloodSize.x/3),position.y - bloodSize.y, (blood_width-bloodSize.x/3)* HP/100, bloodSize.y/2),blood_red);
////
Vector3 worldPosition2 = nuevo Vector3 (m_men. position.x, m_men.position.y + 5,m_men. position.z);
//Convierte las coordenadas 3D de la cabeza del NPC a sus coordenadas en la pantalla 2D
Vector2 position2 = camera.WorldToScreenPoint (worldPosition2);
//Obtiene las coordenadas 2D de la cabeza del NPC real
position2 = new Vector2 (position2.x, Screen.height - position2. y);
//Nota 2 p>
//Calcular el ancho y alto de la barra de sangrado
Vector2 bloodSize2 = GUI.skin.label.CalcSize ( norte
ew GUIContent(blood_red));
int HP2 = m_men.GetComponent
if (HP2 < 0)
HP2 = 0;
//Calcula el área de visualización de la barra de sangre roja según el valor de la sangre
int blood_width2 = blood_red.width * 100/100;
//Dibuja primera barra de sangre negra
GUI.DrawTexture(new Rect(position2.x - (bloodSize.x/3),position2.y - bloodSize2.y ,bloodSize2.x-bloodSize2.x/3,bloodSize2. y/ 2),blood_black);
//Dibujando una barra de sangre roja
GUI.DrawTexture(new Rect(position2.x - (bloodSize.x/3),position2.y - bloodSize2.y ,(blood_width2-bloodSize2.x/3)* HP2/100,bloodSize2.y/2),blood_red);
//Nota 3
//Calcular NPC Ancho y alto del nombre
//Vector2 nameSize = GUI.skin.label.CalcSize (new GUIContent(name));
//Establece el color de visualización en amarillo
//GUI.color = Color.amarillo;
//Dibujar el nombre del NPC
GUI.Label(new Rect( Screen.width*2/5, Screen.height/ 20, Screen.width*2/5+Screen.width/10, Screen.height/2Screen.height/10), "ROUND "+m_begintime);
GUI.Label (nuevo Rect(Ancho.pantalla*4/5, Alto.pantalla/20, Ancho.pantalla*4/5+Ancho.pantalla/10, Alto.pantalla/2Alto.pantalla/10), "Player"+m_winplayer ); p>
GUI.Label(new Rect( Screen.width*0/5, Screen.height/20, Screen.width*1/5+Screen.width/10, Screen.height/2 Screen.height/ 10), "Hombres "+m_winmen);
}