프로그래밍-1/Unity3D

Unity3D에서 자주 쓰고 있는 C# 코드 (3) - GUI , OnGUI , 3D Text (1)

daslyee 2013. 8. 17. 15:15
728x90

화면 상에 글씨나 그림을 표현하는 방법은 무궁무진하다. 


게임을 해보았으면 화면에 글씨나 시간, 그림 이펙트등이 표시되는 것을 볼 수 있을 것이다. 모든 게임엔 이러한 요소들이 존재한다.

오늘은 유니티로 표현할 수 있는 이러한 것들을 간단하게 설명하고자 한다.



1. GUI Text ,GUI Texture



GUI Text는 필자가 가장 많이 사용하는 텍스트이다. 

사용법도 간단하고 무엇보다도 갖자기 숫자와 글씨를 표현할 수 있다는 장점을 가지고 있다.


아래 예제를 보자.


GUIText heart;
Int heartCnt = 3;
void Update () {
		heart.guiText.text = "X   " + heartCnt;
}


위의 예제는 숫자를 표현한 것이지만, 글자로도 표현이 가능하다.

위 사진을 보면 GUI Texture를 이용한 하트모양의 이미지가 뛰어져 있음을 확인할 수 있다. 저 이미지는 별다른 코드를 요하지않는다. 



2. OnGUI



public GUISkin menuskin;

	void OnGUI() {
		GUI.skin = menuskin;
		if(GUI.RepeatButton(new Rect(Screen.width/1.5f-320,Screen.height*0.9f,230,85),"왼 쪽")) {
			box.transform.Rotate(Vector3.forward*Speed*Time.deltaTime);
		}


사진에서 보듯이 왼쪽 아래에 왼쪽이라는 아이콘이 있음을 알수 있다.

OnGUI 같은 경우 위치를 사용자가 값을 대입하여 지정해줘야하는 단점이 있다. 많이 다뤄보는 것을 추천한다.



3. 3D Text


위 두가지 같은 겨우에는 화면을 움직여도 그자리에 위치해 있다. 이해하기 쉽게 설명하자면 카메라 렌즈 에 붙은 먼지라고 생각하면 된다.

그렇기 때문에 게임을 진행하면서 앞이든 뒤든 이동해야하는 시점이 오기 때문에 고정된 위치에서 플레이어를 반기는 글씨가 있어야 한다고 생각한다. 다행이도 이러한 기능을 유니티에는 지원을 한다.




만약 저 글씨를 위아래로 움직이게 하고 싶다면 아래 코드를 이용해보자.


  public float Speed = 7.5f;         //왔다갔다하는 속도이다.
	public float Trans_Time = 2.5f; ;//이값을 편도 시간 값이다.
	float timer = 0;

	void Update () {
		timer += Time.deltaTime;
			if(timer < Trans_Time) {
				transform.Translate(Vector3.down * Speed * Time.deltaTime);
			}
			else if(timer > Trans_Time) {
				transform.Translate(Vector3.up * Speed * Time.deltaTime);
			
	if(timer > Trans_Time * 2) {
				timer = 0;
			}
			}
	} 

위코드는 정말 원초적인 방법으로 필자가 생각해 낸 것으로 실용성이 의문이다. 



지금까지 3가지 방법을 설명했지만, 아직까진 많이 쓰이는 것은 필자 생각에 아직까진 NGUI일 것이다. 그렇지만 유료인 NGUI를 학원에서 밖엔 접하지 못하였음으로 NGUI의 설명은 다음으로 미루겠다. 다음 시간에 기회가 된다면 NGUI에 대한 설명을 하겠다.

 /* 메뉴 버튼 면에서 있어 유니티는 최악이라고 생각한다. 그나마 NGUI라는 툴이 있어 다행이라고 생각한다. */




728x90