Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo convertir coordenadas en Unity para que la barra de salud esté en la cabeza del soldado?

¿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

//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().HP;

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 );

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);

}