Functions with Parameters

Learn how to pass values to functions using parameters in C#. Understand the benefits of using parameters for code reusability.

What are Parameters?

A way to pass values to functions for use. Allows the same function to be reused with different values. Used in games for damage calculation, health restoration, item usage, etc.

public class Player : MonoBehaviour
{
    public int currentHp = 100;
    
    // Function that takes damage (pass damage value as parameter)
    void TakeDamage(int damage)  // Receive and use damage
    {
        currentHp = currentHp - damage;
        Debug.Log("Took " + damage + " damage!");
        
        if (currentHp <= 0)
        {
            Debug.Log("Died!");
        }
    }
    
    // Function that restores health
    void Heal(int healAmount)  // Receive and use healAmount
    {
        currentHp = currentHp + healAmount;
        if (currentHp > 100)
        {
            currentHp = 100;  // Max health limit
        }
        Debug.Log("Restored " + healAmount + " health!");
    }
}

Passing Values When Calling Functions

void Update()
{
    // When attacked by enemy
    if (Input.GetKeyDown(KeyCode.X))
    {
        TakeDamage(20);  // Pass 20 damage
    }
    
    // When drinking potion
    if (Input.GetKeyDown(KeyCode.H))
    {
        Heal(30);  // Pass 30 health
    }
}
  • Process
    1. Call TakeDamage(20)
    2. damage parameter becomes 20 inside function
    3. Calculate currentHp = currentHp - 20
    4. Output message based on result

Advantages of Parameters

Without parameters (inefficient):

// Must create function for each damage amount
void TakeDamage10() { currentHp -= 10; }
void TakeDamage20() { currentHp -= 20; }
void TakeDamage30() { currentHp -= 30; }
void TakeDamage50() { currentHp -= 50; }
// ... must keep creating more (inefficient!)

With parameters (efficient):

// One function handles all damage amounts!
void TakeDamage(int damage) 
{ 
    currentHp -= damage;
    Debug.Log("Took " + damage + " damage!");
}

// Can use for any damage amount!
TakeDamage(10);   // 10 damage
TakeDamage(25);   // 25 damage
TakeDamage(100);  // 100 damage

Actual usage in game development:

public class CombatSystem : MonoBehaviour
{
    // Can deal damage to various enemies
    void AttackEnemy(GameObject enemy, int damage)
    {
        Enemy enemyScript = enemy.GetComponent<Enemy>();
        enemyScript.TakeDamage(damage);
    }
    
    void Start()
    {
        GameObject enemy1 = GameObject.Find("Enemy1");
        GameObject enemy2 = GameObject.Find("Enemy2");
        
        AttackEnemy(enemy1, 20);  // 20 damage to first enemy
        AttackEnemy(enemy2, 35);   // 35 damage to second enemy
    }
}

← Back to Table of Contents