I have this code and I don\'t know why hit.collider.gameObject.GetComponent(\"health\")
is returning null
void Shoot() {
Vector2 mousePo
You need to get a reference to the script attached to the Enemy. Then use that script to manipulate the health.
Find the GameObject.
GameObject g = hit.collider.gameObject;
Get the reference to the script.
EnemyAI e = g.GetComponent<EnemyAI>();
Manipulate the health.
e.health = 0f;
In one line if you want to be badass.
hit.collider.gameObject.GetComponent<EnemyAI>().health = 0.0f;
Bonus tip: health
should be private
and EnemyAI
should have a setter and a getter for that variable.
However you would have to get the reference of the script that is attached to the GameObject. To do this you would need to use the following code.
GameObject target;
Then in your shoot method you update the reference to the target.
if(hit.collider.gameObject != target)
{
target = hit.collider.gameObject.GetComponent<EnemyAI>();
}
The reaason I put an if() statement around it is so that you're not overloading the CPU with GetComponent requests if the target hasn't already changed.
From here you would simply change the value by using things such as
target.value = newValue;
target.SomeFunction();
You are using Unity are you not? It looks that way from the code you provided. GetComponent() is a method that returns a reference to a component of the game object. These are the things you drag onto a game object in the Editor. Things like Box-Colliders and Rigidbodys. The code you wrote will not return anything because there is no game component in Unity called "health". To get the health of the enemy,you need to set up a reference to the script controlling the enemy and get its health value from there.