HEIGHT ABOVE SEA LEVEL
  • Articles
  • Quizzes
Join Patreon

Suggested

    Become a Patreon member and receive:

    • 30+ articles ad-free.

    • 100+ exclusive videos on C# and how to use Unity.

    • 40+ cheat sheets on all things game development.

    • 2 Custom Visual Studio Themes.

    • 2-day early access to articles and YouTube videos.

    Join Patreon
    • Articles
    • Quizzes
    Join Patreon

    Here's some dummy text to automatically resize the container as if there were actual text

    Some dummy text that's hidden to resize the component automatically

    Performance

    Audio

    Become a patreon member and receive the following:

    HEIGHT ABOVE SEA LEVEL
    • Articles
    • Quizzes
    Join Patreon

    Suggested

    • constants headerA Game Developer's Guide to Constants in C#December 12, 2025
    • A reflection probe in front of a house in Unity.Reflection Probes in Unity: How to Get the Most Out of ThemNovember 2, 2025
    • How to Bake Lights in Unity: A Step-by-Step GuideNovember 2, 2025
    • strings header imageA Game Developer's Guide to Strings in C#December 12, 2025
    • A Game Developer's Guide to Loops in C#December 12, 2025

    Become a Patreon member and receive:

    • 30+ articles ad-free.

    • 100+ exclusive videos on C# and how to use Unity.

    • 40+ cheat sheets on all things game development.

    • 2 Custom Visual Studio Themes.

    • 2-day early access to articles and YouTube videos.

    Join Patreon
    • Articles
    • Quizzes
    Join Patreon

    Question of the Day

    Which of the following loops in C# does NOT need a conditional statement to execute?

    Explanation

    A foreach loop executes without a condition having to be true. A for loop has a conditional statement that determines if the loop should continue to the next cycle i.e. the statement in the middle like i < items.Length;.

    Found this confusing? Click here to learn more about conditional statements

    Think you know game dev? Check out the quizzes and find out.

    A Game Developer's Guide to Operators in C#

    A Game Developer's Guide to Operators in C#

    • Beginner C#
    • Set Up & Getting Started
    Victor Nyagudi
    Victor Nyagudi

    Updated December 12, 2025

    Read this article ad-free by becoming a Patreon member

    If the player in your game picks up some ammo, you'll need to update the ammo count to reflect this increase.

    It's also common to reduce the player's health whenever they take damage. These are operations that will require operators.

    Operators can be used to do mathematical operations such as addition and subtraction, or compare different values to check if they're equal.

    This article assumes you have some knowledge of variables, constants, and numbers, but if you don't, the linked articles will get you up to speed.

    If you're a visual learner, scroll to the bottom of this article for the video version, or you can watch it on YouTube.

    What is an operator?

    Operators are symbols used to perform various operations in C#. The five most common ones you'll use are:

    • Arithmetic operators
    • Comparison operators
    • Equality operators
    • Assignment operators
    • Logical operators

    Arithmetic Operators

    Arithmetic operators are used to perform the common mathematical operations you've encountered in your daily life:

    • Addition
    • Subtraction
    • Multiplication
    • Division

    Addition

    You can add two or more numbers using the + operator.

    This is useful in actions in your Unity game that increase a number. For example, if the player harvests some wood, the wood counter in the user interface should increase.

    Alternatively, collecting health pick-ups should replenish the player's health after they've taken damage.

    var woodInInventory = 20;
    var woodCollected = 10;
    
    var totalWood = woodInInventory + woodCollected;
    
    Debug.Log(totalWood); // Logs '30'.
    
    sbyte health = 90;
    sbyte healthOrb = 10;
    
    Debug.Log(health + healthOrb); // Logs '100'.

    If your game involves the player collecting coins, C# has an operator that can increase the total coins collected by exactly 1, since that most likely will be the value of each coin.

    This operator is called the increment operator, and it's written using two plus signs: ++.

    When placed after a variable, which is how you'll use it most often, the increment operator increases the variable's value on the next line.

    When placed before a variable, the increment operator increases the variable's value on the same line.

    var coinsCollected = 7;
    
    // Assume the player just picked a golden coin.
    
    Debug.Log(coinsCollected++); // Logs '7'.
    Debug.Log(coinsCollected); // Logs '8'.
    
    var ammo = 19;
    
    // Assume the player just picked a bullet.
    
    Debug.Log(++ammo); // Logs '20'.
    Debug.Log(ammo); // Logs '20'.

    This is one of the quirks of using the operator that may leave you wondering why the coin counter isn't increasing when it should, so use it with discretion.

    Subtraction

    Taking damage should reduce the player's health. Similarly, using a magic potion should reduce the total potions in the player's inventory.

    You can subtract one number from the other using the - operator.

    Let's say taking a hit reduces the player's health by 25 hit points (HP). This is what the code would look like.

    var magicPotions = 10;
    
    // Assume the player just used a magic potion.
    
    Debug.Log(magicPotions - 1); // Logs '9'.
    
    byte health = 100;
    
    // Assume the player just took some damage.
    
    Debug.Log(health - 25); // Logs '75'.

    A similar operator to the increment operator exists in subtraction: the decrement operator --.

    Unlike the increment operator, this operator decreases the variable by exactly 1.

    It decreases the variable on the next line when placed after the variable, or on the same line when placed before the variable.

    var magicPotions = 10;
    
    // Assume the player just used a magic potion.
    
    Debug.Log(magicPotions--); // Logs '10'.
    Debug.Log(magicPotions); // Logs '9'.
    
    byte health = 100;
    
    // Assume the player just took a small hit.
    
    Debug.Log(--health); // Logs '99'.
    Debug.Log(health); // Logs '99'.

    Tip

    Only the addition and subtraction operators have a unique variation of them.

    Multiplication

    If the game you're making in the Unity game engine has damage multipliers, you can use the multiplication * operator to implement them.

    This operator multiplies two or more numbers together, so you could store the damage booster in a constant and then multiply that by the current damage to triple it.

    const int DamageMultiplier = 3;
    
    var currentDamage = 50;
    
    var boostedDamage = currentDamage * DamageMultiplier;
    
    Debug.Log(boostedDamage); // Logs '150'.

    Division

    Some games have debuffs that negatively impact the player, such as slowing down their movement.

    Let's say there's an evil wizard in your game that casts a spell on the player, reducing their movement by 50%.

    You can divide the player's speed by 2 to get the new speed when the debuff is applied.

    var speed = 100;
    var speedPenalty = 2;
    
    var slowedSpeed = speed / speedPenalty;
    
    Debug.Log(slowedSpeed); // Logs '50'.

    Remainder

    The remainder operator is used to get the remainder after dividing a number.

    For example, 10 divided by 4 results in a remainder of 2 because 4 can only go into 10 a maximum of two times.

    int ten = 10;
    int four = 4;
    
    var remainder = ten % four;
    
    Debug.Log(remainder); // Logs '2'.

    Let's say you want to create a pattern in your Unity game where the odd-numbered tiles are white and the even-numbered tiles are black.

    You could use the remainder operator to divide all the numbers by 2. If there's a remainder, then the number is odd. If there's no remainder, the number is even.

    var tileOne = 1;
    var tileTwo = 2;
    var tileThree = 3;
    var tileFour = 4;
    
    Debug.Log(tileOne % 2); // Has remainder. Is odd, so white tile.
    Debug.Log(tileTwo % 2); // No remainder. Is even, so black tile.
    Debug.Log(tileThree % 2); // Has remainder. Is odd, so white tile.
    Debug.Log(tileFour % 2); // No remainder. Is even, so black tile.

    Comparison Operators

    Comparison operators compare two numbers to check which is bigger, smaller, or if the two numbers are equal.

    These operators use the common mathematical symbols:

    • > : greater than
    • < : less than
    • >= : greater than or equal to
    • <= : less than or equal to

    If your game has a rage mode, you can check if the current rage meter has reached or exceeded a certain number, then activate it.

    var currentRage = 95;
    
    const sbyte RageTrigger = 100;
    
    if (currentRage >= RageTrigger)
    {
      Debug.Log("Rage mode enabled. AARGH!!");
      // Increase damage, speed, and health.
    }

    Equality Operators

    Equality operators check if two numbers are equal.

    == checks if two values are equal, while != checks if two values aren't equal.

    You can use them to check if a player has taken damage before trying to replenish their health when they collect a health orb to prevent exceeding the maximum health they can have.

    var health = 75;
    var healthOrb = 10;
    
    // Only add HP if health is not full.
    if (health != 100)
      Debug.Log(health + healthOrb); // Logs '85'.
    
    if (health == 100)
      Debug.Log("Max health reached.");

    Assignment Operators

    Assignment operators assign values to a variable, the most common one being the single = sign.

    A variable is often assigned a value during creation, but this can be delayed until later in your game's code.

    The = can be combined with arithmetic operators to assign variables new values.

    • += : assigns a new value to the variable, where the number to its right is added to the variable's old value.
    • -= : deducts the number to its right from the variable's old value, then updates the variable.
    • *= : multiplies the number to its right by the variable's old value, then updates the variable.
    • /= : divides the variable's old value by the number to its right, then updates the variable.
    int shields = 100;
    
    shields += 25; // Player picks up '25' shields.
    
    Debug.Log(shields); // 'shields' are now at '125'.
    
    var health = 100;
    
    health -= 20; // Player has taken '20' damage.
    
    Debug.Log(health); // 'health' is now at '80'.
    
    // The same applies to '*=' and '/=' operators.

    Logical Operators

    Logical operators are used on values that are either true or false. These are known as booleans.

    They're commonly used in conditional statements, a topic discussed in more detail in a separate article, to toggle different parts of your Unity game's code on or off.

    Let's say you want to give the driver in your racing game 500XP if they finish first in the race.

    The two conditions for them to get the XP are:

    • They have to finish the race.
    • They have to finish the race in first place.

    You can use the && operator to achieve this.

    It lets you chain multiple conditions, so the code in the if statement only executes if all the conditions are met.

    If even one condition isn't met, the code does not execute.

    var hasFinishedRace = true;
    var finishPosition = 1;
    
    if (hasFinishedRace && finishPosition == 1)
      Debug.Log("Driver has received 500XP!");

    Alternatively, you could give the driver 100XP if they finish the race in any position or pass through 5 checkpoints.

    The two conditions are:

    • Finishing the race, or...
    • Passing through 5 checkpoints.

    The difference this time is that only one condition must be met for the code to execute.

    You can use the || operator to achieve this. The two symbols are called a double pipe.

    var hasFinishedRace = true;
    var checkpointsPassed = 3;
    
    if (hasFinishedRace || checkpointsPassed == 5)
      Debug.Log("Driver has received 100XP");

    The ! operator inverts a true or false value. For example, !true is read as "NOT true", while !false is "NOT false".

    It's useful when working with predefined boolean variables that the player controls and can change at any time.

    You can use it to check if the player is not on the ground before playing a flying kick animation.

    This ensures the flying kick animation only plays when the player is airborne because they can choose to stay grounded or jump at any time.

    bool isPlayerGrounded = true;
    
    if (!isPlayerGrounded)
    {
      // If player is NOT grounded, this is logged to the console.
      Debug.Log("The player is airborne.");
    }
    
    Debug.Log(!true); // Logs 'false'.
    Debug.Log(!false); // Logs 'true'.

    Recap

    • Arithmetic operators are for mathematical operations, such as addition and subtraction.
    • Comparison operators check if one number is larger, smaller, or equal to another.
    • Equality operators check if two numbers are equal or not.
    • Assignment operators assign or re-assign values to variables.
    • Logical operators chain conditions together or reverse a boolean value.

    This article is the fourth in a series breaking down common C# concepts used in game development with the Unity Game Engine.

    The next one discusses how to use strings to work with text.

    Here's the complete list of articles in the series:

    • A Game Developer's Guide to Variables in C#
    • A Game Developer's Guide to Constants in C#
    • A Game Developer's Guide to Numbers in C#
    • A Game Developer's Guide to Operators in C# (you are here)
    • A Game Developer's Guide to Strings in C#
    • A Game Developer's Guide to Booleans in C#
    • A Game Developer's Guide to Enums in C#
    • A Game Developer's Guide to Conditional Statements in C#
    • A Game Developer's Guide to Loops in C#
    • A Game Developer's Guide to Classes in C#
    • A Game Developer's Guide to Access Modifiers in C#
    • A Game Developer's Guide to Fields & Properties in C#
    • A Game Developer's Guide to Methods in C#
    • A Game Developer's Guide to Lists & Arrays in C#
    • A Game Developer's Guide to Dates & Times in C#

    Become a Patreon member and receive:

    • 30+ articles ad-free.

    • 100+ exclusive videos on C# and how to use Unity.

    • 40+ cheat sheets on all things game development.

    • 2 Custom Visual Studio Themes.

    • 2-day early access to articles and YouTube videos.

    Join Patreon

    Latest

    • A Game Developer's Guide to Dates and Times in C#December 12, 2025
    • A Game Developer's Guide to Lists and Arrays in C#December 12, 2025
    • A Game Developer's Guide to Methods in C#December 12, 2025

    Suggested

    • constants headerA Game Developer's Guide to Constants in C#December 12, 2025
    • A reflection probe in front of a house in Unity.Reflection Probes in Unity: How to Get the Most Out of ThemNovember 2, 2025
    • How to Bake Lights in Unity: A Step-by-Step GuideNovember 2, 2025
    • strings header imageA Game Developer's Guide to Strings in C#December 12, 2025
    • A Game Developer's Guide to Loops in C#December 12, 2025

    Become a Patreon member and receive:

    • 30+ articles ad-free.

    • 100+ exclusive videos on C# and how to use Unity.

    • 40+ cheat sheets on all things game development.

    • 2 Custom Visual Studio Themes.

    • 2-day early access to articles and YouTube videos.

    Join Patreon