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
- Call
TakeDamage(20) damageparameter becomes 20 inside function- Calculate
currentHp = currentHp - 20 - Output message based on result
- Call
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
}
}