[Unity 입문 강좌 - 7] C# 유니티 if, else, switch문 / 조건문

1. if 문 구조

 

C#에서 가장 기본적인 조건문은 if 문입니다. if 문은 조건이 참일 때 실행되는 구문입니다. 아래는 if 문의 구조입니다. 코드에서 조건식은 참 또는 거짓을 반환하는 식(expression)입니다. 조건식이 참이면 중괄호 '{}' 내부의 코드가 실행되고, 거짓이면 실행되지 않습니다.

if (조건식)
{
    // 조건이 참일 때 실행할 코드
}

 

아래는 유니티에서 간단한 if 문 사용 예시입니다. 플레이어의 체력(playerHealth)이 특정 수준 이하로 떨어졌을 때 경고 메시지를 출력하는 코드입니다. 해당 코드에서는 체력이 20 이하라면, 콘솔에 "Warning: Low health!"라는 메시지가 출력되는 코드입니다.

 

public int playerHealth = 100;

// 플레이어의 체력이 20 이하일 때 경고 메시지 출력
if (playerHealth <= 20)
{
    Debug.Log("Warning: Low health!");
}

 


2. if-else 문 구조


if 문은 조건이 참일 때 실행되는 구문이므로, 조건이 거짓일 때 실행될 코드가 필요할 때는 if-else 문을 사용합니다. 아래 코드는 if-else 문의 구조입니다.

 

if (조건식)
{
    // 조건이 참일 때 실행할 코드
}
else
{
    // 조건이 거짓일 때 실행할 코드
}


아래는 유니티에서 간단한 if-else 문 사용 예시입니다. 코드에서 num 변수의 값은 -5입니다. if 문에서는 num 변수의 값이 0보다 큰지 비교하고, 조건이 거짓이므로 else 구문이 실행됩니다. 따라서 Debug.Log 함수를 호출하여 "num은 0보다 작거나 같습니다." 라는 메시지를 출력합니다.

int num = -5;

if (num > 0)
{
    Debug.Log("num은 0보다 큽니다.");
}
else
{
    Debug.Log("num은 0보다 작거나 같습니다.");
}

 


3. else if 문 구조

 

else if 문은 여러 개의 조건을 검사할 때 사용합니다. 각 조건이 참일 때 해당 코드가 실행되고, 조건이 모두 거짓일 때는 else 구문이 실행됩니다. 아래는else if 문의 구조입니다.

 

if (조건식1)
{
    // 조건식1이 참일 때 실행할 코드
}
else if (조건식2)
{
    // 조건식1이 거짓이고, 조건식2가 참일 때 실행할 코드
}
else
{
    // 모든 조건식이 거짓일 때 실행할 코드
}

 

아래는 유니티에서 간단한 else if 문 사용 예시입니다. 코드에서 num 변수의 값은 0입니다. if 문에서는 num 변수의 값이 0보다 큰지 비교하고, 조건이 거짓이므로 다음 else if 문으로 이동합니다. else if 문에서는 num 변수의 값이 0보다 작은지 비교하고, 조건이 거짓이므로 else 구문이 실행됩니다. 따라서 Debug.Log 함수를 호출하여 "num은 0입니다." 라는 메시지를 출력합니다.


int num = 0;

if (num > 0)
{
    Debug.Log("num은 0보다 큽니다.");
}
else if (num < 0)
{
    Debug.Log("num은 0보다 작습니다.");
}
else
{
    Debug.Log("num은 0입니다.");
}

 


4. if문 논리 연산자

 

논리 연산자는 조건식에서 여러 개의 조건을 조합할 때 사용됩니다. C#에서는 다음과 같은 논리 연산자가 있습니다.

  • &&논리곱(and) 연산자 : 양쪽 조건식이 모두 참일 때 참을 반환합니다.
  • || 논리합(or) 연산자 : 양쪽 조건식 중 하나 이상이 참일 때 참을 반환합니다.
  • !논리부정(not) 연산자 : 조건식의 결과를 반대로 반환합니다.


아래 코드는 논리 연산자를 사용한 예제입니다. 코드에서 첫 번째 if 문은 num1 변수와 num2 변수가 모두 0보다 큰지 비교하고, 논리곱 연산자인 &&를 사용하여 두 조건이 모두 참일 때 Debug.Log 함수를 호출하여 "num1과 num2는 모두 0보다 큽니다." 라는 메시지를 출력합니다.

 

두 번째 if 문은 num1 변수와 num2 변수 중 하나 이상이 0보다 큰지 비교하고, 논리합 연산자인 ||를 사용하여 두 조건 중 하나 이상이 참일 때 Debug.Log 함수를 호출하여 "num1과 num2 중 적어도 하나는 0보다 큽니다." 라는 메시지를 출력합니다.



