- Home /
ENEMY HEALTH BAR
hey guys i'm having a problem, i want to my enemy health bar show up when my player is close to the enemy but i don't know how to do it please can someone help me?
this is the enemy lifebar code:
using UnityEngine; using System.Collections;
public class EnemyHealth : MonoBehaviour { public int MaxHealth = 100; public int CurHealth = 100; //public bool barradevida = false; //public int maxDistance; //public int minDistance; public Transform target; private Transform myTransform; public Transform BarraInterface;
public float HealthBarLenght;
// Use this for initialization
void Start ()
{
//GameObject go = GameObject.FindGameObjectWithTag("Player");
//target = go.transform;
//maxDistance = 2;
//minDistance = 7;
HealthBarLenght = Screen.width / 4;
}
// Update is called once per frame
void Update ()
{
AdjustCurrentHealth (0);
}
public void OnGUI ()
{
GUI.Box (new Rect (900, 20, HealthBarLenght, 20), CurHealth + "/" + MaxHealth);
}
public void AdjustCurrentHealth (int adj)
{
CurHealth += adj;
if (CurHealth < 0)
CurHealth = 0;
//if(CurHealth == 0)
//GameObject.Destroy(gameObject);
//if(CurHealth == 0)
//GameObject.Destroy(GameObject.FindWithTag == "Enemy");
if (CurHealth <= 0) {
Destroy (gameObject);
}
if (CurHealth > MaxHealth)
CurHealth = MaxHealth;
if (MaxHealth < 1)
MaxHealth = 1;
HealthBarLenght = (Screen.width / 4) * (CurHealth / (float)MaxHealth);
//GameObject.Destroy(GameObject.FindWithTag == "Enemy");
}
}
AND this is my enemy AI code
using UnityEngine; using System.Collections;
public class EnemyAI : MonoBehaviour { public Transform target; public int moveSpeed; public int rotationSpeed; public int maxDistance; public int minDistance;
private Transform myTransform;
// isso serve para deixar as coisas mais rapidas, espero descobrir mais depois
void Awake() {
myTransform = transform;
}
// Use this for initialization
void Start () {
GameObject go = GameObject.FindGameObjectWithTag("Player");
target = go.transform;
maxDistance = 2;
minDistance = 7;
}
// Update is called once per frame
void Update ()
{
if(Vector3.Distance(target.position, myTransform.position) <= minDistance)
{
Debug.DrawLine(target.transform.position, myTransform.position, Color.yellow);
// olhar para o alvo
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime);
if(Vector3.Distance(target.position, myTransform.position) > maxDistance) {
//move até o alvo
myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
}
}
}
}
Answer by Kacer · Nov 21, 2011 at 09:39 AM
Here's an example of what you could do:
If you want the enemy healthbar to be on top of the enemies like in, lets say, WoW, then you could use this, transforming the position of the enemy into screenspace allows you to use Unity's GUI to make a healthbar that floats above the head of the enemy.
To make the healthbar dissapear when the enemies are too far away from you, you could do a few things; you could make a list, then check the coordinates of the various gameobjects, you could make a raycast that checks the distance, and finally you could add a spherecollider to the character you're controlling, stating that while the enemies are within that collider, then their healthbars should be shown.
I wont write the code for it for you, as i dont have the time for that, but the script reference should help you a lot :)
Your answer
Follow this Question
Related Questions
How to make an object jump? 0 Answers
switch prefab on collision 1 Answer
Need help with my enemy spawn script. 1 Answer
Enemy Color Change Help! 1 Answer