Я работаю над системой баров здоровья, которая показывает бар для здоровья, который следует за врагом, куда бы они ни пошли [что отлично работает].
Но я также хочу, чтобы здоровье отображалось в номерах на панели здоровья, а также... я не могу работать. Ошибок нет, но он просто не отображается на экране.
Здесь мой класс здоровья:
//This script works great.
public Texture2D healthBar;
public Texture2D healthBarFrame;
public float maxHealth;
public float curHealth;
private int healthBarWidth = 50;
private int healthBarHeight = 5;
private float left;
private float top;
private Vector3 healthBarScreenPosition;
public PlayerCombat player;
public Enemy target;
public float healthPercent;
void Start () {
}
void Update () {
if(player.opponent != null) {
target = player.opponent.GetComponent<Enemy>();
healthPercent = (float)target.curHealth / (float)target.maxHealth;
Vector3 healthBarWorldPosition = (target.transform.position + new Vector3(0.0f, target.transform.lossyScale.y, 0.0f));
healthBarScreenPosition = Camera.main.WorldToScreenPoint(healthBarWorldPosition);
left = healthBarScreenPosition.x - (healthBarWidth / 2);
top = Screen.height - (healthBarScreenPosition.y + (healthBarHeight / 2));
} else {
target = null;
healthPercent = 0;
}
}
void OnGUI() {
if (target != null) {
GUI.DrawTexture(new Rect(left, top, 50, 5), healthBarFrame);
GUI.DrawTexture(new Rect(left, top, (50 * healthPercent), 5), healthBar);
}
}
Это то, во что я возился, чтобы показать, сколько у HP врага (я разделил этот код на другой раздел, чтобы его было легче понять, обычно я просто пытаюсь добавить его в вышеупомянутый скрипт.
//This is generic code taken from another user (with the variables unchanged)
public Font font;
public int fontSize = 8;
public Vector3 Offset = Vector3.zero; // The offset from the character
public Enemy target;
public PlayerCombat player;
private float health;
private TextMesh bar;
void Start()
{
target = player.opponent.GetComponent<Enemy>();
// Setup the text mesh
bar = new GameObject("HealthBar").AddComponent("TextMesh") as TextMesh;
bar.gameObject.AddComponent("MeshRenderer");
bar.gameObject.transform.parent = transform;
bar.transform.position = target.transform.position;
if(font) bar.font = font;
else bar.font = GUI.skin.font;
bar.renderer.material = font.material;
bar.characterSize = 0.25f;
bar.alignment = TextAlignment.Center;
bar.anchor = TextAnchor.MiddleCenter;
bar.fontSize = fontSize;
}
void Update()
{
target = player.opponent.GetComponent<Enemy>();
health = target.curHealth;
if(bar.text != "HP:" + health.ToString()) bar.text = "HP: " + health.ToString();
}
Вы используете разные системы для панели и текста. Возможные причины, по которым это не работает:
Вероятно, лучший способ исправить это - нарисовать текст с помощью метки с прозрачным фоном в OnGUI() сразу после рисования панели. Это обеспечит соответствие позиций и что текст находится перед панелью.
Также проверьте в редакторе, если ваш текстовый файл отображается где угодно. Посмотрите, что с ним что-то не так. Возможно, неправильный материал назначен, возможно, позиция выключена.