세 번째 if 문은 num1 변수가 0보다 큰지 비교하고, 논리부정 연산자인 !를 사용하여 조건식의 결과를 반대로 바꾸어 비교합니다. 따라서 num1 변수가 0보다 크지 않으므로 Debug.Log 함수를 호출하여 "num1은 0보다 작거나 같습니다." 라는 메시지를 출력합니다.

 

int num1 = 5;
int num2 = 10;

if (num1 > 0 && num2 > 0)
{
    Debug.Log("num1과 num2는 모두 0보다 큽니다.");
}

if (num1 > 0 || num2 > 0)
{
    Debug.Log("num1과 num2 중 적어도 하나는 0보다 큽니다.");
}

if (!(num1 > 0))
{
    Debug.Log("num1은 0보다 작거나 같습니다.");
}

 


5. 중첩 조건문

 

중첩 조건문은 조건문 내부에 다른 조건문이 포함된 구문입니다. 중첩 조건문은 복잡한 조건식을 작성할 때 사용됩니다. 아래는 중첩 조건문의 구조입니다.

 

if (조건식1)
{
    // 조건식1이 참일 때 실행할 코드

    if (조건식2)
    {
        // 조건식2가 참일 때 실행할 코드
    }
}
else
{
    // 조건식1이 거짓일 때 실행할 코드
}



아래 코드는 중첩 조건문을 사용한 예제입니다. 이 코드는 플레이어가 미션을 수행하기 위한 두 가지 주요 조건, 즉 레벨과 장비를 검사합니다. 첫 번째 if 문은 플레이어의 레벨이 10 이상인지를 확인하고, 이 조건이 참일 경우 내부의 두 번째 if 문으로 진입하여 플레이어가 필요한 장비를 보유하고 있는지를 확인합니다. 만약 플레이어의 레벨이 10 미만이라면, else 블록이 실행되어 레벨이 미션 요구 조건에 부합하지 않음을 알립니다.

 

int playerLevel = 10;
bool hasRequiredEquipment = false;

if (playerLevel >= 10)
{
    // 플레이어 레벨이 10 이상일 때 실행할 코드
    Debug.Log("Player level is sufficient for the mission.");

    if (hasRequiredEquipment)
    {
        // 필요한 장비를 갖추고 있을 때 실행할 코드
        Debug.Log("Player has the required equipment for the mission.");
    }
    else
    {
        // 필요한 장비를 갖추고 있지 않을 때 실행할 코드
        Debug.Log("Player does not have the required equipment for the mission.");
    }
}
else
{
    // 플레이어 레벨이 10 미만일 때 실행할 코드
    Debug.Log("Player level is not sufficient for the mission.");
}

 


6. switch문

 

switch 문은 다양한 case 중 하나를 선택하여 코드를 실행할 때 사용되는 조건문입니다. switch 문은 특정 변수나 표현식의 값에 따라 다양한 코드 블록 중 하나를 실행할 수 있게 해줍니다. 이는 if-else 문을 사용할 때보다 많은 조건을 보다 깔끔하게 처리할 수 있게 해줍니다. 

 

  • expression : 비교할 변수나 값.
  • case value : expression이 특정 값과 일치할 때 실행될 코드 블록을 정의합니다.
  • break : 현재 case를 종료하고 switch 문을 빠져나갑니다.
  • default : 어떤 case에도 해당되지 않을 때 실행될 코드 블록을 정의합니다. default는 선택적입니다.

 

switch (expression)
{
    case value1:
        // value1 일 때 실행할 코드
        break;
    case value2:
        // value2 일 때 실행할 코드
        break;
    ...
    default:
        // 어떤 case도 매치되지 않을 때 실행할 코드
        break;
}

 

아래 코드는 switch문을 사용한 예제입니다. characterState 변수는 캐릭터의 상태를 나타내며, 각 숫자 값(1, 2, 3)은 각각 '대기(Idle)', '걷기(Walking)', '달리기(Running)' 상태를 의미합니다. switch 문을 사용하여 characterState의 값에 따라 캐릭터의 현재 상태를 나타내는 다른 메시지를 콘솔에 출력합니다. 현재 characterState의 값은 1이므로, Debug.Log 함수를 호출하여 " Character is idle " 라는 메시지를 출력합니다.

 

현재 enum(열거형)에 대해 배우지 않았기 때문에 숫자를 이용한 방법을 사용했습니다.

 

public int characterState = 1;

switch (characterState)
{
    case 1:
        Debug.Log("Character is idle.");
        break;
    case 2:
        Debug.Log("Character is walking.");
        break;
    case 3:
        Debug.Log("Character is running.");
        break;
    default:
        Debug.Log("Unknown state.");
        break;
}