Soy nuevo en Unity y el script C#. Me enfrento a un problema que no puedo resolver, así que, por favor, cualquiera puede orientarme sobre lo que sucede en esta escena.
Entonces, el problema es que hay una barra de HP (barra verde) para mostrar la salud de los Pokémon en este , pero cuando entro en el modo de juego , la barra se vuelve invisible y no puedo averiguar qué está causando esto.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class HPBar : MonoBehaviour { [SerializeField] GameObject health; public void SetHP(float hpNormalized) { health.transform.localScale = new Vector3(hpNormalized, 1f); } }Arriba está el script utilizado para la barra de HP.
Está configurando el new Vector3 , un vector tridimensional, pero solo le da 2 valores. Lo que probablemente sucede es que el new Vector3(hpNormalized, 1f) se traduce en new Vector3(hpNormalized, 1f, 0f) y su objeto de juego tiene una escala de 0 en una dimensión, y eso da como resultado un comportamiento extraño.
Intente configurar las 3 dimensiones de esta manera:
new Vector3(hpNormalized, 1f, 1f); EDITAR: Para el constructor de public Vector3(float x, float y) la documentación dice
Crea un nuevo vector con los componentes x, y dados y establece z en cero.
Fuente: https://docs.unity3d.com/ScriptReference/Vector3-ctor.html
Entonces, la dimensión z se establece en cero en su caso y sospecho que esa es la fuente de la desaparición de la barra de salud.
De lo contrario, recomiendo usar Debug.Log("Health set to"+hpNormalized+ " and scale of the object is"+health.transform.localScale); en la función para ver lo que está pasando.
No tenemos idea, ni nos diste sobre tu proyecto pero parece que ni siquiera conoces tus valores. Puede llamar a la depuración al llamar a los métodos y aprender el valor de las variables. Además, si desea mover su salud solo entre valores específicos, puede usar Mathf.Clamp . Este método sujeta la variable dada al rango dado.
Además, su enfoque es incorrecto al principio. No debe usar transfrom.localscale para restar su barra de salud. Puede establecer el tipo de imagen de la barra de salud en Lleno y, si desea que sea horizontal o vertical, configúrelo también en Unity Inspector. Luego llamas desde un código como este:
healthBarImage.fillAmount = hpNormalized; es tan simple como eso