So I’m trying to make an enemy but when there are 2 enemies when the first one dies the second one just go in minus in health and I just can’t seem to fix it can anyone help me?
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using System.Collections;
public class StoneGolemController : MonoBehaviour
{
#region Variable Declarations
GameObject Player;
public List<GameObject> Targets;
public GameObject Orb;
public TextMeshProUGUI displayText;
public float MoveSpeed = 2f;
float searchRadius = 100f;
float meleeRadius = 2f;
float throwRadius = 5f;
public float maxThrowingStones = 30f;
public float currentThrowingStones;
public Transform ThrowingStone;
float currentTargetDistance;
public static StoneGolemController instance;
public float MaxHealth = 500;
public float CurrentHealth;
public static int DeathHealth = 0;
public GameObject StoneGolem;
public bool onCooldown = false;
public float delay = 3f;
GameObject myTarget;
#endregion
void Awake()
{
Player = GameObject.FindGameObjectWithTag("Player");
Orb = GameObject.FindGameObjectWithTag("Orb");
StoneGolem = GameObject.FindGameObjectWithTag("StoneGolem");
instance = this;
CurrentHealth = MaxHealth;
Targets = new List<GameObject>(GameObject.FindGameObjectsWithTag("Building"))
{
Orb
};
//ThrowingStone.transform.position = StoneGolem.transform.position;
currentThrowingStones = maxThrowingStones;
}
void Update()
{
{
TargetFinder();
if (myTarget == null)
currentTargetDistance = searchRadius;
else
Move(myTarget.transform);
{
if (currentThrowingStones > 0)
{
if (currentTargetDistance <= throwRadius && !onCooldown)
{
StartCoroutine(ThrowDelayLogic());
MoveSpeed = 0f;
}
}
if (currentThrowingStones > 0)
{
if (currentTargetDistance >= throwRadius && !onCooldown)
{
MoveSpeed = 2f;
}
}
if (currentThrowingStones <= 0)
{
MoveSpeed = 2f;
if (currentTargetDistance <= meleeRadius)
{
DoMelee();
}
}
}
if (CurrentHealth <= DeathHealth)
{
print("Enemy Has died!!!");
Destroy(StoneGolem);
}
}
void TargetFinder()
{
foreach (var x in Targets)
{
float distance = (transform.position - x.transform.position).magnitude;
if (distance < currentTargetDistance)
{
myTarget = x;
//displayText.text = "My target: " + x + "
Distance to Target: " + distance; //skal fjernes nå det er helt klart
currentTargetDistance = distance;
}
}
}
void Move(Transform t)
{
transform.LookAt(t);
transform.position += transform.forward * MoveSpeed * Time.deltaTime;
}
void DoMelee()
{
//if (hit.collider.tag == "Player")
{
//PlayerController eHealth = hit.collider.GetComponent<PlayerController>();
//PlayerController.instance.CurrentHealth -= Random.Range(minWeaponDamage, maxWeaponDamage + 1);
//print("Player took some damage");
}
myTarget = null;
currentTargetDistance = searchRadius;
}
void DoThrow()
{
myTarget = null;
currentTargetDistance = searchRadius;
Instantiate(ThrowingStone);
currentThrowingStones--;
}
IEnumerator ThrowDelayLogic()
{
DoThrow();
onCooldown = true;
yield return new WaitForSeconds(delay);
onCooldown = false;
}
}
}
###The problem is probably:
public static StoneGolemController instance;
The static modifier means that its a class member not an instance member. So there is only ever one of them. Assuming that you are creating a bunch of these it will be the last one you created. If you are referencing it elsewhere then you will always be referencing that last StoneGolemController.