When the Player
shoots the Zombie
with Raycast
it is supposed to damage the Zombie(clone)
until it is destroyed. However, the damage from the Player
damages a general Zombie
class on variable currentHealth
rather than the currentHealth
on each Zombie GameObject
. Also, the currentHealth
value remains even after the game has restarted from start.
public class Zombie : MonoBehaviour
{
public int currentHealth = 2;
public void Damage(int damageAmount)
{
//subtract damage amount when Damage function is called
currentHealth -= damageAmount;
//Check if health has fallen below zero
if (currentHealth <= 0)
{
//if health has fallen below zero, deactivate it
gameObject.SetActive (false);
//Destroy(gameObject);
}
Debug.Log(name + currentHealth);
}
}
--
public class Player : MonoBehaviour
{
public RaycastHit hit;
public int gunDamage = 1;
public Zombie zombie;
public Camera fpsCamera;
public int weaponRange = 50;
private int layerMask = 1 << 9;
void Start()
{
spawnPoints = playerSpawnPoint.GetComponentsInChildren<Transform>();
// bullet = GetComponent<GameObject>();
}
void LazerBeam()
{
Vector3 rayOrigin = fpsCamera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0f));
Debug.DrawRay(rayOrigin, Vector3.forward * weaponRange, Color.green);
if (Physics.Raycast(rayOrigin, fpsCamera.transform.forward, out hit, weaponRange, layerMask))
{
zombie.Damage(gunDamage); //kills zombie
Debug.Log(name + " " + zombie);
}
Debug.Log(hit.collider);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
{
LazerBeam();
}
}
You are currently applying damage to the Zombie
attached to the player instead of the one attached to the object that was hit. You can get a reference to that from RaycastHit hit
.
if (Physics.Raycast(rayOrigin, fpsCamera.transform.forward, out hit, weaponRange, layerMask))
{
Zombie zombieHit = hit.transform.gameObject.GetComponent<Zombie>();
zombieHit.Damage(gunDamage); //kills zombie
Debug.Log(name + " " + zombieHit);
}