Hi id like to know how do I make an efficient code for this, i was thinking a for loop for every 250 damage taken, the enemy will instantiate a prefab. But in a noob to coding so if anyone can tell me how do I achieve this, would be a great help, thank you :slight_smile:

I would suggest using an event so that when each time damage is taken you can instantiate prefab.

A tutorial from unity: Events - Unity Learn

It’s really hard to help without the code you’ve made so far.

Here is how I would do it :

private int life ;
private int lifeThreshold = 250;

public void TakeDamage( int damages )
{
    life -= damages ;
    lifeThreshold -= damages ;

    if( life <= 0 )
    {
        life = 0 ;
        lifeThreshold = 0 ;
        Die();
    }
    else if( lifeThreshold <= 0 )
    {
         while( lifeThreshold <= 0 )
             lifeThreshold += 250 ;
         // Instantiate your gameobject
    }
}

hey watch this it’s very simple and nice.

you should have a healthManager script like this

         using System.Collections;
           using System.Collections.Generic;
           using UnityEngine;

              public class healthManager : MonoBehaviour {

public int health;
public int itsTimeToInstantiate;
public GameObject bloodParticle;
// Use this for initialization
public void GiveDamage(int a){//we check this later
	health-=a;
	itsTimeToInstantiate += a;
	if (itsTimeToInstantiate > 250) {

		itsTimeToInstantiate = 0;
		Instantiate (bloodParticle,transform.position,transform.rotation);
		//instantiate blood 
		//now lets create a blood particle
	}

}
      }

and a spike like this

         using System.Collections;
          using System.Collections.Generic;
        using UnityEngine;

         public class spike : MonoBehaviour {
void OnTriggerEnter2D(Collider2D other){
	if (other.CompareTag ("player")) {
		other.GetComponent<healthManager> ().GiveDamage (100);//so it will damage player 50 points
		Destroy(gameObject);

	}
		
}
       }

it’s like the tutorial watch this it will help you :).

https://streamable.com/irw7k

@Consul-Livius

This is a script that performs each time we are damaged for 250 or more:

    //The amount player is damaged before an event plays.
    public float damageInterval = 250;

    //The maxHealth of the player.
    public float maxHealth = 1000;

    //Amount of damage done to player using the hurt key.
    public float hurtAmount = 100;

    //Key in which when clicked hurts the player.
    public KeyCode HurtKey = KeyCode.Q;

    //HealthSlider on a canvas to mark how much health the player has.
    public UnityEngine.UI.Slider healthSlider;

    //The currentHealth reference of the player.
    float currentHealth;

    //This is used to get the damage the player needs 
    //to be damaged before an event plays.
    float currentDamageInterval;

    //This is a bool telling whether a critical is allowed or not.
    bool criticalAllowed;

    void Start () {
        //Set criticalAllowed to false because we can not do a critical on start.
        criticalAllowed = false;

        //Set currentHealth to maxHealth.
        currentHealth = maxHealth;

        //The damage needed for an event to play. So it is (1000 - 250) currently.
        currentDamageInterval = maxHealth - damageInterval;

        //The amount needed for the first critical hit or whatever event you want.
        Debug.Log("First Critical: " + currentDamageInterval);

        //Sets the slider to have the maxHealth.
        healthSlider.maxValue = maxHealth;

        //Then sets its value to currentHealth.
        healthSlider.value = currentHealth;
    }

	void Update () {
        //If the hurt key is pressed.
		if (Input.GetKeyDown(HurtKey))
        {
            //Then damage the player for the hurt amount.
            TakeDamage(hurtAmount);
        }

        //If the players health does not equal our maxHealth 
        //and is not less than or equal to 0.
        if (currentHealth != maxHealth && !(currentHealth <= 0))
        {
            //And our player's currentHealth is less than or equal to our damage interval.
            if (currentHealth <= currentDamageInterval)
            {
                //You can play the event right here.
                //I made one up it does a critical hit.
                CriticalHit();

                //Setup our damage interval for the next event. 
                //The first time this will be set as (750 - 250).
                //The second time (500 - 250).
                //And the last (250 - 250).
                currentDamageInterval -= damageInterval;

                //Say ouch because we want to know the event played.
                Debug.Log("Ouch!");

                //This tells you how much health we need for the next event.
                Debug.Log("DamageTil Next Critical: " + currentDamageInterval);
            }
        }
	}

    void CriticalHit()
    {
        //This find a number between 0-10 that is needed for the critical to work.
        int numberNeededForHit = Random.Range(0, 10);

        //This will be a random guess between 0-10
        int guessAtCriticalHitNumber = Random.Range(0, 10);

        //If our random guess is equal to the number needed for the critical.
        if (guessAtCriticalHitNumber == numberNeededForHit)
        {
            //Allow for the critical to be performed.
            criticalAllowed = true;
        }

        else
        {
            //If our random guess is wrong say so.
            Debug.Log("Our Critical Attack Failed!");
        }
    }

    void TakeDamage(float DamageAmount)
    {
        //If our currentHealth less than or equal to 0.
        if (currentHealth <= 0)
        {
            //Then set currentHealth equal to 0.
            currentHealth = 0;

            //Then return so nothing else happens from here.
            return;
        }

        //If we can perform our critical.
        if (criticalAllowed == true)
        {
            //This is our critical damage amount.
            float CriticalDamageAmount = DamageAmount * 2;

            //Subtract our health by our critical damage.
            currentHealth -= CriticalDamageAmount;

            //Then disallow for another critical because we just performed it.
            criticalAllowed = false;
        }

        //If we do not have a critical.
        if (criticalAllowed == false)
        {
            //Damage our player by the regular damage amount.
            currentHealth -= DamageAmount;
        }

        //Set our slider to show our current health.
        healthSlider.value = currentHealth;
    }