SideProjects/[집필] 실전 유니티 C#

[실전 유니티 C#] if 와 else if 와 else

VirtualDever 2022. 5. 1. 16:41
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour {
  public int currentHP = 70;          // 현재 체력
  public const int maxHP = 100;       // 체력 max
  public string name;                 // 이름
  public string guildName;            // 길드 명
  public int currentLevel = 1;        // 현재 레벨
  public bool isDead = false;         // 살아있는지 여부
  public int state = 0;               // 플레이어의 현재 상태
  
  private void Start() {
    name = "용감한 용사";
    guildName = "[유니티용병단]";

    string fullName = guildName + "Level" + currentLevel.ToString() + " " + name; 
    
    if (isDead == false) {
      Debug.Log(fullName + "는 아직 살아있다.");
    } else {
      Debug.Log("[게임 오버] 그는 죽었다!");
    }
  }
}

지난 시간과 비교해서 무엇이 바뀌었을까요?

틀린 그림 찾기 같지 않나요.

바로 플레이어의 현재 상태를 나타내는 state 라는 정수형 타입의 변수가 새롭게 추가되었습니다.

플레이어 캐릭터의 상태는 여러 개가 있을 수 있습니다.

이미 isDead 라는 bool 형 변수가 있긴 하지만 부족합니다.

예를 들자면, 이런 상태가 있을 수 있겠네요.

 

state 설명
0 아무것도 하고 있지 않는 상태
1 이동 중인 상태
2 일반 공격 중인 상태
3 스킬 시전 중인 상태
4 적에게 맞은 상태
5 죽은 상태

 

이렇게 총 6개의 상태를 정의해 보았습니다.

마찬가지로 if 문으로 코드에도 주석을 달아 보겠습니다.

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

public class Player : MonoBehaviour {
  public int currentHP = 70;          // 현재 체력
  public const int maxHP = 100;       // 체력 max
  public string name;                 // 이름
  public string guildName;            // 길드 명
  public int currentLevel = 1;        // 현재 레벨
  //public bool isDead = false;         // 살아있는지 여부
  public int state = 0;               // 플레이어의 현재 상태
  
  private void Start() {
    name = "용감한 용사";
    guildName = "[유니티용병단]";

    string fullName = guildName + "Level" + currentLevel.ToString() + " " + name;

    if (state == 0) {         // 아무것도 하고 있지 않는 상태
      
    } else if (state == 1) {  // 이동 중인 상태
      
    } else if (state == 2) {  // 일반 공격 중인 상태
      
    } else if (state == 3) {  // 스킬 시전 중인 상태
      
    } else if (state == 4) {  // 적에게 맞은 상태
      
    } else if (state == 5) {  // 죽은 상태
      
    } else {
      
    }
  }
}

state 의 상태는 정수형이고, 총 6가지의 상태가 있을 수 있습니다.

이렇게 비교할 조건이 2개 이상이라면, else if 문을 추가해서 state 값에 따라 다른 처리를 할 수 있습니다.

그리고 마지막으로 else 는 위의 어떠한 조건도 만족하지 않는 경우, 에러 처리와 같은 다른 일을 하도록 할 수 있습니다.

그러면 이제 if 문 마다 다른 메서드를 호출하도록 해보겠습니다.

 

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.UI;
using UnityEngine;

public class Player : MonoBehaviour {
  public int currentHP = 70;          // 현재 체력
  public const int maxHP = 100;       // 체력 max
  public string name;                 // 이름
  public string guildName;            // 길드 명
  public int currentLevel = 1;        // 현재 레벨
  //public bool isDead = false;         // 살아있는지 여부
  public int state = 0;               // 플레이어의 현재 상태
  
  private void Start() {
    name = "용감한 용사";
    guildName = "[유니티용병단]";

    string fullName = guildName + "Level" + currentLevel.ToString() + " " + name;

    if (state == 0) {         // 아무것도 하고 있지 않는 상태
      Idle();
    } else if (state == 1) {  // 이동 중인 상태
      Move();
    } else if (state == 2) {  // 일반 공격 중인 상태
      Attack();
    } else if (state == 3) {  // 스킬 시전 중인 상태
      Skill();
    } else if (state == 4) {  // 적에게 맞은 상태
      Damaged();
    } else if (state == 5) {  // 죽은 상태
      Die();
    } else {
      Debug.LogError("state 값을 잘못 입력했어요!");
    }
  }

  private void Idle() {
    Debug.Log("Idle");
  }

  private void Move() {
    Debug.Log("Move");
  }

  private void Attack() {
    Debug.Log("Attack");
  }

  private void Skill() {
    Debug.Log("Skill");
  }

  private void Damaged() {
    Debug.Log("Damaged");
  }

  private void Die() {
    Debug.Log("Die");
  }
}

else if 문에 대해서 설명하기 전에 메서드가 무엇인지 간략히 설명 드리겠습니다.

메서드는 코드를 하나로 묶어둔 코드 집합이라고 보시면 됩니다.

각 state 에 따라 다른 처리를 해야 되는데 코드가 길어질 수 있으니, 메서드 또는 함수로 묶어두는 것이지요.

메서드에 대해서 더 자세한 사항은 다음 시간에 설명 하도록 하겠습니다.

 

if (state == 0) {         // 아무것도 하고 있지 않는 상태
  Idle();
} else if (state == 1) {  // 이동 중인 상태
  Move();
} else if (state == 2) {  // 일반 공격 중인 상태
  Attack();
} else if (state == 3) {  // 스킬 시전 중인 상태
  Skill();
} else if (state == 4) {  // 적에게 맞은 상태
  Damaged();
} else if (state == 5) {  // 죽은 상태
  Idle();
} else {
  Debug.LogError("state 값을 잘못 입력했어요!");
}

 

이제 다시 핵심만 정리하도록 하겠습니다.

if 문은 처음에는 if 로 시작하고 조건이 더 필요할 경우, else if 를 추가해서 여러가지 조건에 따른 다른 행동을 할 수 있도록 설정할 수 있습니다.

그러면 아래 화면과 같이 state 는 0 이고 Idle 메서드를 실행하게 됩니다.

그리고 그 메서드 안에는 콘솔 창에 "Idle" 이라고 출력하는 일을 행하게 됩니다.

다른 조건문의 메서드가 실행되는 것은 아니라는 점 기억해 두세요.