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" 이라고 출력하는 일을 행하게 됩니다.
다른 조건문의 메서드가 실행되는 것은 아니라는 점 기억해 두세요.
'SideProjects > [집필] 실전 유니티 C#' 카테고리의 다른 글
[실전 유니티 C#] 열거체 enum (0) | 2022.05.01 |
---|---|
[실전 유니티 C#] switch case 문 (0) | 2022.05.01 |
[실전 유니티 C#] if 문으로 조건을 만들다 (0) | 2022.05.01 |
[실전 유니티 C#] 문자열 다루기 (0) | 2022.05.01 |
[실전 유니티 C#] 상수란 무엇인가 (0) | 2022.05.01 |