유니티 선택지 분기 - yuniti seontaegji bungi

이 글은 PC 버전 TISTORY에 최적화 되어있습니다.

서론

간단하게 if문, switch문, ?문의 3가지 조건문에 대해서 알아보고, 유니티에서 어떻게 쓰일지 생각해보는 시간을 가지도록 하겠습니다.

if문

if문은 무척 유용하게 쓰입니다. 예를 캐릭터의 피가 40%가 되면 경고를 띄우고 0이 되면 죽는다던가, 돈이 5000원이 되면 무기를 살 수 있다던지 다양한 곳에 수도 없이 쓰이는 것이 if 문입니다. 가장 많이 사용하는 기본적인 조건 판단 구문이죠.

if (조건 판단을 위한 식 / 참 거짓 값) {

} else if (조건 판단을 위한 식 / 참 거짓 값) {

} else {

}

위와 같이 사용하며, if (        ) 안의 내용이 참일 때는 상단 {    } 안의 코드가 실행되고 else if (        ) 내용이 참이면 else if 문의 {    } 블록이, 두 조건에 만족하지 못하면 else {    } 블록이 실행되는 구조입니다. 만약 {    } 내의 코드가 한 줄이라면 {    }는 생략가능하고, else if와 else 문도 생략 가능합니다.

using UnityEngine;
using System.Collections;

public class MouseTest : MonoBehaviour {

	int Hp = 100;

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		
	}

	void OnMouseDown()
	{
		if(Hp > 0) // Hp가 0이면 피가 깎이지 않게
		Hp = Hp - 10;

		print ("Hp : " + Hp); // Hp를 보여준다.

		if (Hp > 0 && Hp <= 40) { // Hp가 0보다 크고 40이하이면 죽을 위기 
			print ("You'll Die");
		} else if (Hp == 0) { // Hp가 0이면 Die
			print ("You Die");
		} else { // 그 외의 상황엔 살아있음
			print ("You Alive");
		}
	}
		
}

사용 예시는 위와 같으며 주석을 보시면 충분히 이해하실 수 있으실 것 입니다. OnMouseDown( ) 메소드가 생소하신 분은 여기를 참고하세요. if 문에 대해서 더 알고 싶으신 분들은  Microsoft Developer를 참조하세요.

Switch문

if문은 위와 같이 특정 조건이 true인지 false인지를 비교할 때 유용합니다. switch 문은 여러 선택지 중 한 방향으로 분기할 수 있게 합니다. 물론 if 문도 항상 두 가지로만 분기하는 것이 아닌 if else, if else if 문과 같이 여러 갈래로 분기할 수 있지만 가독성과 편리함이 떨어집니다. 

switch (비교를 위한 변수) {

case 비교를 위한 값1:

참일 때 수행할 명령문

break;

case 비교를 위한 값2:

참일 때 수행할 명령문

break;

...

default:

다른 모든 상태의 기본 명령문

break;

}

사용 방법은 위와 같습니다. 비교를 위한 변수를 받아서 검사 후 합당한 case 문을 실행합니다.

using UnityEngine;
using System.Collections;

public class MouseTest : MonoBehaviour {

	enum State {Idle, Walk, Chase, Attack, Dead};

	State state = State.Idle;

	void OnMouseDown() {

		state = State.Dead;

		switch(state){

		case State.Dead:
			print ("state is Dead.");
			break;
		case State.Chase:
			print ("state is Chase.");
			break;
		case State.Attack:
			print ("state is Attack.");
			break;
		case State.Idle:
			print ("state is Idle.");
			break;
		default:
			print ("state is Idle.");
			break;

		}

	}
		
	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {
	}
}

사용예시는 위와 같습니다. 열거형을 이용하여 가독성을 높인 switch 문으로 주인공의 상태에 따라 행동을 취하게 되어있습니다. 열거형에 대해 모르시는 분은 여기를 참조하세요. switch문에 대해서 더 알고 싶으신 분들은  Microsoft Developer를 참조하세요.

? 문

?문은 조건문을 축약할 수 있는 유용한 구문입니다. 하지만 길고 더 복잡한 조건문을 만들 수 있으므로 if else 문과 switch문을 사용하기를 추천합니다.

(조건 판단을 위한 식 / 참 거짓 값) ? expression_1 : expression_2;

사용 방법은 위와 같습니다. 맨 앞의 문장이나 참 거짓 값을 판별하여 참이면 expression_1을 거짓이면 expression_2를 실행합니다.

using UnityEngine;
using System.Collections;

public class MouseTest : MonoBehaviour {

	enum State {Idle, Walk, Chase, Attack, Dead};

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {

		// 높이가 0 이하면 사라지게 해야함.
		bool shoulddie = (transform.position.z < 0) ? true : false;
		// SetActive : 표시 여부를 지정 (true : 표시, false : 표시 X)
		gameObject.SetActive (!shoulddie);
		
	}
		
}

위와 같이 편리하게 사용할 수 있습니다.